test_extension_system.cc revision a93a17c8d99d686bd4a1511e5504e5e6cc9fcadf
1a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// found in the LICENSE file. 4a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 5a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "chrome/browser/extensions/test_extension_system.h" 6a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 7a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "base/command_line.h" 8#include "base/prefs/pref_service.h" 9#include "chrome/browser/extensions/blacklist.h" 10#include "chrome/browser/extensions/event_router.h" 11#include "chrome/browser/extensions/extension_info_map.h" 12#include "chrome/browser/extensions/extension_pref_value_map.h" 13#include "chrome/browser/extensions/extension_pref_value_map_factory.h" 14#include "chrome/browser/extensions/extension_process_manager.h" 15#include "chrome/browser/extensions/extension_service.h" 16#include "chrome/browser/extensions/extension_system.h" 17#include "chrome/browser/extensions/management_policy.h" 18#include "chrome/browser/extensions/shell_window_geometry_cache.h" 19#include "chrome/browser/extensions/standard_management_policy_provider.h" 20#include "chrome/browser/extensions/state_store.h" 21#include "chrome/browser/extensions/user_script_master.h" 22#include "chrome/browser/profiles/profile.h" 23#include "chrome/browser/value_store/testing_value_store.h" 24#include "chrome/common/chrome_switches.h" 25#include "content/public/browser/browser_thread.h" 26 27using content::BrowserThread; 28 29namespace extensions { 30 31TestExtensionSystem::TestExtensionSystem(Profile* profile) 32 : profile_(profile), 33 info_map_(new ExtensionInfoMap()) { 34} 35 36TestExtensionSystem::~TestExtensionSystem() { 37} 38 39void TestExtensionSystem::Shutdown() { 40 extension_process_manager_.reset(); 41} 42 43void TestExtensionSystem::CreateExtensionProcessManager() { 44 extension_process_manager_.reset(ExtensionProcessManager::Create(profile_)); 45} 46 47void TestExtensionSystem::CreateSocketManager() { 48 // Note that we're intentionally creating the socket manager on the wrong 49 // thread (not the IO thread). This is because we don't want to presume or 50 // require that there be an IO thread in a lightweight test context. If we do 51 // need thread-specific behavior someday, we'll probably need something like 52 // CreateSocketManagerOnThreadForTesting(thread_id). But not today. 53 BrowserThread::ID id; 54 CHECK(BrowserThread::GetCurrentThreadIdentifier(&id)); 55 socket_manager_.reset(new ApiResourceManager<Socket>(id)); 56} 57 58ExtensionPrefs* TestExtensionSystem::CreateExtensionPrefs( 59 const CommandLine* command_line, 60 const base::FilePath& install_directory) { 61 bool extensions_disabled = 62 command_line && command_line->HasSwitch(switches::kDisableExtensions); 63 64 // Note that the GetPrefs() creates a TestingPrefService, therefore 65 // the extension controlled pref values set in extension_prefs_ 66 // are not reflected in the pref service. One would need to 67 // inject a new ExtensionPrefStore(extension_pref_value_map, false). 68 69 extension_prefs_ = ExtensionPrefs::Create( 70 profile_->GetPrefs(), 71 install_directory, 72 ExtensionPrefValueMapFactory::GetForProfile(profile_), 73 extensions_disabled); 74 return extension_prefs_.get(); 75} 76 77ExtensionService* TestExtensionSystem::CreateExtensionService( 78 const CommandLine* command_line, 79 const base::FilePath& install_directory, 80 bool autoupdate_enabled) { 81 if (!extension_prefs_) 82 CreateExtensionPrefs(command_line, install_directory); 83 state_store_.reset(new StateStore(profile_, new TestingValueStore())); 84 shell_window_geometry_cache_.reset( 85 new ShellWindowGeometryCache(profile_, extension_prefs_.get())); 86 blacklist_.reset(new Blacklist(extension_prefs_.get())); 87 standard_management_policy_provider_.reset( 88 new StandardManagementPolicyProvider(extension_prefs_.get())); 89 management_policy_.reset(new ManagementPolicy()); 90 management_policy_->RegisterProvider( 91 standard_management_policy_provider_.get()); 92 extension_service_.reset(new ExtensionService(profile_, 93 command_line, 94 install_directory, 95 extension_prefs_.get(), 96 blacklist_.get(), 97 autoupdate_enabled, 98 true)); 99 extension_service_->ClearProvidersForTesting(); 100 return extension_service_.get(); 101} 102 103ExtensionService* TestExtensionSystem::extension_service() { 104 return extension_service_.get(); 105} 106 107ManagementPolicy* TestExtensionSystem::management_policy() { 108 return management_policy_.get(); 109} 110 111void TestExtensionSystem::SetExtensionService(ExtensionService* service) { 112 extension_service_.reset(service); 113} 114 115UserScriptMaster* TestExtensionSystem::user_script_master() { 116 return NULL; 117} 118 119ExtensionProcessManager* TestExtensionSystem::process_manager() { 120 return extension_process_manager_.get(); 121} 122 123StateStore* TestExtensionSystem::state_store() { 124 return state_store_.get(); 125} 126 127StateStore* TestExtensionSystem::rules_store() { 128 return state_store_.get(); 129} 130 131ExtensionPrefs* TestExtensionSystem::extension_prefs() { 132 return extension_prefs_.get(); 133} 134 135ShellWindowGeometryCache* TestExtensionSystem::shell_window_geometry_cache() { 136 return shell_window_geometry_cache_.get(); 137} 138 139ExtensionInfoMap* TestExtensionSystem::info_map() { 140 return info_map_.get(); 141} 142 143LazyBackgroundTaskQueue* 144TestExtensionSystem::lazy_background_task_queue() { 145 return NULL; 146} 147 148EventRouter* TestExtensionSystem::event_router() { 149 return NULL; 150} 151 152RulesRegistryService* TestExtensionSystem::rules_registry_service() { 153 return NULL; 154} 155 156ApiResourceManager<SerialConnection>* 157TestExtensionSystem::serial_connection_manager() { 158 return NULL; 159} 160 161ApiResourceManager<Socket>*TestExtensionSystem::socket_manager() { 162 return socket_manager_.get(); 163} 164 165ApiResourceManager<UsbDeviceResource>* 166TestExtensionSystem::usb_device_resource_manager() { 167 return NULL; 168} 169 170ExtensionWarningService* TestExtensionSystem::warning_service() { 171 return NULL; 172} 173 174Blacklist* TestExtensionSystem::blacklist() { 175 return blacklist_.get(); 176} 177 178// static 179ProfileKeyedService* TestExtensionSystem::Build( 180 content::BrowserContext* profile) { 181 return new TestExtensionSystem(static_cast<Profile*>(profile)); 182} 183 184} // namespace extensions 185