From 0ea3fa90a36f091c943e286ade39b0252e5d34d7 Mon Sep 17 00:00:00 2001 From: reillyg Date: Tue, 28 Oct 2014 08:30:23 -0700 Subject: [PATCH] Extract ProcessManager from ExtensionSystem. This change removes ProcessManager's //chrome dependency because while ProcessManager and ExtensionSystem are in //extensions the ExtensionSystemFactory is in //chrome. This allows a service in //extensions to declare a dependency on the ProcessManager's factory directly. Most of this patch is changing, extensions::ExtensionSystem::Get(profile_)->process_manager() to, extensions::ProcessManager::Get(profile_). BUG= TBR=erikwright@chromium.org Review URL: https://codereview.chromium.org/671763002 Cr-Commit-Position: refs/heads/master@{#301636} --- apps/launcher.cc | 2 +- .../browser/apps/ephemeral_app_browsertest.cc | 4 +- .../apps/window_controls_browsertest.cc | 2 +- ...yword_extensions_delegate_impl_unittest.cc | 1 - .../spoken_feedback_browsertest.cc | 6 +- .../extensions/file_manager/event_router.cc | 9 +-- .../file_manager/file_browser_handlers.cc | 2 +- .../input_method_engine_browsertests.cc | 3 +- .../login/signin/oauth2_browsertest.cc | 4 +- .../devtools/devtools_sanity_browsertest.cc | 3 +- .../browser/devtools/devtools_target_impl.cc | 7 +-- chrome/browser/extensions/alert_apitest.cc | 5 +- .../extensions/api/debugger/debugger_api.cc | 4 +- .../developer_private_api.cc | 7 +-- .../browser_action_apitest.cc | 4 +- .../management/management_api_browsertest.cc | 4 +- .../api/management/management_browsertest.cc | 5 +- .../media_galleries_watch_apitest.cc | 7 +-- .../media_galleries_watch_apitest.cc | 11 ++-- .../api/messaging/extension_message_port.cc | 7 +-- .../api/messaging/message_service.cc | 2 +- .../system_indicator_apitest.cc | 4 +- .../system_storage_eject_apitest.cc | 7 +-- .../extensions/app_background_page_apitest.cc | 4 +- chrome/browser/extensions/browsertest_util.cc | 5 +- ..._content_browser_client_extensions_part.cc | 2 +- .../chrome_process_manager_delegate.cc | 27 ++++----- chrome/browser/extensions/devtools_util.cc | 4 +- .../extensions/extension_bindings_apitest.cc | 3 +- .../extension_crash_recovery_browsertest.cc | 3 +- .../browser/extensions/extension_service.cc | 3 +- .../extensions/extension_service_test_base.cc | 5 -- .../extensions/extension_service_test_base.h | 3 - .../extensions/extension_service_unittest.cc | 4 -- .../extensions/extension_system_factory.cc | 2 + .../extensions/extension_system_impl.cc | 13 +---- .../extensions/extension_system_impl.h | 7 --- .../extension_test_notification_observer.cc | 2 +- chrome/browser/extensions/extension_util.cc | 5 +- .../extensions/extension_view_host_factory.cc | 5 +- chrome/browser/extensions/gpu_browsertest.cc | 3 +- .../lazy_background_page_apitest.cc | 17 +++--- .../extensions/notifications_apitest.cc | 3 +- .../permission_messages_unittest.cc | 1 - .../process_management_browsertest.cc | 7 +-- .../extensions/process_manager_browsertest.cc | 7 +-- .../extensions/test_extension_system.cc | 14 ----- .../extensions/test_extension_system.h | 9 --- .../browser/extensions/window_open_apitest.cc | 5 +- .../net/chrome_extensions_network_delegate.cc | 7 +-- chrome/browser/policy/policy_browsertest.cc | 6 +- .../render_view_context_menu.cc | 11 +--- .../extension_api/tts_engine_extension_api.cc | 5 +- .../task_manager/extension_information.cc | 28 +++------- ...slate_manager_render_view_host_unittest.cc | 2 - .../javascript_dialog_manager.cc | 5 +- .../browser/ui/ash/media_delegate_chromeos.cc | 5 +- .../extensions/extension_settings_handler.cc | 7 +-- .../context_menu_content_type.cc | 12 ++-- extensions/browser/BUILD.gn | 2 + extensions/browser/api/runtime/runtime_api.cc | 37 ++++++------- extensions/browser/api/runtime/runtime_api.h | 6 ++ ...browser_context_keyed_service_factories.cc | 2 + extensions/browser/event_router.cc | 4 +- .../browser/extension_function_dispatcher.cc | 5 +- extensions/browser/extension_host.cc | 12 ++-- .../browser/extension_message_filter.cc | 11 +--- extensions/browser/extension_system.h | 3 - .../guest_view/app_view/app_view_guest.cc | 3 +- .../mime_handler_view_guest.cc | 6 +- .../browser/lazy_background_task_queue.cc | 12 ++-- .../lazy_background_task_queue_unittest.cc | 39 ++++++------- extensions/browser/mock_extension_system.cc | 4 -- extensions/browser/mock_extension_system.h | 1 - extensions/browser/mojo/keep_alive_impl.cc | 11 +--- .../browser/mojo/keep_alive_impl_unittest.cc | 21 +------ extensions/browser/process_manager.cc | 34 +++++------- extensions/browser/process_manager.h | 12 ++-- extensions/browser/process_manager_factory.cc | 55 +++++++++++++++++++ extensions/browser/process_manager_factory.h | 40 ++++++++++++++ .../browser/process_manager_unittest.cc | 1 - extensions/extensions.gyp | 2 + .../shell/browser/shell_extension_system.cc | 6 -- .../shell/browser/shell_extension_system.h | 2 - 84 files changed, 301 insertions(+), 391 deletions(-) create mode 100644 extensions/browser/process_manager_factory.cc create mode 100644 extensions/browser/process_manager_factory.h diff --git a/apps/launcher.cc b/apps/launcher.cc index ff38aa4d390e2c..aefca4fa1a9de3 100644 --- a/apps/launcher.cc +++ b/apps/launcher.cc @@ -263,7 +263,7 @@ class PlatformAppPathLauncher } extensions::ProcessManager* const process_manager = - ExtensionSystem::Get(profile_)->process_manager(); + extensions::ProcessManager::Get(profile_); ExtensionHost* const host = process_manager->GetBackgroundHostForExtension(extension_->id()); DCHECK(host); diff --git a/chrome/browser/apps/ephemeral_app_browsertest.cc b/chrome/browser/apps/ephemeral_app_browsertest.cc index e21b2b8036843c..90755a3919b2d1 100644 --- a/chrome/browser/apps/ephemeral_app_browsertest.cc +++ b/chrome/browser/apps/ephemeral_app_browsertest.cc @@ -371,8 +371,8 @@ class EphemeralAppBrowserTest : public EphemeralAppTestBase { // Verify that the event page of the app has not been loaded. void VerifyAppNotLoaded(const std::string& app_id) { - EXPECT_FALSE(ExtensionSystem::Get(profile())-> - process_manager()->GetBackgroundHostForExtension(app_id)); + EXPECT_FALSE(extensions::ProcessManager::Get(profile()) + ->GetBackgroundHostForExtension(app_id)); } // Verify properties of ephemeral apps. diff --git a/chrome/browser/apps/window_controls_browsertest.cc b/chrome/browser/apps/window_controls_browsertest.cc index 439775489595d8..75feeab89856bf 100644 --- a/chrome/browser/apps/window_controls_browsertest.cc +++ b/chrome/browser/apps/window_controls_browsertest.cc @@ -22,7 +22,7 @@ class WindowControlsTest : public extensions::PlatformAppBrowserTest { content::WebContents* WindowControlsTest::GetWebContentsForExtensionWindow( const extensions::Extension* extension) { extensions::ProcessManager* process_manager = - extensions::ExtensionSystem::Get(profile())->process_manager(); + extensions::ProcessManager::Get(profile()); // Lookup render view host for background page. const extensions::ExtensionHost* extension_host = diff --git a/chrome/browser/autocomplete/keyword_extensions_delegate_impl_unittest.cc b/chrome/browser/autocomplete/keyword_extensions_delegate_impl_unittest.cc index b807b55a7a7895..1e4695f8f477e5 100644 --- a/chrome/browser/autocomplete/keyword_extensions_delegate_impl_unittest.cc +++ b/chrome/browser/autocomplete/keyword_extensions_delegate_impl_unittest.cc @@ -76,7 +76,6 @@ class KeywordExtensionsDelegateImplTest : public ExtensionServiceTestBase { void KeywordExtensionsDelegateImplTest::SetUp() { ExtensionServiceTestBase::SetUp(); InitializeExtensionService(CreateDefaultInitParams()); - InitializeProcessManager(); } void KeywordExtensionsDelegateImplTest::RunTest(bool incognito) { diff --git a/chrome/browser/chromeos/accessibility/spoken_feedback_browsertest.cc b/chrome/browser/chromeos/accessibility/spoken_feedback_browsertest.cc index ef85a8daf378eb..7dc34ef44cd1e1 100644 --- a/chrome/browser/chromeos/accessibility/spoken_feedback_browsertest.cc +++ b/chrome/browser/chromeos/accessibility/spoken_feedback_browsertest.cc @@ -83,9 +83,9 @@ class LoggedInSpokenFeedbackTest : public InProcessBrowserTest { void RunJavaScriptInChromeVoxBackgroundPage(const std::string& script) { extensions::ExtensionHost* host = - extensions::ExtensionSystem::Get(browser()->profile())-> - process_manager()->GetBackgroundHostForExtension( - extension_misc::kChromeVoxExtensionId); + extensions::ProcessManager::Get(browser()->profile()) + ->GetBackgroundHostForExtension( + extension_misc::kChromeVoxExtensionId); CHECK(content::ExecuteScript(host->host_contents(), script)); } diff --git a/chrome/browser/chromeos/extensions/file_manager/event_router.cc b/chrome/browser/chromeos/extensions/file_manager/event_router.cc index 9e0604cc8e26b0..30767619338b3e 100644 --- a/chrome/browser/chromeos/extensions/file_manager/event_router.cc +++ b/chrome/browser/chromeos/extensions/file_manager/event_router.cc @@ -44,7 +44,6 @@ #include "extensions/browser/event_router.h" #include "extensions/browser/extension_host.h" #include "extensions/browser/extension_prefs.h" -#include "extensions/browser/extension_system.h" #include "storage/common/fileapi/file_system_types.h" #include "storage/common/fileapi/file_system_util.h" @@ -271,13 +270,9 @@ std::string FileErrorToErrorName(base::File::Error error_code) { void GrantAccessForAddedProfileToRunningInstance(Profile* added_profile, Profile* running_profile) { - extensions::ProcessManager* const process_manager = - extensions::ExtensionSystem::Get(running_profile)->process_manager(); - if (!process_manager) - return; - extensions::ExtensionHost* const extension_host = - process_manager->GetBackgroundHostForExtension(kFileManagerAppId); + extensions::ProcessManager::Get(running_profile) + ->GetBackgroundHostForExtension(kFileManagerAppId); if (!extension_host || !extension_host->render_process_host()) return; diff --git a/chrome/browser/chromeos/file_manager/file_browser_handlers.cc b/chrome/browser/chromeos/file_manager/file_browser_handlers.cc index 0b40283f05a498..e326fb017d3cab 100644 --- a/chrome/browser/chromeos/file_manager/file_browser_handlers.cc +++ b/chrome/browser/chromeos/file_manager/file_browser_handlers.cc @@ -61,7 +61,7 @@ int ExtractProcessFromExtensionId(Profile* profile, GURL extension_url = Extension::GetBaseURLFromExtensionId(extension_id); extensions::ProcessManager* manager = - extensions::ExtensionSystem::Get(profile)->process_manager(); + extensions::ProcessManager::Get(profile); SiteInstance* site_instance = manager->GetSiteInstanceForURL(extension_url); if (!site_instance || !site_instance->HasProcess()) diff --git a/chrome/browser/chromeos/input_method/input_method_engine_browsertests.cc b/chrome/browser/chromeos/input_method/input_method_engine_browsertests.cc index efdebc5702e201..1e8d23c5700f38 100644 --- a/chrome/browser/chromeos/input_method/input_method_engine_browsertests.cc +++ b/chrome/browser/chromeos/input_method/input_method_engine_browsertests.cc @@ -247,8 +247,7 @@ IN_PROC_BROWSER_TEST_P(InputMethodEngineBrowserTest, ASSERT_TRUE(engine_handler); extensions::ExtensionHost* host = - extensions::ExtensionSystem::Get(profile()) - ->process_manager() + extensions::ProcessManager::Get(profile()) ->GetBackgroundHostForExtension(extension_->id()); ASSERT_TRUE(host); diff --git a/chrome/browser/chromeos/login/signin/oauth2_browsertest.cc b/chrome/browser/chromeos/login/signin/oauth2_browsertest.cc index 5523b0051610fa..ca33dd965a833e 100644 --- a/chrome/browser/chromeos/login/signin/oauth2_browsertest.cc +++ b/chrome/browser/chromeos/login/signin/oauth2_browsertest.cc @@ -660,7 +660,7 @@ class MergeSessionTest : public OAuth2Test { const GURL& GetBackGroundPageUrl(const std::string& extension_id) { extensions::ProcessManager* manager = - extensions::ExtensionSystem::Get(profile())->process_manager(); + extensions::ProcessManager::Get(profile()); extensions::ExtensionHost* host = manager->GetBackgroundHostForExtension(extension_id); return host->host_contents()->GetURL(); @@ -669,7 +669,7 @@ class MergeSessionTest : public OAuth2Test { void JsExpectOnBackgroundPage(const std::string& extension_id, const std::string& expression) { extensions::ProcessManager* manager = - extensions::ExtensionSystem::Get(profile())->process_manager(); + extensions::ProcessManager::Get(profile()); extensions::ExtensionHost* host = manager->GetBackgroundHostForExtension(extension_id); if (host == NULL) { diff --git a/chrome/browser/devtools/devtools_sanity_browsertest.cc b/chrome/browser/devtools/devtools_sanity_browsertest.cc index 79f2ffcd88c5c4..b380ea5ddd38ff 100644 --- a/chrome/browser/devtools/devtools_sanity_browsertest.cc +++ b/chrome/browser/devtools/devtools_sanity_browsertest.cc @@ -351,8 +351,7 @@ class DevToolsExtensionTest : public DevToolsSanityTest, FROM_HERE, timeout.callback(), TestTimeouts::action_timeout()); extensions::ProcessManager* manager = - extensions::ExtensionSystem::Get(browser()->profile())-> - process_manager(); + extensions::ProcessManager::Get(browser()->profile()); extensions::ProcessManager::ViewSet all_views = manager->GetAllViews(); for (extensions::ProcessManager::ViewSet::const_iterator iter = all_views.begin(); diff --git a/chrome/browser/devtools/devtools_target_impl.cc b/chrome/browser/devtools/devtools_target_impl.cc index 6ccc73d99fc2d7..23c94112b623b8 100644 --- a/chrome/browser/devtools/devtools_target_impl.cc +++ b/chrome/browser/devtools/devtools_target_impl.cc @@ -20,7 +20,6 @@ #include "content/public/browser/web_contents.h" #include "extensions/browser/extension_host.h" #include "extensions/browser/extension_registry.h" -#include "extensions/browser/extension_system.h" #include "extensions/browser/guest_view/guest_view_base.h" #include "extensions/browser/process_manager.h" #include "extensions/common/constants.h" @@ -107,12 +106,10 @@ WebContentsTarget::WebContentsTarget(WebContents* web_contents, bool is_tab) Profile::FromBrowserContext(web_contents->GetBrowserContext()); if (!profile) return; - extensions::ExtensionSystem* extension_system = - extensions::ExtensionSystem::Get(profile); set_title(extension->name()); extensions::ExtensionHost* extension_host = - extension_system->process_manager()->GetBackgroundHostForExtension( - extension->id()); + extensions::ProcessManager::Get(profile) + ->GetBackgroundHostForExtension(extension->id()); if (extension_host && extension_host->host_contents() == web_contents) { set_type(kTargetTypeBackgroundPage); diff --git a/chrome/browser/extensions/alert_apitest.cc b/chrome/browser/extensions/alert_apitest.cc index dbd7c5569e3f57..2b5787408ac8de 100644 --- a/chrome/browser/extensions/alert_apitest.cc +++ b/chrome/browser/extensions/alert_apitest.cc @@ -10,7 +10,6 @@ #include "components/app_modal_dialogs/app_modal_dialog.h" #include "content/public/browser/render_frame_host.h" #include "extensions/browser/extension_host.h" -#include "extensions/browser/extension_system.h" #include "extensions/browser/process_manager.h" #include "extensions/common/extension.h" @@ -19,8 +18,8 @@ IN_PROC_BROWSER_TEST_F(ExtensionApiTest, AlertBasic) { const extensions::Extension* extension = GetSingleLoadedExtension(); extensions::ExtensionHost* host = - extensions::ExtensionSystem::Get(browser()->profile())-> - process_manager()->GetBackgroundHostForExtension(extension->id()); + extensions::ProcessManager::Get(browser()->profile()) + ->GetBackgroundHostForExtension(extension->id()); ASSERT_TRUE(host); host->host_contents()->GetMainFrame()->ExecuteJavaScript( base::ASCIIToUTF16("alert('This should not crash.');")); diff --git a/chrome/browser/extensions/api/debugger/debugger_api.cc b/chrome/browser/extensions/api/debugger/debugger_api.cc index 4745a24bf55b6d..dfd2ff8b9cbb99 100644 --- a/chrome/browser/extensions/api/debugger/debugger_api.cc +++ b/chrome/browser/extensions/api/debugger/debugger_api.cc @@ -45,7 +45,6 @@ #include "extensions/browser/extension_host.h" #include "extensions/browser/extension_registry.h" #include "extensions/browser/extension_registry_observer.h" -#include "extensions/browser/extension_system.h" #include "extensions/common/constants.h" #include "extensions/common/error_utils.h" #include "extensions/common/extension.h" @@ -516,8 +515,7 @@ bool DebuggerFunction::InitAgentHost() { } } else if (debuggee_.extension_id) { ExtensionHost* extension_host = - ExtensionSystem::Get(GetProfile()) - ->process_manager() + ProcessManager::Get(GetProfile()) ->GetBackgroundHostForExtension(*debuggee_.extension_id); if (extension_host) { if (PermissionsData::IsRestrictedUrl(extension_host->GetURL(), diff --git a/chrome/browser/extensions/api/developer_private/developer_private_api.cc b/chrome/browser/extensions/api/developer_private/developer_private_api.cc index de6e61bc13ce85..1f95298a4f9b71 100644 --- a/chrome/browser/extensions/api/developer_private/developer_private_api.cc +++ b/chrome/browser/extensions/api/developer_private/developer_private_api.cc @@ -563,8 +563,7 @@ ItemInspectViewList DeveloperPrivateGetItemsInfoFunction:: bool extension_is_enabled) { ItemInspectViewList result; // Get the extension process's active views. - ProcessManager* process_manager = - ExtensionSystem::Get(GetProfile())->process_manager(); + ProcessManager* process_manager = ProcessManager::Get(GetProfile()); GetInspectablePagesForExtensionProcess( extension, process_manager->GetRenderViewHostsForExtension(extension->id()), @@ -590,8 +589,8 @@ ItemInspectViewList DeveloperPrivateGetItemsInfoFunction:: // app windows for incognito process. if (service->profile()->HasOffTheRecordProfile() && IncognitoInfo::IsSplitMode(extension)) { - process_manager = ExtensionSystem::Get( - service->profile()->GetOffTheRecordProfile())->process_manager(); + process_manager = + ProcessManager::Get(service->profile()->GetOffTheRecordProfile()); GetInspectablePagesForExtensionProcess( extension, process_manager->GetRenderViewHostsForExtension(extension->id()), diff --git a/chrome/browser/extensions/api/extension_action/browser_action_apitest.cc b/chrome/browser/extensions/api/extension_action/browser_action_apitest.cc index ed52900c87028a..3b034ccc5d13ae 100644 --- a/chrome/browser/extensions/api/extension_action/browser_action_apitest.cc +++ b/chrome/browser/extensions/api/extension_action/browser_action_apitest.cc @@ -9,7 +9,6 @@ #include "chrome/browser/extensions/extension_action_icon_factory.h" #include "chrome/browser/extensions/extension_action_manager.h" #include "chrome/browser/extensions/extension_apitest.h" -#include "chrome/browser/extensions/extension_service.h" #include "chrome/browser/extensions/extension_tab_util.h" #include "chrome/browser/extensions/extension_toolbar_model.h" #include "chrome/browser/extensions/extension_util.h" @@ -26,6 +25,7 @@ #include "extensions/browser/extension_registry.h" #include "extensions/browser/extension_system.h" #include "extensions/browser/notification_types.h" +#include "extensions/browser/process_manager.h" #include "extensions/browser/test_extension_registry_observer.h" #include "extensions/common/feature_switch.h" #include "extensions/test/result_catcher.h" @@ -542,7 +542,7 @@ IN_PROC_BROWSER_TEST_F(BrowserActionApiTest, DISABLED_CloseBackgroundPage) { // There is a background page and a browser action with no badge text. extensions::ProcessManager* manager = - extensions::ExtensionSystem::Get(browser()->profile())->process_manager(); + extensions::ProcessManager::Get(browser()->profile()); ASSERT_TRUE(manager->GetBackgroundHostForExtension(extension->id())); ExtensionAction* action = GetBrowserAction(*extension); ASSERT_EQ("", action->GetBadgeText(ExtensionAction::kDefaultTabId)); diff --git a/chrome/browser/extensions/api/management/management_api_browsertest.cc b/chrome/browser/extensions/api/management/management_api_browsertest.cc index 98fe3aa1cdf2bb..ebf98958dbe22d 100644 --- a/chrome/browser/extensions/api/management/management_api_browsertest.cc +++ b/chrome/browser/extensions/api/management/management_api_browsertest.cc @@ -33,8 +33,8 @@ class ExtensionManagementApiBrowserTest : public ExtensionBrowserTest { protected: bool CrashEnabledExtension(const std::string& extension_id) { ExtensionHost* background_host = - ExtensionSystem::Get(browser()->profile())-> - process_manager()->GetBackgroundHostForExtension(extension_id); + ProcessManager::Get(browser()->profile()) + ->GetBackgroundHostForExtension(extension_id); if (!background_host) return false; content::CrashTab(background_host->host_contents()); diff --git a/chrome/browser/extensions/api/management/management_browsertest.cc b/chrome/browser/extensions/api/management/management_browsertest.cc index 228c98dd97e247..9140b0c941697e 100644 --- a/chrome/browser/extensions/api/management/management_browsertest.cc +++ b/chrome/browser/extensions/api/management/management_browsertest.cc @@ -82,8 +82,7 @@ class ExtensionManagementTest : public ExtensionBrowserTest { // background page is correct. This is to ensure that the processes are in // sync with the Extension. extensions::ProcessManager* manager = - extensions::ExtensionSystem::Get(browser()->profile())-> - process_manager(); + extensions::ProcessManager::Get(browser()->profile()); extensions::ExtensionHost* ext_host = manager->GetBackgroundHostForExtension(extension->id()); EXPECT_TRUE(ext_host); @@ -177,7 +176,7 @@ IN_PROC_BROWSER_TEST_F(ExtensionManagementTest, MAYBE_InstallRequiresConfirm) { // Tests that disabling and re-enabling an extension works. IN_PROC_BROWSER_TEST_F(ExtensionManagementTest, DisableEnable) { extensions::ProcessManager* manager = - extensions::ExtensionSystem::Get(browser()->profile())->process_manager(); + extensions::ProcessManager::Get(browser()->profile()); ExtensionRegistry* registry = ExtensionRegistry::Get(browser()->profile()); const size_t size_before = registry->enabled_extensions().size(); diff --git a/chrome/browser/extensions/api/media_galleries/media_galleries_watch_apitest.cc b/chrome/browser/extensions/api/media_galleries/media_galleries_watch_apitest.cc index 89be45e2391a9f..1d947fe7ee6fad 100644 --- a/chrome/browser/extensions/api/media_galleries/media_galleries_watch_apitest.cc +++ b/chrome/browser/extensions/api/media_galleries/media_galleries_watch_apitest.cc @@ -13,14 +13,13 @@ #include "build/build_config.h" #include "chrome/browser/browser_process.h" #include "chrome/browser/extensions/extension_apitest.h" -#include "chrome/browser/extensions/extension_service.h" #include "chrome/browser/media_galleries/media_file_system_registry.h" #include "chrome/browser/media_galleries/media_galleries_preferences.h" #include "chrome/browser/media_galleries/media_galleries_test_util.h" #include "chrome/common/chrome_paths.h" #include "content/public/browser/render_frame_host.h" #include "content/public/browser/render_view_host.h" -#include "extensions/browser/extension_system.h" +#include "extensions/browser/process_manager.h" #include "extensions/common/extension.h" #include "extensions/common/switches.h" #include "extensions/test/extension_test_message_listener.h" @@ -138,9 +137,7 @@ class MediaGalleriesGalleryWatchApiTest : public ExtensionApiTest { private: void GetBackgroundHostForTestExtension() { ASSERT_TRUE(extension_); - extensions::ExtensionSystem* extension_system = - extensions::ExtensionSystem::Get(browser()->profile()); - background_host_ = extension_system->process_manager() + background_host_ = extensions::ProcessManager::Get(browser()->profile()) ->GetBackgroundHostForExtension(extension_->id()) ->render_view_host(); ASSERT_TRUE(background_host_); diff --git a/chrome/browser/extensions/api/media_galleries_private/media_galleries_watch_apitest.cc b/chrome/browser/extensions/api/media_galleries_private/media_galleries_watch_apitest.cc index e5817e87574ee5..6eb25361b2265b 100644 --- a/chrome/browser/extensions/api/media_galleries_private/media_galleries_watch_apitest.cc +++ b/chrome/browser/extensions/api/media_galleries_private/media_galleries_watch_apitest.cc @@ -13,14 +13,13 @@ #include "build/build_config.h" #include "chrome/browser/browser_process.h" #include "chrome/browser/extensions/extension_apitest.h" -#include "chrome/browser/extensions/extension_service.h" #include "chrome/browser/media_galleries/media_file_system_registry.h" #include "chrome/browser/media_galleries/media_galleries_preferences.h" #include "chrome/browser/media_galleries/media_galleries_test_util.h" #include "chrome/common/chrome_paths.h" #include "content/public/browser/render_frame_host.h" #include "content/public/browser/render_view_host.h" -#include "extensions/browser/extension_system.h" +#include "extensions/browser/process_manager.h" #include "extensions/common/extension.h" #include "extensions/common/switches.h" #include "extensions/test/extension_test_message_listener.h" @@ -134,11 +133,9 @@ class MediaGalleriesPrivateGalleryWatchApiTest : public ExtensionApiTest { private: void GetBackgroundHostForTestExtension() { ASSERT_TRUE(extension_); - extensions::ExtensionSystem* extension_system = - extensions::ExtensionSystem::Get(browser()->profile()); - background_host_ = - extension_system->process_manager()->GetBackgroundHostForExtension( - extension_->id())->render_view_host(); + background_host_ = extensions::ProcessManager::Get(browser()->profile()) + ->GetBackgroundHostForExtension(extension_->id()) + ->render_view_host(); ASSERT_TRUE(background_host_); } diff --git a/chrome/browser/extensions/api/messaging/extension_message_port.cc b/chrome/browser/extensions/api/messaging/extension_message_port.cc index 08ceddf19c63d3..d5d0b1fd9a097b 100644 --- a/chrome/browser/extensions/api/messaging/extension_message_port.cc +++ b/chrome/browser/extensions/api/messaging/extension_message_port.cc @@ -7,7 +7,6 @@ #include "chrome/browser/profiles/profile.h" #include "content/public/browser/render_process_host.h" #include "extensions/browser/extension_host.h" -#include "extensions/browser/extension_system.h" #include "extensions/browser/process_manager.h" #include "extensions/common/extension_messages.h" #include "extensions/common/manifest_handlers/background_info.h" @@ -56,8 +55,7 @@ void ExtensionMessagePort::DispatchOnMessage(const Message& message, void ExtensionMessagePort::IncrementLazyKeepaliveCount() { Profile* profile = Profile::FromBrowserContext(process_->GetBrowserContext()); - extensions::ProcessManager* pm = - ExtensionSystem::Get(profile)->process_manager(); + extensions::ProcessManager* pm = ProcessManager::Get(profile); ExtensionHost* host = pm->GetBackgroundHostForExtension(extension_id_); if (host && BackgroundInfo::HasLazyBackgroundPage(host->extension())) pm->IncrementLazyKeepaliveCount(host->extension()); @@ -70,8 +68,7 @@ void ExtensionMessagePort::IncrementLazyKeepaliveCount() { void ExtensionMessagePort::DecrementLazyKeepaliveCount() { Profile* profile = Profile::FromBrowserContext(process_->GetBrowserContext()); - extensions::ProcessManager* pm = - ExtensionSystem::Get(profile)->process_manager(); + extensions::ProcessManager* pm = ProcessManager::Get(profile); ExtensionHost* host = pm->GetBackgroundHostForExtension(extension_id_); if (host && host == background_host_ptr_) pm->DecrementLazyKeepaliveCount(host->extension()); diff --git a/chrome/browser/extensions/api/messaging/message_service.cc b/chrome/browser/extensions/api/messaging/message_service.cc index fb72711cea3eda..6256bce403ef3c 100644 --- a/chrome/browser/extensions/api/messaging/message_service.cc +++ b/chrome/browser/extensions/api/messaging/message_service.cc @@ -163,7 +163,7 @@ static content::RenderProcessHost* GetExtensionProcess( BrowserContext* context, const std::string& extension_id) { SiteInstance* site_instance = - ExtensionSystem::Get(context)->process_manager()->GetSiteInstanceForURL( + ProcessManager::Get(context)->GetSiteInstanceForURL( Extension::GetBaseURLFromExtensionId(extension_id)); return site_instance->HasProcess() ? site_instance->GetProcess() : NULL; } diff --git a/chrome/browser/extensions/api/system_indicator/system_indicator_apitest.cc b/chrome/browser/extensions/api/system_indicator/system_indicator_apitest.cc index 38d7c39fd79bbe..ed26073011c587 100644 --- a/chrome/browser/extensions/api/system_indicator/system_indicator_apitest.cc +++ b/chrome/browser/extensions/api/system_indicator/system_indicator_apitest.cc @@ -9,7 +9,6 @@ #include "chrome/browser/extensions/extension_apitest.h" #include "chrome/browser/extensions/lazy_background_page_test_util.h" #include "chrome/browser/ui/browser.h" -#include "extensions/browser/extension_system.h" #include "extensions/browser/process_manager.h" #include "extensions/common/extension.h" #include "extensions/test/result_catcher.h" @@ -58,8 +57,7 @@ IN_PROC_BROWSER_TEST_F(SystemIndicatorApiTest, SystemIndicator) { ASSERT_TRUE(extension) << message_; // Lazy Background Page has been shut down. - extensions::ProcessManager* pm = - extensions::ExtensionSystem::Get(profile())->process_manager(); + extensions::ProcessManager* pm = extensions::ProcessManager::Get(profile()); EXPECT_FALSE(pm->GetBackgroundHostForExtension(last_loaded_extension_id())); EXPECT_TRUE(manager->SendClickEventToExtensionForTest(extension->id())); diff --git a/chrome/browser/extensions/api/system_storage/system_storage_eject_apitest.cc b/chrome/browser/extensions/api/system_storage/system_storage_eject_apitest.cc index ff051f59c28835..2164a0581cc064 100644 --- a/chrome/browser/extensions/api/system_storage/system_storage_eject_apitest.cc +++ b/chrome/browser/extensions/api/system_storage/system_storage_eject_apitest.cc @@ -16,7 +16,6 @@ #include "content/public/browser/render_view_host.h" #include "content/public/test/test_utils.h" #include "extensions/browser/api/system_storage/storage_info_provider.h" -#include "extensions/browser/extension_system.h" #include "extensions/browser/process_manager.h" #include "extensions/common/extension.h" #include "extensions/test/extension_test_message_listener.h" @@ -44,9 +43,9 @@ class SystemStorageEjectApiTest : public ExtensionApiTest { content::RenderViewHost* GetHost() { const extensions::Extension* extension = LoadExtension(test_data_dir_.AppendASCII("system/storage_eject")); - return extensions::ExtensionSystem::Get(browser()->profile())-> - process_manager()->GetBackgroundHostForExtension(extension->id())-> - render_view_host(); + return extensions::ProcessManager::Get(browser()->profile()) + ->GetBackgroundHostForExtension(extension->id()) + ->render_view_host(); } void ExecuteCmdAndCheckReply(content::RenderViewHost* host, diff --git a/chrome/browser/extensions/app_background_page_apitest.cc b/chrome/browser/extensions/app_background_page_apitest.cc index 20beade69dd010..fc1ea8b31c108b 100644 --- a/chrome/browser/extensions/app_background_page_apitest.cc +++ b/chrome/browser/extensions/app_background_page_apitest.cc @@ -614,7 +614,7 @@ IN_PROC_BROWSER_TEST_F(AppBackgroundPageNaClTest, ExtensionTestMessageListener nacl_modules_loaded("nacl_modules_loaded", true); LaunchTestingApp(); extensions::ProcessManager* manager = - extensions::ExtensionSystem::Get(browser()->profile())->process_manager(); + extensions::ProcessManager::Get(browser()->profile()); ImpulseCallbackCounter active_impulse_counter(manager, extension()->id()); EXPECT_TRUE(nacl_modules_loaded.WaitUntilSatisfied()); @@ -640,7 +640,7 @@ IN_PROC_BROWSER_TEST_F(AppBackgroundPageNaClTest, ExtensionTestMessageListener nacl_modules_loaded("nacl_modules_loaded", true); LaunchTestingApp(); extensions::ProcessManager* manager = - extensions::ExtensionSystem::Get(browser()->profile())->process_manager(); + extensions::ProcessManager::Get(browser()->profile()); ImpulseCallbackCounter idle_impulse_counter(manager, extension()->id()); EXPECT_TRUE(nacl_modules_loaded.WaitUntilSatisfied()); diff --git a/chrome/browser/extensions/browsertest_util.cc b/chrome/browser/extensions/browsertest_util.cc index 21185f8192bdc4..ceed312d076b3c 100644 --- a/chrome/browser/extensions/browsertest_util.cc +++ b/chrome/browser/extensions/browsertest_util.cc @@ -7,7 +7,6 @@ #include "chrome/browser/profiles/profile.h" #include "content/public/test/browser_test_utils.h" #include "extensions/browser/extension_host.h" -#include "extensions/browser/extension_system.h" #include "extensions/browser/process_manager.h" #include "testing/gtest/include/gtest/gtest.h" @@ -18,7 +17,7 @@ std::string ExecuteScriptInBackgroundPage(Profile* profile, const std::string& extension_id, const std::string& script) { extensions::ProcessManager* manager = - extensions::ExtensionSystem::Get(profile)->process_manager(); + extensions::ProcessManager::Get(profile); extensions::ExtensionHost* host = manager->GetBackgroundHostForExtension(extension_id); if (host == NULL) { @@ -38,7 +37,7 @@ bool ExecuteScriptInBackgroundPageNoWait(Profile* profile, const std::string& extension_id, const std::string& script) { extensions::ProcessManager* manager = - extensions::ExtensionSystem::Get(profile)->process_manager(); + extensions::ProcessManager::Get(profile); extensions::ExtensionHost* host = manager->GetBackgroundHostForExtension(extension_id); if (host == NULL) { diff --git a/chrome/browser/extensions/chrome_content_browser_client_extensions_part.cc b/chrome/browser/extensions/chrome_content_browser_client_extensions_part.cc index 4c5fb2187e73fd..a807334effed95 100644 --- a/chrome/browser/extensions/chrome_content_browser_client_extensions_part.cc +++ b/chrome/browser/extensions/chrome_content_browser_client_extensions_part.cc @@ -260,7 +260,7 @@ ChromeContentBrowserClientExtensionsPart::ShouldTryToUseExistingProcessHost( std::vector profiles = g_browser_process->profile_manager()-> GetLoadedProfiles(); for (size_t i = 0; i < profiles.size(); ++i) { - ProcessManager* epm = ExtensionSystem::Get(profiles[i])->process_manager(); + ProcessManager* epm = ProcessManager::Get(profiles[i]); for (ProcessManager::const_iterator iter = epm->background_hosts().begin(); iter != epm->background_hosts().end(); ++iter) { const ExtensionHost* host = *iter; diff --git a/chrome/browser/extensions/chrome_process_manager_delegate.cc b/chrome/browser/extensions/chrome_process_manager_delegate.cc index 2ec92302560030..a155b77b81192f 100644 --- a/chrome/browser/extensions/chrome_process_manager_delegate.cc +++ b/chrome/browser/extensions/chrome_process_manager_delegate.cc @@ -16,6 +16,7 @@ #include "content/public/browser/notification_service.h" #include "extensions/browser/extension_system.h" #include "extensions/browser/process_manager.h" +#include "extensions/browser/process_manager_factory.h" #include "extensions/common/one_shot_event.h" namespace extensions { @@ -102,9 +103,8 @@ void ChromeProcessManagerDelegate::OnBrowserWindowReady(Browser* browser) { // Inform the process manager for this profile that the window is ready. // We continue to observe the notification in case browser windows open for // a related incognito profile or other regular profiles. - ProcessManager* manager = system->process_manager(); - if (!manager) // Tests may not have a process manager. - return; + ProcessManager* manager = ProcessManager::Get(profile); + DCHECK(manager); DCHECK_EQ(profile, manager->GetBrowserContext()); manager->MaybeCreateStartupBackgroundHosts(); @@ -114,8 +114,7 @@ void ChromeProcessManagerDelegate::OnBrowserWindowReady(Browser* browser) { // non-incognito window opened. if (profile->IsOffTheRecord()) { Profile* original_profile = profile->GetOriginalProfile(); - ProcessManager* original_manager = - ExtensionSystem::Get(original_profile)->process_manager(); + ProcessManager* original_manager = ProcessManager::Get(original_profile); DCHECK(original_manager); DCHECK_EQ(original_profile, original_manager->GetBrowserContext()); original_manager->MaybeCreateStartupBackgroundHosts(); @@ -128,14 +127,13 @@ void ChromeProcessManagerDelegate::OnProfileCreated(Profile* profile) { return; // The profile can be created before the extension system is ready. - ProcessManager* manager = ExtensionSystem::Get(profile)->process_manager(); - if (!manager) + if (!ExtensionSystem::Get(profile)->ready().is_signaled()) return; // The profile might have been initialized asynchronously (in parallel with // extension system startup). Now that initialization is complete the // ProcessManager can load deferred background pages. - manager->MaybeCreateStartupBackgroundHosts(); + ProcessManager::Get(profile)->MaybeCreateStartupBackgroundHosts(); } void ChromeProcessManagerDelegate::OnProfileDestroyed(Profile* profile) { @@ -143,19 +141,22 @@ void ChromeProcessManagerDelegate::OnProfileDestroyed(Profile* profile) { // have time to shutdown various objects on different threads. The // ProfileManager destructor is called too late in the shutdown sequence. // http://crbug.com/15708 - ProcessManager* manager = ExtensionSystem::Get(profile)->process_manager(); - if (manager) + ProcessManager* manager = + ProcessManagerFactory::GetForBrowserContextIfExists(profile); + if (manager) { manager->CloseBackgroundHosts(); + } // If this profile owns an incognito profile, but it is destroyed before the // incognito profile is destroyed, then close the incognito background hosts // as well. This happens in a few tests. http://crbug.com/138843 if (!profile->IsOffTheRecord() && profile->HasOffTheRecordProfile()) { ProcessManager* incognito_manager = - ExtensionSystem::Get(profile->GetOffTheRecordProfile()) - ->process_manager(); - if (incognito_manager) + ProcessManagerFactory::GetForBrowserContextIfExists( + profile->GetOffTheRecordProfile()); + if (incognito_manager) { incognito_manager->CloseBackgroundHosts(); + } } } diff --git a/chrome/browser/extensions/devtools_util.cc b/chrome/browser/extensions/devtools_util.cc index 28e47906ca3523..8f75ac74c20ba0 100644 --- a/chrome/browser/extensions/devtools_util.cc +++ b/chrome/browser/extensions/devtools_util.cc @@ -28,8 +28,8 @@ void InspectExtensionHost(ExtensionHost* host) { void InspectBackgroundPage(const Extension* extension, Profile* profile) { DCHECK(extension); ExtensionSystem* system = ExtensionSystem::Get(profile); - ExtensionHost* host = - system->process_manager()->GetBackgroundHostForExtension(extension->id()); + ExtensionHost* host = ProcessManager::Get(profile) + ->GetBackgroundHostForExtension(extension->id()); if (host) { InspectExtensionHost(host); } else { diff --git a/chrome/browser/extensions/extension_bindings_apitest.cc b/chrome/browser/extensions/extension_bindings_apitest.cc index 5f1bb82c7dab86..b84e6b9073cdcb 100644 --- a/chrome/browser/extensions/extension_bindings_apitest.cc +++ b/chrome/browser/extensions/extension_bindings_apitest.cc @@ -10,7 +10,6 @@ #include "chrome/test/base/ui_test_utils.h" #include "content/public/test/browser_test_utils.h" #include "extensions/browser/extension_host.h" -#include "extensions/browser/extension_system.h" #include "extensions/browser/process_manager.h" #include "extensions/test/extension_test_message_listener.h" #include "extensions/test/result_catcher.h" @@ -44,7 +43,7 @@ IN_PROC_BROWSER_TEST_F(ExtensionBrowserTest, LastError) { // Get the ExtensionHost that is hosting our background page. extensions::ProcessManager* manager = - extensions::ExtensionSystem::Get(browser()->profile())->process_manager(); + extensions::ProcessManager::Get(browser()->profile()); extensions::ExtensionHost* host = FindHostWithPath(manager, "/bg.html", 1); bool result = false; diff --git a/chrome/browser/extensions/extension_crash_recovery_browsertest.cc b/chrome/browser/extensions/extension_crash_recovery_browsertest.cc index 6d790c7c6f3aaa..072aa4d14f9265 100644 --- a/chrome/browser/extensions/extension_crash_recovery_browsertest.cc +++ b/chrome/browser/extensions/extension_crash_recovery_browsertest.cc @@ -53,8 +53,7 @@ class ExtensionCrashRecoveryTestBase : public ExtensionBrowserTest { } extensions::ProcessManager* GetProcessManager() { - return extensions::ExtensionSystem::Get(browser()->profile())-> - process_manager(); + return extensions::ProcessManager::Get(browser()->profile()); } ExtensionRegistry* GetExtensionRegistry() { diff --git a/chrome/browser/extensions/extension_service.cc b/chrome/browser/extensions/extension_service.cc index 8223ed1fc13f6e..7636dfe7101bd3 100644 --- a/chrome/browser/extensions/extension_service.cc +++ b/chrome/browser/extensions/extension_service.cc @@ -598,7 +598,8 @@ void ExtensionService::ReloadExtensionImpl( // the inspector and hang onto a cookie for it, so that we can reattach // later. // TODO(yoz): this is not incognito-safe! - extensions::ProcessManager* manager = system_->process_manager(); + extensions::ProcessManager* manager = + extensions::ProcessManager::Get(profile_); extensions::ExtensionHost* host = manager->GetBackgroundHostForExtension(extension_id); if (host && DevToolsAgentHost::HasFor(host->host_contents())) { diff --git a/chrome/browser/extensions/extension_service_test_base.cc b/chrome/browser/extensions/extension_service_test_base.cc index 365e3774bc30c1..9cc4b6ce0f57b7 100644 --- a/chrome/browser/extensions/extension_service_test_base.cc +++ b/chrome/browser/extensions/extension_service_test_base.cc @@ -170,11 +170,6 @@ void ExtensionServiceTestBase::InitializeExtensionServiceWithUpdater() { service_->updater()->Start(); } -void ExtensionServiceTestBase::InitializeProcessManager() { - static_cast( - ExtensionSystem::Get(profile_.get()))->CreateProcessManager(); -} - void ExtensionServiceTestBase::SetUp() { ExtensionErrorReporter::GetInstance()->ClearErrors(); } diff --git a/chrome/browser/extensions/extension_service_test_base.h b/chrome/browser/extensions/extension_service_test_base.h index bd24766eda397c..8e5cb7a0ae7cee 100644 --- a/chrome/browser/extensions/extension_service_test_base.h +++ b/chrome/browser/extensions/extension_service_test_base.h @@ -85,9 +85,6 @@ class ExtensionServiceTestBase : public testing::Test { // Initialize an ExtensionService with autoupdate enabled. void InitializeExtensionServiceWithUpdater(); - // Initialize the associated ProcessManager. - void InitializeProcessManager(); - // TODO(rdevlin.cronin): Pull out more methods from ExtensionServiceTest that // are commonly used and/or reimplemented. For instance, methods to install // extensions from various locations, etc. diff --git a/chrome/browser/extensions/extension_service_unittest.cc b/chrome/browser/extensions/extension_service_unittest.cc index 3e8614e81a004e..ebf029645edce1 100644 --- a/chrome/browser/extensions/extension_service_unittest.cc +++ b/chrome/browser/extensions/extension_service_unittest.cc @@ -2819,7 +2819,6 @@ TEST_F(ExtensionServiceTest, LoadExtensionsWithPlugins) { InitPluginService(); InitializeEmptyExtensionService(); - InitializeProcessManager(); service()->set_show_extensions_prompts(true); // Start by canceling any install prompts. @@ -4070,7 +4069,6 @@ TEST_F(ExtensionServiceTest, ReloadExtensions) { // Tests reloading an extension. TEST_F(ExtensionServiceTest, ReloadExtension) { InitializeEmptyExtensionService(); - InitializeProcessManager(); // Simple extension that should install without error. const char* extension_id = "behllobkkfkfnphdnhnkndlbkcpglgmj"; @@ -5558,7 +5556,6 @@ TEST_F(ExtensionServiceTest, GetSyncDataFilter) { TEST_F(ExtensionServiceTest, GetSyncExtensionDataUserSettings) { InitializeEmptyExtensionService(); - InitializeProcessManager(); InitializeExtensionSyncService(); InstallCRX(data_dir().AppendASCII("good.crx"), INSTALL_NEW); const Extension* extension = service()->GetInstalledExtension(good_crx); @@ -5880,7 +5877,6 @@ TEST_F(ExtensionServiceTest, ProcessSyncDataWrongType) { TEST_F(ExtensionServiceTest, ProcessSyncDataSettings) { InitializeEmptyExtensionService(); - InitializeProcessManager(); InitializeExtensionSyncService(); syncer::FakeSyncChangeProcessor processor; extension_sync_service()->MergeDataAndStartSyncing( diff --git a/chrome/browser/extensions/extension_system_factory.cc b/chrome/browser/extensions/extension_system_factory.cc index 503b37a5262737..4495d7e9e83a88 100644 --- a/chrome/browser/extensions/extension_system_factory.cc +++ b/chrome/browser/extensions/extension_system_factory.cc @@ -13,6 +13,7 @@ #include "extensions/browser/extension_registry_factory.h" #include "extensions/browser/extension_system.h" #include "extensions/browser/extensions_browser_client.h" +#include "extensions/browser/process_manager_factory.h" #include "extensions/browser/renderer_startup_helper.h" namespace extensions { @@ -42,6 +43,7 @@ ExtensionSystemSharedFactory::ExtensionSystemSharedFactory() DependsOn(ExtensionRegistryFactory::GetInstance()); DependsOn(GlobalErrorServiceFactory::GetInstance()); DependsOn(policy::ProfilePolicyConnectorFactory::GetInstance()); + DependsOn(ProcessManagerFactory::GetInstance()); DependsOn(RendererStartupHelperFactory::GetInstance()); } diff --git a/chrome/browser/extensions/extension_system_impl.cc b/chrome/browser/extensions/extension_system_impl.cc index 6e08e4b046465b..11d69fec600d79 100644 --- a/chrome/browser/extensions/extension_system_impl.cc +++ b/chrome/browser/extensions/extension_system_impl.cc @@ -52,7 +52,6 @@ #include "extensions/browser/info_map.h" #include "extensions/browser/lazy_background_task_queue.h" #include "extensions/browser/management_policy.h" -#include "extensions/browser/process_manager.h" #include "extensions/browser/quota_service.h" #include "extensions/browser/runtime_data.h" #include "extensions/browser/state_store.h" @@ -515,9 +514,7 @@ ExtensionSystemImpl::ExtensionSystemImpl(Profile* profile) : profile_(profile) { shared_ = ExtensionSystemSharedFactory::GetForBrowserContext(profile); - if (profile->IsOffTheRecord()) { - process_manager_.reset(ProcessManager::Create(profile)); - } else { + if (!profile->IsOffTheRecord()) { shared_->InitPrefs(); } } @@ -526,7 +523,6 @@ ExtensionSystemImpl::~ExtensionSystemImpl() { } void ExtensionSystemImpl::Shutdown() { - process_manager_.reset(); } void ExtensionSystemImpl::InitForRegularProfile(bool extensions_enabled) { @@ -536,9 +532,6 @@ void ExtensionSystemImpl::InitForRegularProfile(bool extensions_enabled) { // The InfoMap needs to be created before the ProcessManager. shared_->info_map(); - - process_manager_.reset(ProcessManager::Create(profile_)); - shared_->Init(extensions_enabled); } @@ -558,10 +551,6 @@ SharedUserScriptMaster* ExtensionSystemImpl::shared_user_script_master() { return shared_->shared_user_script_master(); } -ProcessManager* ExtensionSystemImpl::process_manager() { - return process_manager_.get(); -} - StateStore* ExtensionSystemImpl::state_store() { return shared_->state_store(); } diff --git a/chrome/browser/extensions/extension_system_impl.h b/chrome/browser/extensions/extension_system_impl.h index b076464efda33e..9961fceb5fce12 100644 --- a/chrome/browser/extensions/extension_system_impl.h +++ b/chrome/browser/extensions/extension_system_impl.h @@ -41,7 +41,6 @@ class ExtensionSystemImpl : public ExtensionSystem { ManagementPolicy* management_policy() override; // shared // shared SharedUserScriptMaster* shared_user_script_master() override; - ProcessManager* process_manager() override; StateStore* state_store() override; // shared StateStore* rules_store() override; // shared LazyBackgroundTaskQueue* lazy_background_task_queue() override; // shared @@ -156,12 +155,6 @@ class ExtensionSystemImpl : public ExtensionSystem { Shared* shared_; - // |process_manager_| must be destroyed before the Profile's |io_data_|. While - // |process_manager_| still lives, we handle incoming resource requests from - // extension processes and those require access to the ResourceContext owned - // by |io_data_|. - scoped_ptr process_manager_; - DISALLOW_COPY_AND_ASSIGN(ExtensionSystemImpl); }; diff --git a/chrome/browser/extensions/extension_test_notification_observer.cc b/chrome/browser/extensions/extension_test_notification_observer.cc index f79168e15504a9..32d30d3043e9e0 100644 --- a/chrome/browser/extensions/extension_test_notification_observer.cc +++ b/chrome/browser/extensions/extension_test_notification_observer.cc @@ -139,7 +139,7 @@ bool ExtensionTestNotificationObserver::WaitForPageActionVisibilityChangeTo( bool ExtensionTestNotificationObserver::WaitForExtensionViewsToLoad() { extensions::ProcessManager* manager = - extensions::ExtensionSystem::Get(GetProfile())->process_manager(); + extensions::ProcessManager::Get(GetProfile()); NotificationSet notification_set; notification_set.Add(content::NOTIFICATION_WEB_CONTENTS_DESTROYED); notification_set.Add(content::NOTIFICATION_LOAD_STOP); diff --git a/chrome/browser/extensions/extension_util.cc b/chrome/browser/extensions/extension_util.cc index e02b658a9a4387..6e33a9a9170367 100644 --- a/chrome/browser/extensions/extension_util.cc +++ b/chrome/browser/extensions/extension_util.cc @@ -255,10 +255,6 @@ bool ShouldSyncApp(const Extension* app, content::BrowserContext* context) { bool IsExtensionIdle(const std::string& extension_id, content::BrowserContext* context) { - ProcessManager* process_manager = - ExtensionSystem::Get(context)->process_manager(); - DCHECK(process_manager); - std::vector ids_to_check; ids_to_check.push_back(extension_id); @@ -280,6 +276,7 @@ bool IsExtensionIdle(const std::string& extension_id, } } + ProcessManager* process_manager = ProcessManager::Get(context); for (std::vector::const_iterator i = ids_to_check.begin(); i != ids_to_check.end(); i++) { diff --git a/chrome/browser/extensions/extension_view_host_factory.cc b/chrome/browser/extensions/extension_view_host_factory.cc index 2b926446a645e0..db04a289c13d96 100644 --- a/chrome/browser/extensions/extension_view_host_factory.cc +++ b/chrome/browser/extensions/extension_view_host_factory.cc @@ -34,9 +34,8 @@ ExtensionViewHost* CreateViewHostForExtension(const Extension* extension, DCHECK(profile); // A NULL browser may only be given for dialogs. DCHECK(browser || view_type == VIEW_TYPE_EXTENSION_DIALOG); - ProcessManager* pm = - ExtensionSystem::Get(profile)->process_manager(); - content::SiteInstance* site_instance = pm->GetSiteInstanceForURL(url); + content::SiteInstance* site_instance = + ProcessManager::Get(profile)->GetSiteInstanceForURL(url); ExtensionViewHost* host = #if defined(OS_MACOSX) new ExtensionViewHostMac(extension, site_instance, url, view_type); diff --git a/chrome/browser/extensions/gpu_browsertest.cc b/chrome/browser/extensions/gpu_browsertest.cc index cc4a5af928951b..44bc1fd98a2d97 100644 --- a/chrome/browser/extensions/gpu_browsertest.cc +++ b/chrome/browser/extensions/gpu_browsertest.cc @@ -7,7 +7,6 @@ #include "content/public/browser/render_view_host.h" #include "content/public/common/web_preferences.h" #include "extensions/browser/extension_host.h" -#include "extensions/browser/extension_system.h" #include "extensions/browser/process_manager.h" // Tests that background pages are marked as never visible to prevent GPU @@ -19,7 +18,7 @@ IN_PROC_BROWSER_TEST_F(ExtensionBrowserTest, BackgroundPageIsNeverVisible) { .AppendASCII("1.0.0.0"))); extensions::ProcessManager* manager = - extensions::ExtensionSystem::Get(browser()->profile())->process_manager(); + extensions::ProcessManager::Get(browser()->profile()); extensions::ExtensionHost* host = FindHostWithPath(manager, "/backgroundpage.html", 1); ASSERT_TRUE(host->host_contents()->GetDelegate()->IsNeverVisible( diff --git a/chrome/browser/extensions/lazy_background_page_apitest.cc b/chrome/browser/extensions/lazy_background_page_apitest.cc index 509db41f34b21e..5abc7562673c25 100644 --- a/chrome/browser/extensions/lazy_background_page_apitest.cc +++ b/chrome/browser/extensions/lazy_background_page_apitest.cc @@ -8,7 +8,6 @@ #include "chrome/browser/bookmarks/bookmark_model_factory.h" #include "chrome/browser/extensions/browser_action_test_util.h" #include "chrome/browser/extensions/extension_apitest.h" -#include "chrome/browser/extensions/extension_service.h" #include "chrome/browser/extensions/lazy_background_page_test_util.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/browser.h" @@ -26,7 +25,6 @@ #include "extensions/browser/extension_host.h" #include "extensions/browser/extension_registry.h" #include "extensions/browser/extension_registry_observer.h" -#include "extensions/browser/extension_system.h" #include "extensions/browser/process_manager.h" #include "extensions/common/extension.h" #include "extensions/test/extension_test_message_listener.h" @@ -107,8 +105,8 @@ class LazyBackgroundPageApiTest : public ExtensionApiTest { // Returns true if the lazy background page for the extension with // |extension_id| is still running. bool IsBackgroundPageAlive(const std::string& extension_id) { - extensions::ProcessManager* pm = extensions::ExtensionSystem::Get( - browser()->profile())->process_manager(); + extensions::ProcessManager* pm = + extensions::ProcessManager::Get(browser()->profile()); return pm->GetBackgroundHostForExtension(extension_id); } @@ -226,7 +224,7 @@ IN_PROC_BROWSER_TEST_F(LazyBackgroundPageApiTest, WaitForDialog) { // Close the dialog. The keep alive count is decremented. extensions::ProcessManager* pm = - extensions::ExtensionSystem::Get(browser()->profile())->process_manager(); + extensions::ProcessManager::Get(browser()->profile()); int previous_keep_alive_count = pm->GetLazyKeepaliveCount(extension); dialog->CloseModalDialog(); EXPECT_EQ(previous_keep_alive_count - 1, @@ -282,7 +280,7 @@ IN_PROC_BROWSER_TEST_F(LazyBackgroundPageApiTest, WaitForRequest) { // Lazy Background Page still exists, because the extension started a request. extensions::ProcessManager* pm = - extensions::ExtensionSystem::Get(browser()->profile())->process_manager(); + extensions::ProcessManager::Get(browser()->profile()); extensions::ExtensionHost* host = pm->GetBackgroundHostForExtension(last_loaded_extension_id()); ASSERT_TRUE(host); @@ -350,10 +348,9 @@ IN_PROC_BROWSER_TEST_F(LazyBackgroundPageApiTest, DISABLED_IncognitoSplitMode) { // Lazy Background Page doesn't exist yet. extensions::ProcessManager* pm = - extensions::ExtensionSystem::Get(browser()->profile())->process_manager(); + extensions::ProcessManager::Get(browser()->profile()); extensions::ProcessManager* pmi = - extensions::ExtensionSystem::Get(incognito_browser->profile())-> - process_manager(); + extensions::ProcessManager::Get(incognito_browser->profile()); EXPECT_FALSE(pm->GetBackgroundHostForExtension(last_loaded_extension_id())); EXPECT_FALSE(pmi->GetBackgroundHostForExtension(last_loaded_extension_id())); @@ -440,7 +437,7 @@ IN_PROC_BROWSER_TEST_F(LazyBackgroundPageApiTest, ImpulseAddsCount) { // Lazy Background Page doesn't exist yet. extensions::ProcessManager* pm = - extensions::ExtensionSystem::Get(browser()->profile())->process_manager(); + extensions::ProcessManager::Get(browser()->profile()); EXPECT_FALSE(pm->GetBackgroundHostForExtension(last_loaded_extension_id())); EXPECT_EQ(1, browser()->tab_strip_model()->count()); diff --git a/chrome/browser/extensions/notifications_apitest.cc b/chrome/browser/extensions/notifications_apitest.cc index f846f8d30b1519..b375141fc3c815 100644 --- a/chrome/browser/extensions/notifications_apitest.cc +++ b/chrome/browser/extensions/notifications_apitest.cc @@ -56,7 +56,6 @@ IN_PROC_BROWSER_TEST_F(NotificationIdleTest, MAYBE_NotificationsAllowUnload) { ASSERT_TRUE(extension) << message_; // Lazy Background Page has been shut down. - extensions::ProcessManager* pm = - extensions::ExtensionSystem::Get(profile())->process_manager(); + extensions::ProcessManager* pm = extensions::ProcessManager::Get(profile()); EXPECT_FALSE(pm->GetBackgroundHostForExtension(last_loaded_extension_id())); } diff --git a/chrome/browser/extensions/permission_messages_unittest.cc b/chrome/browser/extensions/permission_messages_unittest.cc index 71aae769cc431b..f78ebd5ee42452 100644 --- a/chrome/browser/extensions/permission_messages_unittest.cc +++ b/chrome/browser/extensions/permission_messages_unittest.cc @@ -45,7 +45,6 @@ class PermissionMessagesUnittest : public ExtensionServiceTestBase { virtual void SetUp() override { ExtensionServiceTestBase::SetUp(); InitializeExtensionService(CreateDefaultInitParams()); - InitializeProcessManager(); } protected: diff --git a/chrome/browser/extensions/process_management_browsertest.cc b/chrome/browser/extensions/process_management_browsertest.cc index 416ff86ff0cb9e..16f4aaba7ce087 100644 --- a/chrome/browser/extensions/process_management_browsertest.cc +++ b/chrome/browser/extensions/process_management_browsertest.cc @@ -16,7 +16,6 @@ #include "content/public/browser/site_instance.h" #include "content/public/browser/web_contents.h" #include "extensions/browser/extension_host.h" -#include "extensions/browser/extension_system.h" #include "extensions/browser/process_manager.h" #include "extensions/common/switches.h" #include "net/dns/mock_host_resolver.h" @@ -141,8 +140,7 @@ IN_PROC_BROWSER_TEST_F(ProcessManagementTest, MAYBE_ProcessOverflow) { // Get extension processes. extensions::ProcessManager* process_manager = - extensions::ExtensionSystem::Get(browser()->profile())-> - process_manager(); + extensions::ProcessManager::Get(browser()->profile()); content::RenderProcessHost* extension1_host = process_manager->GetSiteInstanceForURL(extension1_url)->GetProcess(); content::RenderProcessHost* extension2_host = @@ -232,8 +230,7 @@ IN_PROC_BROWSER_TEST_F(ProcessManagementTest, MAYBE_ExtensionProcessBalancing) { std::set process_ids; Profile* profile = browser()->profile(); - extensions::ProcessManager* epm = extensions::ExtensionSystem::Get(profile)-> - process_manager(); + extensions::ProcessManager* epm = extensions::ProcessManager::Get(profile); for (extensions::ProcessManager::const_iterator iter = epm->background_hosts().begin(); iter != epm->background_hosts().end(); ++iter) { diff --git a/chrome/browser/extensions/process_manager_browsertest.cc b/chrome/browser/extensions/process_manager_browsertest.cc index 239596611a1e46..9f2495bd89df94 100644 --- a/chrome/browser/extensions/process_manager_browsertest.cc +++ b/chrome/browser/extensions/process_manager_browsertest.cc @@ -13,7 +13,6 @@ #include "content/public/browser/notification_service.h" #include "content/public/browser/web_contents.h" #include "content/public/test/test_utils.h" -#include "extensions/browser/extension_system.h" #include "net/dns/mock_host_resolver.h" #include "net/test/embedded_test_server/embedded_test_server.h" @@ -27,7 +26,7 @@ typedef ExtensionBrowserTest ProcessManagerBrowserTest; // and background pages. IN_PROC_BROWSER_TEST_F(ProcessManagerBrowserTest, ExtensionHostCreation) { - ProcessManager* pm = ExtensionSystem::Get(profile())->process_manager(); + ProcessManager* pm = ProcessManager::Get(profile()); // We start with no background hosts. ASSERT_EQ(0u, pm->background_hosts().size()); @@ -68,7 +67,7 @@ IN_PROC_BROWSER_TEST_F(ProcessManagerBrowserTest, // Disabled due to flake, see http://crbug.com/315242 IN_PROC_BROWSER_TEST_F(ProcessManagerBrowserTest, DISABLED_PopupHostCreation) { - ProcessManager* pm = ExtensionSystem::Get(profile())->process_manager(); + ProcessManager* pm = ProcessManager::Get(profile()); // Load an extension with the ability to open a popup but no background // page. @@ -111,7 +110,7 @@ IN_PROC_BROWSER_TEST_F(ProcessManagerBrowserTest, // interact with an installed extension with that ID. Regression test // for bug 357382. IN_PROC_BROWSER_TEST_F(ProcessManagerBrowserTest, HttpHostMatchingExtensionId) { - ProcessManager* pm = ExtensionSystem::Get(profile())->process_manager(); + ProcessManager* pm = ProcessManager::Get(profile()); // We start with no background hosts. ASSERT_EQ(0u, pm->background_hosts().size()); diff --git a/chrome/browser/extensions/test_extension_system.cc b/chrome/browser/extensions/test_extension_system.cc index 03ed910012bd03..0f513e4bfc0cba 100644 --- a/chrome/browser/extensions/test_extension_system.cc +++ b/chrome/browser/extensions/test_extension_system.cc @@ -26,7 +26,6 @@ #include "extensions/browser/extensions_browser_client.h" #include "extensions/browser/info_map.h" #include "extensions/browser/management_policy.h" -#include "extensions/browser/process_manager.h" #include "extensions/browser/quota_service.h" #include "extensions/browser/runtime_data.h" #include "extensions/browser/state_store.h" @@ -49,15 +48,6 @@ TestExtensionSystem::~TestExtensionSystem() { void TestExtensionSystem::Shutdown() { if (extension_service_) extension_service_->Shutdown(); - process_manager_.reset(); -} - -void TestExtensionSystem::CreateProcessManager() { - process_manager_.reset(ProcessManager::Create(profile_)); -} - -void TestExtensionSystem::SetProcessManager(ProcessManager* manager) { - process_manager_.reset(manager); } ExtensionPrefs* TestExtensionSystem::CreateExtensionPrefs( @@ -135,10 +125,6 @@ SharedUserScriptMaster* TestExtensionSystem::shared_user_script_master() { return NULL; } -ProcessManager* TestExtensionSystem::process_manager() { - return process_manager_.get(); -} - StateStore* TestExtensionSystem::state_store() { return state_store_.get(); } diff --git a/chrome/browser/extensions/test_extension_system.h b/chrome/browser/extensions/test_extension_system.h index 6ff0da8a8f4f9d..81d0370d663a75 100644 --- a/chrome/browser/extensions/test_extension_system.h +++ b/chrome/browser/extensions/test_extension_system.h @@ -51,13 +51,6 @@ class TestExtensionSystem : public ExtensionSystem { const base::FilePath& install_directory, bool autoupdate_enabled); - // Creates a ProcessManager. If not invoked, the ProcessManager is NULL. - void CreateProcessManager(); - - // Allows the ProcessManager to be overriden, for example by a stub - // implementation. Takes ownership of |manager|. - void SetProcessManager(ProcessManager* manager); - void CreateSocketManager(); void InitForRegularProfile(bool extensions_enabled) override {} @@ -66,7 +59,6 @@ class TestExtensionSystem : public ExtensionSystem { RuntimeData* runtime_data() override; ManagementPolicy* management_policy() override; SharedUserScriptMaster* shared_user_script_master() override; - ProcessManager* process_manager() override; StateStore* state_store() override; StateStore* rules_store() override; TestingValueStore* value_store() { return value_store_; } @@ -105,7 +97,6 @@ class TestExtensionSystem : public ExtensionSystem { scoped_ptr management_policy_; scoped_ptr runtime_data_; scoped_ptr extension_service_; - scoped_ptr process_manager_; scoped_refptr info_map_; scoped_ptr event_router_; scoped_ptr error_console_; diff --git a/chrome/browser/extensions/window_open_apitest.cc b/chrome/browser/extensions/window_open_apitest.cc index d0a0c0c66ade7e..a626e16e30a44d 100644 --- a/chrome/browser/extensions/window_open_apitest.cc +++ b/chrome/browser/extensions/window_open_apitest.cc @@ -23,7 +23,6 @@ #include "content/public/common/url_constants.h" #include "content/public/test/browser_test_utils.h" #include "extensions/browser/extension_host.h" -#include "extensions/browser/extension_system.h" #include "extensions/browser/process_manager.h" #include "extensions/common/constants.h" #include "extensions/common/extension.h" @@ -399,8 +398,8 @@ IN_PROC_BROWSER_TEST_F(WindowOpenPanelTest, ClosePanelsOnExtensionCrash) { // Crash the extension. extensions::ExtensionHost* extension_host = - extensions::ExtensionSystem::Get(browser()->profile())-> - process_manager()->GetBackgroundHostForExtension(extension->id()); + extensions::ProcessManager::Get(browser()->profile()) + ->GetBackgroundHostForExtension(extension->id()); ASSERT_TRUE(extension_host); base::KillProcess(extension_host->render_process_host()->GetHandle(), content::RESULT_CODE_KILLED, false); diff --git a/chrome/browser/net/chrome_extensions_network_delegate.cc b/chrome/browser/net/chrome_extensions_network_delegate.cc index 2932d7aae602f7..c551584d149ac6 100644 --- a/chrome/browser/net/chrome_extensions_network_delegate.cc +++ b/chrome/browser/net/chrome_extensions_network_delegate.cc @@ -15,7 +15,6 @@ #include "content/public/browser/render_frame_host.h" #include "content/public/browser/resource_request_info.h" #include "extensions/browser/api/web_request/web_request_api.h" -#include "extensions/browser/extension_system.h" #include "extensions/browser/info_map.h" #include "extensions/browser/process_manager.h" #include "net/url_request/url_request.h" @@ -39,10 +38,8 @@ void NotifyEPMRequestStatus(RequestStatus status, return; extensions::ProcessManager* process_manager = - extensions::ExtensionSystem::Get(profile)->process_manager(); - // This may be NULL in unit tests. - if (!process_manager) - return; + extensions::ProcessManager::Get(profile); + DCHECK(process_manager); // Will be NULL if the request was not issued on behalf of a renderer (e.g. a // system-level request). diff --git a/chrome/browser/policy/policy_browsertest.cc b/chrome/browser/policy/policy_browsertest.cc index 1b369fbc667c35..d0b81ed0db3861 100644 --- a/chrome/browser/policy/policy_browsertest.cc +++ b/chrome/browser/policy/policy_browsertest.cc @@ -1785,7 +1785,7 @@ IN_PROC_BROWSER_TEST_F(PolicyTest, ExtensionInstallForcelist) { // Wait until any background pages belonging to force-installed extensions // have been loaded. extensions::ProcessManager* manager = - extensions::ExtensionSystem::Get(browser()->profile())->process_manager(); + extensions::ProcessManager::Get(browser()->profile()); extensions::ProcessManager::ViewSet all_views = manager->GetAllViews(); for (extensions::ProcessManager::ViewSet::const_iterator iter = all_views.begin(); @@ -1816,8 +1816,8 @@ IN_PROC_BROWSER_TEST_F(PolicyTest, ExtensionInstallForcelist) { extensions::NOTIFICATION_EXTENSION_LOADED_DEPRECATED, content::NotificationService::AllSources()); extensions::ExtensionHost* extension_host = - extensions::ExtensionSystem::Get(browser()->profile())-> - process_manager()->GetBackgroundHostForExtension(kGoodCrxId); + extensions::ProcessManager::Get(browser()->profile()) + ->GetBackgroundHostForExtension(kGoodCrxId); base::KillProcess(extension_host->render_process_host()->GetHandle(), content::RESULT_CODE_KILLED, false); extension_crashed_observer.Wait(); diff --git a/chrome/browser/renderer_context_menu/render_view_context_menu.cc b/chrome/browser/renderer_context_menu/render_view_context_menu.cc index de55523068ff98..7841aa6f3ace81 100644 --- a/chrome/browser/renderer_context_menu/render_view_context_menu.cc +++ b/chrome/browser/renderer_context_menu/render_view_context_menu.cc @@ -627,14 +627,9 @@ void RenderViewContextMenu::AppendPrintPreviewItems() { } const Extension* RenderViewContextMenu::GetExtension() const { - extensions::ExtensionSystem* system = - extensions::ExtensionSystem::Get(browser_context_); - // There is no process manager in some tests. - if (!system->process_manager()) - return NULL; - - return system->process_manager()->GetExtensionForRenderViewHost( - source_web_contents_->GetRenderViewHost()); + return extensions::ProcessManager::Get(browser_context_) + ->GetExtensionForRenderViewHost( + source_web_contents_->GetRenderViewHost()); } void RenderViewContextMenu::AppendDeveloperItems() { diff --git a/chrome/browser/speech/extension_api/tts_engine_extension_api.cc b/chrome/browser/speech/extension_api/tts_engine_extension_api.cc index 4a89f59e9e25db..6db90bedc4683c 100644 --- a/chrome/browser/speech/extension_api/tts_engine_extension_api.cc +++ b/chrome/browser/speech/extension_api/tts_engine_extension_api.cc @@ -54,10 +54,9 @@ void WarnIfMissingPauseOrResumeListener( if (has_onpause == has_onresume) return; - extensions::ProcessManager* process_manager = - ExtensionSystem::Get(profile)->process_manager(); extensions::ExtensionHost* host = - process_manager->GetBackgroundHostForExtension(extension_id); + extensions::ProcessManager::Get(profile) + ->GetBackgroundHostForExtension(extension_id); host->render_process_host()->Send(new ExtensionMsg_AddMessageToConsole( host->render_view_host()->GetRoutingID(), content::CONSOLE_MESSAGE_LEVEL_WARNING, diff --git a/chrome/browser/task_manager/extension_information.cc b/chrome/browser/task_manager/extension_information.cc index ab22d2368d03de..6dcf01412452b1 100644 --- a/chrome/browser/task_manager/extension_information.cc +++ b/chrome/browser/task_manager/extension_information.cc @@ -15,7 +15,6 @@ #include "content/public/browser/render_process_host.h" #include "content/public/browser/render_view_host.h" #include "content/public/browser/web_contents.h" -#include "extensions/browser/extension_system.h" #include "extensions/browser/guest_view/guest_view_base.h" #include "extensions/browser/process_manager.h" #include "extensions/browser/view_type_utils.h" @@ -31,12 +30,8 @@ using extensions::Extension; namespace { const Extension* GetExtensionForWebContents(WebContents* web_contents) { - Profile* profile = - Profile::FromBrowserContext(web_contents->GetBrowserContext()); - extensions::ProcessManager* process_manager = - extensions::ExtensionSystem::Get(profile)->process_manager(); - return process_manager->GetExtensionForRenderViewHost( - web_contents->GetRenderViewHost()); + return extensions::ProcessManager::Get(web_contents->GetBrowserContext()) + ->GetExtensionForRenderViewHost(web_contents->GetRenderViewHost()); } } // namespace @@ -129,18 +124,13 @@ void ExtensionInformation::GetAll(const NewWebContentsCallback& callback) { } for (size_t i = 0; i < profiles.size(); ++i) { - extensions::ProcessManager* process_manager = - extensions::ExtensionSystem::Get(profiles[i])->process_manager(); - if (process_manager) { - const extensions::ProcessManager::ViewSet all_views = - process_manager->GetAllViews(); - extensions::ProcessManager::ViewSet::const_iterator jt = - all_views.begin(); - for (; jt != all_views.end(); ++jt) { - WebContents* web_contents = WebContents::FromRenderViewHost(*jt); - if (CheckOwnership(web_contents)) - callback.Run(web_contents); - } + const extensions::ProcessManager::ViewSet all_views = + extensions::ProcessManager::Get(profiles[i])->GetAllViews(); + extensions::ProcessManager::ViewSet::const_iterator jt = all_views.begin(); + for (; jt != all_views.end(); ++jt) { + WebContents* web_contents = WebContents::FromRenderViewHost(*jt); + if (CheckOwnership(web_contents)) + callback.Run(web_contents); } } } diff --git a/chrome/browser/translate/translate_manager_render_view_host_unittest.cc b/chrome/browser/translate/translate_manager_render_view_host_unittest.cc index f51a94732684a9..4f207d47b897b1 100644 --- a/chrome/browser/translate/translate_manager_render_view_host_unittest.cc +++ b/chrome/browser/translate/translate_manager_render_view_host_unittest.cc @@ -1448,8 +1448,6 @@ TEST_F(TranslateManagerRenderViewHostTest, BeforeTranslateExtraButtons) { translate::TranslateInfoBarDelegate* infobar; TestingProfile* test_profile = static_cast(web_contents()->GetBrowserContext()); - static_cast( - extensions::ExtensionSystem::Get(test_profile))->CreateProcessManager(); test_profile->ForceIncognito(true); for (int i = 0; i < 8; ++i) { SCOPED_TRACE(::testing::Message() << "Iteration " << i << " incognito mode=" diff --git a/chrome/browser/ui/app_modal_dialogs/javascript_dialog_manager.cc b/chrome/browser/ui/app_modal_dialogs/javascript_dialog_manager.cc index d6c74a85345682..4b770cce29324d 100644 --- a/chrome/browser/ui/app_modal_dialogs/javascript_dialog_manager.cc +++ b/chrome/browser/ui/app_modal_dialogs/javascript_dialog_manager.cc @@ -21,8 +21,8 @@ #include "ui/base/l10n/l10n_util.h" #if defined(ENABLE_EXTENSIONS) -#include "extensions/browser/extension_system.h" #include "extensions/browser/process_manager.h" +#include "extensions/common/extension.h" #endif // defined(ENABLE_EXTENSIONS) using content::BrowserContext; @@ -39,8 +39,7 @@ namespace { // Returns the ProcessManager for the browser context from |web_contents|. extensions::ProcessManager* GetExtensionsProcessManager( WebContents* web_contents) { - return extensions::ExtensionSystem::Get( - web_contents->GetBrowserContext())->process_manager(); + return extensions::ProcessManager::Get(web_contents->GetBrowserContext()); } // Returns the extension associated with |web_contents| or NULL if there is no diff --git a/chrome/browser/ui/ash/media_delegate_chromeos.cc b/chrome/browser/ui/ash/media_delegate_chromeos.cc index 20f4ea3b1b54a8..53cc92f0fec6a4 100644 --- a/chrome/browser/ui/ash/media_delegate_chromeos.cc +++ b/chrome/browser/ui/ash/media_delegate_chromeos.cc @@ -19,7 +19,6 @@ #include "content/public/browser/web_contents.h" #include "extensions/browser/app_window/app_window.h" #include "extensions/browser/app_window/app_window_registry.h" -#include "extensions/browser/extension_system.h" #include "extensions/browser/process_manager.h" namespace { @@ -77,10 +76,8 @@ void GetExtensionMediaCaptureState( const MediaStreamCaptureIndicator* indicator, content::BrowserContext* context, int* media_state_out) { - extensions::ProcessManager* process_manager = - extensions::ExtensionSystem::Get(context)->process_manager(); const extensions::ProcessManager::ViewSet view_set = - process_manager->GetAllViews(); + extensions::ProcessManager::Get(context)->GetAllViews(); for (extensions::ProcessManager::ViewSet::const_iterator iter = view_set.begin(); iter != view_set.end(); diff --git a/chrome/browser/ui/webui/extensions/extension_settings_handler.cc b/chrome/browser/ui/webui/extensions/extension_settings_handler.cc index bc97cf2029e52a..f4cb96192c9706 100644 --- a/chrome/browser/ui/webui/extensions/extension_settings_handler.cc +++ b/chrome/browser/ui/webui/extensions/extension_settings_handler.cc @@ -1371,7 +1371,7 @@ ExtensionSettingsHandler::GetInspectablePagesForExtension( // Get the extension process's active views. extensions::ProcessManager* process_manager = - ExtensionSystem::Get(extension_service_->profile())->process_manager(); + ProcessManager::Get(extension_service_->profile()); GetInspectablePagesForExtensionProcess( extension, process_manager->GetRenderViewHostsForExtension(extension->id()), @@ -1399,9 +1399,8 @@ ExtensionSettingsHandler::GetInspectablePagesForExtension( IncognitoInfo::IsSplitMode(extension) && util::IsIncognitoEnabled(extension->id(), extension_service_->profile())) { - extensions::ProcessManager* process_manager = - ExtensionSystem::Get(extension_service_->profile()-> - GetOffTheRecordProfile())->process_manager(); + extensions::ProcessManager* process_manager = ProcessManager::Get( + extension_service_->profile()->GetOffTheRecordProfile()); GetInspectablePagesForExtensionProcess( extension, process_manager->GetRenderViewHostsForExtension(extension->id()), diff --git a/components/renderer_context_menu/context_menu_content_type.cc b/components/renderer_context_menu/context_menu_content_type.cc index befb042a96c652..c5c9f3f18463ef 100644 --- a/components/renderer_context_menu/context_menu_content_type.cc +++ b/components/renderer_context_menu/context_menu_content_type.cc @@ -10,7 +10,6 @@ #include "third_party/WebKit/public/web/WebContextMenuData.h" #if defined(ENABLE_EXTENSIONS) -#include "extensions/browser/extension_system.h" #include "extensions/browser/process_manager.h" #include "extensions/common/extension.h" #endif @@ -20,6 +19,7 @@ using content::WebContents; #if defined(ENABLE_EXTENSIONS) using extensions::Extension; +using extensions::ProcessManager; #endif namespace { @@ -50,13 +50,9 @@ ContextMenuContentType::~ContextMenuContentType() { #if defined(ENABLE_EXTENSIONS) const Extension* ContextMenuContentType::GetExtension() const { - extensions::ExtensionSystem* system = extensions::ExtensionSystem::Get( - source_web_contents_->GetBrowserContext()); - // There is no process manager in some tests. - if (!system->process_manager()) - return NULL; - - return system->process_manager()->GetExtensionForRenderViewHost( + ProcessManager* process_manager = + ProcessManager::Get(source_web_contents_->GetBrowserContext()); + return process_manager->GetExtensionForRenderViewHost( source_web_contents_->GetRenderViewHost()); } #endif diff --git a/extensions/browser/BUILD.gn b/extensions/browser/BUILD.gn index be21fe7088342f..8708b10eb113ca 100644 --- a/extensions/browser/BUILD.gn +++ b/extensions/browser/BUILD.gn @@ -415,6 +415,8 @@ source_set("browser") { "process_manager.cc", "process_manager.h", "process_manager_delegate.h", + "process_manager_factory.cc", + "process_manager_factory.h", "process_manager_observer.h", "process_map.cc", "process_map.h", diff --git a/extensions/browser/api/runtime/runtime_api.cc b/extensions/browser/api/runtime/runtime_api.cc index 8764d8c1e87664..51e8ec9bcf771d 100644 --- a/extensions/browser/api/runtime/runtime_api.cc +++ b/extensions/browser/api/runtime/runtime_api.cc @@ -27,7 +27,7 @@ #include "extensions/browser/extensions_browser_client.h" #include "extensions/browser/lazy_background_task_queue.h" #include "extensions/browser/notification_types.h" -#include "extensions/browser/process_manager.h" +#include "extensions/browser/process_manager_factory.h" #include "extensions/common/api/runtime.h" #include "extensions/common/error_utils.h" #include "extensions/common/extension.h" @@ -136,14 +136,25 @@ BrowserContextKeyedAPIFactory* RuntimeAPI::GetFactoryInstance() { return g_factory.Pointer(); } +template <> +void BrowserContextKeyedAPIFactory::DeclareFactoryDependencies() { + DependsOn(ProcessManagerFactory::GetInstance()); +} + RuntimeAPI::RuntimeAPI(content::BrowserContext* context) : browser_context_(context), dispatch_chrome_updated_event_(false), - extension_registry_observer_(this) { + extension_registry_observer_(this), + process_manager_observer_(this) { + // RuntimeAPI is redirected in incognito, so |browser_context_| is never + // incognito. + DCHECK(!browser_context_->IsOffTheRecord()); + registrar_.Add(this, extensions::NOTIFICATION_EXTENSIONS_READY_DEPRECATED, content::Source(context)); extension_registry_observer_.Add(ExtensionRegistry::Get(browser_context_)); + process_manager_observer_.Add(ProcessManager::Get(browser_context_)); delegate_ = ExtensionsBrowserClient::Get()->CreateRuntimeAPIDelegate( browser_context_); @@ -155,7 +166,6 @@ RuntimeAPI::RuntimeAPI(content::BrowserContext* context) } RuntimeAPI::~RuntimeAPI() { - delegate_->RemoveUpdateObserver(this); } void RuntimeAPI::Observe(int type, @@ -166,15 +176,6 @@ void RuntimeAPI::Observe(int type, dispatch_chrome_updated_event_ = false; delegate_->AddUpdateObserver(this); - - // RuntimeAPI is redirected in incognito, so |browser_context_| is never - // incognito. We don't observe incognito ProcessManagers but that is OK - // because we don't send onStartup events to incognito browser contexts. - DCHECK(!browser_context_->IsOffTheRecord()); - // Some tests use partially constructed Profiles without a process manager. - ExtensionSystem* extension_system = ExtensionSystem::Get(browser_context_); - if (extension_system->process_manager()) - extension_system->process_manager()->AddObserver(this); } void RuntimeAPI::OnExtensionLoaded(content::BrowserContext* browser_context, @@ -229,13 +230,7 @@ void RuntimeAPI::OnExtensionUninstalled( } void RuntimeAPI::Shutdown() { - // ExtensionSystem deletes its ProcessManager during the Shutdown() phase, so - // the observer must be removed here and not in the RuntimeAPI destructor. - ProcessManager* process_manager = - ExtensionSystem::Get(browser_context_)->process_manager(); - // Some tests use partially constructed Profiles without a process manager. - if (process_manager) - process_manager->RemoveObserver(this); + delegate_->RemoveUpdateObserver(this); } void RuntimeAPI::OnAppUpdateAvailable(const Extension* extension) { @@ -405,8 +400,8 @@ void RuntimeEventRouter::OnExtensionUninstalled( ExtensionFunction::ResponseAction RuntimeGetBackgroundPageFunction::Run() { ExtensionSystem* system = ExtensionSystem::Get(browser_context()); - ExtensionHost* host = - system->process_manager()->GetBackgroundHostForExtension(extension_id()); + ExtensionHost* host = ProcessManager::Get(browser_context()) + ->GetBackgroundHostForExtension(extension_id()); if (system->lazy_background_task_queue()->ShouldEnqueueTask(browser_context(), extension())) { system->lazy_background_task_queue()->AddPendingTask( diff --git a/extensions/browser/api/runtime/runtime_api.h b/extensions/browser/api/runtime/runtime_api.h index 44a8c2f78b1e07..e3305219855181 100644 --- a/extensions/browser/api/runtime/runtime_api.h +++ b/extensions/browser/api/runtime/runtime_api.h @@ -14,6 +14,7 @@ #include "extensions/browser/browser_context_keyed_api_factory.h" #include "extensions/browser/extension_function.h" #include "extensions/browser/extension_registry_observer.h" +#include "extensions/browser/process_manager.h" #include "extensions/browser/process_manager_observer.h" #include "extensions/browser/update_observer.h" #include "extensions/common/api/runtime.h" @@ -105,10 +106,15 @@ class RuntimeAPI : public BrowserContextKeyedAPI, // Listen to extension notifications. ScopedObserver extension_registry_observer_; + ScopedObserver + process_manager_observer_; DISALLOW_COPY_AND_ASSIGN(RuntimeAPI); }; +template <> +void BrowserContextKeyedAPIFactory::DeclareFactoryDependencies(); + class RuntimeEventRouter { public: // Dispatches the onStartup event to all currently-loaded extensions. diff --git a/extensions/browser/browser_context_keyed_service_factories.cc b/extensions/browser/browser_context_keyed_service_factories.cc index 58cf9887a9bcd1..0f976415808ec0 100644 --- a/extensions/browser/browser_context_keyed_service_factories.cc +++ b/extensions/browser/browser_context_keyed_service_factories.cc @@ -16,6 +16,7 @@ #include "extensions/browser/api/storage/storage_frontend.h" #include "extensions/browser/api/system_info/system_info_api.h" #include "extensions/browser/extension_prefs_factory.h" +#include "extensions/browser/process_manager_factory.h" #include "extensions/browser/renderer_startup_helper.h" namespace extensions { @@ -31,6 +32,7 @@ void EnsureBrowserContextKeyedServiceFactoriesBuilt() { core_api::TCPSocketEventDispatcher::GetFactoryInstance(); core_api::UDPSocketEventDispatcher::GetFactoryInstance(); ExtensionPrefsFactory::GetInstance(); + ProcessManagerFactory::GetInstance(); RendererStartupHelperFactory::GetInstance(); RuntimeAPI::GetFactoryInstance(); StorageFrontend::GetFactoryInstance(); diff --git a/extensions/browser/event_router.cc b/extensions/browser/event_router.cc index d006d1e9a7588f..39416741771154 100644 --- a/extensions/browser/event_router.cc +++ b/extensions/browser/event_router.cc @@ -680,7 +680,7 @@ void EventRouter::IncrementInFlightEvents(BrowserContext* context, // Only increment in-flight events if the lazy background page is active, // because that's the only time we'll get an ACK. if (BackgroundInfo::HasLazyBackgroundPage(extension)) { - ProcessManager* pm = ExtensionSystem::Get(context)->process_manager(); + ProcessManager* pm = ProcessManager::Get(context); ExtensionHost* host = pm->GetBackgroundHostForExtension(extension->id()); if (host) pm->IncrementLazyKeepaliveCount(extension); @@ -689,7 +689,7 @@ void EventRouter::IncrementInFlightEvents(BrowserContext* context, void EventRouter::OnEventAck(BrowserContext* context, const std::string& extension_id) { - ProcessManager* pm = ExtensionSystem::Get(context)->process_manager(); + ProcessManager* pm = ProcessManager::Get(context); ExtensionHost* host = pm->GetBackgroundHostForExtension(extension_id); // The event ACK is routed to the background host, so this should never be // NULL. diff --git a/extensions/browser/extension_function_dispatcher.cc b/extensions/browser/extension_function_dispatcher.cc index 5edb3ecd41da0f..b3f3043b09ff0e 100644 --- a/extensions/browser/extension_function_dispatcher.cc +++ b/extensions/browser/extension_function_dispatcher.cc @@ -410,14 +410,13 @@ void ExtensionFunctionDispatcher::DispatchWithCallbackInternal( // now, largely for simplicity's sake. This is OK because currently, only // the webRequest API uses IOThreadExtensionFunction, and that API is not // compatible with lazy background pages. - extension_system->process_manager()->IncrementLazyKeepaliveCount(extension); + ProcessManager::Get(browser_context_)->IncrementLazyKeepaliveCount(extension); } void ExtensionFunctionDispatcher::OnExtensionFunctionCompleted( const Extension* extension) { if (extension) { - ExtensionSystem::Get(browser_context_) - ->process_manager() + ProcessManager::Get(browser_context_) ->DecrementLazyKeepaliveCount(extension); } } diff --git a/extensions/browser/extension_host.cc b/extensions/browser/extension_host.cc index cd5970b3e323bd..e19d14665c3ede 100644 --- a/extensions/browser/extension_host.cc +++ b/extensions/browser/extension_host.cc @@ -349,17 +349,13 @@ void ExtensionHost::OnEventAck() { } void ExtensionHost::OnIncrementLazyKeepaliveCount() { - ProcessManager* pm = ExtensionSystem::Get( - browser_context_)->process_manager(); - if (pm) - pm->IncrementLazyKeepaliveCount(extension()); + ProcessManager::Get(browser_context_) + ->IncrementLazyKeepaliveCount(extension()); } void ExtensionHost::OnDecrementLazyKeepaliveCount() { - ProcessManager* pm = ExtensionSystem::Get( - browser_context_)->process_manager(); - if (pm) - pm->DecrementLazyKeepaliveCount(extension()); + ProcessManager::Get(browser_context_) + ->DecrementLazyKeepaliveCount(extension()); } // content::WebContentsObserver diff --git a/extensions/browser/extension_message_filter.cc b/extensions/browser/extension_message_filter.cc index 1b7245536af8e7..80e395ad1c8ba1 100644 --- a/extensions/browser/extension_message_filter.cc +++ b/extensions/browser/extension_message_filter.cc @@ -250,18 +250,13 @@ void ExtensionMessageFilter::OnExtensionRemoveFilteredListener( void ExtensionMessageFilter::OnExtensionShouldSuspendAck( const std::string& extension_id, int sequence_id) { - ProcessManager* process_manager = - ExtensionSystem::Get(browser_context_)->process_manager(); - if (process_manager) - process_manager->OnShouldSuspendAck(extension_id, sequence_id); + ProcessManager::Get(browser_context_) + ->OnShouldSuspendAck(extension_id, sequence_id); } void ExtensionMessageFilter::OnExtensionSuspendAck( const std::string& extension_id) { - ProcessManager* process_manager = - ExtensionSystem::Get(browser_context_)->process_manager(); - if (process_manager) - process_manager->OnSuspendAck(extension_id); + ProcessManager::Get(browser_context_)->OnSuspendAck(extension_id); } void ExtensionMessageFilter::OnExtensionTransferBlobsAck( diff --git a/extensions/browser/extension_system.h b/extensions/browser/extension_system.h index f57b9d6bf6d237..c10697e57a5156 100644 --- a/extensions/browser/extension_system.h +++ b/extensions/browser/extension_system.h @@ -80,9 +80,6 @@ class ExtensionSystem : public KeyedService { // The SharedUserScriptMaster is created at startup. virtual SharedUserScriptMaster* shared_user_script_master() = 0; - // The ProcessManager is created at startup. - virtual ProcessManager* process_manager() = 0; - // The StateStore is created at startup. virtual StateStore* state_store() = 0; diff --git a/extensions/browser/guest_view/app_view/app_view_guest.cc b/extensions/browser/guest_view/app_view/app_view_guest.cc index 40fa03684e7b7f..6e7d5b8b26dce5 100644 --- a/extensions/browser/guest_view/app_view/app_view_guest.cc +++ b/extensions/browser/guest_view/app_view/app_view_guest.cc @@ -185,8 +185,7 @@ void AppViewGuest::CreateWebContents( return; } - ProcessManager* process_manager = - ExtensionSystem::Get(browser_context())->process_manager(); + ProcessManager* process_manager = ProcessManager::Get(browser_context()); ExtensionHost* host = process_manager->GetBackgroundHostForExtension(guest_extension->id()); DCHECK(host); diff --git a/extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest.cc b/extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest.cc index 9230f34c36c149..90c8345d215c1e 100644 --- a/extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest.cc +++ b/extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest.cc @@ -10,7 +10,6 @@ #include "content/public/common/url_constants.h" #include "extensions/browser/api/extensions_api_client.h" #include "extensions/browser/extension_registry.h" -#include "extensions/browser/extension_system.h" #include "extensions/browser/guest_view/mime_handler_view/mime_handler_view_constants.h" #include "extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest_delegate.h" #include "extensions/browser/process_manager.h" @@ -98,12 +97,9 @@ void MimeHandlerViewGuest::CreateWebContents( return; } - ProcessManager* process_manager = - ExtensionSystem::Get(browser_context())->process_manager(); - DCHECK(process_manager); - // Use the mime handler extension's SiteInstance to create the guest so it // goes under the same process as the extension. + ProcessManager* process_manager = ProcessManager::Get(browser_context()); content::SiteInstance* guest_site_instance = process_manager->GetSiteInstanceForURL( Extension::GetBaseURLFromExtensionId(embedder_extension_id)); diff --git a/extensions/browser/lazy_background_task_queue.cc b/extensions/browser/lazy_background_task_queue.cc index 5ac92de54bf2c8..754e59264b50b9 100644 --- a/extensions/browser/lazy_background_task_queue.cc +++ b/extensions/browser/lazy_background_task_queue.cc @@ -13,7 +13,6 @@ #include "content/public/browser/web_contents.h" #include "extensions/browser/extension_host.h" #include "extensions/browser/extension_registry.h" -#include "extensions/browser/extension_system.h" #include "extensions/browser/extensions_browser_client.h" #include "extensions/browser/notification_types.h" #include "extensions/browser/process_manager.h" @@ -47,9 +46,7 @@ bool LazyBackgroundTaskQueue::ShouldEnqueueTask( // extension tasks. DCHECK(extension); if (BackgroundInfo::HasBackgroundPage(extension)) { - ProcessManager* pm = ExtensionSystem::Get( - browser_context)->process_manager(); - DCHECK(pm); + ProcessManager* pm = ProcessManager::Get(browser_context); ExtensionHost* background_host = pm->GetBackgroundHostForExtension(extension->id()); if (!background_host || !background_host->did_stop_loading()) @@ -82,8 +79,7 @@ void LazyBackgroundTaskQueue::AddPendingTask( if (extension && BackgroundInfo::HasLazyBackgroundPage(extension)) { // If this is the first enqueued task, and we're not waiting for the // background page to unload, ensure the background page is loaded. - ProcessManager* pm = ExtensionSystem::Get( - browser_context)->process_manager(); + ProcessManager* pm = ProcessManager::Get(browser_context); pm->IncrementLazyKeepaliveCount(extension); // Creating the background host may fail, e.g. if |profile| is incognito // but the extension isn't enabled in incognito mode. @@ -130,8 +126,8 @@ void LazyBackgroundTaskQueue::ProcessPendingTasks( // Balance the keepalive in AddPendingTask. Note we don't do this on a // failure to load, because the keepalive count is reset in that case. if (host && BackgroundInfo::HasLazyBackgroundPage(extension)) { - ExtensionSystem::Get(browser_context)->process_manager()-> - DecrementLazyKeepaliveCount(extension); + ProcessManager::Get(browser_context) + ->DecrementLazyKeepaliveCount(extension); } } diff --git a/extensions/browser/lazy_background_task_queue_unittest.cc b/extensions/browser/lazy_background_task_queue_unittest.cc index 933066990538f9..1b2891250fb1f2 100644 --- a/extensions/browser/lazy_background_task_queue_unittest.cc +++ b/extensions/browser/lazy_background_task_queue_unittest.cc @@ -5,16 +5,16 @@ #include "extensions/browser/lazy_background_task_queue.h" #include "base/bind.h" +#include "base/prefs/testing_pref_service.h" #include "components/keyed_service/content/browser_context_dependency_manager.h" +#include "components/user_prefs/user_prefs.h" #include "content/public/browser/notification_service.h" #include "content/public/test/test_browser_context.h" #include "extensions/browser/extension_registry.h" #include "extensions/browser/extension_registry_factory.h" -#include "extensions/browser/extension_system.h" -#include "extensions/browser/extension_system_provider.h" #include "extensions/browser/extensions_test.h" -#include "extensions/browser/mock_extension_system.h" #include "extensions/browser/process_manager.h" +#include "extensions/browser/process_manager_factory.h" #include "extensions/browser/test_extensions_browser_client.h" #include "extensions/common/extension.h" #include "extensions/common/extension_builder.h" @@ -52,18 +52,9 @@ class TestProcessManager : public ProcessManager { DISALLOW_COPY_AND_ASSIGN(TestProcessManager); }; -// A simple ExtensionSystem that returns a TestProcessManager. -class MockExtensionSystemWithProcessManager : public MockExtensionSystem { - public: - explicit MockExtensionSystemWithProcessManager(BrowserContext* context) - : MockExtensionSystem(context), test_process_manager_(context) {} - ~MockExtensionSystemWithProcessManager() override {} - - ProcessManager* process_manager() override { return &test_process_manager_; } - - private: - TestProcessManager test_process_manager_; -}; +KeyedService* CreateTestProcessManager(BrowserContext* context) { + return new TestProcessManager(context); +} } // namespace @@ -74,8 +65,6 @@ class LazyBackgroundTaskQueueTest : public ExtensionsTest { LazyBackgroundTaskQueueTest() : notification_service_(content::NotificationService::Create()), task_run_count_(0) { - extensions_browser_client()->set_extension_system_factory( - &extension_system_factory_); } ~LazyBackgroundTaskQueueTest() override {} @@ -116,10 +105,15 @@ class LazyBackgroundTaskQueueTest : public ExtensionsTest { return extension; } + protected: + virtual void SetUp() override { + user_prefs::UserPrefs::Set(browser_context(), &testing_pref_service_); + } + private: scoped_ptr notification_service_; - MockExtensionSystemFactory - extension_system_factory_; + + TestingPrefServiceSimple testing_pref_service_; // The total number of pending tasks that have been executed. int task_run_count_; @@ -145,10 +139,9 @@ TEST_F(LazyBackgroundTaskQueueTest, ShouldEnqueueTask) { // multiple extensions can have pending tasks. TEST_F(LazyBackgroundTaskQueueTest, AddPendingTask) { // Get our TestProcessManager. - MockExtensionSystem* extension_system = static_cast( - ExtensionSystem::Get(browser_context())); - TestProcessManager* process_manager = - static_cast(extension_system->process_manager()); + TestProcessManager* process_manager = static_cast( + ProcessManagerFactory::GetInstance()->SetTestingFactoryAndUse( + browser_context(), CreateTestProcessManager)); LazyBackgroundTaskQueue queue(browser_context()); diff --git a/extensions/browser/mock_extension_system.cc b/extensions/browser/mock_extension_system.cc index 8e1902f0cb239c..e536de99439029 100644 --- a/extensions/browser/mock_extension_system.cc +++ b/extensions/browser/mock_extension_system.cc @@ -38,10 +38,6 @@ SharedUserScriptMaster* MockExtensionSystem::shared_user_script_master() { return NULL; } -ProcessManager* MockExtensionSystem::process_manager() { - return NULL; -} - StateStore* MockExtensionSystem::state_store() { return NULL; } diff --git a/extensions/browser/mock_extension_system.h b/extensions/browser/mock_extension_system.h index 5e35b1228961b8..c90c33514d2eca 100644 --- a/extensions/browser/mock_extension_system.h +++ b/extensions/browser/mock_extension_system.h @@ -31,7 +31,6 @@ class MockExtensionSystem : public ExtensionSystem { RuntimeData* runtime_data() override; ManagementPolicy* management_policy() override; SharedUserScriptMaster* shared_user_script_master() override; - ProcessManager* process_manager() override; StateStore* state_store() override; StateStore* rules_store() override; InfoMap* info_map() override; diff --git a/extensions/browser/mojo/keep_alive_impl.cc b/extensions/browser/mojo/keep_alive_impl.cc index 4073ce1ccb76a8..04e496608246e8 100644 --- a/extensions/browser/mojo/keep_alive_impl.cc +++ b/extensions/browser/mojo/keep_alive_impl.cc @@ -4,7 +4,6 @@ #include "extensions/browser/mojo/keep_alive_impl.h" -#include "extensions/browser/extension_system.h" #include "extensions/browser/process_manager.h" namespace extensions { @@ -19,17 +18,11 @@ void KeepAliveImpl::Create(content::BrowserContext* context, KeepAliveImpl::KeepAliveImpl(content::BrowserContext* context, const Extension* extension) : context_(context), extension_(extension) { - ExtensionSystem* system = ExtensionSystem::Get(context_); - if (!system) - return; - system->process_manager()->IncrementLazyKeepaliveCount(extension_); + ProcessManager::Get(context_)->IncrementLazyKeepaliveCount(extension_); } KeepAliveImpl::~KeepAliveImpl() { - ExtensionSystem* system = ExtensionSystem::Get(context_); - if (!system) - return; - system->process_manager()->DecrementLazyKeepaliveCount(extension_); + ProcessManager::Get(context_)->DecrementLazyKeepaliveCount(extension_); } } // namespace extensions diff --git a/extensions/browser/mojo/keep_alive_impl_unittest.cc b/extensions/browser/mojo/keep_alive_impl_unittest.cc index eea8f83e49cfb3..b9ca700cfb26cc 100644 --- a/extensions/browser/mojo/keep_alive_impl_unittest.cc +++ b/extensions/browser/mojo/keep_alive_impl_unittest.cc @@ -17,22 +17,6 @@ namespace extensions { -namespace { - -class TestExtensionSystem : public MockExtensionSystem { - public: - explicit TestExtensionSystem(content::BrowserContext* context) - : MockExtensionSystem(context), - process_manager_(ProcessManager::Create(context)) {} - - ProcessManager* process_manager() override { return process_manager_.get(); } - - private: - scoped_ptr process_manager_; -}; - -} // namespace - class KeepAliveTest : public ExtensionsTest { public: KeepAliveTest() @@ -81,14 +65,13 @@ class KeepAliveTest : public ExtensionsTest { const Extension* extension() { return extension_.get(); } int GetKeepAliveCount() { - return ExtensionSystem::Get(browser_context()) - ->process_manager() + return ProcessManager::Get(browser_context()) ->GetLazyKeepaliveCount(extension()); } private: scoped_ptr message_loop_; - MockExtensionSystemFactory extension_system_factory_; + MockExtensionSystemFactory extension_system_factory_; scoped_ptr notification_service_; scoped_refptr extension_; scoped_ptr browser_client_; diff --git a/extensions/browser/process_manager.cc b/extensions/browser/process_manager.cc index 141caed6b047d5..fe583eaf70de29 100644 --- a/extensions/browser/process_manager.cc +++ b/extensions/browser/process_manager.cc @@ -33,6 +33,7 @@ #include "extensions/browser/extensions_browser_client.h" #include "extensions/browser/notification_types.h" #include "extensions/browser/process_manager_delegate.h" +#include "extensions/browser/process_manager_factory.h" #include "extensions/browser/process_manager_observer.h" #include "extensions/browser/view_type_utils.h" #include "extensions/common/constants.h" @@ -114,7 +115,6 @@ class IncognitoProcessManager : public ProcessManager { public: IncognitoProcessManager(BrowserContext* incognito_context, BrowserContext* original_context, - ProcessManager* original_manager, ExtensionRegistry* extension_registry); ~IncognitoProcessManager() override {} bool CreateBackgroundHost(const Extension* extension, @@ -122,8 +122,6 @@ class IncognitoProcessManager : public ProcessManager { SiteInstance* GetSiteInstanceForURL(const GURL& url) override; private: - ProcessManager* original_manager_; - DISALLOW_COPY_AND_ASSIGN(IncognitoProcessManager); }; @@ -147,7 +145,7 @@ class RenderViewHostDestructionObserver explicit RenderViewHostDestructionObserver(WebContents* web_contents) : WebContentsObserver(web_contents) { BrowserContext* context = web_contents->GetBrowserContext(); - process_manager_ = ExtensionSystem::Get(context)->process_manager(); + process_manager_ = ProcessManager::Get(context); } friend class content::WebContentsUserData; @@ -198,6 +196,11 @@ struct ProcessManager::BackgroundPageData { // ProcessManager // +// static +ProcessManager* ProcessManager::Get(BrowserContext* context) { + return ProcessManagerFactory::GetForBrowserContext(context); +} + // static ProcessManager* ProcessManager::Create(BrowserContext* context) { ExtensionRegistry* extension_registry = ExtensionRegistry::Get(context); @@ -213,10 +216,8 @@ ProcessManager* ProcessManager::Create(BrowserContext* context) { if (context->IsOffTheRecord()) { BrowserContext* original_context = client->GetOriginalContext(context); - ProcessManager* original_manager = - ExtensionSystem::Get(original_context)->process_manager(); return new IncognitoProcessManager( - context, original_context, original_manager, extension_registry); + context, original_context, extension_registry); } return new ProcessManager(context, context, extension_registry); @@ -234,13 +235,11 @@ ProcessManager* ProcessManager::CreateForTesting( ProcessManager* ProcessManager::CreateIncognitoForTesting( BrowserContext* incognito_context, BrowserContext* original_context, - ProcessManager* original_manager, ExtensionRegistry* extension_registry) { DCHECK(incognito_context->IsOffTheRecord()); DCHECK(!original_context->IsOffTheRecord()); return new IncognitoProcessManager(incognito_context, original_context, - original_manager, extension_registry); } @@ -517,11 +516,7 @@ void ProcessManager::OnKeepaliveFromPlugin(int render_process_id, if (!extension) return; - ProcessManager* pm = ExtensionSystem::Get(browser_context)->process_manager(); - if (!pm) - return; - - pm->KeepaliveImpulse(extension); + ProcessManager::Get(browser_context)->KeepaliveImpulse(extension); } // DecrementLazyKeepaliveCount is called when no calls to KeepaliveImpulse @@ -920,10 +915,8 @@ void ProcessManager::ClearBackgroundPageData(const std::string& extension_id) { IncognitoProcessManager::IncognitoProcessManager( BrowserContext* incognito_context, BrowserContext* original_context, - ProcessManager* original_manager, ExtensionRegistry* extension_registry) - : ProcessManager(incognito_context, original_context, extension_registry), - original_manager_(original_manager) { + : ProcessManager(incognito_context, original_context, extension_registry) { DCHECK(incognito_context->IsOffTheRecord()); // The original profile will have its own ProcessManager to @@ -951,8 +944,11 @@ bool IncognitoProcessManager::CreateBackgroundHost(const Extension* extension, SiteInstance* IncognitoProcessManager::GetSiteInstanceForURL(const GURL& url) { const Extension* extension = extension_registry_->enabled_extensions().GetExtensionOrAppByURL(url); - if (extension && !IncognitoInfo::IsSplitMode(extension)) - return original_manager_->GetSiteInstanceForURL(url); + if (extension && !IncognitoInfo::IsSplitMode(extension)) { + BrowserContext* original_context = + ExtensionsBrowserClient::Get()->GetOriginalContext(GetBrowserContext()); + return ProcessManager::Get(original_context)->GetSiteInstanceForURL(url); + } return ProcessManager::GetSiteInstanceForURL(url); } diff --git a/extensions/browser/process_manager.h b/extensions/browser/process_manager.h index eabc0c5e178486..ba923d2480b1d0 100644 --- a/extensions/browser/process_manager.h +++ b/extensions/browser/process_manager.h @@ -15,6 +15,7 @@ #include "base/memory/weak_ptr.h" #include "base/observer_list.h" #include "base/time/time.h" +#include "components/keyed_service/core/keyed_service.h" #include "content/public/browser/notification_observer.h" #include "content/public/browser/notification_registrar.h" #include "extensions/common/view_type.h" @@ -40,12 +41,13 @@ class ProcessManagerObserver; // Manages dynamic state of running Chromium extensions. There is one instance // of this class per Profile. OTR Profiles have a separate instance that keeps // track of split-mode extensions only. -class ProcessManager : public content::NotificationObserver { +class ProcessManager : public KeyedService, + public content::NotificationObserver { public: typedef std::set ExtensionHostSet; typedef ExtensionHostSet::const_iterator const_iterator; - static ProcessManager* Create(content::BrowserContext* context); + static ProcessManager* Get(content::BrowserContext* context); ~ProcessManager() override; const ExtensionHostSet& background_hosts() const { @@ -168,7 +170,6 @@ class ProcessManager : public content::NotificationObserver { static ProcessManager* CreateIncognitoForTesting( content::BrowserContext* incognito_context, content::BrowserContext* original_context, - ProcessManager* original_manager, ExtensionRegistry* registry); bool startup_background_hosts_created_for_test() const { @@ -176,7 +177,9 @@ class ProcessManager : public content::NotificationObserver { } protected: - // If |context| is incognito pass the master context as |original_context|. + static ProcessManager* Create(content::BrowserContext* context); + + // |context| is incognito pass the master context as |original_context|. // Otherwise pass the same context for both. Pass the ExtensionRegistry for // |context| as |registry|, or override it for testing. ProcessManager(content::BrowserContext* context, @@ -202,6 +205,7 @@ class ProcessManager : public content::NotificationObserver { ExtensionRegistry* extension_registry_; private: + friend class ProcessManagerFactory; friend class ProcessManagerTest; // Extra information we keep for each extension's background page. diff --git a/extensions/browser/process_manager_factory.cc b/extensions/browser/process_manager_factory.cc new file mode 100644 index 00000000000000..370b151db6deae --- /dev/null +++ b/extensions/browser/process_manager_factory.cc @@ -0,0 +1,55 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "components/keyed_service/content/browser_context_dependency_manager.h" +#include "extensions/browser/extension_registry_factory.h" +#include "extensions/browser/process_manager.h" +#include "extensions/browser/process_manager_factory.h" + +using content::BrowserContext; + +namespace extensions { + +// static +ProcessManager* ProcessManagerFactory::GetForBrowserContext( + BrowserContext* context) { + return static_cast( + GetInstance()->GetServiceForBrowserContext(context, true)); +} + +// static +ProcessManager* ProcessManagerFactory::GetForBrowserContextIfExists( + BrowserContext* context) { + return static_cast( + GetInstance()->GetServiceForBrowserContext(context, false)); +} + +// static +ProcessManagerFactory* ProcessManagerFactory::GetInstance() { + return Singleton::get(); +} + +ProcessManagerFactory::ProcessManagerFactory() + : BrowserContextKeyedServiceFactory( + "ProcessManager", + BrowserContextDependencyManager::GetInstance()) { + DependsOn(extensions::ExtensionRegistryFactory::GetInstance()); +} + +ProcessManagerFactory::~ProcessManagerFactory() { +} + +KeyedService* ProcessManagerFactory::BuildServiceInstanceFor( + BrowserContext* context) const { + return ProcessManager::Create(context); +} + +BrowserContext* ProcessManagerFactory::GetBrowserContextToUse( + BrowserContext* context) const { + // ProcessManager::Create handles guest and incognito profiles, returning an + // IncognitoProcessManager in incognito mode. + return context; +} + +} // namespace extensions diff --git a/extensions/browser/process_manager_factory.h b/extensions/browser/process_manager_factory.h new file mode 100644 index 00000000000000..0e045001bbcb84 --- /dev/null +++ b/extensions/browser/process_manager_factory.h @@ -0,0 +1,40 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef EXTENSIONS_BROWSER_PROCESS_MANAGER_FACTORY_H_ +#define EXTENSIONS_BROWSER_PROCESS_MANAGER_FACTORY_H_ + +#include "base/memory/singleton.h" +#include "components/keyed_service/content/browser_context_keyed_service_factory.h" + +namespace extensions { + +class ProcessManager; + +class ProcessManagerFactory : public BrowserContextKeyedServiceFactory { + public: + static ProcessManager* GetForBrowserContext(content::BrowserContext* context); + // Returns NULL if there is no ProcessManager associated with this context. + static ProcessManager* GetForBrowserContextIfExists( + content::BrowserContext* context); + static ProcessManagerFactory* GetInstance(); + + private: + friend struct DefaultSingletonTraits; + + ProcessManagerFactory(); + virtual ~ProcessManagerFactory(); + + // BrowserContextKeyedServiceFactory + virtual KeyedService* BuildServiceInstanceFor( + content::BrowserContext* context) const override; + virtual content::BrowserContext* GetBrowserContextToUse( + content::BrowserContext* context) const override; + + DISALLOW_COPY_AND_ASSIGN(ProcessManagerFactory); +}; + +} // namespace extensions + +#endif // EXTENSIONS_BROWSER_PROCESS_MANAGER_FACTORY_H_ diff --git a/extensions/browser/process_manager_unittest.cc b/extensions/browser/process_manager_unittest.cc index e30c8c119916e7..133b6ff0a434d4 100644 --- a/extensions/browser/process_manager_unittest.cc +++ b/extensions/browser/process_manager_unittest.cc @@ -125,7 +125,6 @@ TEST_F(ProcessManagerTest, ExtensionNotificationRegistration) { scoped_ptr manager2( ProcessManager::CreateIncognitoForTesting(incognito_context(), original_context(), - manager1.get(), extension_registry())); EXPECT_EQ(incognito_context(), manager2->GetBrowserContext()); diff --git a/extensions/extensions.gyp b/extensions/extensions.gyp index 8bb58f26d5eab7..d90eeaa180e61a 100644 --- a/extensions/extensions.gyp +++ b/extensions/extensions.gyp @@ -721,6 +721,8 @@ 'browser/process_manager.cc', 'browser/process_manager.h', 'browser/process_manager_delegate.h', + 'browser/process_manager_factory.cc', + 'browser/process_manager_factory.h', 'browser/process_manager_observer.h', 'browser/process_map.cc', 'browser/process_map.h', diff --git a/extensions/shell/browser/shell_extension_system.cc b/extensions/shell/browser/shell_extension_system.cc index 6337108ccb297b..67b37fc102385b 100644 --- a/extensions/shell/browser/shell_extension_system.cc +++ b/extensions/shell/browser/shell_extension_system.cc @@ -20,7 +20,6 @@ #include "extensions/browser/info_map.h" #include "extensions/browser/lazy_background_task_queue.h" #include "extensions/browser/notification_types.h" -#include "extensions/browser/process_manager.h" #include "extensions/browser/quota_service.h" #include "extensions/browser/runtime_data.h" #include "extensions/common/file_util.h" @@ -101,7 +100,6 @@ void ShellExtensionSystem::InitForRegularProfile(bool extensions_enabled) { new LazyBackgroundTaskQueue(browser_context_)); event_router_.reset( new EventRouter(browser_context_, ExtensionPrefs::Get(browser_context_))); - process_manager_.reset(ProcessManager::Create(browser_context_)); quota_service_.reset(new QuotaService); } @@ -121,10 +119,6 @@ SharedUserScriptMaster* ShellExtensionSystem::shared_user_script_master() { return NULL; } -ProcessManager* ShellExtensionSystem::process_manager() { - return process_manager_.get(); -} - StateStore* ShellExtensionSystem::state_store() { return NULL; } diff --git a/extensions/shell/browser/shell_extension_system.h b/extensions/shell/browser/shell_extension_system.h index 28113b7d6b4227..32dd36412f3e43 100644 --- a/extensions/shell/browser/shell_extension_system.h +++ b/extensions/shell/browser/shell_extension_system.h @@ -57,7 +57,6 @@ class ShellExtensionSystem : public ExtensionSystem { RuntimeData* runtime_data() override; ManagementPolicy* management_policy() override; SharedUserScriptMaster* shared_user_script_master() override; - ProcessManager* process_manager() override; StateStore* state_store() override; StateStore* rules_store() override; InfoMap* info_map() override; @@ -89,7 +88,6 @@ class ShellExtensionSystem : public ExtensionSystem { scoped_ptr runtime_data_; scoped_ptr lazy_background_task_queue_; scoped_ptr event_router_; - scoped_ptr process_manager_; scoped_ptr quota_service_; // Signaled when the extension system has completed its startup tasks.