diff options
author | juncai <juncai@chromium.org> | 2015-06-03 17:14:04 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-06-04 00:14:37 +0000 |
commit | cf52333148db8abf73adbb739480edaca3646fe5 (patch) | |
tree | 0c50247857c81587682dba497496abf0921093d7 /chrome/browser/extensions | |
parent | b6e2e1cf2ab03954db07966f4bfd9f03763f6084 (diff) | |
download | chromium_src-cf52333148db8abf73adbb739480edaca3646fe5.zip chromium_src-cf52333148db8abf73adbb739480edaca3646fe5.tar.gz chromium_src-cf52333148db8abf73adbb739480edaca3646fe5.tar.bz2 |
Extract EventRouter from ExtensionSystem.
This patch removes event_router accessor from ExtensionSystem.
EventRouter is now a browser context keyed service.
BUG=496281
Review URL: https://codereview.chromium.org/1148983004
Cr-Commit-Position: refs/heads/master@{#332745}
Diffstat (limited to 'chrome/browser/extensions')
23 files changed, 111 insertions, 189 deletions
diff --git a/chrome/browser/extensions/activity_log/activity_log.cc b/chrome/browser/extensions/activity_log/activity_log.cc index b03a171..9963a25 100644 --- a/chrome/browser/extensions/activity_log/activity_log.cc +++ b/chrome/browser/extensions/activity_log/activity_log.cc @@ -382,9 +382,7 @@ ActivityLog::ActivityLog(content::BrowserContext* context) switches::kEnableExtensionActivityLogging) || watchdog_apps_active_); - ExtensionSystem::Get(profile_)->ready().Post( - FROM_HERE, - base::Bind(&ActivityLog::StartObserving, base::Unretained(this))); + extension_registry_observer_.Add(ExtensionRegistry::Get(profile_)); if (!profile_->IsOffTheRecord()) uma_policy_ = new UmaPolicy(profile_); @@ -433,10 +431,6 @@ ActivityLog::~ActivityLog() { // MAINTAIN STATUS. ------------------------------------------------------------ -void ActivityLog::StartObserving() { - extension_registry_observer_.Add(ExtensionRegistry::Get(profile_)); -} - void ActivityLog::ChooseDatabasePolicy() { if (!(IsDatabaseEnabled() || IsWatchdogAppActive())) return; diff --git a/chrome/browser/extensions/activity_log/activity_log.h b/chrome/browser/extensions/activity_log/activity_log.h index e7f4025..8c63b01 100644 --- a/chrome/browser/extensions/activity_log/activity_log.h +++ b/chrome/browser/extensions/activity_log/activity_log.h @@ -139,10 +139,6 @@ class ActivityLog : public BrowserContextKeyedAPI, // --enable-extension-activity-logging flag is set. bool IsDatabaseEnabled(); - // Delayed initialization of ExtensionRegistry which waits until after the - // ExtensionSystem/ExtensionService are done with their own setup. - void StartObserving(); - // ScriptExecutionObserver implementation. // Fires when a ContentScript is executed. void OnScriptsExecuted(const content::WebContents* web_contents, diff --git a/chrome/browser/extensions/api/audio_modem/audio_modem_api_unittest.cc b/chrome/browser/extensions/api/audio_modem/audio_modem_api_unittest.cc index f1fa5ac..3728e67 100644 --- a/chrome/browser/extensions/api/audio_modem/audio_modem_api_unittest.cc +++ b/chrome/browser/extensions/api/audio_modem/audio_modem_api_unittest.cc @@ -19,6 +19,7 @@ #include "components/audio_modem/test/stub_whispernet_client.h" #include "extensions/browser/api_test_utils.h" #include "extensions/browser/event_router.h" +#include "extensions/browser/event_router_factory.h" using audio_modem::AUDIBLE; using audio_modem::AudioToken; @@ -109,15 +110,18 @@ class StubEventRouter : public EventRouter { using EventCallback = base::Callback<void(const std::string&, scoped_ptr<Event>)>; - StubEventRouter(BrowserContext* context, EventCallback event_callback) - : EventRouter(context, nullptr), - event_callback_(event_callback) {} + explicit StubEventRouter(BrowserContext* context) + : EventRouter(context, nullptr) {} void DispatchEventToExtension(const std::string& extension_id, scoped_ptr<Event> event) override { event_callback_.Run(extension_id, event.Pass()); } + void SetEventCallBack(EventCallback event_callback) { + event_callback_ = event_callback; + } + void ClearEventCallback() { event_callback_.Reset(); } @@ -126,6 +130,11 @@ class StubEventRouter : public EventRouter { EventCallback event_callback_; }; +// StubEventRouter factory function +KeyedService* StubEventRouterFactoryFunction(content::BrowserContext* context) { + return new StubEventRouter(context); +} + } // namespace class AudioModemApiUnittest : public ExtensionApiUnittest { @@ -192,14 +201,11 @@ class AudioModemApiUnittest : public ExtensionApiUnittest { AudioModemAPI::GetFactoryInstance()->SetTestingFactory( profile(), &ApiFactoryFunction); - scoped_ptr<EventRouter> router(new StubEventRouter( - profile(), - // The EventRouter is deleted in TearDown(). - // It will lose this callback before we are destructed. - base::Bind(&AudioModemApiUnittest::CaptureEvent, - base::Unretained(this)))); - static_cast<TestExtensionSystem*>(ExtensionSystem::Get(profile())) - ->SetEventRouter(router.Pass()); + StubEventRouter* stub_event_router = static_cast<StubEventRouter*>( + extensions::EventRouterFactory::GetInstance()->SetTestingFactoryAndUse( + profile(), &StubEventRouterFactoryFunction)); + stub_event_router->SetEventCallBack(base::Bind( + &AudioModemApiUnittest::CaptureEvent, base::Unretained(this))); } void CaptureEvent(const std::string& extension_id, diff --git a/chrome/browser/extensions/api/declarative/rules_registry_with_cache_unittest.cc b/chrome/browser/extensions/api/declarative/rules_registry_with_cache_unittest.cc index e0cb6cc..f5d01e9 100644 --- a/chrome/browser/extensions/api/declarative/rules_registry_with_cache_unittest.cc +++ b/chrome/browser/extensions/api/declarative/rules_registry_with_cache_unittest.cc @@ -49,10 +49,8 @@ class RulesRegistryWithCacheTest : public testing::Test { kRulesRegistryID)) {} void SetUp() override { - env_.GetExtensionPrefs(); // Force creation before adding extensions. // Note that env_.MakeExtension below also forces the creation of // ExtensionService. - base::DictionaryValue manifest_extra; std::string key; CHECK(Extension::ProducePEM("test extension 1", &key)); diff --git a/chrome/browser/extensions/api/developer_private/developer_private_api_unittest.cc b/chrome/browser/extensions/api/developer_private/developer_private_api_unittest.cc index f7e239e..97ac5c2 100644 --- a/chrome/browser/extensions/api/developer_private/developer_private_api_unittest.cc +++ b/chrome/browser/extensions/api/developer_private/developer_private_api_unittest.cc @@ -20,6 +20,7 @@ #include "chrome/test/base/test_browser_window.h" #include "components/crx_file/id_util.h" #include "content/public/test/test_web_contents_factory.h" +#include "extensions/browser/event_router_factory.h" #include "extensions/browser/extension_error_test_util.h" #include "extensions/browser/extension_prefs.h" #include "extensions/browser/extension_registry.h" @@ -41,6 +42,10 @@ KeyedService* BuildAPI(content::BrowserContext* context) { return new DeveloperPrivateAPI(context); } +KeyedService* BuildEventRouter(content::BrowserContext* profile) { + return new EventRouter(profile, ExtensionPrefs::Get(profile)); +} + } // namespace class DeveloperPrivateApiUnitTest : public ExtensionServiceTestBase { @@ -221,9 +226,9 @@ void DeveloperPrivateApiUnitTest::SetUp() { browser_.reset(new Browser(params)); // Allow the API to be created. - static_cast<TestExtensionSystem*>(ExtensionSystem::Get(profile()))-> - SetEventRouter(make_scoped_ptr( - new EventRouter(profile(), ExtensionPrefs::Get(profile())))); + EventRouterFactory::GetInstance()->SetTestingFactory(profile(), + &BuildEventRouter); + DeveloperPrivateAPI::GetFactoryInstance()->SetTestingFactory( profile(), &BuildAPI); } diff --git a/chrome/browser/extensions/api/device_permissions_manager_unittest.cc b/chrome/browser/extensions/api/device_permissions_manager_unittest.cc index 86c1803..9863443 100644 --- a/chrome/browser/extensions/api/device_permissions_manager_unittest.cc +++ b/chrome/browser/extensions/api/device_permissions_manager_unittest.cc @@ -92,7 +92,6 @@ class DevicePermissionsManagerTest : public testing::Test { void SetUp() override { testing::Test::SetUp(); env_.reset(new extensions::TestExtensionEnvironment()); - env_->GetExtensionPrefs(); // Force creation before adding extensions. extension_ = env_->MakeExtension(*base::test::ParseJson( "{" diff --git a/chrome/browser/extensions/api/easy_unlock_private/easy_unlock_private_api_chromeos_unittest.cc b/chrome/browser/extensions/api/easy_unlock_private/easy_unlock_private_api_chromeos_unittest.cc index 388c331..6a3de13 100644 --- a/chrome/browser/extensions/api/easy_unlock_private/easy_unlock_private_api_chromeos_unittest.cc +++ b/chrome/browser/extensions/api/easy_unlock_private/easy_unlock_private_api_chromeos_unittest.cc @@ -22,6 +22,8 @@ #include "chromeos/dbus/dbus_thread_manager.h" #include "chromeos/dbus/fake_easy_unlock_client.h" #include "extensions/browser/event_router.h" +#include "extensions/browser/event_router_factory.h" +#include "extensions/browser/extension_prefs.h" #include "testing/gtest/include/gtest/gtest.h" #include "third_party/cros_system_api/dbus/service_constants.h" @@ -429,8 +431,10 @@ KeyedService* BuildTestEasyUnlockService(content::BrowserContext* context) { // A fake EventRouter that logs event it dispatches for testing. class FakeEventRouter : public extensions::EventRouter { public: - FakeEventRouter(Profile* profile, extensions::ExtensionPrefs* extension_prefs) - : EventRouter(profile, extension_prefs), + FakeEventRouter(Profile* profile, + scoped_ptr<extensions::TestExtensionPrefs> extension_prefs) + : EventRouter(profile, extension_prefs->prefs()), + extension_prefs_(extension_prefs.Pass()), event_count_(0) {} void DispatchEventToExtension(const std::string& extension_id, @@ -445,42 +449,24 @@ class FakeEventRouter : public extensions::EventRouter { const std::string& last_event_name() const { return last_event_name_; } private: + scoped_ptr<extensions::TestExtensionPrefs> extension_prefs_; int event_count_; std::string last_extension_id_; std::string last_event_name_; }; -// A fake ExtensionSystem that returns a FakeEventRouter for event_router(). -class FakeExtensionSystem : public extensions::TestExtensionSystem { - public: - explicit FakeExtensionSystem(Profile* profile) - : TestExtensionSystem(profile), - prefs_(new extensions::TestExtensionPrefs( - base::ThreadTaskRunnerHandle::Get())) { - fake_event_router_.reset(new FakeEventRouter(profile, prefs_->prefs())); - } - - extensions::EventRouter* event_router() override { - return fake_event_router_.get(); - } - - private: - scoped_ptr<extensions::TestExtensionPrefs> prefs_; - scoped_ptr<FakeEventRouter> fake_event_router_; -}; - -// Factory function to register for the ExtensionSystem. -KeyedService* BuildFakeExtensionSystem(content::BrowserContext* profile) { - return new FakeExtensionSystem(static_cast<Profile*>(profile)); +// FakeEventRouter factory function +KeyedService* FakeEventRouterFactoryFunction(content::BrowserContext* profile) { + scoped_ptr<extensions::TestExtensionPrefs> extension_prefs( + new extensions::TestExtensionPrefs(base::ThreadTaskRunnerHandle::Get())); + return new FakeEventRouter(static_cast<Profile*>(profile), + extension_prefs.Pass()); } TEST_F(EasyUnlockPrivateApiTest, AutoPairing) { - FakeExtensionSystem* fake_extension_system = - static_cast<FakeExtensionSystem*>( - extensions::ExtensionSystemFactory::GetInstance() - ->SetTestingFactoryAndUse(profile(), &BuildFakeExtensionSystem)); - FakeEventRouter* event_router = - static_cast<FakeEventRouter*>(fake_extension_system->event_router()); + FakeEventRouter* event_router = static_cast<FakeEventRouter*>( + extensions::EventRouterFactory::GetInstance()->SetTestingFactoryAndUse( + profile(), &FakeEventRouterFactoryFunction)); EasyUnlockServiceFactory::GetInstance()->SetTestingFactoryAndUse( profile(), &BuildTestEasyUnlockService); diff --git a/chrome/browser/extensions/api/identity/web_auth_flow.cc b/chrome/browser/extensions/api/identity/web_auth_flow.cc index ac4d1aa..8af05bb 100644 --- a/chrome/browser/extensions/api/identity/web_auth_flow.cc +++ b/chrome/browser/extensions/api/identity/web_auth_flow.cc @@ -101,7 +101,7 @@ void WebAuthFlow::Start() { base::FilePath(FILE_PATH_LITERAL("identity_scope_approval_dialog"))); } - system->event_router()->DispatchEventWithLazyListener( + EventRouter::Get(profile_)->DispatchEventWithLazyListener( extension_misc::kIdentityApiUiAppId, event.Pass()); } diff --git a/chrome/browser/extensions/api/image_writer_private/operation_manager_unittest.cc b/chrome/browser/extensions/api/image_writer_private/operation_manager_unittest.cc index 1dbe937..bec81903 100644 --- a/chrome/browser/extensions/api/image_writer_private/operation_manager_unittest.cc +++ b/chrome/browser/extensions/api/image_writer_private/operation_manager_unittest.cc @@ -11,6 +11,7 @@ #include "chrome/browser/extensions/test_extension_system.h" #include "chrome/test/base/testing_profile.h" #include "extensions/browser/event_router.h" +#include "extensions/browser/event_router_factory.h" #if defined(OS_CHROMEOS) #include "chrome/browser/chromeos/login/users/scoped_test_user_manager.h" @@ -33,23 +34,9 @@ class FakeEventRouter : public extensions::EventRouter { } }; -// A fake ExtensionSystem that returns a FakeEventRouter for event_router(). -class FakeExtensionSystem : public extensions::TestExtensionSystem { - public: - explicit FakeExtensionSystem(Profile* profile) - : TestExtensionSystem(profile) { - fake_event_router_.reset(new FakeEventRouter(profile)); - } - - EventRouter* event_router() override { return fake_event_router_.get(); } - - private: - scoped_ptr<FakeEventRouter> fake_event_router_; -}; - -// Factory function to register for the ExtensionSystem. -KeyedService* BuildFakeExtensionSystem(content::BrowserContext* profile) { - return new FakeExtensionSystem(static_cast<Profile*>(profile)); +// FakeEventRouter factory function +KeyedService* FakeEventRouterFactoryFunction(content::BrowserContext* context) { + return new FakeEventRouter(static_cast<Profile*>(context)); } namespace { @@ -76,11 +63,9 @@ class ImageWriterOperationManagerTest : public ImageWriterUnitTestBase { void SetUp() override { ImageWriterUnitTestBase::SetUp(); - extension_system_ = static_cast<FakeExtensionSystem*>( - ExtensionSystemFactory::GetInstance()-> - SetTestingFactoryAndUse(&test_profile_, &BuildFakeExtensionSystem)); event_router_ = static_cast<FakeEventRouter*>( - extension_system_->event_router()); + extensions::EventRouterFactory::GetInstance()->SetTestingFactoryAndUse( + &test_profile_, &FakeEventRouterFactoryFunction)); } bool started_; @@ -92,7 +77,6 @@ class ImageWriterOperationManagerTest : public ImageWriterUnitTestBase { std::string cancel_error_; TestingProfile test_profile_; - FakeExtensionSystem* extension_system_; FakeEventRouter* event_router_; #if defined(OS_CHROMEOS) diff --git a/chrome/browser/extensions/api/management/management_api_unittest.cc b/chrome/browser/extensions/api/management/management_api_unittest.cc index 771bd42..a4845ba 100644 --- a/chrome/browser/extensions/api/management/management_api_unittest.cc +++ b/chrome/browser/extensions/api/management/management_api_unittest.cc @@ -11,6 +11,7 @@ #include "chrome/test/base/test_browser_window.h" #include "extensions/browser/api/management/management_api.h" #include "extensions/browser/api/management/management_api_constants.h" +#include "extensions/browser/event_router_factory.h" #include "extensions/browser/extension_prefs.h" #include "extensions/browser/extension_registry.h" #include "extensions/browser/extension_system.h" @@ -29,6 +30,10 @@ KeyedService* BuildManagementApi(content::BrowserContext* context) { return new ManagementAPI(context); } +KeyedService* BuildEventRouter(content::BrowserContext* profile) { + return new extensions::EventRouter(profile, ExtensionPrefs::Get(profile)); +} + } // namespace namespace constants = extension_management_api_constants; @@ -74,9 +79,9 @@ void ManagementApiUnitTest::SetUp() { InitializeEmptyExtensionService(); ManagementAPI::GetFactoryInstance()->SetTestingFactory(profile(), &BuildManagementApi); - static_cast<TestExtensionSystem*>(ExtensionSystem::Get(profile()))-> - SetEventRouter(make_scoped_ptr( - new EventRouter(profile(), ExtensionPrefs::Get(profile())))); + + EventRouterFactory::GetInstance()->SetTestingFactory(profile(), + &BuildEventRouter); browser_window_.reset(new TestBrowserWindow()); Browser::CreateParams params(profile(), chrome::HOST_DESKTOP_TYPE_NATIVE); diff --git a/chrome/browser/extensions/api/mdns/mdns_api_unittest.cc b/chrome/browser/extensions/api/mdns/mdns_api_unittest.cc index 86c0c86..84e1f08 100644 --- a/chrome/browser/extensions/api/mdns/mdns_api_unittest.cc +++ b/chrome/browser/extensions/api/mdns/mdns_api_unittest.cc @@ -9,6 +9,7 @@ #include "chrome/common/extensions/api/mdns.h" #include "content/public/browser/browser_context.h" #include "content/public/test/mock_render_process_host.h" +#include "extensions/browser/event_router_factory.h" #include "extensions/browser/extension_prefs_factory.h" #include "extensions/browser/extension_registry.h" #include "extensions/common/manifest_constants.h" @@ -23,6 +24,12 @@ KeyedService* MDnsAPITestingFactoryFunction(content::BrowserContext* context) { return new MDnsAPI(context); } +KeyedService* BuildEventRouter(content::BrowserContext* profile) { + return new extensions::EventRouter( + profile, + ExtensionPrefsFactory::GetInstance()->GetForBrowserContext((profile))); +} + // For ExtensionService interface when it requires a path that is not used. base::FilePath bogus_file_pathname(const std::string& name) { return base::FilePath(FILE_PATH_LITERAL("//foobar_nonexistent")) @@ -62,15 +69,12 @@ class MDnsAPITest : public extensions::ExtensionServiceTestBase { browser_context(), MDnsAPITestingFactoryFunction); - // Create an event router and associate it with the context. - extensions::EventRouter* event_router = CreateEventRouter_(); - static_cast<TestExtensionSystem*>( - ExtensionSystem::Get(browser_context()))->SetEventRouter( - scoped_ptr<extensions::EventRouter>(event_router)); + EventRouterFactory::GetInstance()->SetTestingFactory(browser_context(), + &BuildEventRouter); // Do some sanity checking - ASSERT_EQ(event_router, EventRouter::Get(browser_context())); ASSERT_TRUE(MDnsAPI::Get(browser_context())); // constructs MDnsAPI + ASSERT_TRUE(EventRouter::Get(browser_context())); // constructs EventRouter registry_ = new MockDnsSdRegistry(MDnsAPI::Get(browser_context())); EXPECT_CALL(*dns_sd_registry(), @@ -130,14 +134,6 @@ class MDnsAPITest : public extensions::ExtensionServiceTestBase { return render_process_host_.get(); } - protected: - virtual extensions::EventRouter* CreateEventRouter_() { - return new extensions::EventRouter( - browser_context(), - ExtensionPrefsFactory::GetInstance()->GetForBrowserContext( - browser_context())); - } - private: // The registry is owned by MDnsAPI, but MDnsAPI does not have an accessor // for it, so use a private member. @@ -230,18 +226,17 @@ class MockEventRouter : public EventRouter { MOCK_METHOD1(BroadcastEventPtr, void(Event* event)); }; +KeyedService* MockEventRouterFactoryFunction(content::BrowserContext* profile) { + return new MockEventRouter( + profile, + ExtensionPrefsFactory::GetInstance()->GetForBrowserContext((profile))); +} + class MDnsAPIMaxServicesTest : public MDnsAPITest { public: MockEventRouter* event_router() { return static_cast<MockEventRouter*>(EventRouter::Get(browser_context())); } - protected: - extensions::EventRouter* CreateEventRouter_() override { - return new MockEventRouter( - browser_context(), - ExtensionPrefsFactory::GetInstance()->GetForBrowserContext( - browser_context())); - } }; class EventServiceListSizeMatcher : @@ -296,6 +291,9 @@ inline testing::Matcher<const Event&> EventServiceListSize( } TEST_F(MDnsAPIMaxServicesTest, OnServiceListDoesNotExceedLimit) { + EventRouterFactory::GetInstance()->SetTestingFactory( + browser_context(), &MockEventRouterFactoryFunction); + // This check should change when the [value=64] changes in the IDL file. EXPECT_EQ(64, api::mdns::MAX_SERVICE_INSTANCES_PER_EVENT); diff --git a/chrome/browser/extensions/api/storage/settings_sync_unittest.cc b/chrome/browser/extensions/api/storage/settings_sync_unittest.cc index be3de09..100303e 100644 --- a/chrome/browser/extensions/api/storage/settings_sync_unittest.cc +++ b/chrome/browser/extensions/api/storage/settings_sync_unittest.cc @@ -19,6 +19,8 @@ #include "extensions/browser/api/storage/settings_storage_factory.h" #include "extensions/browser/api/storage/settings_test_util.h" #include "extensions/browser/api/storage/storage_frontend.h" +#include "extensions/browser/event_router.h" +#include "extensions/browser/event_router_factory.h" #include "extensions/browser/extension_system.h" #include "extensions/browser/mock_extension_system.h" #include "extensions/browser/value_store/testing_value_store.h" @@ -193,6 +195,15 @@ class TestingValueStoreFactory : public SettingsStorageFactory { std::map<std::string, TestingValueStore*> created_; }; +KeyedService* MockExtensionSystemFactoryFunction( + content::BrowserContext* context) { + return new MockExtensionSystem(context); +} + +KeyedService* BuildEventRouter(content::BrowserContext* profile) { + return new extensions::EventRouter(profile, nullptr); +} + } // namespace class ExtensionSettingsSyncTest : public testing::Test { @@ -214,8 +225,11 @@ class ExtensionSettingsSyncTest : public testing::Test { ExtensionsBrowserClient::Get() ->GetExtensionSystemFactory() - ->SetTestingFactoryAndUse( - profile_.get(), &util::MockExtensionSystemWithEventRouter::Build); + ->SetTestingFactoryAndUse(profile_.get(), + &MockExtensionSystemFactoryFunction); + + EventRouterFactory::GetInstance()->SetTestingFactory(profile_.get(), + &BuildEventRouter); } void TearDown() override { diff --git a/chrome/browser/extensions/extension_service.cc b/chrome/browser/extensions/extension_service.cc index 160ac64..a59eeb9 100644 --- a/chrome/browser/extensions/extension_service.cc +++ b/chrome/browser/extensions/extension_service.cc @@ -2410,8 +2410,8 @@ bool ExtensionService::ShouldDelayExtensionUpdate( if (extensions::BackgroundInfo::HasPersistentBackgroundPage(old)) { // Delay installation if the extension listens for the onUpdateAvailable // event. - return system_->event_router()->ExtensionHasEventListener( - extension_id, kOnUpdateAvailableEvent); + return extensions::EventRouter::Get(profile_) + ->ExtensionHasEventListener(extension_id, kOnUpdateAvailableEvent); } else { // Delay installation if the extension is not idle. return !extensions::util::IsExtensionIdle(extension_id, profile_); diff --git a/chrome/browser/extensions/extension_service_test_base.cc b/chrome/browser/extensions/extension_service_test_base.cc index e2b455f..f89098e 100644 --- a/chrome/browser/extensions/extension_service_test_base.cc +++ b/chrome/browser/extensions/extension_service_test_base.cc @@ -210,11 +210,8 @@ void ExtensionServiceTestBase::CreateExtensionService( const ExtensionServiceInitParams& params) { TestExtensionSystem* system = static_cast<TestExtensionSystem*>(ExtensionSystem::Get(profile_.get())); - if (!params.is_first_run) { - ExtensionPrefs* prefs = system->CreateExtensionPrefs( - base::CommandLine::ForCurrentProcess(), params.extensions_install_dir); - prefs->SetAlertSystemFirstRun(); - } + if (!params.is_first_run) + ExtensionPrefs::Get(profile_.get())->SetAlertSystemFirstRun(); service_ = system->CreateExtensionService(base::CommandLine::ForCurrentProcess(), diff --git a/chrome/browser/extensions/extension_system_factory.cc b/chrome/browser/extensions/extension_system_factory.cc index 3014401..bea8cfb 100644 --- a/chrome/browser/extensions/extension_system_factory.cc +++ b/chrome/browser/extensions/extension_system_factory.cc @@ -13,6 +13,7 @@ #include "chrome/browser/ui/global_error/global_error_service_factory.h" #include "components/keyed_service/content/browser_context_dependency_manager.h" #include "extensions/browser/declarative_user_script_manager_factory.h" +#include "extensions/browser/event_router_factory.h" #include "extensions/browser/extension_prefs_factory.h" #include "extensions/browser/extension_registry_factory.h" #include "extensions/browser/extension_system.h" @@ -52,6 +53,7 @@ ExtensionSystemSharedFactory::ExtensionSystemSharedFactory() DependsOn(RendererStartupHelperFactory::GetInstance()); DependsOn(BlacklistFactory::GetInstance()); DependsOn(DeclarativeUserScriptManagerFactory::GetInstance()); + DependsOn(EventRouterFactory::GetInstance()); // This depends on ExtensionDownloader which depends on // ProfileIdentityProvider which depends on SigninManager. DependsOn(SigninManagerFactory::GetInstance()); diff --git a/chrome/browser/extensions/extension_system_impl.cc b/chrome/browser/extensions/extension_system_impl.cc index d59553d..31a79a8 100644 --- a/chrome/browser/extensions/extension_system_impl.cc +++ b/chrome/browser/extensions/extension_system_impl.cc @@ -39,14 +39,12 @@ #include "content/public/browser/url_data_source.h" #include "extensions/browser/content_verifier.h" #include "extensions/browser/content_verifier_delegate.h" -#include "extensions/browser/event_router.h" #include "extensions/browser/extension_pref_store.h" #include "extensions/browser/extension_pref_value_map.h" #include "extensions/browser/extension_pref_value_map_factory.h" #include "extensions/browser/extension_prefs.h" #include "extensions/browser/extension_registry.h" #include "extensions/browser/info_map.h" -#include "extensions/browser/lazy_background_task_queue.h" #include "extensions/browser/management_policy.h" #include "extensions/browser/quota_service.h" #include "extensions/browser/runtime_data.h" @@ -99,7 +97,6 @@ ExtensionSystemImpl::Shared::~Shared() { } void ExtensionSystemImpl::Shared::InitPrefs() { - event_router_.reset(new EventRouter(profile_, ExtensionPrefs::Get(profile_))); // Two state stores. The latter, which contains declarative rules, must be // loaded immediately so that the rules are ready before we issue network // requests. @@ -449,10 +446,6 @@ InfoMap* ExtensionSystemImpl::Shared::info_map() { return extension_info_map_.get(); } -EventRouter* ExtensionSystemImpl::Shared::event_router() { - return event_router_.get(); -} - QuotaService* ExtensionSystemImpl::Shared::quota_service() { return quota_service_.get(); } @@ -517,10 +510,6 @@ StateStore* ExtensionSystemImpl::rules_store() { InfoMap* ExtensionSystemImpl::info_map() { return shared_->info_map(); } -EventRouter* ExtensionSystemImpl::event_router() { - return shared_->event_router(); -} - const OneShotEvent& ExtensionSystemImpl::ready() const { return shared_->ready(); } diff --git a/chrome/browser/extensions/extension_system_impl.h b/chrome/browser/extensions/extension_system_impl.h index f4b19c4..92e2457 100644 --- a/chrome/browser/extensions/extension_system_impl.h +++ b/chrome/browser/extensions/extension_system_impl.h @@ -16,7 +16,6 @@ namespace extensions { class ContentVerifier; class ExtensionSystemSharedFactory; -class InstallVerifier; class NavigationObserver; class SharedUserScriptMaster; class StateStoreNotificationObserver; @@ -43,7 +42,6 @@ class ExtensionSystemImpl : public ExtensionSystem { StateStore* state_store() override; // shared StateStore* rules_store() override; // shared InfoMap* info_map() override; // shared - EventRouter* event_router() override; // shared QuotaService* quota_service() override; // shared void RegisterExtensionWithRequestContexts( @@ -84,7 +82,6 @@ class ExtensionSystemImpl : public ExtensionSystem { ManagementPolicy* management_policy(); SharedUserScriptMaster* shared_user_script_master(); InfoMap* info_map(); - EventRouter* event_router(); QuotaService* quota_service(); const OneShotEvent& ready() const { return ready_; } ContentVerifier* content_verifier(); @@ -98,9 +95,6 @@ class ExtensionSystemImpl : public ExtensionSystem { scoped_ptr<StateStoreNotificationObserver> state_store_notification_observer_; scoped_ptr<StateStore> rules_store_; - // LazyBackgroundTaskQueue is a dependency of - // MessageService and EventRouter. - scoped_ptr<EventRouter> event_router_; scoped_ptr<NavigationObserver> navigation_observer_; // Shared memory region manager for scripts statically declared in extension // manifests. This region is shared between all extensions. diff --git a/chrome/browser/extensions/menu_manager_unittest.cc b/chrome/browser/extensions/menu_manager_unittest.cc index f0cf049..8b1ec7d 100644 --- a/chrome/browser/extensions/menu_manager_unittest.cc +++ b/chrome/browser/extensions/menu_manager_unittest.cc @@ -24,6 +24,7 @@ #include "content/public/common/context_menu_params.h" #include "content/public/test/test_browser_thread.h" #include "extensions/browser/event_router.h" +#include "extensions/browser/event_router_factory.h" #include "extensions/browser/extension_registry.h" #include "extensions/browser/extension_system.h" #include "extensions/common/extension.h" @@ -481,26 +482,9 @@ class MockEventRouter : public EventRouter { DISALLOW_COPY_AND_ASSIGN(MockEventRouter); }; -// A mock ExtensionSystem to serve our MockEventRouter. -class MockExtensionSystem : public TestExtensionSystem { - public: - explicit MockExtensionSystem(Profile* profile) - : TestExtensionSystem(profile) {} - - EventRouter* event_router() override { - if (!mock_event_router_) - mock_event_router_.reset(new MockEventRouter(profile_)); - return mock_event_router_.get(); - } - - private: - scoped_ptr<MockEventRouter> mock_event_router_; - - DISALLOW_COPY_AND_ASSIGN(MockExtensionSystem); -}; - -KeyedService* BuildMockExtensionSystem(content::BrowserContext* profile) { - return new MockExtensionSystem(static_cast<Profile*>(profile)); +// MockEventRouter factory function +KeyedService* MockEventRouterFactoryFunction(content::BrowserContext* profile) { + return new MockEventRouter(static_cast<Profile*>(profile)); } } // namespace @@ -561,12 +545,9 @@ TEST_F(MenuManagerTest, RemoveOneByOne) { TEST_F(MenuManagerTest, ExecuteCommand) { TestingProfile profile; - - MockExtensionSystem* mock_extension_system = - static_cast<MockExtensionSystem*>(ExtensionSystemFactory::GetInstance()-> - SetTestingFactoryAndUse(&profile, &BuildMockExtensionSystem)); - MockEventRouter* mock_event_router = - static_cast<MockEventRouter*>(mock_extension_system->event_router()); + MockEventRouter* mock_event_router = static_cast<MockEventRouter*>( + EventRouterFactory::GetInstance()->SetTestingFactoryAndUse( + &profile, &MockEventRouterFactoryFunction)); content::ContextMenuParams params; params.media_type = blink::WebContextMenuData::MediaTypeImage; diff --git a/chrome/browser/extensions/permission_message_combinations_unittest.cc b/chrome/browser/extensions/permission_message_combinations_unittest.cc index d4024e5..5e46a53 100644 --- a/chrome/browser/extensions/permission_message_combinations_unittest.cc +++ b/chrome/browser/extensions/permission_message_combinations_unittest.cc @@ -31,8 +31,6 @@ class PermissionMessageCombinationsUnittest : public testing::Test { // Overridden from testing::Test: void SetUp() override { testing::Test::SetUp(); - // Force creation of ExtensionPrefs before adding extensions. - env_.GetExtensionPrefs(); } protected: diff --git a/chrome/browser/extensions/permission_messages_unittest.cc b/chrome/browser/extensions/permission_messages_unittest.cc index 1164f3f..0b45bac 100644 --- a/chrome/browser/extensions/permission_messages_unittest.cc +++ b/chrome/browser/extensions/permission_messages_unittest.cc @@ -46,8 +46,6 @@ class PermissionMessagesUnittest : public testing::Test { // Overridden from testing::Test: void SetUp() override { testing::Test::SetUp(); - // Force creation of ExtensionPrefs before adding extensions. - env_.GetExtensionPrefs(); } protected: diff --git a/chrome/browser/extensions/test_extension_environment.cc b/chrome/browser/extensions/test_extension_environment.cc index 6914ab0..5faf752 100644 --- a/chrome/browser/extensions/test_extension_environment.cc +++ b/chrome/browser/extensions/test_extension_environment.cc @@ -14,6 +14,7 @@ #include "chrome/test/base/testing_profile.h" #include "content/public/test/test_utils.h" #include "content/public/test/web_contents_tester.h" +#include "extensions/browser/extension_prefs.h" #include "extensions/common/extension.h" #include "extensions/common/extension_builder.h" #include "extensions/common/value_builder.h" @@ -81,10 +82,8 @@ ExtensionService* TestExtensionEnvironment::GetExtensionService() { } ExtensionPrefs* TestExtensionEnvironment::GetExtensionPrefs() { - if (extension_prefs_ == NULL) { - extension_prefs_ = GetExtensionSystem()->CreateExtensionPrefs( - base::CommandLine::ForCurrentProcess(), base::FilePath()); - } + if (extension_prefs_ == NULL) + extension_prefs_ = ExtensionPrefs::Get(profile_.get()); return extension_prefs_; } diff --git a/chrome/browser/extensions/test_extension_system.cc b/chrome/browser/extensions/test_extension_system.cc index 9b9ea70..14835f1 100644 --- a/chrome/browser/extensions/test_extension_system.cc +++ b/chrome/browser/extensions/test_extension_system.cc @@ -9,21 +9,17 @@ #include "chrome/browser/extensions/blacklist.h" #include "chrome/browser/extensions/extension_management.h" #include "chrome/browser/extensions/extension_service.h" -#include "chrome/browser/extensions/install_verifier.h" #include "chrome/browser/extensions/shared_module_service.h" #include "chrome/browser/profiles/profile.h" #include "chrome/common/chrome_switches.h" #include "content/public/browser/browser_thread.h" -#include "extensions/browser/event_router.h" #include "extensions/browser/extension_pref_value_map.h" #include "extensions/browser/extension_pref_value_map_factory.h" #include "extensions/browser/extension_prefs.h" -#include "extensions/browser/extension_prefs_factory.h" #include "extensions/browser/extension_registry.h" #include "extensions/browser/extension_system.h" #include "extensions/browser/extensions_browser_client.h" #include "extensions/browser/info_map.h" -#include "extensions/browser/lazy_background_task_queue.h" #include "extensions/browser/management_policy.h" #include "extensions/browser/quota_service.h" #include "extensions/browser/runtime_data.h" @@ -59,25 +55,17 @@ ExtensionPrefs* TestExtensionSystem::CreateExtensionPrefs( // are not reflected in the pref service. One would need to // inject a new ExtensionPrefStore(extension_pref_value_map, false). - ExtensionPrefs* extension_prefs = ExtensionPrefs::Create( - profile_->GetPrefs(), - install_directory, + return ExtensionPrefs::Create( + profile_->GetPrefs(), install_directory, ExtensionPrefValueMapFactory::GetForBrowserContext(profile_), ExtensionsBrowserClient::Get()->CreateAppSorting().Pass(), - extensions_disabled, - std::vector<ExtensionPrefsObserver*>()); - ExtensionPrefsFactory::GetInstance()->SetInstanceForTesting( - profile_, - extension_prefs); - return extension_prefs; + extensions_disabled, std::vector<ExtensionPrefsObserver*>()); } ExtensionService* TestExtensionSystem::CreateExtensionService( const base::CommandLine* command_line, const base::FilePath& install_directory, bool autoupdate_enabled) { - if (!ExtensionPrefs::Get(profile_)) - CreateExtensionPrefs(command_line, install_directory); // The ownership of |value_store_| is immediately transferred to state_store_, // but we keep a naked pointer to the TestingValueStore. scoped_ptr<TestingValueStore> value_store(new TestingValueStore()); @@ -130,12 +118,6 @@ StateStore* TestExtensionSystem::rules_store() { InfoMap* TestExtensionSystem::info_map() { return info_map_.get(); } -void TestExtensionSystem::SetEventRouter(scoped_ptr<EventRouter> event_router) { - event_router_.reset(event_router.release()); -} - -EventRouter* TestExtensionSystem::event_router() { return event_router_.get(); } - QuotaService* TestExtensionSystem::quota_service() { return quota_service_.get(); } diff --git a/chrome/browser/extensions/test_extension_system.h b/chrome/browser/extensions/test_extension_system.h index 06a5761..7efd930 100644 --- a/chrome/browser/extensions/test_extension_system.h +++ b/chrome/browser/extensions/test_extension_system.h @@ -63,8 +63,6 @@ class TestExtensionSystem : public ExtensionSystem { StateStore* rules_store() override; TestingValueStore* value_store() { return value_store_; } InfoMap* info_map() override; - void SetEventRouter(scoped_ptr<EventRouter> event_router); - EventRouter* event_router() override; QuotaService* quota_service() override; const OneShotEvent& ready() const override; ContentVerifier* content_verifier() override; @@ -89,7 +87,6 @@ class TestExtensionSystem : public ExtensionSystem { scoped_ptr<RuntimeData> runtime_data_; scoped_ptr<ExtensionService> extension_service_; scoped_refptr<InfoMap> info_map_; - scoped_ptr<EventRouter> event_router_; scoped_ptr<QuotaService> quota_service_; OneShotEvent ready_; }; |