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

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

Issue 23618036: Merge NOTIFICATION_RENDER_VIEW_HOST_CHANGED into NOTIFICATION_WEB_CONTENTS_SWAPPED. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix Created 7 years, 2 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 (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 "chrome/browser/extensions/extension_process_manager.h" 5 #include "chrome/browser/extensions/extension_process_manager.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/command_line.h" 8 #include "base/command_line.h"
9 #include "base/lazy_instance.h" 9 #include "base/lazy_instance.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after
156 registrar_.Add(this, chrome::NOTIFICATION_EXTENSIONS_READY, 156 registrar_.Add(this, chrome::NOTIFICATION_EXTENSIONS_READY,
157 content::Source<Profile>(original_profile)); 157 content::Source<Profile>(original_profile));
158 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_LOADED, 158 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_LOADED,
159 content::Source<Profile>(original_profile)); 159 content::Source<Profile>(original_profile));
160 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UNLOADED, 160 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UNLOADED,
161 content::Source<Profile>(original_profile)); 161 content::Source<Profile>(original_profile));
162 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_HOST_DESTROYED, 162 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_HOST_DESTROYED,
163 content::Source<Profile>(profile)); 163 content::Source<Profile>(profile));
164 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_HOST_VIEW_SHOULD_CLOSE, 164 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_HOST_VIEW_SHOULD_CLOSE,
165 content::Source<Profile>(profile)); 165 content::Source<Profile>(profile));
166 registrar_.Add(this, content::NOTIFICATION_WEB_CONTENTS_SWAPPED, 166 registrar_.Add(this, content::NOTIFICATION_RENDER_VIEW_HOST_CHANGED,
167 content::NotificationService::AllSources()); 167 content::NotificationService::AllSources());
168 registrar_.Add(this, content::NOTIFICATION_WEB_CONTENTS_CONNECTED, 168 registrar_.Add(this, content::NOTIFICATION_WEB_CONTENTS_CONNECTED,
169 content::NotificationService::AllSources()); 169 content::NotificationService::AllSources());
170 registrar_.Add(this, chrome::NOTIFICATION_PROFILE_CREATED, 170 registrar_.Add(this, chrome::NOTIFICATION_PROFILE_CREATED,
171 content::Source<Profile>(original_profile)); 171 content::Source<Profile>(original_profile));
172 registrar_.Add(this, chrome::NOTIFICATION_PROFILE_DESTROYED, 172 registrar_.Add(this, chrome::NOTIFICATION_PROFILE_DESTROYED,
173 content::Source<Profile>(profile)); 173 content::Source<Profile>(profile));
174 if (profile->IsOffTheRecord()) { 174 if (profile->IsOffTheRecord()) {
175 registrar_.Add(this, chrome::NOTIFICATION_PROFILE_DESTROYED, 175 registrar_.Add(this, chrome::NOTIFICATION_PROFILE_DESTROYED,
176 content::Source<Profile>(original_profile)); 176 content::Source<Profile>(original_profile));
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after
343 for (ExtensionRenderViews::iterator view = all_extension_views_.begin(); 343 for (ExtensionRenderViews::iterator view = all_extension_views_.begin();
344 view != all_extension_views_.end(); ++view) { 344 view != all_extension_views_.end(); ++view) {
345 if (view->first->GetSiteInstance() == site_instance) 345 if (view->first->GetSiteInstance() == site_instance)
346 result.insert(view->first); 346 result.insert(view->first);
347 } 347 }
348 348
349 return result; 349 return result;
350 } 350 }
351 351
352 const Extension* ExtensionProcessManager::GetExtensionForRenderViewHost( 352 const Extension* ExtensionProcessManager::GetExtensionForRenderViewHost(
353 content::RenderViewHost* render_view_host) { 353 RenderViewHost* render_view_host) {
354 if (!render_view_host->GetSiteInstance()) 354 if (!render_view_host->GetSiteInstance())
355 return NULL; 355 return NULL;
356 356
357 ExtensionService* service = 357 ExtensionService* service =
358 extensions::ExtensionSystem::Get(GetProfile())->extension_service(); 358 extensions::ExtensionSystem::Get(GetProfile())->extension_service();
359 if (!service) 359 if (!service)
360 return NULL; 360 return NULL;
361 361
362 return service->extensions()->GetByID(GetExtensionID(render_view_host)); 362 return service->extensions()->GetByID(GetExtensionID(render_view_host));
363 } 363 }
(...skipping 269 matching lines...) Expand 10 before | Expand all | Expand 10 after
633 633
634 case chrome::NOTIFICATION_EXTENSION_HOST_VIEW_SHOULD_CLOSE: { 634 case chrome::NOTIFICATION_EXTENSION_HOST_VIEW_SHOULD_CLOSE: {
635 ExtensionHost* host = content::Details<ExtensionHost>(details).ptr(); 635 ExtensionHost* host = content::Details<ExtensionHost>(details).ptr();
636 if (host->extension_host_type() == 636 if (host->extension_host_type() ==
637 extensions::VIEW_TYPE_EXTENSION_BACKGROUND_PAGE) { 637 extensions::VIEW_TYPE_EXTENSION_BACKGROUND_PAGE) {
638 CloseBackgroundHost(host); 638 CloseBackgroundHost(host);
639 } 639 }
640 break; 640 break;
641 } 641 }
642 642
643 case content::NOTIFICATION_WEB_CONTENTS_SWAPPED: { 643 case content::NOTIFICATION_RENDER_VIEW_HOST_CHANGED: {
644 // We get this notification both for new WebContents and when one 644 // We get this notification both for new WebContents and when one
645 // has its RenderViewHost replaced (e.g. when a user does a cross-site 645 // has its RenderViewHost replaced (e.g. when a user does a cross-site
646 // navigation away from an extension URL). For the replaced case, we must 646 // navigation away from an extension URL). For the replaced case, we must
647 // unregister the old RVH so it doesn't count as an active view that would 647 // unregister the old RVH so it doesn't count as an active view that would
648 // keep the event page alive. 648 // keep the event page alive.
649 content::WebContents* contents = 649 WebContents* contents = content::Source<WebContents>(source).ptr();
650 content::Source<content::WebContents>(source).ptr();
651 if (contents->GetBrowserContext() != GetProfile()) 650 if (contents->GetBrowserContext() != GetProfile())
652 break; 651 break;
653 652
654 content::RenderViewHost* old_render_view_host = 653 typedef std::pair<RenderViewHost*, RenderViewHost*> RVHPair;
655 content::Details<content::RenderViewHost>(details).ptr(); 654 RVHPair* switched_details = content::Details<RVHPair>(details).ptr();
656 if (old_render_view_host) 655 if (switched_details->first)
657 UnregisterRenderViewHost(old_render_view_host); 656 UnregisterRenderViewHost(switched_details->first);
658 RegisterRenderViewHost(contents->GetRenderViewHost()); 657 RegisterRenderViewHost(switched_details->second);
659 break; 658 break;
660 } 659 }
661 660
662 case content::NOTIFICATION_WEB_CONTENTS_CONNECTED: { 661 case content::NOTIFICATION_WEB_CONTENTS_CONNECTED: {
663 content::WebContents* contents = 662 WebContents* contents = content::Source<WebContents>(source).ptr();
664 content::Source<content::WebContents>(source).ptr();
665 if (contents->GetBrowserContext() != GetProfile()) 663 if (contents->GetBrowserContext() != GetProfile())
666 break; 664 break;
667 const Extension* extension = GetExtensionForRenderViewHost( 665 const Extension* extension = GetExtensionForRenderViewHost(
668 contents->GetRenderViewHost()); 666 contents->GetRenderViewHost());
669 if (!extension) 667 if (!extension)
670 return; 668 return;
671 669
672 // RegisterRenderViewHost is called too early (before the process is 670 // RegisterRenderViewHost is called too early (before the process is
673 // available), so we need to wait until now to notify. 671 // available), so we need to wait until now to notify.
674 content::NotificationService::current()->Notify( 672 content::NotificationService::current()->Notify(
(...skipping 11 matching lines...) Expand all
686 break; 684 break;
687 } 685 }
688 686
689 default: 687 default:
690 NOTREACHED(); 688 NOTREACHED();
691 } 689 }
692 } 690 }
693 691
694 void ExtensionProcessManager::OnDevToolsStateChanged( 692 void ExtensionProcessManager::OnDevToolsStateChanged(
695 content::DevToolsAgentHost* agent_host, bool attached) { 693 content::DevToolsAgentHost* agent_host, bool attached) {
696 content::RenderViewHost* rvh = agent_host->GetRenderViewHost(); 694 RenderViewHost* rvh = agent_host->GetRenderViewHost();
697 // Ignore unrelated notifications. 695 // Ignore unrelated notifications.
698 if (!rvh || 696 if (!rvh ||
699 rvh->GetSiteInstance()->GetProcess()->GetBrowserContext() != GetProfile()) 697 rvh->GetSiteInstance()->GetProcess()->GetBrowserContext() != GetProfile())
700 return; 698 return;
701 if (extensions::GetViewType(WebContents::FromRenderViewHost(rvh)) != 699 if (extensions::GetViewType(WebContents::FromRenderViewHost(rvh)) !=
702 extensions::VIEW_TYPE_EXTENSION_BACKGROUND_PAGE) 700 extensions::VIEW_TYPE_EXTENSION_BACKGROUND_PAGE)
703 return; 701 return;
704 const Extension* extension = GetExtensionForRenderViewHost(rvh); 702 const Extension* extension = GetExtensionForRenderViewHost(rvh);
705 if (!extension) 703 if (!extension)
706 return; 704 return;
(...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after
941 if (service && service->is_ready()) 939 if (service && service->is_ready())
942 CreateBackgroundHostsForProfileStartup(); 940 CreateBackgroundHostsForProfileStartup();
943 } 941 }
944 break; 942 break;
945 } 943 }
946 default: 944 default:
947 ExtensionProcessManager::Observe(type, source, details); 945 ExtensionProcessManager::Observe(type, source, details);
948 break; 946 break;
949 } 947 }
950 } 948 }
OLDNEW
« no previous file with comments | « apps/shell_window.cc ('k') | chrome/browser/speech/chrome_speech_recognition_manager_delegate.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698