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)35TEST_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