OLD | NEW |
---|---|
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "chrome/browser/extensions/chrome_process_manager_delegate.h" | 5 #include "chrome/browser/extensions/chrome_process_manager_delegate.h" |
6 | 6 |
7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
8 #include "base/logging.h" | 8 #include "base/logging.h" |
9 #include "chrome/browser/browser_process.h" | 9 #include "chrome/browser/browser_process.h" |
10 #include "chrome/browser/chrome_notification_types.h" | 10 #include "chrome/browser/chrome_notification_types.h" |
(...skipping 12 matching lines...) Expand all Loading... | |
23 | 23 |
24 namespace extensions { | 24 namespace extensions { |
25 | 25 |
26 ChromeProcessManagerDelegate::ChromeProcessManagerDelegate() { | 26 ChromeProcessManagerDelegate::ChromeProcessManagerDelegate() { |
27 registrar_.Add(this, | 27 registrar_.Add(this, |
28 chrome::NOTIFICATION_BROWSER_WINDOW_READY, | 28 chrome::NOTIFICATION_BROWSER_WINDOW_READY, |
29 content::NotificationService::AllSources()); | 29 content::NotificationService::AllSources()); |
30 registrar_.Add(this, | 30 registrar_.Add(this, |
31 chrome::NOTIFICATION_PROFILE_CREATED, | 31 chrome::NOTIFICATION_PROFILE_CREATED, |
32 content::NotificationService::AllSources()); | 32 content::NotificationService::AllSources()); |
33 // TODO(jamescook): Move observation of NOTIFICATION_PROFILE_DESTROYED here. | 33 registrar_.Add(this, |
34 // http://crbug.com/392658 | 34 chrome::NOTIFICATION_PROFILE_DESTROYED, |
35 content::NotificationService::AllSources()); | |
35 } | 36 } |
36 | 37 |
37 ChromeProcessManagerDelegate::~ChromeProcessManagerDelegate() { | 38 ChromeProcessManagerDelegate::~ChromeProcessManagerDelegate() { |
38 } | 39 } |
39 | 40 |
40 bool ChromeProcessManagerDelegate::IsBackgroundPageAllowed( | 41 bool ChromeProcessManagerDelegate::IsBackgroundPageAllowed( |
41 content::BrowserContext* context) const { | 42 content::BrowserContext* context) const { |
42 Profile* profile = static_cast<Profile*>(context); | 43 Profile* profile = static_cast<Profile*>(context); |
43 | 44 |
44 // Disallow if the current session is a Guest mode session but the current | 45 // Disallow if the current session is a Guest mode session but the current |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
78 case chrome::NOTIFICATION_BROWSER_WINDOW_READY: { | 79 case chrome::NOTIFICATION_BROWSER_WINDOW_READY: { |
79 Browser* browser = content::Source<Browser>(source).ptr(); | 80 Browser* browser = content::Source<Browser>(source).ptr(); |
80 OnBrowserWindowReady(browser); | 81 OnBrowserWindowReady(browser); |
81 break; | 82 break; |
82 } | 83 } |
83 case chrome::NOTIFICATION_PROFILE_CREATED: { | 84 case chrome::NOTIFICATION_PROFILE_CREATED: { |
84 Profile* profile = content::Source<Profile>(source).ptr(); | 85 Profile* profile = content::Source<Profile>(source).ptr(); |
85 OnProfileCreated(profile); | 86 OnProfileCreated(profile); |
86 break; | 87 break; |
87 } | 88 } |
88 | 89 case chrome::NOTIFICATION_PROFILE_DESTROYED: { |
90 Profile* profile = content::Source<Profile>(source).ptr(); | |
91 OnProfileDestroyed(profile); | |
92 break; | |
93 } | |
89 default: | 94 default: |
90 NOTREACHED(); | 95 NOTREACHED(); |
91 } | 96 } |
92 } | 97 } |
93 | 98 |
94 void ChromeProcessManagerDelegate::OnBrowserWindowReady(Browser* browser) { | 99 void ChromeProcessManagerDelegate::OnBrowserWindowReady(Browser* browser) { |
95 Profile* profile = browser->profile(); | 100 Profile* profile = browser->profile(); |
96 DCHECK(profile); | 101 DCHECK(profile); |
97 | 102 |
98 // If the extension system isn't ready yet the background hosts will be | 103 // If the extension system isn't ready yet the background hosts will be |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
133 ProcessManager* manager = ExtensionSystem::Get(profile)->process_manager(); | 138 ProcessManager* manager = ExtensionSystem::Get(profile)->process_manager(); |
134 if (!manager) | 139 if (!manager) |
135 return; | 140 return; |
136 | 141 |
137 // The profile might have been initialized asynchronously (in parallel with | 142 // The profile might have been initialized asynchronously (in parallel with |
138 // extension system startup). Now that initialization is complete the | 143 // extension system startup). Now that initialization is complete the |
139 // ProcessManager can load deferred background pages. | 144 // ProcessManager can load deferred background pages. |
140 manager->MaybeCreateStartupBackgroundHosts(); | 145 manager->MaybeCreateStartupBackgroundHosts(); |
141 } | 146 } |
142 | 147 |
148 void ChromeProcessManagerDelegate::OnProfileDestroyed(Profile* profile) { | |
149 // Close background hosts when the last profile is closed so that they | |
150 // have time to shutdown various objects on different threads. The | |
151 // ProfileManager destructor is called too late in the shutdown sequence. | |
152 // http://crbug.com/15708 | |
153 ProcessManager* manager = ExtensionSystem::Get(profile)->process_manager(); | |
154 if (manager) | |
155 manager->CloseBackgroundHosts(); | |
156 | |
157 // If this profile owns an incognito profile then close the incognito | |
James Cook
2014/07/24 18:27:54
This mimics the behavior of the existing code (spe
Yoyo Zhou
2014/07/24 20:25:01
From the CL that added this, I wrote
(which happe
James Cook
2014/07/24 21:02:35
Done.
| |
158 // background hosts as well. http://crbug.com/138843 | |
159 if (!profile->IsOffTheRecord() && profile->HasOffTheRecordProfile()) { | |
160 ProcessManager* incognito_manager = | |
161 ExtensionSystem::Get(profile->GetOffTheRecordProfile()) | |
162 ->process_manager(); | |
163 if (incognito_manager) | |
164 incognito_manager->CloseBackgroundHosts(); | |
165 } | |
166 } | |
167 | |
143 } // namespace extensions | 168 } // namespace extensions |
OLD | NEW |