Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(16)

Unified Diff: extensions/browser/process_manager.cc

Issue 381283002: Refactor code that defers extension background page loading (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: larger DeferLoadingBackgroundHosts Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: extensions/browser/process_manager.cc
diff --git a/extensions/browser/process_manager.cc b/extensions/browser/process_manager.cc
index f6297ec21c8f79c01e0a5d1c796a17043e8e0fd9..1017ff7166b1d2c239b0c4c1a0971c16bc7f4e32 100644
--- a/extensions/browser/process_manager.cc
+++ b/extensions/browser/process_manager.cc
@@ -227,6 +227,7 @@ ProcessManager::ProcessManager(BrowserContext* context,
&ProcessManager::OnDevToolsStateChanged,
base::Unretained(this))),
weak_ptr_factory_(this) {
+ LOG(ERROR) << "JAMES new ProcessManager";
registrar_.Add(this, chrome::NOTIFICATION_EXTENSIONS_READY,
content::Source<BrowserContext>(original_context));
registrar_.Add(this,
@@ -615,13 +616,14 @@ void ProcessManager::CancelSuspend(const Extension* extension) {
}
void ProcessManager::OnBrowserWindowReady() {
+ LOG(ERROR) << "JAMES OnBrowserWindowReady";
// If the extension system isn't ready yet the background hosts will be
// created via NOTIFICATION_EXTENSIONS_READY below.
ExtensionSystem* system = ExtensionSystem::Get(GetBrowserContext());
if (!system->ready().is_signaled())
return;
- CreateBackgroundHostsForProfileStartup();
+ MaybeCreateBackgroundHostsForStartup();
}
content::BrowserContext* ProcessManager::GetBrowserContext() const {
@@ -644,13 +646,12 @@ void ProcessManager::Observe(int type,
switch (type) {
case chrome::NOTIFICATION_EXTENSIONS_READY:
case chrome::NOTIFICATION_PROFILE_CREATED: {
- // Don't load background hosts now if the loading should be deferred.
- // Instead they will be loaded when a browser window for this profile
- // (or an incognito profile from this profile) is ready.
- if (DeferLoadingBackgroundHosts())
- break;
+ if (type == chrome::NOTIFICATION_EXTENSIONS_READY)
+ LOG(ERROR) << "JAMES got extensions_ready";
+ else
+ LOG(ERROR) << "JAMES got profile_created";
- CreateBackgroundHostsForProfileStartup();
+ MaybeCreateBackgroundHostsForStartup();
break;
}
@@ -742,6 +743,7 @@ void ProcessManager::Observe(int type,
}
case chrome::NOTIFICATION_PROFILE_DESTROYED: {
+ LOG(ERROR) << "JAMES got profile_destroyed";
// Close background hosts when the last browser is closed so that they
// have time to shutdown various objects on different threads. Our
// destructor is called too late in the shutdown sequence.
@@ -778,12 +780,16 @@ void ProcessManager::OnDevToolsStateChanged(
}
}
-void ProcessManager::CreateBackgroundHostsForProfileStartup() {
- if (startup_background_hosts_created_ ||
- !ExtensionsBrowserClient::Get()->
- IsBackgroundPageAllowed(GetBrowserContext())) {
+void ProcessManager::MaybeCreateBackgroundHostsForStartup() {
+ if (startup_background_hosts_created_)
+ return;
+
+ // The embedder might want to defer background page loading. For example,
+ // Chrome defers background page loading when it is launched to show the app
+ // list, then triggers a load later via OnBrowserWindowReady().
+ if (ExtensionsBrowserClient::Get()->DeferLoadingBackgroundHosts(
+ GetBrowserContext()))
return;
- }
const ExtensionSet& enabled_extensions =
ExtensionRegistry::Get(GetBrowserContext())->enabled_extensions();

Powered by Google App Engine
This is Rietveld 408576698