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

Side by Side Diff: content/browser/web_contents/web_contents_impl.cc

Issue 1426403006: Reland #1 of: Move WebUI ownership from the RenderFrameHostManager to the RenderFrameHost. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address CR comments. Created 5 years, 1 month 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 "content/browser/web_contents/web_contents_impl.h" 5 #include "content/browser/web_contents/web_contents_impl.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/lazy_instance.h" 10 #include "base/lazy_instance.h"
(...skipping 406 matching lines...) Expand 10 before | Expand all | Expand 10 after
417 WebContentsImpl::~WebContentsImpl() { 417 WebContentsImpl::~WebContentsImpl() {
418 is_being_destroyed_ = true; 418 is_being_destroyed_ = true;
419 419
420 rwh_input_event_router_.reset(); 420 rwh_input_event_router_.reset();
421 421
422 // Delete all RFH pending shutdown, which will lead the corresponding RVH to 422 // Delete all RFH pending shutdown, which will lead the corresponding RVH to
423 // shutdown and be deleted as well. 423 // shutdown and be deleted as well.
424 frame_tree_.ForEach( 424 frame_tree_.ForEach(
425 base::Bind(&RenderFrameHostManager::ClearRFHsPendingShutdown)); 425 base::Bind(&RenderFrameHostManager::ClearRFHsPendingShutdown));
426 426
427 // Destroy all WebUI instances.
428 frame_tree_.ForEach(base::Bind(&RenderFrameHostManager::ClearWebUIInstances));
429
427 ClearAllPowerSaveBlockers(); 430 ClearAllPowerSaveBlockers();
428 431
429 for (std::set<RenderWidgetHostImpl*>::iterator iter = 432 for (std::set<RenderWidgetHostImpl*>::iterator iter =
430 created_widgets_.begin(); iter != created_widgets_.end(); ++iter) { 433 created_widgets_.begin(); iter != created_widgets_.end(); ++iter) {
431 (*iter)->DetachDelegate(); 434 (*iter)->DetachDelegate();
432 } 435 }
433 created_widgets_.clear(); 436 created_widgets_.clear();
434 437
435 // Clear out any JavaScript state. 438 // Clear out any JavaScript state.
436 if (dialog_manager_) 439 if (dialog_manager_)
(...skipping 402 matching lines...) Expand 10 before | Expand all | Expand 10 after
839 GetMainFrame()->RequestAXTreeSnapshot(callback); 842 GetMainFrame()->RequestAXTreeSnapshot(callback);
840 } 843 }
841 844
842 WebUI* WebContentsImpl::CreateSubframeWebUI(const GURL& url, 845 WebUI* WebContentsImpl::CreateSubframeWebUI(const GURL& url,
843 const std::string& frame_name) { 846 const std::string& frame_name) {
844 DCHECK(!frame_name.empty()); 847 DCHECK(!frame_name.empty());
845 return CreateWebUI(url, frame_name); 848 return CreateWebUI(url, frame_name);
846 } 849 }
847 850
848 WebUI* WebContentsImpl::GetWebUI() const { 851 WebUI* WebContentsImpl::GetWebUI() const {
849 return GetRenderManager()->web_ui() ? GetRenderManager()->web_ui() 852 WebUI* commited_web_ui = GetCommittedWebUI();
850 : GetRenderManager()->pending_web_ui(); 853 return commited_web_ui ? commited_web_ui
854 : GetRenderManager()->GetNavigatingWebUI();
851 } 855 }
852 856
853 WebUI* WebContentsImpl::GetCommittedWebUI() const { 857 WebUI* WebContentsImpl::GetCommittedWebUI() const {
854 return GetRenderManager()->web_ui(); 858 return frame_tree_.root()->current_frame_host()->web_ui();
855 } 859 }
856 860
857 void WebContentsImpl::SetUserAgentOverride(const std::string& override) { 861 void WebContentsImpl::SetUserAgentOverride(const std::string& override) {
858 if (GetUserAgentOverride() == override) 862 if (GetUserAgentOverride() == override)
859 return; 863 return;
860 864
861 renderer_preferences_.user_agent_override = override; 865 renderer_preferences_.user_agent_override = override;
862 866
863 // Send the new override string to the renderer. 867 // Send the new override string to the renderer.
864 RenderViewHost* host = GetRenderViewHost(); 868 RenderViewHost* host = GetRenderViewHost();
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
911 const base::string16& WebContentsImpl::GetTitle() const { 915 const base::string16& WebContentsImpl::GetTitle() const {
912 // Transient entries take precedence. They are used for interstitial pages 916 // Transient entries take precedence. They are used for interstitial pages
913 // that are shown on top of existing pages. 917 // that are shown on top of existing pages.
914 NavigationEntry* entry = controller_.GetTransientEntry(); 918 NavigationEntry* entry = controller_.GetTransientEntry();
915 std::string accept_languages = 919 std::string accept_languages =
916 GetContentClient()->browser()->GetAcceptLangs( 920 GetContentClient()->browser()->GetAcceptLangs(
917 GetBrowserContext()); 921 GetBrowserContext());
918 if (entry) { 922 if (entry) {
919 return entry->GetTitleForDisplay(accept_languages); 923 return entry->GetTitleForDisplay(accept_languages);
920 } 924 }
921 WebUI* our_web_ui = GetRenderManager()->pending_web_ui() ? 925
922 GetRenderManager()->pending_web_ui() : GetRenderManager()->web_ui(); 926 WebUI* navigating_web_ui = GetRenderManager()->GetNavigatingWebUI();
927 WebUI* our_web_ui = navigating_web_ui
928 ? navigating_web_ui
929 : GetRenderManager()->current_frame_host()->web_ui();
930
923 if (our_web_ui) { 931 if (our_web_ui) {
924 // Don't override the title in view source mode. 932 // Don't override the title in view source mode.
925 entry = controller_.GetVisibleEntry(); 933 entry = controller_.GetVisibleEntry();
926 if (!(entry && entry->IsViewSourceMode())) { 934 if (!(entry && entry->IsViewSourceMode())) {
927 // Give the Web UI the chance to override our title. 935 // Give the Web UI the chance to override our title.
928 const base::string16& title = our_web_ui->GetOverriddenTitle(); 936 const base::string16& title = our_web_ui->GetOverriddenTitle();
929 if (!title.empty()) 937 if (!title.empty())
930 return title; 938 return title;
931 } 939 }
932 } 940 }
(...skipping 2914 matching lines...) Expand 10 before | Expand all | Expand 10 after
3847 return; 3855 return;
3848 3856
3849 if (delegate_) 3857 if (delegate_)
3850 view_->SetOverscrollControllerEnabled(CanOverscrollContent()); 3858 view_->SetOverscrollControllerEnabled(CanOverscrollContent());
3851 3859
3852 NotificationService::current()->Notify( 3860 NotificationService::current()->Notify(
3853 NOTIFICATION_WEB_CONTENTS_RENDER_VIEW_HOST_CREATED, 3861 NOTIFICATION_WEB_CONTENTS_RENDER_VIEW_HOST_CREATED,
3854 Source<WebContents>(this), 3862 Source<WebContents>(this),
3855 Details<RenderViewHost>(render_view_host)); 3863 Details<RenderViewHost>(render_view_host));
3856 3864
3857 // When we're creating views, we're still doing initial setup, so we always
3858 // use the pending Web UI rather than any possibly existing committed one.
3859 if (GetRenderManager()->pending_web_ui())
3860 GetRenderManager()->pending_web_ui()->RenderViewCreated(render_view_host);
3861
3862 if (base::CommandLine::ForCurrentProcess()->HasSwitch(
3863 switches::kEnableBrowserSideNavigation) &&
3864 GetRenderManager()->speculative_web_ui()) {
3865 GetRenderManager()->speculative_web_ui()->RenderViewCreated(
3866 render_view_host);
3867 }
3868
3869 NavigationEntry* entry = controller_.GetPendingEntry(); 3865 NavigationEntry* entry = controller_.GetPendingEntry();
3870 if (entry && entry->IsViewSourceMode()) { 3866 if (entry && entry->IsViewSourceMode()) {
3871 // Put the renderer in view source mode. 3867 // Put the renderer in view source mode.
3872 render_view_host->Send( 3868 render_view_host->Send(
3873 new ViewMsg_EnableViewSourceMode(render_view_host->GetRoutingID())); 3869 new ViewMsg_EnableViewSourceMode(render_view_host->GetRoutingID()));
3874 } 3870 }
3875 3871
3876 view_->RenderViewCreated(render_view_host); 3872 view_->RenderViewCreated(render_view_host);
3877 3873
3878 FOR_EACH_OBSERVER( 3874 FOR_EACH_OBSERVER(
(...skipping 394 matching lines...) Expand 10 before | Expand all | Expand 10 after
4273 source_id); 4269 source_id);
4274 } 4270 }
4275 4271
4276 int WebContentsImpl::CreateSwappedOutRenderView( 4272 int WebContentsImpl::CreateSwappedOutRenderView(
4277 SiteInstance* instance) { 4273 SiteInstance* instance) {
4278 int render_view_routing_id = MSG_ROUTING_NONE; 4274 int render_view_routing_id = MSG_ROUTING_NONE;
4279 if (SiteIsolationPolicy::IsSwappedOutStateForbidden()) { 4275 if (SiteIsolationPolicy::IsSwappedOutStateForbidden()) {
4280 GetRenderManager()->CreateRenderFrameProxy(instance); 4276 GetRenderManager()->CreateRenderFrameProxy(instance);
4281 } else { 4277 } else {
4282 GetRenderManager()->CreateRenderFrame( 4278 GetRenderManager()->CreateRenderFrame(
4283 instance, nullptr, CREATE_RF_SWAPPED_OUT | CREATE_RF_HIDDEN, 4279 instance, CREATE_RF_SWAPPED_OUT | CREATE_RF_HIDDEN,
4284 &render_view_routing_id); 4280 &render_view_routing_id);
4285 } 4281 }
4286 return render_view_routing_id; 4282 return render_view_routing_id;
4287 } 4283 }
4288 4284
4289 void WebContentsImpl::OnUserGesture(RenderWidgetHostImpl* render_widget_host) { 4285 void WebContentsImpl::OnUserGesture(RenderWidgetHostImpl* render_widget_host) {
4290 if (render_widget_host != GetRenderViewHost()->GetWidget()) 4286 if (render_widget_host != GetRenderViewHost()->GetWidget())
4291 return; 4287 return;
4292 4288
4293 // Notify observers. 4289 // Notify observers.
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after
4447 void WebContentsImpl::NotifyMainFrameSwappedFromRenderManager( 4443 void WebContentsImpl::NotifyMainFrameSwappedFromRenderManager(
4448 RenderViewHost* old_host, 4444 RenderViewHost* old_host,
4449 RenderViewHost* new_host) { 4445 RenderViewHost* new_host) {
4450 NotifyViewSwapped(old_host, new_host); 4446 NotifyViewSwapped(old_host, new_host);
4451 } 4447 }
4452 4448
4453 NavigationControllerImpl& WebContentsImpl::GetControllerForRenderManager() { 4449 NavigationControllerImpl& WebContentsImpl::GetControllerForRenderManager() {
4454 return GetController(); 4450 return GetController();
4455 } 4451 }
4456 4452
4457 scoped_ptr<WebUIImpl> WebContentsImpl::CreateWebUIForRenderManager( 4453 scoped_ptr<WebUIImpl> WebContentsImpl::CreateWebUIForRenderFrameHost(
4458 const GURL& url) { 4454 const GURL& url) {
4459 return scoped_ptr<WebUIImpl>(static_cast<WebUIImpl*>(CreateWebUI( 4455 return scoped_ptr<WebUIImpl>(static_cast<WebUIImpl*>(CreateWebUI(
4460 url, std::string()))); 4456 url, std::string())));
4461 } 4457 }
4462 4458
4463 NavigationEntry* 4459 NavigationEntry*
4464 WebContentsImpl::GetLastCommittedNavigationEntryForRenderManager() { 4460 WebContentsImpl::GetLastCommittedNavigationEntryForRenderManager() {
4465 return controller_.GetLastCommittedEntry(); 4461 return controller_.GetLastCommittedEntry();
4466 } 4462 }
4467 4463
(...skipping 296 matching lines...) Expand 10 before | Expand all | Expand 10 after
4764 return NULL; 4760 return NULL;
4765 } 4761 }
4766 4762
4767 void WebContentsImpl::SetForceDisableOverscrollContent(bool force_disable) { 4763 void WebContentsImpl::SetForceDisableOverscrollContent(bool force_disable) {
4768 force_disable_overscroll_content_ = force_disable; 4764 force_disable_overscroll_content_ = force_disable;
4769 if (view_) 4765 if (view_)
4770 view_->SetOverscrollControllerEnabled(CanOverscrollContent()); 4766 view_->SetOverscrollControllerEnabled(CanOverscrollContent());
4771 } 4767 }
4772 4768
4773 } // namespace content 4769 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698