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

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

Issue 10119003: Pull shell window stuff out of ExtensionHost and put in ShellWindow (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Updated Created 8 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
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "base/lazy_instance.h" 7 #include "base/lazy_instance.h"
8 #include "chrome/browser/extensions/extension_event_router.h" 8 #include "chrome/browser/extensions/extension_event_router.h"
9 #include "chrome/browser/extensions/extension_process_manager.h" 9 #include "chrome/browser/extensions/extension_process_manager.h"
10 #include "chrome/browser/extensions/extension_host.h" 10 #include "chrome/browser/extensions/extension_host.h"
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
145 content::Source<content::BrowserContext>(profile)); 145 content::Source<content::BrowserContext>(profile));
146 registrar_.Add(this, content::NOTIFICATION_DEVTOOLS_WINDOW_CLOSING, 146 registrar_.Add(this, content::NOTIFICATION_DEVTOOLS_WINDOW_CLOSING,
147 content::Source<content::BrowserContext>(profile)); 147 content::Source<content::BrowserContext>(profile));
148 } 148 }
149 149
150 ExtensionProcessManager::~ExtensionProcessManager() { 150 ExtensionProcessManager::~ExtensionProcessManager() {
151 CloseBackgroundHosts(); 151 CloseBackgroundHosts();
152 DCHECK(background_hosts_.empty()); 152 DCHECK(background_hosts_.empty());
153 } 153 }
154 154
155 ExtensionHost* ExtensionProcessManager::CreateShellHost(
156 const Extension* extension,
157 const GURL& url) {
158 DCHECK(extension);
159 ExtensionHost* host = new ExtensionHost(extension,
160 GetSiteInstanceForURL(url),
161 url,
162 chrome::VIEW_TYPE_APP_SHELL);
163 host->CreateViewWithoutBrowser();
164 content::WebContents* host_contents = host->host_contents();
165 host_contents->GetMutableRendererPrefs()->browser_handles_all_requests = true;
166 host_contents->GetRenderViewHost()->SyncRendererPrefs();
167 OnExtensionHostCreated(host, false /* not a background host */);
168 return host;
169 }
170
171 void ExtensionProcessManager::EnsureBrowserWhenRequired( 155 void ExtensionProcessManager::EnsureBrowserWhenRequired(
172 Browser* browser, 156 Browser* browser,
173 content::ViewType view_type) { 157 content::ViewType view_type) {
174 if (!browser) { 158 if (!browser) {
175 #if defined (OS_CHROMEOS) 159 #if defined (OS_CHROMEOS)
176 // On ChromeOS we'll only use ExtensionView, which 160 // On ChromeOS we'll only use ExtensionView, which
177 // does not use the browser parameter. 161 // does not use the browser parameter.
178 // TODO(rkc): Remove all this once we create a new host for 162 // TODO(rkc): Remove all this once we create a new host for
179 // screensaver extensions (crosbug.com/28211). 163 // screensaver extensions (crosbug.com/28211).
180 DCHECK(view_type == chrome::VIEW_TYPE_EXTENSION_POPUP || 164 DCHECK(view_type == chrome::VIEW_TYPE_EXTENSION_POPUP ||
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after
337 all_extension_views_[render_view_host] = content::VIEW_TYPE_INVALID; 321 all_extension_views_[render_view_host] = content::VIEW_TYPE_INVALID;
338 } 322 }
339 323
340 void ExtensionProcessManager::UnregisterRenderViewHost( 324 void ExtensionProcessManager::UnregisterRenderViewHost(
341 RenderViewHost* render_view_host) { 325 RenderViewHost* render_view_host) {
342 ExtensionRenderViews::iterator view = 326 ExtensionRenderViews::iterator view =
343 all_extension_views_.find(render_view_host); 327 all_extension_views_.find(render_view_host);
344 if (view == all_extension_views_.end()) 328 if (view == all_extension_views_.end())
345 return; 329 return;
346 330
331 content::NotificationService::current()->Notify(
332 chrome::NOTIFICATION_EXTENSION_VIEW_UNREGISTERED,
333 content::Source<Profile>(GetProfile()),
334 content::Details<RenderViewHost>(render_view_host));
benwells 2012/04/26 08:36:33 This is to keep the task manager from crashing if
335
347 content::ViewType view_type = view->second; 336 content::ViewType view_type = view->second;
348 all_extension_views_.erase(view); 337 all_extension_views_.erase(view);
349 338
350 // Keepalive count, balanced in UpdateRegisteredRenderView. 339 // Keepalive count, balanced in UpdateRegisteredRenderView.
351 if (view_type != content::VIEW_TYPE_INVALID && 340 if (view_type != content::VIEW_TYPE_INVALID &&
352 view_type != chrome::VIEW_TYPE_EXTENSION_BACKGROUND_PAGE) { 341 view_type != chrome::VIEW_TYPE_EXTENSION_BACKGROUND_PAGE) {
353 const Extension* extension = GetExtensionForRenderViewHost( 342 const Extension* extension = GetExtensionForRenderViewHost(
354 render_view_host); 343 render_view_host);
355 if (extension) 344 if (extension)
356 DecrementLazyKeepaliveCount(extension); 345 DecrementLazyKeepaliveCount(extension);
357 } 346 }
358 } 347 }
359 348
360 void ExtensionProcessManager::UpdateRegisteredRenderView( 349 void ExtensionProcessManager::UpdateRegisteredRenderView(
361 RenderViewHost* render_view_host) { 350 RenderViewHost* render_view_host) {
362 ExtensionRenderViews::iterator view = 351 ExtensionRenderViews::iterator view =
363 all_extension_views_.find(render_view_host); 352 all_extension_views_.find(render_view_host);
364 if (view == all_extension_views_.end()) 353 if (view == all_extension_views_.end())
365 return; 354 return;
366 355
356 content::NotificationService::current()->Notify(
357 chrome::NOTIFICATION_EXTENSION_VIEW_REGISTERED,
358 content::Source<Profile>(GetProfile()),
359 content::Details<RenderViewHost>(render_view_host));
360
367 view->second = render_view_host->GetDelegate()->GetRenderViewType(); 361 view->second = render_view_host->GetDelegate()->GetRenderViewType();
368 362
369 // Keep the lazy background page alive as long as any non-background-page 363 // Keep the lazy background page alive as long as any non-background-page
370 // extension views are visible. Keepalive count balanced in 364 // extension views are visible. Keepalive count balanced in
371 // UnregisterRenderViewHost. 365 // UnregisterRenderViewHost.
372 if (view->second != content::VIEW_TYPE_INVALID && 366 if (view->second != content::VIEW_TYPE_INVALID &&
373 view->second != chrome::VIEW_TYPE_EXTENSION_BACKGROUND_PAGE) { 367 view->second != chrome::VIEW_TYPE_EXTENSION_BACKGROUND_PAGE) {
374 const Extension* extension = GetExtensionForRenderViewHost( 368 const Extension* extension = GetExtensionForRenderViewHost(
375 render_view_host); 369 render_view_host);
376 if (extension) 370 if (extension)
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after
510 } 504 }
511 } 505 }
512 background_page_data_.erase(extension->id()); 506 background_page_data_.erase(extension->id());
513 break; 507 break;
514 } 508 }
515 509
516 case chrome::NOTIFICATION_EXTENSION_HOST_DESTROYED: { 510 case chrome::NOTIFICATION_EXTENSION_HOST_DESTROYED: {
517 ExtensionHost* host = content::Details<ExtensionHost>(details).ptr(); 511 ExtensionHost* host = content::Details<ExtensionHost>(details).ptr();
518 if (background_hosts_.erase(host)) 512 if (background_hosts_.erase(host))
519 background_page_data_.erase(host->extension()->id()); 513 background_page_data_.erase(host->extension()->id());
520 platform_app_hosts_.erase(host);
521 break; 514 break;
522 } 515 }
523 516
524 case chrome::NOTIFICATION_EXTENSION_HOST_VIEW_SHOULD_CLOSE: { 517 case chrome::NOTIFICATION_EXTENSION_HOST_VIEW_SHOULD_CLOSE: {
525 ExtensionHost* host = content::Details<ExtensionHost>(details).ptr(); 518 ExtensionHost* host = content::Details<ExtensionHost>(details).ptr();
526 if (host->extension_host_type() == 519 if (host->extension_host_type() ==
527 chrome::VIEW_TYPE_EXTENSION_BACKGROUND_PAGE) { 520 chrome::VIEW_TYPE_EXTENSION_BACKGROUND_PAGE) {
528 CloseBackgroundHost(host); 521 CloseBackgroundHost(host);
529 } 522 }
530 break; 523 break;
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
581 574
582 Profile* ExtensionProcessManager::GetProfile() const { 575 Profile* ExtensionProcessManager::GetProfile() const {
583 return Profile::FromBrowserContext(site_instance_->GetBrowserContext()); 576 return Profile::FromBrowserContext(site_instance_->GetBrowserContext());
584 } 577 }
585 578
586 void ExtensionProcessManager::OnExtensionHostCreated(ExtensionHost* host, 579 void ExtensionProcessManager::OnExtensionHostCreated(ExtensionHost* host,
587 bool is_background) { 580 bool is_background) {
588 DCHECK_EQ(site_instance_->GetBrowserContext(), host->profile()); 581 DCHECK_EQ(site_instance_->GetBrowserContext(), host->profile());
589 if (is_background) 582 if (is_background)
590 background_hosts_.insert(host); 583 background_hosts_.insert(host);
591 if (host->extension()->is_platform_app())
592 platform_app_hosts_.insert(host);
593 } 584 }
594 585
595 void ExtensionProcessManager::CloseBackgroundHost(ExtensionHost* host) { 586 void ExtensionProcessManager::CloseBackgroundHost(ExtensionHost* host) {
596 CHECK(host->extension_host_type() == 587 CHECK(host->extension_host_type() ==
597 chrome::VIEW_TYPE_EXTENSION_BACKGROUND_PAGE); 588 chrome::VIEW_TYPE_EXTENSION_BACKGROUND_PAGE);
598 delete host; 589 delete host;
599 // |host| should deregister itself from our structures. 590 // |host| should deregister itself from our structures.
600 CHECK(background_hosts_.find(host) == background_hosts_.end()); 591 CHECK(background_hosts_.find(host) == background_hosts_.end());
601 } 592 }
602 593
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
703 if (service && service->is_ready()) 694 if (service && service->is_ready())
704 CreateBackgroundHostsForProfileStartup(this, service->extensions()); 695 CreateBackgroundHostsForProfileStartup(this, service->extensions());
705 } 696 }
706 break; 697 break;
707 } 698 }
708 default: 699 default:
709 ExtensionProcessManager::Observe(type, source, details); 700 ExtensionProcessManager::Observe(type, source, details);
710 break; 701 break;
711 } 702 }
712 } 703 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698