| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 "base/bind.h" | 5 #include "base/bind.h" |
| 6 #include "base/command_line.h" | 6 #include "base/command_line.h" |
| 7 #include "chrome/browser/extensions/extension_process_manager.h" | 7 #include "chrome/browser/extensions/extension_process_manager.h" |
| 8 | 8 |
| 9 #include "chrome/browser/ui/browser_window.h" | 9 #include "chrome/browser/ui/browser_window.h" |
| 10 #include "content/browser/browsing_instance.h" | 10 #include "content/browser/browsing_instance.h" |
| 11 #if defined(OS_MACOSX) | 11 #if defined(OS_MACOSX) |
| 12 #include "chrome/browser/extensions/extension_host_mac.h" | 12 #include "chrome/browser/extensions/extension_host_mac.h" |
| 13 #endif | 13 #endif |
| 14 #include "chrome/browser/extensions/extension_host.h" | 14 #include "chrome/browser/extensions/extension_host.h" |
| 15 #include "chrome/browser/extensions/extension_info_map.h" | 15 #include "chrome/browser/extensions/extension_info_map.h" |
| 16 #include "chrome/browser/extensions/extension_service.h" | 16 #include "chrome/browser/extensions/extension_service.h" |
| 17 #include "chrome/browser/profiles/profile.h" | 17 #include "chrome/browser/profiles/profile.h" |
| 18 #include "chrome/browser/ui/browser.h" | 18 #include "chrome/browser/ui/browser.h" |
| 19 #include "chrome/common/chrome_notification_types.h" | 19 #include "chrome/common/chrome_notification_types.h" |
| 20 #include "chrome/common/chrome_switches.h" | 20 #include "chrome/common/chrome_switches.h" |
| 21 #include "chrome/common/extensions/extension.h" | 21 #include "chrome/common/extensions/extension.h" |
| 22 #include "chrome/common/url_constants.h" | 22 #include "chrome/common/url_constants.h" |
| 23 #include "chrome/common/chrome_view_types.h" | 23 #include "chrome/common/chrome_view_types.h" |
| 24 #include "content/browser/browser_thread.h" | 24 #include "content/browser/browser_thread.h" |
| 25 #include "content/browser/site_instance.h" | 25 #include "content/browser/site_instance.h" |
| 26 #include "content/browser/tab_contents/tab_contents.h" | 26 #include "content/browser/tab_contents/tab_contents.h" |
| 27 #include "content/common/notification_service.h" | 27 #include "content/public/browser/notification_service.h" |
| 28 | 28 |
| 29 namespace { | 29 namespace { |
| 30 | 30 |
| 31 // Incognito profiles use this process manager. It is mostly a shim that decides | 31 // Incognito profiles use this process manager. It is mostly a shim that decides |
| 32 // whether to fall back on the original profile's ExtensionProcessManager based | 32 // whether to fall back on the original profile's ExtensionProcessManager based |
| 33 // on whether a given extension uses "split" or "spanning" incognito behavior. | 33 // on whether a given extension uses "split" or "spanning" incognito behavior. |
| 34 class IncognitoExtensionProcessManager : public ExtensionProcessManager { | 34 class IncognitoExtensionProcessManager : public ExtensionProcessManager { |
| 35 public: | 35 public: |
| 36 explicit IncognitoExtensionProcessManager(Profile* profile); | 36 explicit IncognitoExtensionProcessManager(Profile* profile); |
| 37 virtual ~IncognitoExtensionProcessManager() {} | 37 virtual ~IncognitoExtensionProcessManager() {} |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 101 content::Source<Profile>(original_profile)); | 101 content::Source<Profile>(original_profile)); |
| 102 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UNLOADED, | 102 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UNLOADED, |
| 103 content::Source<Profile>(original_profile)); | 103 content::Source<Profile>(original_profile)); |
| 104 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_HOST_DESTROYED, | 104 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_HOST_DESTROYED, |
| 105 content::Source<Profile>(profile)); | 105 content::Source<Profile>(profile)); |
| 106 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_HOST_VIEW_SHOULD_CLOSE, | 106 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_HOST_VIEW_SHOULD_CLOSE, |
| 107 content::Source<Profile>(profile)); | 107 content::Source<Profile>(profile)); |
| 108 // We can listen to everything for SITE_INSTANCE_DELETED because we check the | 108 // We can listen to everything for SITE_INSTANCE_DELETED because we check the |
| 109 // |site_instance_id| in UnregisterExtensionSiteInstance. | 109 // |site_instance_id| in UnregisterExtensionSiteInstance. |
| 110 registrar_.Add(this, content::NOTIFICATION_SITE_INSTANCE_DELETED, | 110 registrar_.Add(this, content::NOTIFICATION_SITE_INSTANCE_DELETED, |
| 111 NotificationService::AllBrowserContextsAndSources()); | 111 content::NotificationService::AllBrowserContextsAndSources()); |
| 112 registrar_.Add(this, content::NOTIFICATION_APP_TERMINATING, | 112 registrar_.Add(this, content::NOTIFICATION_APP_TERMINATING, |
| 113 NotificationService::AllSources()); | 113 content::NotificationService::AllSources()); |
| 114 } | 114 } |
| 115 | 115 |
| 116 ExtensionProcessManager::~ExtensionProcessManager() { | 116 ExtensionProcessManager::~ExtensionProcessManager() { |
| 117 CloseBackgroundHosts(); | 117 CloseBackgroundHosts(); |
| 118 DCHECK(background_hosts_.empty()); | 118 DCHECK(background_hosts_.empty()); |
| 119 } | 119 } |
| 120 | 120 |
| 121 ExtensionHost* ExtensionProcessManager::CreateViewHost( | 121 ExtensionHost* ExtensionProcessManager::CreateViewHost( |
| 122 const Extension* extension, | 122 const Extension* extension, |
| 123 const GURL& url, | 123 const GURL& url, |
| (...skipping 328 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 452 } | 452 } |
| 453 } | 453 } |
| 454 | 454 |
| 455 void ExtensionProcessManager::OnExtensionHostCreated(ExtensionHost* host, | 455 void ExtensionProcessManager::OnExtensionHostCreated(ExtensionHost* host, |
| 456 bool is_background) { | 456 bool is_background) { |
| 457 DCHECK_EQ(browsing_instance_->browser_context(), host->profile()); | 457 DCHECK_EQ(browsing_instance_->browser_context(), host->profile()); |
| 458 | 458 |
| 459 all_hosts_.insert(host); | 459 all_hosts_.insert(host); |
| 460 if (is_background) | 460 if (is_background) |
| 461 background_hosts_.insert(host); | 461 background_hosts_.insert(host); |
| 462 NotificationService::current()->Notify( | 462 content::NotificationService::current()->Notify( |
| 463 chrome::NOTIFICATION_EXTENSION_HOST_CREATED, | 463 chrome::NOTIFICATION_EXTENSION_HOST_CREATED, |
| 464 content::Source<ExtensionProcessManager>(this), | 464 content::Source<ExtensionProcessManager>(this), |
| 465 content::Details<ExtensionHost>(host)); | 465 content::Details<ExtensionHost>(host)); |
| 466 } | 466 } |
| 467 | 467 |
| 468 void ExtensionProcessManager::CloseBackgroundHosts() { | 468 void ExtensionProcessManager::CloseBackgroundHosts() { |
| 469 for (ExtensionHostSet::iterator iter = background_hosts_.begin(); | 469 for (ExtensionHostSet::iterator iter = background_hosts_.begin(); |
| 470 iter != background_hosts_.end(); ) { | 470 iter != background_hosts_.end(); ) { |
| 471 ExtensionHostSet::iterator current = iter++; | 471 ExtensionHostSet::iterator current = iter++; |
| 472 delete *current; | 472 delete *current; |
| 473 } | 473 } |
| 474 } | 474 } |
| 475 | 475 |
| 476 // | 476 // |
| 477 // IncognitoExtensionProcessManager | 477 // IncognitoExtensionProcessManager |
| 478 // | 478 // |
| 479 | 479 |
| 480 IncognitoExtensionProcessManager::IncognitoExtensionProcessManager( | 480 IncognitoExtensionProcessManager::IncognitoExtensionProcessManager( |
| 481 Profile* profile) | 481 Profile* profile) |
| 482 : ExtensionProcessManager(profile), | 482 : ExtensionProcessManager(profile), |
| 483 original_manager_(profile->GetOriginalProfile()-> | 483 original_manager_(profile->GetOriginalProfile()-> |
| 484 GetExtensionProcessManager()) { | 484 GetExtensionProcessManager()) { |
| 485 DCHECK(profile->IsOffTheRecord()); | 485 DCHECK(profile->IsOffTheRecord()); |
| 486 | 486 |
| 487 registrar_.Add(this, chrome::NOTIFICATION_BROWSER_WINDOW_READY, | 487 registrar_.Add(this, chrome::NOTIFICATION_BROWSER_WINDOW_READY, |
| 488 NotificationService::AllSources()); | 488 content::NotificationService::AllSources()); |
| 489 } | 489 } |
| 490 | 490 |
| 491 ExtensionHost* IncognitoExtensionProcessManager::CreateViewHost( | 491 ExtensionHost* IncognitoExtensionProcessManager::CreateViewHost( |
| 492 const Extension* extension, | 492 const Extension* extension, |
| 493 const GURL& url, | 493 const GURL& url, |
| 494 Browser* browser, | 494 Browser* browser, |
| 495 content::ViewType view_type) { | 495 content::ViewType view_type) { |
| 496 if (extension->incognito_split_mode()) { | 496 if (extension->incognito_split_mode()) { |
| 497 if (IsIncognitoEnabled(extension)) { | 497 if (IsIncognitoEnabled(extension)) { |
| 498 return ExtensionProcessManager::CreateViewHost(extension, url, | 498 return ExtensionProcessManager::CreateViewHost(extension, url, |
| (...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 594 if (service && service->is_ready()) | 594 if (service && service->is_ready()) |
| 595 CreateBackgroundHostsForProfileStartup(this, service->extensions()); | 595 CreateBackgroundHostsForProfileStartup(this, service->extensions()); |
| 596 } | 596 } |
| 597 break; | 597 break; |
| 598 } | 598 } |
| 599 default: | 599 default: |
| 600 ExtensionProcessManager::Observe(type, source, details); | 600 ExtensionProcessManager::Observe(type, source, details); |
| 601 break; | 601 break; |
| 602 } | 602 } |
| 603 } | 603 } |
| OLD | NEW |