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