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

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: Created 7 years, 3 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 323 matching lines...) Expand 10 before | Expand all | Expand 10 after
334 for (ExtensionRenderViews::iterator view = all_extension_views_.begin(); 334 for (ExtensionRenderViews::iterator view = all_extension_views_.begin();
335 view != all_extension_views_.end(); ++view) { 335 view != all_extension_views_.end(); ++view) {
336 if (view->first->GetSiteInstance() == site_instance) 336 if (view->first->GetSiteInstance() == site_instance)
337 result.insert(view->first); 337 result.insert(view->first);
338 } 338 }
339 339
340 return result; 340 return result;
341 } 341 }
342 342
343 const Extension* ExtensionProcessManager::GetExtensionForRenderViewHost( 343 const Extension* ExtensionProcessManager::GetExtensionForRenderViewHost(
344 content::RenderViewHost* render_view_host) { 344 RenderViewHost* render_view_host) {
345 if (!render_view_host->GetSiteInstance()) 345 if (!render_view_host->GetSiteInstance())
346 return NULL; 346 return NULL;
347 347
348 ExtensionService* service = 348 ExtensionService* service =
349 extensions::ExtensionSystem::Get(GetProfile())->extension_service(); 349 extensions::ExtensionSystem::Get(GetProfile())->extension_service();
350 if (!service) 350 if (!service)
351 return NULL; 351 return NULL;
352 352
353 return service->extensions()->GetByID(GetExtensionID(render_view_host)); 353 return service->extensions()->GetByID(GetExtensionID(render_view_host));
354 } 354 }
(...skipping 274 matching lines...) Expand 10 before | Expand all | Expand 10 after
629 } 629 }
630 break; 630 break;
631 } 631 }
632 632
633 case content::NOTIFICATION_WEB_CONTENTS_SWAPPED: { 633 case content::NOTIFICATION_WEB_CONTENTS_SWAPPED: {
634 // We get this notification both for new WebContents and when one 634 // We get this notification both for new WebContents and when one
635 // has its RenderViewHost replaced (e.g. when a user does a cross-site 635 // has its RenderViewHost replaced (e.g. when a user does a cross-site
636 // navigation away from an extension URL). For the replaced case, we must 636 // navigation away from an extension URL). For the replaced case, we must
637 // unregister the old RVH so it doesn't count as an active view that would 637 // unregister the old RVH so it doesn't count as an active view that would
638 // keep the event page alive. 638 // keep the event page alive.
639 content::WebContents* contents = 639 WebContents* contents = content::Source<WebContents>(source).ptr();
640 content::Source<content::WebContents>(source).ptr();
641 if (contents->GetBrowserContext() != GetProfile()) 640 if (contents->GetBrowserContext() != GetProfile())
642 break; 641 break;
643 642
644 content::RenderViewHost* old_render_view_host = 643 typedef std::pair<RenderViewHost*, RenderViewHost*> RVHPair;
645 content::Details<content::RenderViewHost>(details).ptr(); 644 RVHPair* switched_details = content::Details<RVHPair>(details).ptr();
646 if (old_render_view_host) 645 if (switched_details->first)
647 UnregisterRenderViewHost(old_render_view_host); 646 UnregisterRenderViewHost(switched_details->first);
648 RegisterRenderViewHost(contents->GetRenderViewHost()); 647 RegisterRenderViewHost(switched_details->second);
649 break; 648 break;
650 } 649 }
651 650
652 case content::NOTIFICATION_WEB_CONTENTS_CONNECTED: { 651 case content::NOTIFICATION_WEB_CONTENTS_CONNECTED: {
653 content::WebContents* contents = 652 WebContents* contents = content::Source<WebContents>(source).ptr();
654 content::Source<content::WebContents>(source).ptr();
655 if (contents->GetBrowserContext() != GetProfile()) 653 if (contents->GetBrowserContext() != GetProfile())
656 break; 654 break;
657 const Extension* extension = GetExtensionForRenderViewHost( 655 const Extension* extension = GetExtensionForRenderViewHost(
658 contents->GetRenderViewHost()); 656 contents->GetRenderViewHost());
659 if (!extension) 657 if (!extension)
660 return; 658 return;
661 659
662 // RegisterRenderViewHost is called too early (before the process is 660 // RegisterRenderViewHost is called too early (before the process is
663 // available), so we need to wait until now to notify. 661 // available), so we need to wait until now to notify.
664 content::NotificationService::current()->Notify( 662 content::NotificationService::current()->Notify(
(...skipping 11 matching lines...) Expand all
676 break; 674 break;
677 } 675 }
678 676
679 default: 677 default:
680 NOTREACHED(); 678 NOTREACHED();
681 } 679 }
682 } 680 }
683 681
684 void ExtensionProcessManager::OnDevToolsStateChanged( 682 void ExtensionProcessManager::OnDevToolsStateChanged(
685 content::DevToolsAgentHost* agent_host, bool attached) { 683 content::DevToolsAgentHost* agent_host, bool attached) {
686 content::RenderViewHost* rvh = agent_host->GetRenderViewHost(); 684 RenderViewHost* rvh = agent_host->GetRenderViewHost();
687 // Ignore unrelated notifications. 685 // Ignore unrelated notifications.
688 if (!rvh || 686 if (!rvh ||
689 rvh->GetSiteInstance()->GetProcess()->GetBrowserContext() != GetProfile()) 687 rvh->GetSiteInstance()->GetProcess()->GetBrowserContext() != GetProfile())
690 return; 688 return;
691 if (extensions::GetViewType(WebContents::FromRenderViewHost(rvh)) != 689 if (extensions::GetViewType(WebContents::FromRenderViewHost(rvh)) !=
692 extensions::VIEW_TYPE_EXTENSION_BACKGROUND_PAGE) 690 extensions::VIEW_TYPE_EXTENSION_BACKGROUND_PAGE)
693 return; 691 return;
694 const Extension* extension = GetExtensionForRenderViewHost(rvh); 692 const Extension* extension = GetExtensionForRenderViewHost(rvh);
695 if (!extension) 693 if (!extension)
696 return; 694 return;
(...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after
909 if (service && service->is_ready()) 907 if (service && service->is_ready())
910 CreateBackgroundHostsForProfileStartup(); 908 CreateBackgroundHostsForProfileStartup();
911 } 909 }
912 break; 910 break;
913 } 911 }
914 default: 912 default:
915 ExtensionProcessManager::Observe(type, source, details); 913 ExtensionProcessManager::Observe(type, source, details);
916 break; 914 break;
917 } 915 }
918 } 916 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698