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

Side by Side Diff: extensions/browser/process_manager.cc

Issue 182253010: Register a Service Worker when an extension is enabled. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Sync to r261176 Created 6 years, 8 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "extensions/browser/process_manager.h" 5 #include "extensions/browser/process_manager.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/command_line.h" 8 #include "base/command_line.h"
9 #include "base/lazy_instance.h" 9 #include "base/lazy_instance.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
92 // Incognito profiles use this process manager. It is mostly a shim that decides 92 // Incognito profiles use this process manager. It is mostly a shim that decides
93 // whether to fall back on the original profile's ProcessManager based 93 // whether to fall back on the original profile's ProcessManager based
94 // on whether a given extension uses "split" or "spanning" incognito behavior. 94 // on whether a given extension uses "split" or "spanning" incognito behavior.
95 class IncognitoProcessManager : public ProcessManager { 95 class IncognitoProcessManager : public ProcessManager {
96 public: 96 public:
97 IncognitoProcessManager(BrowserContext* incognito_context, 97 IncognitoProcessManager(BrowserContext* incognito_context,
98 BrowserContext* original_context, 98 BrowserContext* original_context,
99 ProcessManager* original_manager); 99 ProcessManager* original_manager);
100 virtual ~IncognitoProcessManager() {} 100 virtual ~IncognitoProcessManager() {}
101 virtual bool CreateBackgroundHost(const Extension* extension, 101 virtual bool CreateBackgroundHost(const Extension* extension,
102 const GURL& url) OVERRIDE; 102 const GURL& url,
103 const base::Closure& continuation) OVERRIDE;
103 virtual SiteInstance* GetSiteInstanceForURL(const GURL& url) OVERRIDE; 104 virtual SiteInstance* GetSiteInstanceForURL(const GURL& url) OVERRIDE;
104 105
105 private: 106 private:
106 ProcessManager* original_manager_; 107 ProcessManager* original_manager_;
107 108
108 DISALLOW_COPY_AND_ASSIGN(IncognitoProcessManager); 109 DISALLOW_COPY_AND_ASSIGN(IncognitoProcessManager);
109 }; 110 };
110 111
111 static void CreateBackgroundHostForExtensionLoad( 112 static void CreateBackgroundHostForExtensionLoad(
112 ProcessManager* manager, const Extension* extension) { 113 ProcessManager* manager, const Extension* extension) {
(...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after
284 285
285 void ProcessManager::AddObserver(ProcessManagerObserver* observer) { 286 void ProcessManager::AddObserver(ProcessManagerObserver* observer) {
286 observer_list_.AddObserver(observer); 287 observer_list_.AddObserver(observer);
287 } 288 }
288 289
289 void ProcessManager::RemoveObserver(ProcessManagerObserver* observer) { 290 void ProcessManager::RemoveObserver(ProcessManagerObserver* observer) {
290 observer_list_.RemoveObserver(observer); 291 observer_list_.RemoveObserver(observer);
291 } 292 }
292 293
293 bool ProcessManager::CreateBackgroundHost(const Extension* extension, 294 bool ProcessManager::CreateBackgroundHost(const Extension* extension,
294 const GURL& url) { 295 const GURL& url,
296 const base::Closure& continuation) {
295 // Hosted apps are taken care of from BackgroundContentsService. Ignore them 297 // Hosted apps are taken care of from BackgroundContentsService. Ignore them
296 // here. 298 // here.
297 if (extension->is_hosted_app() || 299 if (extension->is_hosted_app() ||
298 !ExtensionsBrowserClient::Get()-> 300 !ExtensionsBrowserClient::Get()->
299 IsBackgroundPageAllowed(GetBrowserContext())) { 301 IsBackgroundPageAllowed(GetBrowserContext())) {
300 return false; 302 return false;
301 } 303 }
302 304
303 // Don't create multiple background hosts for an extension. 305 // Don't create multiple background hosts for an extension.
304 if (GetBackgroundHostForExtension(extension->id())) 306 if (GetBackgroundHostForExtension(extension->id())) {
307 if (!continuation.is_null())
308 continuation.Run();
305 return true; // TODO(kalman): return false here? It might break things... 309 return true; // TODO(kalman): return false here? It might break things...
310 }
306 311
307 ExtensionHost* host = 312 ExtensionHost* host =
308 new ExtensionHost(extension, GetSiteInstanceForURL(url), url, 313 new ExtensionHost(extension, GetSiteInstanceForURL(url), url,
309 VIEW_TYPE_EXTENSION_BACKGROUND_PAGE); 314 VIEW_TYPE_EXTENSION_BACKGROUND_PAGE);
310 host->CreateRenderViewSoon(); 315 host->CreateRenderViewSoon(continuation);
311 OnBackgroundHostCreated(host); 316 OnBackgroundHostCreated(host);
312 return true; 317 return true;
313 } 318 }
314 319
315 ExtensionHost* ProcessManager::GetBackgroundHostForExtension( 320 ExtensionHost* ProcessManager::GetBackgroundHostForExtension(
316 const std::string& extension_id) { 321 const std::string& extension_id) {
317 for (ExtensionHostSet::iterator iter = background_hosts_.begin(); 322 for (ExtensionHostSet::iterator iter = background_hosts_.begin();
318 iter != background_hosts_.end(); ++iter) { 323 iter != background_hosts_.end(); ++iter) {
319 ExtensionHost* host = *iter; 324 ExtensionHost* host = *iter;
320 if (host->extension_id() == extension_id) 325 if (host->extension_id() == extension_id)
(...skipping 571 matching lines...) Expand 10 before | Expand all | Expand 10 after
892 // The original profile will have its own ProcessManager to 897 // The original profile will have its own ProcessManager to
893 // load the background pages of the spanning extensions. This process 898 // load the background pages of the spanning extensions. This process
894 // manager need only worry about the split mode extensions, which is handled 899 // manager need only worry about the split mode extensions, which is handled
895 // in the NOTIFICATION_BROWSER_WINDOW_READY notification handler. 900 // in the NOTIFICATION_BROWSER_WINDOW_READY notification handler.
896 registrar_.Remove(this, chrome::NOTIFICATION_EXTENSIONS_READY, 901 registrar_.Remove(this, chrome::NOTIFICATION_EXTENSIONS_READY,
897 content::Source<BrowserContext>(original_context)); 902 content::Source<BrowserContext>(original_context));
898 registrar_.Remove(this, chrome::NOTIFICATION_PROFILE_CREATED, 903 registrar_.Remove(this, chrome::NOTIFICATION_PROFILE_CREATED,
899 content::Source<BrowserContext>(original_context)); 904 content::Source<BrowserContext>(original_context));
900 } 905 }
901 906
902 bool IncognitoProcessManager::CreateBackgroundHost(const Extension* extension, 907 bool IncognitoProcessManager::CreateBackgroundHost(
903 const GURL& url) { 908 const Extension* extension,
909 const GURL& url,
910 const base::Closure& continuation) {
904 if (IncognitoInfo::IsSplitMode(extension)) { 911 if (IncognitoInfo::IsSplitMode(extension)) {
905 if (ExtensionsBrowserClient::Get()->IsExtensionIncognitoEnabled( 912 if (ExtensionsBrowserClient::Get()->IsExtensionIncognitoEnabled(
906 extension->id(), GetBrowserContext())) 913 extension->id(), GetBrowserContext()))
907 return ProcessManager::CreateBackgroundHost(extension, url); 914 return ProcessManager::CreateBackgroundHost(extension, url, continuation);
908 } else { 915 } else {
909 // Do nothing. If an extension is spanning, then its original-profile 916 // Do nothing. If an extension is spanning, then its original-profile
910 // background page is shared with incognito, so we don't create another. 917 // background page is shared with incognito, so we don't create another.
911 } 918 }
912 return false; 919 return false;
913 } 920 }
914 921
915 SiteInstance* IncognitoProcessManager::GetSiteInstanceForURL(const GURL& url) { 922 SiteInstance* IncognitoProcessManager::GetSiteInstanceForURL(const GURL& url) {
916 ExtensionRegistry* registry = ExtensionRegistry::Get(GetBrowserContext()); 923 ExtensionRegistry* registry = ExtensionRegistry::Get(GetBrowserContext());
917 if (registry) { 924 if (registry) {
918 const Extension* extension = 925 const Extension* extension =
919 registry->enabled_extensions().GetExtensionOrAppByURL(url); 926 registry->enabled_extensions().GetExtensionOrAppByURL(url);
920 if (extension && !IncognitoInfo::IsSplitMode(extension)) { 927 if (extension && !IncognitoInfo::IsSplitMode(extension)) {
921 return original_manager_->GetSiteInstanceForURL(url); 928 return original_manager_->GetSiteInstanceForURL(url);
922 } 929 }
923 } 930 }
924 return ProcessManager::GetSiteInstanceForURL(url); 931 return ProcessManager::GetSiteInstanceForURL(url);
925 } 932 }
926 933
927 } // namespace extensions 934 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698