summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--apps/DEPS1
-rw-r--r--apps/launcher.cc2
-rw-r--r--chrome/browser/browser_process_impl.cc3
-rw-r--r--chrome/browser/chromeos/file_manager/file_browser_handlers.cc2
-rw-r--r--chrome/browser/extensions/api/messaging/message_service.cc2
-rw-r--r--chrome/browser/extensions/api/runtime/runtime_api.cc2
-rw-r--r--chrome/browser/extensions/chrome_extensions_browser_client.cc49
-rw-r--r--chrome/browser/extensions/chrome_extensions_browser_client.h50
-rw-r--r--chrome/browser/extensions/devtools_util.cc3
-rw-r--r--chrome/browser/extensions/event_router.cc2
-rw-r--r--chrome/browser/extensions/extension_host.cc4
-rw-r--r--chrome/browser/extensions/extension_host.h5
-rw-r--r--chrome/browser/extensions/extension_system.cc8
-rw-r--r--chrome/browser/extensions/extension_system.h8
-rw-r--r--chrome/browser/ui/webui/extensions/extension_settings_handler.cc2
-rw-r--r--chrome/chrome_browser_extensions.gypi4
-rw-r--r--chrome/chrome_tests_unit.gypi3
-rw-r--r--chrome/test/base/chrome_test_suite.cc3
-rw-r--r--extensions/browser/DEPS27
-rw-r--r--extensions/browser/OWNERS7
-rw-r--r--extensions/browser/extensions_browser_client.cc28
-rw-r--r--extensions/browser/extensions_browser_client.h51
-rw-r--r--extensions/browser/lazy_background_task_queue.cc (renamed from chrome/browser/extensions/lazy_background_task_queue.cc)68
-rw-r--r--extensions/browser/lazy_background_task_queue.h (renamed from chrome/browser/extensions/lazy_background_task_queue.h)31
-rw-r--r--extensions/browser/lazy_background_task_queue_unittest.cc (renamed from chrome/browser/extensions/lazy_background_task_queue_unittest.cc)8
-rw-r--r--extensions/extensions.gyp4
26 files changed, 320 insertions, 57 deletions
diff --git a/apps/DEPS b/apps/DEPS
index 0e66fcc..1563676 100644
--- a/apps/DEPS
+++ b/apps/DEPS
@@ -41,7 +41,6 @@ include_rules = [
"+chrome/browser/extensions/extension_system.h",
"+chrome/browser/extensions/extension_system_factory.h",
"+chrome/browser/extensions/extension_web_contents_observer.h",
- "+chrome/browser/extensions/lazy_background_task_queue.h",
"+chrome/browser/extensions/suggest_permission_util.h",
"+chrome/browser/extensions/unpacked_installer.h",
"+chrome/common/extensions/api/app_runtime.h",
diff --git a/apps/launcher.cc b/apps/launcher.cc
index 731ff88..8e9b151 100644
--- a/apps/launcher.cc
+++ b/apps/launcher.cc
@@ -21,7 +21,6 @@
#include "chrome/browser/extensions/extension_process_manager.h"
#include "chrome/browser/extensions/extension_service.h"
#include "chrome/browser/extensions/extension_system.h"
-#include "chrome/browser/extensions/lazy_background_task_queue.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/common/extensions/api/app_runtime.h"
#include "chrome/common/extensions/extension.h"
@@ -30,6 +29,7 @@
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/render_process_host.h"
#include "content/public/browser/web_contents.h"
+#include "extensions/browser/lazy_background_task_queue.h"
#include "net/base/mime_util.h"
#include "net/base/net_util.h"
#include "url/gurl.h"
diff --git a/chrome/browser/browser_process_impl.cc b/chrome/browser/browser_process_impl.cc
index 51abfe8..934e528 100644
--- a/chrome/browser/browser_process_impl.cc
+++ b/chrome/browser/browser_process_impl.cc
@@ -33,6 +33,7 @@
#include "chrome/browser/devtools/remote_debugging_server.h"
#include "chrome/browser/download/download_request_limiter.h"
#include "chrome/browser/download/download_status_updater.h"
+#include "chrome/browser/extensions/chrome_extensions_browser_client.h"
#include "chrome/browser/extensions/event_router_forwarder.h"
#include "chrome/browser/extensions/extension_renderer_state.h"
#include "chrome/browser/first_run/upgrade_util.h"
@@ -187,6 +188,8 @@ BrowserProcessImpl::BrowserProcessImpl(
apps::AppsClient::Set(ChromeAppsClient::GetInstance());
extensions::ExtensionsClient::Set(
extensions::ChromeExtensionsClient::GetInstance());
+ extensions::ExtensionsBrowserClient::Set(
+ extensions::ChromeExtensionsBrowserClient::GetInstance());
extension_event_router_forwarder_ = new extensions::EventRouterForwarder;
ExtensionRendererState::GetInstance()->Init();
diff --git a/chrome/browser/chromeos/file_manager/file_browser_handlers.cc b/chrome/browser/chromeos/file_manager/file_browser_handlers.cc
index 54ea3af..6d7956f 100644
--- a/chrome/browser/chromeos/file_manager/file_browser_handlers.cc
+++ b/chrome/browser/chromeos/file_manager/file_browser_handlers.cc
@@ -18,7 +18,6 @@
#include "chrome/browser/extensions/extension_service.h"
#include "chrome/browser/extensions/extension_system.h"
#include "chrome/browser/extensions/extension_util.h"
-#include "chrome/browser/extensions/lazy_background_task_queue.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/browser_finder.h"
#include "chrome/common/extensions/api/file_browser_handlers/file_browser_handler.h"
@@ -28,6 +27,7 @@
#include "content/public/browser/render_process_host.h"
#include "content/public/browser/site_instance.h"
#include "content/public/browser/web_contents.h"
+#include "extensions/browser/lazy_background_task_queue.h"
#include "net/base/escape.h"
#include "webkit/browser/fileapi/file_system_context.h"
#include "webkit/browser/fileapi/file_system_url.h"
diff --git a/chrome/browser/extensions/api/messaging/message_service.cc b/chrome/browser/extensions/api/messaging/message_service.cc
index cdf65278..d2951ec 100644
--- a/chrome/browser/extensions/api/messaging/message_service.cc
+++ b/chrome/browser/extensions/api/messaging/message_service.cc
@@ -22,7 +22,6 @@
#include "chrome/browser/extensions/extension_system.h"
#include "chrome/browser/extensions/extension_tab_util.h"
#include "chrome/browser/extensions/extension_util.h"
-#include "chrome/browser/extensions/lazy_background_task_queue.h"
#include "chrome/browser/extensions/process_map.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/tab_contents/tab_util.h"
@@ -38,6 +37,7 @@
#include "content/public/browser/render_widget_host_view.h"
#include "content/public/browser/site_instance.h"
#include "content/public/browser/web_contents.h"
+#include "extensions/browser/lazy_background_task_queue.h"
#include "extensions/common/manifest_constants.h"
#include "net/base/completion_callback.h"
#include "url/gurl.h"
diff --git a/chrome/browser/extensions/api/runtime/runtime_api.cc b/chrome/browser/extensions/api/runtime/runtime_api.cc
index a6670c0..185c2ce 100644
--- a/chrome/browser/extensions/api/runtime/runtime_api.cc
+++ b/chrome/browser/extensions/api/runtime/runtime_api.cc
@@ -16,7 +16,6 @@
#include "chrome/browser/extensions/extension_process_manager.h"
#include "chrome/browser/extensions/extension_service.h"
#include "chrome/browser/extensions/extension_system.h"
-#include "chrome/browser/extensions/lazy_background_task_queue.h"
#include "chrome/browser/extensions/updater/extension_updater.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/profiles/profile_manager.h"
@@ -31,6 +30,7 @@
#include "content/public/browser/notification_service.h"
#include "content/public/browser/render_process_host.h"
#include "content/public/browser/render_view_host.h"
+#include "extensions/browser/lazy_background_task_queue.h"
#include "extensions/common/error_utils.h"
#include "url/gurl.h"
#include "webkit/browser/fileapi/isolated_context.h"
diff --git a/chrome/browser/extensions/chrome_extensions_browser_client.cc b/chrome/browser/extensions/chrome_extensions_browser_client.cc
new file mode 100644
index 0000000..e2ba427
--- /dev/null
+++ b/chrome/browser/extensions/chrome_extensions_browser_client.cc
@@ -0,0 +1,49 @@
+// Copyright 2013 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 "chrome/browser/extensions/chrome_extensions_browser_client.h"
+
+#include "chrome/browser/browser_process.h"
+#include "chrome/browser/profiles/profile.h"
+
+namespace extensions {
+
+namespace {
+
+static base::LazyInstance<ChromeExtensionsBrowserClient> g_client =
+ LAZY_INSTANCE_INITIALIZER;
+
+} // namespace
+
+ChromeExtensionsBrowserClient::ChromeExtensionsBrowserClient() {}
+
+ChromeExtensionsBrowserClient::~ChromeExtensionsBrowserClient() {}
+
+bool ChromeExtensionsBrowserClient::IsShuttingDown() {
+ return g_browser_process->IsShuttingDown();
+}
+
+bool ChromeExtensionsBrowserClient::IsSameContext(
+ content::BrowserContext* first,
+ content::BrowserContext* second) {
+ return static_cast<Profile*>(first)->IsSameProfile(
+ static_cast<Profile*>(second));
+}
+
+bool ChromeExtensionsBrowserClient::HasOffTheRecordContext(
+ content::BrowserContext* context) {
+ return static_cast<Profile*>(context)->HasOffTheRecordProfile();
+}
+
+content::BrowserContext* ChromeExtensionsBrowserClient::GetOffTheRecordContext(
+ content::BrowserContext* context) {
+ return static_cast<Profile*>(context)->GetOffTheRecordProfile();
+}
+
+// static
+ChromeExtensionsBrowserClient* ChromeExtensionsBrowserClient::GetInstance() {
+ return g_client.Pointer();
+}
+
+} // namespace extensions
diff --git a/chrome/browser/extensions/chrome_extensions_browser_client.h b/chrome/browser/extensions/chrome_extensions_browser_client.h
new file mode 100644
index 0000000..ddcc4d7
--- /dev/null
+++ b/chrome/browser/extensions/chrome_extensions_browser_client.h
@@ -0,0 +1,50 @@
+// Copyright 2013 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 CHROME_BROWSER_EXTENSIONS_CHROME_EXTENSIONS_BROWSER_CLIENT_H_
+#define CHROME_BROWSER_EXTENSIONS_CHROME_EXTENSIONS_BROWSER_CLIENT_H_
+
+#include "base/basictypes.h"
+#include "base/compiler_specific.h"
+#include "base/lazy_instance.h"
+#include "extensions/browser/extensions_browser_client.h"
+
+namespace content {
+class BrowserContext;
+}
+
+namespace extensions {
+
+// Implementation of extensions::BrowserClient for Chrome, which includes
+// knowledge of Profiles, BrowserContexts and incognito.
+//
+// NOTE: Methods that do not require knowledge of browser concepts should be
+// implemented in ChromeExtensionsClient even if they are only used in the
+// browser process (see chrome/common/extensions/chrome_extensions_client.h).
+class ChromeExtensionsBrowserClient : public ExtensionsBrowserClient {
+ public:
+ ChromeExtensionsBrowserClient();
+ virtual ~ChromeExtensionsBrowserClient();
+
+ // BrowserClient overrides:
+ virtual bool IsShuttingDown() OVERRIDE;
+ virtual bool IsSameContext(content::BrowserContext* first,
+ content::BrowserContext* second) OVERRIDE;
+ virtual bool HasOffTheRecordContext(
+ content::BrowserContext* context) OVERRIDE;
+ virtual content::BrowserContext* GetOffTheRecordContext(
+ content::BrowserContext* context) OVERRIDE;
+
+ // Get the LazyInstance for ChromeBrowserClient.
+ static ChromeExtensionsBrowserClient* GetInstance();
+
+ private:
+ friend struct base::DefaultLazyInstanceTraits<ChromeExtensionsBrowserClient>;
+
+ DISALLOW_COPY_AND_ASSIGN(ChromeExtensionsBrowserClient);
+};
+
+} // namespace extensions
+
+#endif // CHROME_BROWSER_EXTENSIONS_CHROME_EXTENSIONS_BROWSER_CLIENT_H_
diff --git a/chrome/browser/extensions/devtools_util.cc b/chrome/browser/extensions/devtools_util.cc
index b17530d..987fe9e 100644
--- a/chrome/browser/extensions/devtools_util.cc
+++ b/chrome/browser/extensions/devtools_util.cc
@@ -8,8 +8,9 @@
#include "chrome/browser/extensions/extension_host.h"
#include "chrome/browser/extensions/extension_process_manager.h"
#include "chrome/browser/extensions/extension_system.h"
-#include "chrome/browser/extensions/lazy_background_task_queue.h"
+#include "chrome/browser/profiles/profile.h"
#include "chrome/common/extensions/extension.h"
+#include "extensions/browser/lazy_background_task_queue.h"
namespace extensions {
namespace devtools_util {
diff --git a/chrome/browser/extensions/event_router.cc b/chrome/browser/extensions/event_router.cc
index b5e88bf..c1203f6 100644
--- a/chrome/browser/extensions/event_router.cc
+++ b/chrome/browser/extensions/event_router.cc
@@ -23,7 +23,6 @@
#include "chrome/browser/extensions/extension_service.h"
#include "chrome/browser/extensions/extension_system.h"
#include "chrome/browser/extensions/extension_util.h"
-#include "chrome/browser/extensions/lazy_background_task_queue.h"
#include "chrome/browser/extensions/process_map.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/profiles/profile_manager.h"
@@ -37,6 +36,7 @@
#include "chrome/common/pref_names.h"
#include "content/public/browser/notification_service.h"
#include "content/public/browser/render_process_host.h"
+#include "extensions/browser/lazy_background_task_queue.h"
#include "extensions/common/extension_urls.h"
using base::DictionaryValue;
diff --git a/chrome/browser/extensions/extension_host.cc b/chrome/browser/extensions/extension_host.cc
index b859c41..e8da09d 100644
--- a/chrome/browser/extensions/extension_host.cc
+++ b/chrome/browser/extensions/extension_host.cc
@@ -258,6 +258,10 @@ WindowController* ExtensionHost::GetExtensionWindowController() const {
view()->browser()->extension_window_controller() : NULL;
}
+content::BrowserContext* ExtensionHost::browser_context() {
+ return profile_;
+}
+
const GURL& ExtensionHost::GetURL() const {
return host_contents()->GetURL();
}
diff --git a/chrome/browser/extensions/extension_host.h b/chrome/browser/extensions/extension_host.h
index 376d388..b5501a7 100644
--- a/chrome/browser/extensions/extension_host.h
+++ b/chrome/browser/extensions/extension_host.h
@@ -39,6 +39,7 @@ class Browser;
class PrefsTabHelper;
namespace content {
+class BrowserContext;
class RenderProcessHost;
class RenderWidgetHostView;
class SiteInstance;
@@ -115,6 +116,10 @@ class ExtensionHost : public content::WebContentsDelegate,
Profile* profile() const { return profile_; }
+ // Returns the same value as profile() but as a BrowserContext. Implemented
+ // in the .cc file to avoid including profile.h in this header.
+ content::BrowserContext* browser_context();
+
ViewType extension_host_type() const { return extension_host_type_; }
const GURL& GetURL() const;
diff --git a/chrome/browser/extensions/extension_system.cc b/chrome/browser/extensions/extension_system.cc
index 6ed7220..8bca0b8 100644
--- a/chrome/browser/extensions/extension_system.cc
+++ b/chrome/browser/extensions/extension_system.cc
@@ -27,7 +27,6 @@
#include "chrome/browser/extensions/extension_util.h"
#include "chrome/browser/extensions/extension_warning_badge_service.h"
#include "chrome/browser/extensions/extension_warning_set.h"
-#include "chrome/browser/extensions/lazy_background_task_queue.h"
#include "chrome/browser/extensions/management_policy.h"
#include "chrome/browser/extensions/navigation_observer.h"
#include "chrome/browser/extensions/standard_management_policy_provider.h"
@@ -44,6 +43,7 @@
#include "chrome/common/extensions/features/feature_channel.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/url_data_source.h"
+#include "extensions/browser/lazy_background_task_queue.h"
#include "extensions/common/constants.h"
#include "extensions/common/manifest.h"
@@ -79,6 +79,12 @@ ExtensionSystem* ExtensionSystem::Get(Profile* profile) {
return ExtensionSystemFactory::GetForProfile(profile);
}
+// static
+ExtensionSystem* ExtensionSystem::GetForBrowserContext(
+ content::BrowserContext* profile) {
+ return ExtensionSystemFactory::GetForProfile(static_cast<Profile*>(profile));
+}
+
//
// ExtensionSystemImpl::Shared
//
diff --git a/chrome/browser/extensions/extension_system.h b/chrome/browser/extensions/extension_system.h
index 07cbfb6..663c176 100644
--- a/chrome/browser/extensions/extension_system.h
+++ b/chrome/browser/extensions/extension_system.h
@@ -24,6 +24,10 @@ class DeviceLocalAccountManagementPolicyProvider;
}
#endif // defined(OS_CHROMEOS)
+namespace content {
+class BrowserContext;
+}
+
namespace extensions {
class Blacklist;
class ErrorConsole;
@@ -53,6 +57,10 @@ class ExtensionSystem : public BrowserContextKeyedService {
// a convenience wrapper around ExtensionSystemFactory::GetForProfile.
static ExtensionSystem* Get(Profile* profile);
+ // Returns the same instance as Get() above.
+ static ExtensionSystem* GetForBrowserContext(
+ content::BrowserContext* profile);
+
// BrowserContextKeyedService implementation.
virtual void Shutdown() OVERRIDE {}
diff --git a/chrome/browser/ui/webui/extensions/extension_settings_handler.cc b/chrome/browser/ui/webui/extensions/extension_settings_handler.cc
index 32b6e3d..c4f1b7e 100644
--- a/chrome/browser/ui/webui/extensions/extension_settings_handler.cc
+++ b/chrome/browser/ui/webui/extensions/extension_settings_handler.cc
@@ -39,7 +39,6 @@
#include "chrome/browser/extensions/extension_tab_util.h"
#include "chrome/browser/extensions/extension_util.h"
#include "chrome/browser/extensions/extension_warning_set.h"
-#include "chrome/browser/extensions/lazy_background_task_queue.h"
#include "chrome/browser/extensions/management_policy.h"
#include "chrome/browser/extensions/unpacked_installer.h"
#include "chrome/browser/extensions/updater/extension_updater.h"
@@ -77,6 +76,7 @@
#include "content/public/browser/web_ui.h"
#include "content/public/browser/web_ui_data_source.h"
#include "extensions/browser/extension_error.h"
+#include "extensions/browser/lazy_background_task_queue.h"
#include "extensions/browser/view_type_utils.h"
#include "extensions/common/constants.h"
#include "grit/browser_resources.h"
diff --git a/chrome/chrome_browser_extensions.gypi b/chrome/chrome_browser_extensions.gypi
index 36a3e6a..5303ad0 100644
--- a/chrome/chrome_browser_extensions.gypi
+++ b/chrome/chrome_browser_extensions.gypi
@@ -631,6 +631,8 @@
'browser/extensions/bundle_installer.h',
'browser/extensions/chrome_extension_function.cc',
'browser/extensions/chrome_extension_function.h',
+ 'browser/extensions/chrome_extensions_browser_client.cc',
+ 'browser/extensions/chrome_extensions_browser_client.h',
'browser/extensions/component_loader.cc',
'browser/extensions/component_loader.h',
'browser/extensions/context_menu_matcher.cc',
@@ -805,8 +807,6 @@
'browser/extensions/install_tracker.h',
'browser/extensions/install_tracker_factory.cc',
'browser/extensions/install_tracker_factory.h',
- 'browser/extensions/lazy_background_task_queue.cc',
- 'browser/extensions/lazy_background_task_queue.h',
'browser/extensions/location_bar_controller.h',
'browser/extensions/management_policy.cc',
'browser/extensions/management_policy.h',
diff --git a/chrome/chrome_tests_unit.gypi b/chrome/chrome_tests_unit.gypi
index 5d90dde..f0d3358 100644
--- a/chrome/chrome_tests_unit.gypi
+++ b/chrome/chrome_tests_unit.gypi
@@ -512,6 +512,7 @@
'../components/autofill/content/renderer/test_password_autofill_agent.h',
'../extensions/browser/file_highlighter_unittest.cc',
'../extensions/browser/file_reader_unittest.cc',
+ '../extensions/browser/lazy_background_task_queue_unittest.cc',
'../extensions/common/event_filter_unittest.cc',
'../extensions/common/extension_resource_unittest.cc',
'../extensions/common/id_util_unittest.cc',
@@ -888,7 +889,6 @@
'browser/extensions/external_policy_loader_unittest.cc',
'browser/extensions/external_provider_impl_chromeos_unittest.cc',
'browser/extensions/image_loader_unittest.cc',
- 'browser/extensions/lazy_background_task_queue_unittest.cc',
'browser/extensions/management_policy_unittest.cc',
'browser/extensions/menu_manager_unittest.cc',
'browser/extensions/pack_extension_unittest.cc',
@@ -2131,7 +2131,6 @@
'browser/extensions/extension_context_menu_model_unittest.cc',
'browser/extensions/extension_protocols_unittest.cc',
'browser/extensions/extension_ui_unittest.cc',
- 'browser/extensions/lazy_background_task_queue_unittest.cc',
'browser/extensions/pack_extension_unittest.cc',
'browser/extensions/permissions_updater_unittest.cc',
'browser/extensions/sandboxed_unpacker_unittest.cc',
diff --git a/chrome/test/base/chrome_test_suite.cc b/chrome/test/base/chrome_test_suite.cc
index ad2967e..e010054 100644
--- a/chrome/test/base/chrome_test_suite.cc
+++ b/chrome/test/base/chrome_test_suite.cc
@@ -17,6 +17,7 @@
#include "base/strings/utf_string_conversions.h"
#include "chrome/browser/browser_process.h"
#include "chrome/browser/chrome_content_browser_client.h"
+#include "chrome/browser/extensions/chrome_extensions_browser_client.h"
#include "chrome/browser/ui/webui/chrome_web_ui_controller_factory.h"
#include "chrome/common/chrome_constants.h"
#include "chrome/common/chrome_content_client.h"
@@ -171,6 +172,8 @@ void ChromeTestSuite::Initialize() {
extensions::ExtensionsClient::Set(
extensions::ChromeExtensionsClient::GetInstance());
+ extensions::ExtensionsBrowserClient::Set(
+ extensions::ChromeExtensionsBrowserClient::GetInstance());
// Only want to do this for unit tests.
if (!content::GetCurrentTestLauncherDelegate()) {
diff --git a/extensions/browser/DEPS b/extensions/browser/DEPS
index 1c35d9c..3c1ac11 100644
--- a/extensions/browser/DEPS
+++ b/extensions/browser/DEPS
@@ -1,3 +1,30 @@
include_rules = [
"+content/public/browser",
+
+ # Temporarily allowed includes as part of the app shell/extensions refactor.
+ #
+ # NOTE: Please do not add includes without talking to the app shell team;
+ # see OWNERS for this directory.
+ #
+ # TODO(jamescook): Remove these. http://crbug.com/162530
+ "+chrome/browser/chrome_notification_types.h",
+ "+chrome/browser/extensions/extension_host.h",
+ "+chrome/browser/extensions/extension_process_manager.h",
+ "+chrome/browser/extensions/extension_service.h",
+ "+chrome/browser/extensions/extension_system.h",
+ "+chrome/browser/extensions/process_map.h",
+ "+chrome/common/extensions/background_info.h",
+ "+chrome/common/extensions/extension.h",
+ "+chrome/common/extensions/extension_messages.h",
]
+
+specific_include_rules = {
+ ".*test\.cc": [
+ # Temporarily allowed testing includes. See above.
+ # TODO(jamescook): Remove these. http://crbug.com/159366
+ "+chrome/browser/extensions/extension_service_unittest.h",
+ "+chrome/browser/extensions/test_extension_system.h",
+ "+chrome/common/extensions/extension_builder.h",
+ "+chrome/test/base/testing_profile.h",
+ ]
+}
diff --git a/extensions/browser/OWNERS b/extensions/browser/OWNERS
new file mode 100644
index 0000000..b06f377
--- /dev/null
+++ b/extensions/browser/OWNERS
@@ -0,0 +1,7 @@
+# Please talk to the apps shell team before adding DEPS.
+per-file DEPS=set noparent
+per-file DEPS=benwells@chromium.org
+per-file DEPS=derat@chromium.org
+per-file DEPS=jamescook@chromium.org
+per-file DEPS=miket@chromium.org
+per-file DEPS=yoz@chromium.org
diff --git a/extensions/browser/extensions_browser_client.cc b/extensions/browser/extensions_browser_client.cc
new file mode 100644
index 0000000..2724d47
--- /dev/null
+++ b/extensions/browser/extensions_browser_client.cc
@@ -0,0 +1,28 @@
+// Copyright 2013 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 "extensions/browser/extensions_browser_client.h"
+
+#include "base/basictypes.h"
+
+namespace extensions {
+
+namespace {
+
+ExtensionsBrowserClient* g_client = NULL;
+
+} // namespace
+
+ExtensionsBrowserClient* ExtensionsBrowserClient::Get() {
+ return g_client;
+}
+
+void ExtensionsBrowserClient::Set(ExtensionsBrowserClient* client) {
+ // This can happen in tests.
+ if (g_client)
+ return;
+ g_client = client;
+}
+
+} // namespace extensions
diff --git a/extensions/browser/extensions_browser_client.h b/extensions/browser/extensions_browser_client.h
new file mode 100644
index 0000000..4810836
--- /dev/null
+++ b/extensions/browser/extensions_browser_client.h
@@ -0,0 +1,51 @@
+// Copyright 2013 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_EXTENSIONS_BROWSER_CLIENT_H_
+#define EXTENSIONS_BROWSER_EXTENSIONS_BROWSER_CLIENT_H_
+
+namespace content {
+class BrowserContext;
+}
+
+namespace extensions {
+
+// Interface to allow the extensions module to make browser-process-specific
+// queries of the embedder. Should be Set() once in the browser process.
+//
+// NOTE: Methods that do not require knowledge of browser concepts should be
+// added in ExtensionsClient (extensions/common/extensions_client.h) even if
+// they are only used in the browser process.
+class ExtensionsBrowserClient {
+ public:
+ virtual ~ExtensionsBrowserClient() {}
+
+ // Returns true if the embedder has started shutting down.
+ virtual bool IsShuttingDown() = 0;
+
+ // Returns true if the BrowserContexts could be considered equivalent, for
+ // example, if one is an off-the-record context owned by the other.
+ virtual bool IsSameContext(content::BrowserContext* first,
+ content::BrowserContext* second) = 0;
+
+ // Returns true if |context| has an off-the-record content associated with it.
+ virtual bool HasOffTheRecordContext(content::BrowserContext* context) = 0;
+
+ // Returns the off-the-record context associated with |context|. If |context|
+ // is already off-the-record, returns |context|.
+ // WARNING: This may create a new off-the-record context. To avoid creating
+ // another context, check HasOffTheRecordContext() first.
+ virtual content::BrowserContext* GetOffTheRecordContext(
+ content::BrowserContext* context) = 0;
+
+ // Returns the single instance of |this|.
+ static ExtensionsBrowserClient* Get();
+
+ // Initialize the single instance.
+ static void Set(ExtensionsBrowserClient* client);
+};
+
+} // namespace extensions
+
+#endif // EXTENSIONS_BROWSER_EXTENSIONS_BROWSER_CLIENT_H_
diff --git a/chrome/browser/extensions/lazy_background_task_queue.cc b/extensions/browser/lazy_background_task_queue.cc
index dc0bf4a..584d897 100644
--- a/chrome/browser/extensions/lazy_background_task_queue.cc
+++ b/extensions/browser/lazy_background_task_queue.cc
@@ -1,49 +1,51 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Copyright 2013 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 "chrome/browser/extensions/lazy_background_task_queue.h"
+#include "extensions/browser/lazy_background_task_queue.h"
#include "base/callback.h"
-#include "chrome/browser/browser_process.h"
#include "chrome/browser/chrome_notification_types.h"
#include "chrome/browser/extensions/extension_host.h"
#include "chrome/browser/extensions/extension_process_manager.h"
#include "chrome/browser/extensions/extension_service.h"
#include "chrome/browser/extensions/extension_system.h"
#include "chrome/browser/extensions/process_map.h"
-#include "chrome/browser/profiles/profile.h"
#include "chrome/common/extensions/background_info.h"
#include "chrome/common/extensions/extension.h"
#include "chrome/common/extensions/extension_messages.h"
+#include "content/public/browser/browser_context.h"
#include "content/public/browser/notification_service.h"
#include "content/public/browser/render_process_host.h"
#include "content/public/browser/render_view_host.h"
#include "content/public/browser/site_instance.h"
#include "content/public/browser/web_contents.h"
+#include "extensions/browser/extensions_browser_client.h"
#include "extensions/common/view_type.h"
namespace extensions {
-LazyBackgroundTaskQueue::LazyBackgroundTaskQueue(Profile* profile)
- : profile_(profile) {
+LazyBackgroundTaskQueue::LazyBackgroundTaskQueue(
+ content::BrowserContext* browser_context)
+ : browser_context_(browser_context) {
registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_HOST_DID_STOP_LOADING,
content::NotificationService::AllBrowserContextsAndSources());
registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_HOST_DESTROYED,
content::NotificationService::AllBrowserContextsAndSources());
registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UNLOADED,
- content::Source<Profile>(profile));
+ content::Source<content::BrowserContext>(browser_context));
}
LazyBackgroundTaskQueue::~LazyBackgroundTaskQueue() {
}
bool LazyBackgroundTaskQueue::ShouldEnqueueTask(
- Profile* profile, const Extension* extension) {
+ content::BrowserContext* browser_context,
+ const Extension* extension) {
DCHECK(extension);
if (BackgroundInfo::HasBackgroundPage(extension)) {
- ExtensionProcessManager* pm = ExtensionSystem::Get(profile)->
- process_manager();
+ ExtensionProcessManager* pm = ExtensionSystem::GetForBrowserContext(
+ browser_context)->process_manager();
DCHECK(pm);
ExtensionHost* background_host =
pm->GetBackgroundHostForExtension(extension->id());
@@ -57,30 +59,30 @@ bool LazyBackgroundTaskQueue::ShouldEnqueueTask(
}
void LazyBackgroundTaskQueue::AddPendingTask(
- Profile* profile,
+ content::BrowserContext* browser_context,
const std::string& extension_id,
const PendingTask& task) {
- if (g_browser_process->IsShuttingDown()) {
+ if (ExtensionsBrowserClient::Get()->IsShuttingDown()) {
task.Run(NULL);
return;
}
PendingTasksList* tasks_list = NULL;
- PendingTasksKey key(profile, extension_id);
+ PendingTasksKey key(browser_context, extension_id);
PendingTasksMap::iterator it = pending_tasks_.find(key);
if (it == pending_tasks_.end()) {
tasks_list = new PendingTasksList();
pending_tasks_[key] = linked_ptr<PendingTasksList>(tasks_list);
- ExtensionService* extension_service =
- ExtensionSystem::Get(profile)->extension_service();
+ ExtensionService* extension_service = ExtensionSystem::GetForBrowserContext(
+ browser_context)->extension_service();
DCHECK(extension_service);
const Extension* extension =
extension_service->extensions()->GetByID(extension_id);
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.
- ExtensionProcessManager* pm =
- ExtensionSystem::Get(profile)->process_manager();
+ ExtensionProcessManager* pm = ExtensionSystem::GetForBrowserContext(
+ browser_context)->process_manager();
pm->IncrementLazyKeepaliveCount(extension);
// Creating the background host may fail, e.g. if |profile| is incognito
// but the extension isn't enabled in incognito mode.
@@ -99,12 +101,13 @@ void LazyBackgroundTaskQueue::AddPendingTask(
void LazyBackgroundTaskQueue::ProcessPendingTasks(
ExtensionHost* host,
- Profile* profile,
+ content::BrowserContext* browser_context,
const Extension* extension) {
- if (!profile->IsSameProfile(profile_))
+ if (!ExtensionsBrowserClient::Get()->IsSameContext(browser_context,
+ browser_context_))
return;
- PendingTasksKey key(profile, extension->id());
+ PendingTasksKey key(browser_context, extension->id());
PendingTasksMap::iterator map_it = pending_tasks_.find(key);
if (map_it == pending_tasks_.end()) {
if (BackgroundInfo::HasLazyBackgroundPage(extension))
@@ -126,7 +129,7 @@ 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(profile)->process_manager()->
+ ExtensionSystem::GetForBrowserContext(browser_context)->process_manager()->
DecrementLazyKeepaliveCount(extension);
}
}
@@ -143,7 +146,7 @@ void LazyBackgroundTaskQueue::Observe(
content::Details<ExtensionHost>(details).ptr();
if (host->extension_host_type() == VIEW_TYPE_EXTENSION_BACKGROUND_PAGE) {
CHECK(host->did_stop_loading());
- ProcessPendingTasks(host, host->profile(), host->extension());
+ ProcessPendingTasks(host, host->browser_context(), host->extension());
}
break;
}
@@ -152,23 +155,30 @@ void LazyBackgroundTaskQueue::Observe(
// This can happen if the extension crashes. This is not strictly
// necessary, since we also unload the extension in that case (which
// dispatches the tasks below), but is a good extra precaution.
- Profile* profile = content::Source<Profile>(source).ptr();
+ content::BrowserContext* browser_context =
+ content::Source<content::BrowserContext>(source).ptr();
ExtensionHost* host =
content::Details<ExtensionHost>(details).ptr();
if (host->extension_host_type() == VIEW_TYPE_EXTENSION_BACKGROUND_PAGE) {
- ProcessPendingTasks(NULL, profile, host->extension());
+ ProcessPendingTasks(NULL, browser_context, host->extension());
}
break;
}
case chrome::NOTIFICATION_EXTENSION_UNLOADED: {
// Notify consumers that the page failed to load.
- Profile* profile = content::Source<Profile>(source).ptr();
+ content::BrowserContext* browser_context =
+ content::Source<content::BrowserContext>(source).ptr();
UnloadedExtensionInfo* unloaded =
content::Details<UnloadedExtensionInfo>(details).ptr();
- ProcessPendingTasks(NULL, profile, unloaded->extension);
- if (profile->HasOffTheRecordProfile()) {
- ProcessPendingTasks(NULL, profile->GetOffTheRecordProfile(),
- unloaded->extension);
+ ProcessPendingTasks(NULL, browser_context, unloaded->extension);
+ // If this extension is also running in an off-the-record context,
+ // notify that task queue as well.
+ ExtensionsBrowserClient* browser_client = ExtensionsBrowserClient::Get();
+ if (browser_client->HasOffTheRecordContext(browser_context)) {
+ ProcessPendingTasks(
+ NULL,
+ browser_client->GetOffTheRecordContext(browser_context),
+ unloaded->extension);
}
break;
}
diff --git a/chrome/browser/extensions/lazy_background_task_queue.h b/extensions/browser/lazy_background_task_queue.h
index d6419d5..a92ec7c 100644
--- a/chrome/browser/extensions/lazy_background_task_queue.h
+++ b/extensions/browser/lazy_background_task_queue.h
@@ -1,21 +1,23 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Copyright 2013 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 CHROME_BROWSER_EXTENSIONS_LAZY_BACKGROUND_TASK_QUEUE_H_
-#define CHROME_BROWSER_EXTENSIONS_LAZY_BACKGROUND_TASK_QUEUE_H_
+#ifndef EXTENSIONS_BROWSER_LAZY_BACKGROUND_TASK_QUEUE_H_
+#define EXTENSIONS_BROWSER_LAZY_BACKGROUND_TASK_QUEUE_H_
#include <map>
#include <string>
-#include "base/compiler_specific.h"
#include "base/callback_forward.h"
+#include "base/compiler_specific.h"
#include "base/gtest_prod_util.h"
#include "base/memory/linked_ptr.h"
#include "content/public/browser/notification_observer.h"
#include "content/public/browser/notification_registrar.h"
-class Profile;
+namespace content {
+class BrowserContext;
+}
namespace extensions {
class Extension;
@@ -31,7 +33,7 @@ class LazyBackgroundTaskQueue : public content::NotificationObserver {
public:
typedef base::Callback<void(ExtensionHost*)> PendingTask;
- explicit LazyBackgroundTaskQueue(Profile* profile);
+ explicit LazyBackgroundTaskQueue(content::BrowserContext* browser_context);
virtual ~LazyBackgroundTaskQueue();
// Returns the number of extensions having pending tasks.
@@ -41,7 +43,8 @@ class LazyBackgroundTaskQueue : public content::NotificationObserver {
// extension has a lazy background page that isn't ready yet). If the
// extension has a lazy background page that is being suspended this method
// cancels that suspension.
- bool ShouldEnqueueTask(Profile* profile, const Extension* extension);
+ bool ShouldEnqueueTask(content::BrowserContext* context,
+ const Extension* extension);
// Adds a task to the queue for a given extension. If this is the first
// task added for the extension, its lazy background page will be loaded.
@@ -49,17 +52,17 @@ class LazyBackgroundTaskQueue : public content::NotificationObserver {
// page fails to load for some reason (e.g. a crash or browser
// shutdown). In the latter case, the ExtensionHost parameter is NULL.
void AddPendingTask(
- Profile* profile,
+ content::BrowserContext* context,
const std::string& extension_id,
const PendingTask& task);
private:
FRIEND_TEST_ALL_PREFIXES(LazyBackgroundTaskQueueTest, ProcessPendingTasks);
- // A map between an extension_id,Profile pair and the queue of tasks pending
- // the load of its background page.
+ // A map between a BrowserContext/extension_id pair and the queue of tasks
+ // pending the load of its background page.
typedef std::string ExtensionID;
- typedef std::pair<Profile*, ExtensionID> PendingTasksKey;
+ typedef std::pair<content::BrowserContext*, ExtensionID> PendingTasksKey;
typedef std::vector<PendingTask> PendingTasksList;
typedef std::map<PendingTasksKey,
linked_ptr<PendingTasksList> > PendingTasksMap;
@@ -73,14 +76,14 @@ class LazyBackgroundTaskQueue : public content::NotificationObserver {
// load (host is NULL in that case). All enqueued tasks are run in order.
void ProcessPendingTasks(
ExtensionHost* host,
- Profile* profile,
+ content::BrowserContext* context,
const Extension* extension);
- Profile* profile_;
+ content::BrowserContext* browser_context_;
content::NotificationRegistrar registrar_;
PendingTasksMap pending_tasks_;
};
} // namespace extensions
-#endif // CHROME_BROWSER_EXTENSIONS_LAZY_BACKGROUND_TASK_QUEUE_H_
+#endif // EXTENSIONS_BROWSER_LAZY_BACKGROUND_TASK_QUEUE_H_
diff --git a/chrome/browser/extensions/lazy_background_task_queue_unittest.cc b/extensions/browser/lazy_background_task_queue_unittest.cc
index df68492..27d8471 100644
--- a/chrome/browser/extensions/lazy_background_task_queue_unittest.cc
+++ b/extensions/browser/lazy_background_task_queue_unittest.cc
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "chrome/browser/extensions/lazy_background_task_queue.h"
+#include "extensions/browser/lazy_background_task_queue.h"
#include "base/bind.h"
#include "base/command_line.h"
@@ -179,6 +179,12 @@ TEST_F(LazyBackgroundTaskQueueTest, ProcessPendingTasks) {
EXPECT_EQ(0, task_run_count());
EXPECT_EQ(1u, queue.extensions_with_pending_tasks());
+ // Trying to run tasks for an unrelated profile should do nothing.
+ TestingProfile profile2;
+ queue.ProcessPendingTasks(NULL, &profile2, extension);
+ EXPECT_EQ(0, task_run_count());
+ EXPECT_EQ(1u, queue.extensions_with_pending_tasks());
+
// Processing tasks when there is one pending runs the task and removes the
// extension from the list of extensions with pending tasks.
queue.ProcessPendingTasks(NULL, profile_.get(), extension);
diff --git a/extensions/extensions.gyp b/extensions/extensions.gyp
index 335eff9..e54d965 100644
--- a/extensions/extensions.gyp
+++ b/extensions/extensions.gyp
@@ -112,10 +112,14 @@
'browser/extension_prefs_scope.h',
'browser/extension_error.cc',
'browser/extension_error.h',
+ 'browser/extensions_browser_client.cc',
+ 'browser/extensions_browser_client.h',
'browser/file_highlighter.cc',
'browser/file_highlighter.h',
'browser/file_reader.cc',
'browser/file_reader.h',
+ 'browser/lazy_background_task_queue.cc',
+ 'browser/lazy_background_task_queue.h',
'browser/pref_names.cc',
'browser/pref_names.h',
'browser/view_type_utils.cc',