test_extension_system.cc revision 90dce4d38c5ff5333bea97d859d4e484e27edf0c
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/test_extension_system.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/command_line.h" 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_service.h" 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/extensions/blacklist.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/event_router.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/extension_info_map.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/extension_pref_value_map.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/extension_pref_value_map_factory.h" 1490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "chrome/browser/extensions/extension_prefs.h" 1590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "chrome/browser/extensions/extension_prefs_factory.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/extension_process_manager.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/extension_service.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/extension_system.h" 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/extensions/management_policy.h" 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/extensions/standard_management_policy_provider.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/state_store.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/user_script_master.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/value_store/testing_value_store.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_switches.h" 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/browser_thread.h" 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::BrowserThread; 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace extensions { 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TestExtensionSystem::TestExtensionSystem(Profile* profile) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : profile_(profile), 3490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) value_store_(NULL), 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) info_map_(new ExtensionInfoMap()) { 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TestExtensionSystem::~TestExtensionSystem() { 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TestExtensionSystem::Shutdown() { 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extension_process_manager_.reset(); 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TestExtensionSystem::CreateExtensionProcessManager() { 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extension_process_manager_.reset(ExtensionProcessManager::Create(profile_)); 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TestExtensionSystem::CreateSocketManager() { 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Note that we're intentionally creating the socket manager on the wrong 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // thread (not the IO thread). This is because we don't want to presume or 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // require that there be an IO thread in a lightweight test context. If we do 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // need thread-specific behavior someday, we'll probably need something like 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // CreateSocketManagerOnThreadForTesting(thread_id). But not today. 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::ID id; 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CHECK(BrowserThread::GetCurrentThreadIdentifier(&id)); 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) socket_manager_.reset(new ApiResourceManager<Socket>(id)); 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)ExtensionPrefs* TestExtensionSystem::CreateExtensionPrefs( 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const CommandLine* command_line, 62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::FilePath& install_directory) { 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool extensions_disabled = 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line && command_line->HasSwitch(switches::kDisableExtensions); 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Note that the GetPrefs() creates a TestingPrefService, therefore 6790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // the extension controlled pref values set in ExtensionPrefs 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // are not reflected in the pref service. One would need to 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // inject a new ExtensionPrefStore(extension_pref_value_map, false). 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ExtensionPrefs* extension_prefs = ExtensionPrefs::Create( 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_->GetPrefs(), 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) install_directory, 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExtensionPrefValueMapFactory::GetForProfile(profile_), 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) extensions_disabled); 7690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ExtensionPrefsFactory::GetInstance()->SetInstanceForTesting( 7790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) profile_, 7890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) extension_prefs); 7990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return extension_prefs; 80c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 81c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 82c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)ExtensionService* TestExtensionSystem::CreateExtensionService( 83c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const CommandLine* command_line, 84c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::FilePath& install_directory, 85c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool autoupdate_enabled) { 8690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) if (!ExtensionPrefs::Get(profile_)) 87c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CreateExtensionPrefs(command_line, install_directory); 8890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // The ownership of |value_store_| is immediately transferred to state_store_, 8990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // but we keep a naked pointer to the TestingValueStore. 9090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) value_store_ = new TestingValueStore(); 9190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) state_store_.reset(new StateStore(profile_, value_store_)); 9290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) blacklist_.reset(new Blacklist(ExtensionPrefs::Get(profile_))); 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) standard_management_policy_provider_.reset( 9490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) new StandardManagementPolicyProvider(ExtensionPrefs::Get(profile_))); 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) management_policy_.reset(new ManagementPolicy()); 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) management_policy_->RegisterProvider( 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) standard_management_policy_provider_.get()); 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extension_service_.reset(new ExtensionService(profile_, 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line, 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) install_directory, 10190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ExtensionPrefs::Get(profile_), 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) blacklist_.get(), 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) autoupdate_enabled, 10490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) true, 10590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) &ready_)); 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extension_service_->ClearProvidersForTesting(); 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return extension_service_.get(); 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ExtensionService* TestExtensionSystem::extension_service() { 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return extension_service_.get(); 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ManagementPolicy* TestExtensionSystem::management_policy() { 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return management_policy_.get(); 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TestExtensionSystem::SetExtensionService(ExtensionService* service) { 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extension_service_.reset(service); 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)UserScriptMaster* TestExtensionSystem::user_script_master() { 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ExtensionProcessManager* TestExtensionSystem::process_manager() { 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return extension_process_manager_.get(); 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)StateStore* TestExtensionSystem::state_store() { 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return state_store_.get(); 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)StateStore* TestExtensionSystem::rules_store() { 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return state_store_.get(); 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ExtensionInfoMap* TestExtensionSystem::info_map() { 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return info_map_.get(); 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)LazyBackgroundTaskQueue* 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TestExtensionSystem::lazy_background_task_queue() { 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)EventRouter* TestExtensionSystem::event_router() { 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)RulesRegistryService* TestExtensionSystem::rules_registry_service() { 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ApiResourceManager<SerialConnection>* 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TestExtensionSystem::serial_connection_manager() { 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ApiResourceManager<Socket>*TestExtensionSystem::socket_manager() { 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return socket_manager_.get(); 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ApiResourceManager<UsbDeviceResource>* 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TestExtensionSystem::usb_device_resource_manager() { 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ExtensionWarningService* TestExtensionSystem::warning_service() { 1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return NULL; 1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)Blacklist* TestExtensionSystem::blacklist() { 1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return blacklist_.get(); 1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 17790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)const OneShotEvent& TestExtensionSystem::ready() const { 17890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return ready_; 17990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 18090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 18290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)BrowserContextKeyedService* TestExtensionSystem::Build( 183c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::BrowserContext* profile) { 184c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return new TestExtensionSystem(static_cast<Profile*>(profile)); 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace extensions 188