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

Side by Side Diff: chrome/browser/extensions/chrome_process_manager_delegate.cc

Issue 415933003: Remove chrome::NOTIFICATION_PROFILE_DESTROYED usage from src/extensions (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: comments Created 6 years, 4 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 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
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
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
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, but it is destroyed before the
158 // incognito profile is destroyed, then close the incognito background hosts
159 // as well. This happens in a few tests. http://crbug.com/138843
160 if (!profile->IsOffTheRecord() && profile->HasOffTheRecordProfile()) {
161 ProcessManager* incognito_manager =
162 ExtensionSystem::Get(profile->GetOffTheRecordProfile())
163 ->process_manager();
164 if (incognito_manager)
165 incognito_manager->CloseBackgroundHosts();
166 }
167 }
168
143 } // namespace extensions 169 } // namespace extensions
OLDNEW
« no previous file with comments | « chrome/browser/extensions/chrome_process_manager_delegate.h ('k') | extensions/browser/process_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698