• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "base/files/file_path.h"
6 #include "base/strings/string_util.h"
7 #include "chrome/browser/extensions/extension_function_test_utils.h"
8 #include "content/public/browser/browser_thread.h"
9 #include "content/public/test/test_browser_thread_bundle.h"
10 #include "extensions/browser/api/api_resource.h"
11 #include "extensions/browser/api/api_resource_manager.h"
12 #include "extensions/common/extension.h"
13 #include "testing/gtest/include/gtest/gtest.h"
14 #include "url/gurl.h"
15 
16 namespace utils = extension_function_test_utils;
17 
18 using content::BrowserThread;
19 
20 namespace extensions {
21 
22 class ApiResourceManagerUnitTest : public testing::Test {
23  private:
24   content::TestBrowserThreadBundle thread_bundle_;
25 };
26 
27 class FakeApiResource : public ApiResource {
28  public:
FakeApiResource(const std::string & owner_extension_id)29   explicit FakeApiResource(const std::string& owner_extension_id)
30       : ApiResource(owner_extension_id) {}
~FakeApiResource()31   virtual ~FakeApiResource() {}
32   static const BrowserThread::ID kThreadId = BrowserThread::UI;
33 };
34 
TEST_F(ApiResourceManagerUnitTest,TwoAppsCannotShareResources)35 TEST_F(ApiResourceManagerUnitTest, TwoAppsCannotShareResources) {
36   scoped_ptr<ApiResourceManager<FakeApiResource> > manager(
37       new ApiResourceManager<FakeApiResource>(NULL));
38   scoped_refptr<extensions::Extension> extension_one(
39       utils::CreateEmptyExtension("one"));
40   scoped_refptr<extensions::Extension> extension_two(
41       utils::CreateEmptyExtension("two"));
42 
43   const std::string extension_one_id(extension_one->id());
44   const std::string extension_two_id(extension_two->id());
45 
46   int resource_one_id = manager->Add(new FakeApiResource(extension_one_id));
47   int resource_two_id = manager->Add(new FakeApiResource(extension_two_id));
48   CHECK(resource_one_id);
49   CHECK(resource_two_id);
50 
51   // Confirm each extension can get its own resource.
52   ASSERT_TRUE(manager->Get(extension_one_id, resource_one_id) != NULL);
53   ASSERT_TRUE(manager->Get(extension_two_id, resource_two_id) != NULL);
54 
55   // Confirm neither extension can get the other's resource.
56   ASSERT_TRUE(manager->Get(extension_one_id, resource_two_id) == NULL);
57   ASSERT_TRUE(manager->Get(extension_two_id, resource_one_id) == NULL);
58 
59   // And make sure we're not susceptible to any Jedi mind tricks.
60   ASSERT_TRUE(manager->Get(std::string(), resource_one_id) == NULL);
61 }
62 
63 }  // namespace extensions
64