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

Side by Side Diff: extensions/browser/process_manager.cc

Issue 2424593002: Reduce FOR_EACH_OBSERVER usage in extensions (Closed)
Patch Set: script_observers_ Created 4 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
« no previous file with comments | « extensions/browser/extension_registry.cc ('k') | extensions/browser/script_executor.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 "extensions/browser/process_manager.h" 5 #include "extensions/browser/process_manager.h"
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/location.h" 10 #include "base/location.h"
(...skipping 271 matching lines...) Expand 10 before | Expand all | Expand 10 after
282 content::RenderFrameHost* render_frame_host, 282 content::RenderFrameHost* render_frame_host,
283 const Extension* extension) { 283 const Extension* extension) {
284 ExtensionRenderFrameData* data = &all_extension_frames_[render_frame_host]; 284 ExtensionRenderFrameData* data = &all_extension_frames_[render_frame_host];
285 data->view_type = GetViewType(web_contents); 285 data->view_type = GetViewType(web_contents);
286 286
287 // Keep the lazy background page alive as long as any non-background-page 287 // Keep the lazy background page alive as long as any non-background-page
288 // extension views are visible. Keepalive count balanced in 288 // extension views are visible. Keepalive count balanced in
289 // UnregisterRenderFrame. 289 // UnregisterRenderFrame.
290 AcquireLazyKeepaliveCountForFrame(render_frame_host); 290 AcquireLazyKeepaliveCountForFrame(render_frame_host);
291 291
292 FOR_EACH_OBSERVER(ProcessManagerObserver, 292 for (auto& observer : observer_list_)
293 observer_list_, 293 observer.OnExtensionFrameRegistered(extension->id(), render_frame_host);
294 OnExtensionFrameRegistered(extension->id(),
295 render_frame_host));
296 } 294 }
297 295
298 void ProcessManager::UnregisterRenderFrameHost( 296 void ProcessManager::UnregisterRenderFrameHost(
299 content::RenderFrameHost* render_frame_host) { 297 content::RenderFrameHost* render_frame_host) {
300 ExtensionRenderFrames::iterator frame = 298 ExtensionRenderFrames::iterator frame =
301 all_extension_frames_.find(render_frame_host); 299 all_extension_frames_.find(render_frame_host);
302 300
303 if (frame != all_extension_frames_.end()) { 301 if (frame != all_extension_frames_.end()) {
304 std::string extension_id = GetExtensionID(render_frame_host); 302 std::string extension_id = GetExtensionID(render_frame_host);
305 // Keepalive count, balanced in RegisterRenderFrame. 303 // Keepalive count, balanced in RegisterRenderFrame.
306 ReleaseLazyKeepaliveCountForFrame(render_frame_host); 304 ReleaseLazyKeepaliveCountForFrame(render_frame_host);
307 all_extension_frames_.erase(frame); 305 all_extension_frames_.erase(frame);
308 306
309 FOR_EACH_OBSERVER(ProcessManagerObserver, 307 for (auto& observer : observer_list_)
310 observer_list_, 308 observer.OnExtensionFrameUnregistered(extension_id, render_frame_host);
311 OnExtensionFrameUnregistered(extension_id,
312 render_frame_host));
313 } 309 }
314 } 310 }
315 311
316 void ProcessManager::DidNavigateRenderFrameHost( 312 void ProcessManager::DidNavigateRenderFrameHost(
317 content::RenderFrameHost* render_frame_host) { 313 content::RenderFrameHost* render_frame_host) {
318 ExtensionRenderFrames::iterator frame = 314 ExtensionRenderFrames::iterator frame =
319 all_extension_frames_.find(render_frame_host); 315 all_extension_frames_.find(render_frame_host);
320 316
321 if (frame != all_extension_frames_.end()) { 317 if (frame != all_extension_frames_.end()) {
322 std::string extension_id = GetExtensionID(render_frame_host); 318 std::string extension_id = GetExtensionID(render_frame_host);
323 319
324 FOR_EACH_OBSERVER(ProcessManagerObserver, 320 for (auto& observer : observer_list_)
325 observer_list_, 321 observer.OnExtensionFrameNavigated(extension_id, render_frame_host);
326 OnExtensionFrameNavigated(extension_id,
327 render_frame_host));
328 } 322 }
329 } 323 }
330 324
331 scoped_refptr<content::SiteInstance> ProcessManager::GetSiteInstanceForURL( 325 scoped_refptr<content::SiteInstance> ProcessManager::GetSiteInstanceForURL(
332 const GURL& url) { 326 const GURL& url) {
333 return site_instance_->GetRelatedSiteInstance(url); 327 return site_instance_->GetRelatedSiteInstance(url);
334 } 328 }
335 329
336 const ProcessManager::FrameSet ProcessManager::GetAllFrames() const { 330 const ProcessManager::FrameSet ProcessManager::GetAllFrames() const {
337 FrameSet result; 331 FrameSet result;
(...skipping 358 matching lines...) Expand 10 before | Expand all | Expand 10 after
696 if (host != nullptr) 690 if (host != nullptr)
697 CloseBackgroundHost(host); 691 CloseBackgroundHost(host);
698 UnregisterExtension(extension->id()); 692 UnregisterExtension(extension->id());
699 } 693 }
700 694
701 void ProcessManager::CreateStartupBackgroundHosts() { 695 void ProcessManager::CreateStartupBackgroundHosts() {
702 DCHECK(!startup_background_hosts_created_); 696 DCHECK(!startup_background_hosts_created_);
703 for (const scoped_refptr<const Extension>& extension : 697 for (const scoped_refptr<const Extension>& extension :
704 extension_registry_->enabled_extensions()) { 698 extension_registry_->enabled_extensions()) {
705 CreateBackgroundHostForExtensionLoad(this, extension.get()); 699 CreateBackgroundHostForExtensionLoad(this, extension.get());
706 FOR_EACH_OBSERVER(ProcessManagerObserver, 700 for (auto& observer : observer_list_)
707 observer_list_, 701 observer.OnBackgroundHostStartup(extension.get());
708 OnBackgroundHostStartup(extension.get()));
709 } 702 }
710 } 703 }
711 704
712 void ProcessManager::OnBackgroundHostCreated(ExtensionHost* host) { 705 void ProcessManager::OnBackgroundHostCreated(ExtensionHost* host) {
713 DCHECK_EQ(browser_context_, host->browser_context()); 706 DCHECK_EQ(browser_context_, host->browser_context());
714 background_hosts_.insert(host); 707 background_hosts_.insert(host);
715 708
716 if (BackgroundInfo::HasLazyBackgroundPage(host->extension())) { 709 if (BackgroundInfo::HasLazyBackgroundPage(host->extension())) {
717 std::unique_ptr<base::ElapsedTimer> since_suspended = std::move( 710 std::unique_ptr<base::ElapsedTimer> since_suspended = std::move(
718 background_page_data_[host->extension()->id()].since_suspended); 711 background_page_data_[host->extension()->id()].since_suspended);
719 if (since_suspended.get()) { 712 if (since_suspended.get()) {
720 UMA_HISTOGRAM_LONG_TIMES("Extensions.EventPageIdleTime", 713 UMA_HISTOGRAM_LONG_TIMES("Extensions.EventPageIdleTime",
721 since_suspended->Elapsed()); 714 since_suspended->Elapsed());
722 } 715 }
723 } 716 }
724 FOR_EACH_OBSERVER(ProcessManagerObserver, observer_list_, 717 for (auto& observer : observer_list_)
725 OnBackgroundHostCreated(host)); 718 observer.OnBackgroundHostCreated(host);
726 } 719 }
727 720
728 void ProcessManager::CloseBackgroundHost(ExtensionHost* host) { 721 void ProcessManager::CloseBackgroundHost(ExtensionHost* host) {
729 ExtensionId extension_id = host->extension_id(); 722 ExtensionId extension_id = host->extension_id();
730 CHECK(host->extension_host_type() == VIEW_TYPE_EXTENSION_BACKGROUND_PAGE); 723 CHECK(host->extension_host_type() == VIEW_TYPE_EXTENSION_BACKGROUND_PAGE);
731 delete host; 724 delete host;
732 // |host| should deregister itself from our structures. 725 // |host| should deregister itself from our structures.
733 CHECK(background_hosts_.find(host) == background_hosts_.end()); 726 CHECK(background_hosts_.find(host) == background_hosts_.end());
734 727
735 FOR_EACH_OBSERVER(ProcessManagerObserver, 728 for (auto& observer : observer_list_)
736 observer_list_, 729 observer.OnBackgroundHostClose(extension_id);
737 OnBackgroundHostClose(extension_id));
738 } 730 }
739 731
740 void ProcessManager::AcquireLazyKeepaliveCountForFrame( 732 void ProcessManager::AcquireLazyKeepaliveCountForFrame(
741 content::RenderFrameHost* render_frame_host) { 733 content::RenderFrameHost* render_frame_host) {
742 ExtensionRenderFrames::iterator it = 734 ExtensionRenderFrames::iterator it =
743 all_extension_frames_.find(render_frame_host); 735 all_extension_frames_.find(render_frame_host);
744 if (it == all_extension_frames_.end()) 736 if (it == all_extension_frames_.end())
745 return; 737 return;
746 738
747 ExtensionRenderFrameData& data = it->second; 739 ExtensionRenderFrameData& data = it->second;
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after
918 // The lazy_keepalive_count may be greater than zero at this point because 910 // The lazy_keepalive_count may be greater than zero at this point because
919 // RenderFrameHosts are still alive. During extension reloading, they will 911 // RenderFrameHosts are still alive. During extension reloading, they will
920 // decrement the lazy_keepalive_count to negative for the new extension 912 // decrement the lazy_keepalive_count to negative for the new extension
921 // instance when they are destroyed. Since we are erasing the background page 913 // instance when they are destroyed. Since we are erasing the background page
922 // data for the unloaded extension, unregister the RenderFrameHosts too. 914 // data for the unloaded extension, unregister the RenderFrameHosts too.
923 for (ExtensionRenderFrames::iterator it = all_extension_frames_.begin(); 915 for (ExtensionRenderFrames::iterator it = all_extension_frames_.begin();
924 it != all_extension_frames_.end(); ) { 916 it != all_extension_frames_.end(); ) {
925 content::RenderFrameHost* host = it->first; 917 content::RenderFrameHost* host = it->first;
926 if (GetExtensionID(host) == extension_id) { 918 if (GetExtensionID(host) == extension_id) {
927 all_extension_frames_.erase(it++); 919 all_extension_frames_.erase(it++);
928 FOR_EACH_OBSERVER(ProcessManagerObserver, 920 for (auto& observer : observer_list_)
929 observer_list_, 921 observer.OnExtensionFrameUnregistered(extension_id, host);
930 OnExtensionFrameUnregistered(extension_id, host));
931 } else { 922 } else {
932 ++it; 923 ++it;
933 } 924 }
934 } 925 }
935 926
936 background_page_data_.erase(extension_id); 927 background_page_data_.erase(extension_id);
937 } 928 }
938 929
939 void ProcessManager::ClearBackgroundPageData(const std::string& extension_id) { 930 void ProcessManager::ClearBackgroundPageData(const std::string& extension_id) {
940 background_page_data_.erase(extension_id); 931 background_page_data_.erase(extension_id);
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
987 if (extension && !IncognitoInfo::IsSplitMode(extension)) { 978 if (extension && !IncognitoInfo::IsSplitMode(extension)) {
988 BrowserContext* original_context = 979 BrowserContext* original_context =
989 ExtensionsBrowserClient::Get()->GetOriginalContext(browser_context()); 980 ExtensionsBrowserClient::Get()->GetOriginalContext(browser_context());
990 return ProcessManager::Get(original_context)->GetSiteInstanceForURL(url); 981 return ProcessManager::Get(original_context)->GetSiteInstanceForURL(url);
991 } 982 }
992 983
993 return ProcessManager::GetSiteInstanceForURL(url); 984 return ProcessManager::GetSiteInstanceForURL(url);
994 } 985 }
995 986
996 } // namespace extensions 987 } // namespace extensions
OLDNEW
« no previous file with comments | « extensions/browser/extension_registry.cc ('k') | extensions/browser/script_executor.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698