test_extension_system.cc revision 010d83a9304c5a91596085d917d248abff47903a
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" 10558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#include "chrome/browser/extensions/error_console/error_console.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/extension_service.h" 12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/extensions/install_verifier.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/extensions/standard_management_policy_provider.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/state_store.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/user_script_master.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_switches.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/browser_thread.h" 19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "extensions/browser/event_router.h" 205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "extensions/browser/extension_pref_value_map.h" 215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "extensions/browser/extension_pref_value_map_factory.h" 225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "extensions/browser/extension_prefs.h" 235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "extensions/browser/extension_prefs_factory.h" 245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "extensions/browser/extension_registry.h" 255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "extensions/browser/extension_system.h" 26f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "extensions/browser/extensions_browser_client.h" 27f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "extensions/browser/info_map.h" 28f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "extensions/browser/management_policy.h" 29f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "extensions/browser/process_manager.h" 305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "extensions/browser/quota_service.h" 315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "extensions/browser/runtime_data.h" 32a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "extensions/browser/value_store/testing_value_store.h" 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::BrowserThread; 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace extensions { 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TestExtensionSystem::TestExtensionSystem(Profile* profile) 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : profile_(profile), 4090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) value_store_(NULL), 41f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) info_map_(new InfoMap()), 42e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch error_console_(new ErrorConsole(profile)), 435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) quota_service_(new QuotaService()) {} 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TestExtensionSystem::~TestExtensionSystem() { 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TestExtensionSystem::Shutdown() { 49f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) process_manager_.reset(); 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 52f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void TestExtensionSystem::CreateProcessManager() { 53f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) process_manager_.reset(ProcessManager::Create(profile_)); 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 56f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void TestExtensionSystem::SetProcessManager(ProcessManager* manager) { 57f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) process_manager_.reset(manager); 581e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 591e9bf3e0803691d0a228da41fc608347b6db4340Torne (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, 741e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ExtensionPrefValueMapFactory::GetForBrowserContext(profile_), 75f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ExtensionsBrowserClient::Get()->CreateAppSorting().Pass(), 76e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch extensions_disabled, 77e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch std::vector<ExtensionPrefsObserver*>()); 7890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ExtensionPrefsFactory::GetInstance()->SetInstanceForTesting( 7990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) profile_, 8090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) extension_prefs); 8190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return extension_prefs; 82c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 83c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 84c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)ExtensionService* TestExtensionSystem::CreateExtensionService( 85c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const CommandLine* command_line, 86c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::FilePath& install_directory, 87c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool autoupdate_enabled) { 8890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) if (!ExtensionPrefs::Get(profile_)) 89c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CreateExtensionPrefs(command_line, install_directory); 90effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch install_verifier_.reset( 91effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch new InstallVerifier(ExtensionPrefs::Get(profile_), profile_)); 9290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // The ownership of |value_store_| is immediately transferred to state_store_, 9390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // but we keep a naked pointer to the TestingValueStore. 944e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) scoped_ptr<TestingValueStore> value_store(new TestingValueStore()); 954e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) value_store_ = value_store.get(); 964e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) state_store_.reset( 974e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) new StateStore(profile_, value_store.PassAs<ValueStore>())); 9890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) blacklist_.reset(new Blacklist(ExtensionPrefs::Get(profile_))); 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) standard_management_policy_provider_.reset( 10090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) new StandardManagementPolicyProvider(ExtensionPrefs::Get(profile_))); 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) management_policy_.reset(new ManagementPolicy()); 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) management_policy_->RegisterProvider( 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) standard_management_policy_provider_.get()); 1045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) runtime_data_.reset(new RuntimeData(ExtensionRegistry::Get(profile_))); 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extension_service_.reset(new ExtensionService(profile_, 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line, 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) install_directory, 10890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ExtensionPrefs::Get(profile_), 1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) blacklist_.get(), 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) autoupdate_enabled, 11190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) true, 11290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) &ready_)); 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extension_service_->ClearProvidersForTesting(); 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return extension_service_.get(); 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ExtensionService* TestExtensionSystem::extension_service() { 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return extension_service_.get(); 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)RuntimeData* TestExtensionSystem::runtime_data() { 1225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return runtime_data_.get(); 1235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 1245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ManagementPolicy* TestExtensionSystem::management_policy() { 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return management_policy_.get(); 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TestExtensionSystem::SetExtensionService(ExtensionService* service) { 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extension_service_.reset(service); 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)UserScriptMaster* TestExtensionSystem::user_script_master() { 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 137f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)ProcessManager* TestExtensionSystem::process_manager() { 138f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return process_manager_.get(); 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)StateStore* TestExtensionSystem::state_store() { 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return state_store_.get(); 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)StateStore* TestExtensionSystem::rules_store() { 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return state_store_.get(); 1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 149f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)InfoMap* TestExtensionSystem::info_map() { return info_map_.get(); } 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)LazyBackgroundTaskQueue* 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TestExtensionSystem::lazy_background_task_queue() { 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 156a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void TestExtensionSystem::SetEventRouter(scoped_ptr<EventRouter> event_router) { 157a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) event_router_.reset(event_router.release()); 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 160a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)EventRouter* TestExtensionSystem::event_router() { return event_router_.get(); } 161a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ExtensionWarningService* TestExtensionSystem::warning_service() { 1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return NULL; 1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)Blacklist* TestExtensionSystem::blacklist() { 1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return blacklist_.get(); 1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 170558790d6acca3451cf3a6b497803a5f07d0bec58Ben MurdochErrorConsole* TestExtensionSystem::error_console() { 171558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch return error_console_.get(); 172558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch} 173558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 174f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)InstallVerifier* TestExtensionSystem::install_verifier() { 175f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return install_verifier_.get(); 176f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 177f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)QuotaService* TestExtensionSystem::quota_service() { 1795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return quota_service_.get(); 1805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 1815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)const OneShotEvent& TestExtensionSystem::ready() const { 1835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return ready_; 1845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 1855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 186010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)ContentVerifier* TestExtensionSystem::content_verifier() { 187010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) return NULL; 188010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 189010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 191a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)KeyedService* TestExtensionSystem::Build(content::BrowserContext* profile) { 192c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return new TestExtensionSystem(static_cast<Profile*>(profile)); 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace extensions 196