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 "content/public/browser/browser_thread.h" 8#include "content/public/test/test_browser_thread_bundle.h" 9#include "extensions/browser/api/api_resource.h" 10#include "extensions/browser/api/api_resource_manager.h" 11#include "extensions/browser/extensions_test.h" 12#include "extensions/common/extension.h" 13#include "extensions/common/test_util.h" 14#include "testing/gtest/include/gtest/gtest.h" 15#include "url/gurl.h" 16 17using content::BrowserThread; 18using content::NotificationService; 19 20namespace extensions { 21 22class ApiResourceManagerUnitTest : public ExtensionsTest { 23 public: 24 ApiResourceManagerUnitTest() 25 : notification_service_(NotificationService::Create()) {} 26 27 private: 28 content::TestBrowserThreadBundle thread_bundle_; 29 scoped_ptr<NotificationService> notification_service_; 30}; 31 32class FakeApiResource : public ApiResource { 33 public: 34 explicit FakeApiResource(const std::string& owner_extension_id) 35 : ApiResource(owner_extension_id) {} 36 virtual ~FakeApiResource() {} 37 static const BrowserThread::ID kThreadId = BrowserThread::UI; 38}; 39 40TEST_F(ApiResourceManagerUnitTest, TwoAppsCannotShareResources) { 41 scoped_ptr<ApiResourceManager<FakeApiResource> > manager( 42 new ApiResourceManager<FakeApiResource>(NULL)); 43 scoped_refptr<extensions::Extension> extension_one = 44 test_util::CreateEmptyExtension("one"); 45 scoped_refptr<extensions::Extension> extension_two = 46 test_util::CreateEmptyExtension("two"); 47 48 const std::string extension_one_id(extension_one->id()); 49 const std::string extension_two_id(extension_two->id()); 50 51 int resource_one_id = manager->Add(new FakeApiResource(extension_one_id)); 52 int resource_two_id = manager->Add(new FakeApiResource(extension_two_id)); 53 CHECK(resource_one_id); 54 CHECK(resource_two_id); 55 56 // Confirm each extension can get its own resource. 57 ASSERT_TRUE(manager->Get(extension_one_id, resource_one_id) != NULL); 58 ASSERT_TRUE(manager->Get(extension_two_id, resource_two_id) != NULL); 59 60 // Confirm neither extension can get the other's resource. 61 ASSERT_TRUE(manager->Get(extension_one_id, resource_two_id) == NULL); 62 ASSERT_TRUE(manager->Get(extension_two_id, resource_one_id) == NULL); 63 64 // And make sure we're not susceptible to any Jedi mind tricks. 65 ASSERT_TRUE(manager->Get(std::string(), resource_one_id) == NULL); 66} 67 68} // namespace extensions 69