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 336 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
460 } | 460 } |
461 } | 461 } |
462 | 462 |
463 void ExtensionProcessManager::OnExtensionHostCreated(ExtensionHost* host, | 463 void ExtensionProcessManager::OnExtensionHostCreated(ExtensionHost* host, |
464 bool is_background) { | 464 bool is_background) { |
465 DCHECK_EQ(browsing_instance_->browser_context(), host->profile()); | 465 DCHECK_EQ(browsing_instance_->browser_context(), host->profile()); |
466 | 466 |
467 all_hosts_.insert(host); | 467 all_hosts_.insert(host); |
468 if (is_background) | 468 if (is_background) |
469 background_hosts_.insert(host); | 469 background_hosts_.insert(host); |
470 NotificationService::current()->Notify( | 470 content::NotificationService::current()->Notify( |
471 chrome::NOTIFICATION_EXTENSION_HOST_CREATED, | 471 chrome::NOTIFICATION_EXTENSION_HOST_CREATED, |
472 content::Source<ExtensionProcessManager>(this), | 472 content::Source<ExtensionProcessManager>(this), |
473 content::Details<ExtensionHost>(host)); | 473 content::Details<ExtensionHost>(host)); |
474 } | 474 } |
475 | 475 |
476 void ExtensionProcessManager::CloseBackgroundHosts() { | 476 void ExtensionProcessManager::CloseBackgroundHosts() { |
477 for (ExtensionHostSet::iterator iter = background_hosts_.begin(); | 477 for (ExtensionHostSet::iterator iter = background_hosts_.begin(); |
478 iter != background_hosts_.end(); ) { | 478 iter != background_hosts_.end(); ) { |
479 ExtensionHostSet::iterator current = iter++; | 479 ExtensionHostSet::iterator current = iter++; |
480 delete *current; | 480 delete *current; |
481 } | 481 } |
482 } | 482 } |
483 | 483 |
484 // | 484 // |
485 // IncognitoExtensionProcessManager | 485 // IncognitoExtensionProcessManager |
486 // | 486 // |
487 | 487 |
488 IncognitoExtensionProcessManager::IncognitoExtensionProcessManager( | 488 IncognitoExtensionProcessManager::IncognitoExtensionProcessManager( |
489 Profile* profile) | 489 Profile* profile) |
490 : ExtensionProcessManager(profile), | 490 : ExtensionProcessManager(profile), |
491 original_manager_(profile->GetOriginalProfile()-> | 491 original_manager_(profile->GetOriginalProfile()-> |
492 GetExtensionProcessManager()) { | 492 GetExtensionProcessManager()) { |
493 DCHECK(profile->IsOffTheRecord()); | 493 DCHECK(profile->IsOffTheRecord()); |
494 | 494 |
495 registrar_.Add(this, chrome::NOTIFICATION_BROWSER_WINDOW_READY, | 495 registrar_.Add(this, chrome::NOTIFICATION_BROWSER_WINDOW_READY, |
496 NotificationService::AllSources()); | 496 content::NotificationService::AllSources()); |
497 } | 497 } |
498 | 498 |
499 ExtensionHost* IncognitoExtensionProcessManager::CreateViewHost( | 499 ExtensionHost* IncognitoExtensionProcessManager::CreateViewHost( |
500 const Extension* extension, | 500 const Extension* extension, |
501 const GURL& url, | 501 const GURL& url, |
502 Browser* browser, | 502 Browser* browser, |
503 content::ViewType view_type) { | 503 content::ViewType view_type) { |
504 if (extension->incognito_split_mode()) { | 504 if (extension->incognito_split_mode()) { |
505 if (IsIncognitoEnabled(extension)) { | 505 if (IsIncognitoEnabled(extension)) { |
506 return ExtensionProcessManager::CreateViewHost(extension, url, | 506 return ExtensionProcessManager::CreateViewHost(extension, url, |
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
602 if (service && service->is_ready()) | 602 if (service && service->is_ready()) |
603 CreateBackgroundHostsForProfileStartup(this, service->extensions()); | 603 CreateBackgroundHostsForProfileStartup(this, service->extensions()); |
604 } | 604 } |
605 break; | 605 break; |
606 } | 606 } |
607 default: | 607 default: |
608 ExtensionProcessManager::Observe(type, source, details); | 608 ExtensionProcessManager::Observe(type, source, details); |
609 break; | 609 break; |
610 } | 610 } |
611 } | 611 } |
OLD | NEW |