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

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

Issue 1472703004: Reland #2 of: Move WebUI ownership from the RenderFrameHostManager to the RenderFrameHost. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Tests simulatneous navigation involving WebUIs; minor test improvements. Created 5 years 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 411 matching lines...) Expand 10 before | Expand all | Expand 10 after
422 WebContentsImpl::~WebContentsImpl() { 422 WebContentsImpl::~WebContentsImpl() {
423 is_being_destroyed_ = true; 423 is_being_destroyed_ = true;
424 424
425 rwh_input_event_router_.reset(); 425 rwh_input_event_router_.reset();
426 426
427 // Delete all RFH pending shutdown, which will lead the corresponding RVH to 427 // Delete all RFH pending shutdown, which will lead the corresponding RVH to
428 // shutdown and be deleted as well. 428 // shutdown and be deleted as well.
429 frame_tree_.ForEach( 429 frame_tree_.ForEach(
430 base::Bind(&RenderFrameHostManager::ClearRFHsPendingShutdown)); 430 base::Bind(&RenderFrameHostManager::ClearRFHsPendingShutdown));
431 431
432 // Destroy all WebUI instances.
433 frame_tree_.ForEach(base::Bind(&RenderFrameHostManager::ClearWebUIInstances));
434
432 ClearAllPowerSaveBlockers(); 435 ClearAllPowerSaveBlockers();
433 436
434 for (std::set<RenderWidgetHostImpl*>::iterator iter = 437 for (std::set<RenderWidgetHostImpl*>::iterator iter =
435 created_widgets_.begin(); iter != created_widgets_.end(); ++iter) { 438 created_widgets_.begin(); iter != created_widgets_.end(); ++iter) {
436 (*iter)->DetachDelegate(); 439 (*iter)->DetachDelegate();
437 } 440 }
438 created_widgets_.clear(); 441 created_widgets_.clear();
439 442
440 // Clear out any JavaScript state. 443 // Clear out any JavaScript state.
441 if (dialog_manager_) 444 if (dialog_manager_)
(...skipping 402 matching lines...) Expand 10 before | Expand all | Expand 10 after
844 GetMainFrame()->RequestAXTreeSnapshot(callback); 847 GetMainFrame()->RequestAXTreeSnapshot(callback);
845 } 848 }
846 849
847 WebUI* WebContentsImpl::CreateSubframeWebUI(const GURL& url, 850 WebUI* WebContentsImpl::CreateSubframeWebUI(const GURL& url,
848 const std::string& frame_name) { 851 const std::string& frame_name) {
849 DCHECK(!frame_name.empty()); 852 DCHECK(!frame_name.empty());
850 return CreateWebUI(url, frame_name); 853 return CreateWebUI(url, frame_name);
851 } 854 }
852 855
853 WebUI* WebContentsImpl::GetWebUI() const { 856 WebUI* WebContentsImpl::GetWebUI() const {
854 return GetRenderManager()->web_ui() ? GetRenderManager()->web_ui() 857 WebUI* commited_web_ui = GetCommittedWebUI();
855 : GetRenderManager()->pending_web_ui(); 858 return commited_web_ui ? commited_web_ui
859 : GetRenderManager()->GetNavigatingWebUI();
856 } 860 }
857 861
858 WebUI* WebContentsImpl::GetCommittedWebUI() const { 862 WebUI* WebContentsImpl::GetCommittedWebUI() const {
859 return GetRenderManager()->web_ui(); 863 return frame_tree_.root()->current_frame_host()->web_ui();
860 } 864 }
861 865
862 void WebContentsImpl::SetUserAgentOverride(const std::string& override) { 866 void WebContentsImpl::SetUserAgentOverride(const std::string& override) {
863 if (GetUserAgentOverride() == override) 867 if (GetUserAgentOverride() == override)
864 return; 868 return;
865 869
866 renderer_preferences_.user_agent_override = override; 870 renderer_preferences_.user_agent_override = override;
867 871
868 // Send the new override string to the renderer. 872 // Send the new override string to the renderer.
869 RenderViewHost* host = GetRenderViewHost(); 873 RenderViewHost* host = GetRenderViewHost();
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
916 const base::string16& WebContentsImpl::GetTitle() const { 920 const base::string16& WebContentsImpl::GetTitle() const {
917 // Transient entries take precedence. They are used for interstitial pages 921 // Transient entries take precedence. They are used for interstitial pages
918 // that are shown on top of existing pages. 922 // that are shown on top of existing pages.
919 NavigationEntry* entry = controller_.GetTransientEntry(); 923 NavigationEntry* entry = controller_.GetTransientEntry();
920 std::string accept_languages = 924 std::string accept_languages =
921 GetContentClient()->browser()->GetAcceptLangs( 925 GetContentClient()->browser()->GetAcceptLangs(
922 GetBrowserContext()); 926 GetBrowserContext());
923 if (entry) { 927 if (entry) {
924 return entry->GetTitleForDisplay(accept_languages); 928 return entry->GetTitleForDisplay(accept_languages);
925 } 929 }
926 WebUI* our_web_ui = GetRenderManager()->pending_web_ui() ? 930
927 GetRenderManager()->pending_web_ui() : GetRenderManager()->web_ui(); 931 WebUI* navigating_web_ui = GetRenderManager()->GetNavigatingWebUI();
932 WebUI* our_web_ui = navigating_web_ui
933 ? navigating_web_ui
934 : GetRenderManager()->current_frame_host()->web_ui();
935
928 if (our_web_ui) { 936 if (our_web_ui) {
929 // Don't override the title in view source mode. 937 // Don't override the title in view source mode.
930 entry = controller_.GetVisibleEntry(); 938 entry = controller_.GetVisibleEntry();
931 if (!(entry && entry->IsViewSourceMode())) { 939 if (!(entry && entry->IsViewSourceMode())) {
932 // Give the Web UI the chance to override our title. 940 // Give the Web UI the chance to override our title.
933 const base::string16& title = our_web_ui->GetOverriddenTitle(); 941 const base::string16& title = our_web_ui->GetOverriddenTitle();
934 if (!title.empty()) 942 if (!title.empty())
935 return title; 943 return title;
936 } 944 }
937 } 945 }
(...skipping 2934 matching lines...) Expand 10 before | Expand all | Expand 10 after
3872 return; 3880 return;
3873 3881
3874 if (delegate_) 3882 if (delegate_)
3875 view_->SetOverscrollControllerEnabled(CanOverscrollContent()); 3883 view_->SetOverscrollControllerEnabled(CanOverscrollContent());
3876 3884
3877 NotificationService::current()->Notify( 3885 NotificationService::current()->Notify(
3878 NOTIFICATION_WEB_CONTENTS_RENDER_VIEW_HOST_CREATED, 3886 NOTIFICATION_WEB_CONTENTS_RENDER_VIEW_HOST_CREATED,
3879 Source<WebContents>(this), 3887 Source<WebContents>(this),
3880 Details<RenderViewHost>(render_view_host)); 3888 Details<RenderViewHost>(render_view_host));
3881 3889
3882 // When we're creating views, we're still doing initial setup, so we always
3883 // use the pending Web UI rather than any possibly existing committed one.
3884 if (GetRenderManager()->pending_web_ui())
3885 GetRenderManager()->pending_web_ui()->RenderViewCreated(render_view_host);
3886
3887 if (base::CommandLine::ForCurrentProcess()->HasSwitch(
3888 switches::kEnableBrowserSideNavigation) &&
3889 GetRenderManager()->speculative_web_ui()) {
3890 GetRenderManager()->speculative_web_ui()->RenderViewCreated(
3891 render_view_host);
3892 }
3893
3894 NavigationEntry* entry = controller_.GetPendingEntry(); 3890 NavigationEntry* entry = controller_.GetPendingEntry();
3895 if (entry && entry->IsViewSourceMode()) { 3891 if (entry && entry->IsViewSourceMode()) {
3896 // Put the renderer in view source mode. 3892 // Put the renderer in view source mode.
3897 render_view_host->Send( 3893 render_view_host->Send(
3898 new ViewMsg_EnableViewSourceMode(render_view_host->GetRoutingID())); 3894 new ViewMsg_EnableViewSourceMode(render_view_host->GetRoutingID()));
3899 } 3895 }
3900 3896
3901 view_->RenderViewCreated(render_view_host); 3897 view_->RenderViewCreated(render_view_host);
3902 3898
3903 FOR_EACH_OBSERVER( 3899 FOR_EACH_OBSERVER(
(...skipping 394 matching lines...) Expand 10 before | Expand all | Expand 10 after
4298 source_id); 4294 source_id);
4299 } 4295 }
4300 4296
4301 int WebContentsImpl::CreateSwappedOutRenderView( 4297 int WebContentsImpl::CreateSwappedOutRenderView(
4302 SiteInstance* instance) { 4298 SiteInstance* instance) {
4303 int render_view_routing_id = MSG_ROUTING_NONE; 4299 int render_view_routing_id = MSG_ROUTING_NONE;
4304 if (SiteIsolationPolicy::IsSwappedOutStateForbidden()) { 4300 if (SiteIsolationPolicy::IsSwappedOutStateForbidden()) {
4305 GetRenderManager()->CreateRenderFrameProxy(instance); 4301 GetRenderManager()->CreateRenderFrameProxy(instance);
4306 } else { 4302 } else {
4307 GetRenderManager()->CreateRenderFrame( 4303 GetRenderManager()->CreateRenderFrame(
4308 instance, nullptr, CREATE_RF_SWAPPED_OUT | CREATE_RF_HIDDEN, 4304 instance, CREATE_RF_SWAPPED_OUT | CREATE_RF_HIDDEN,
4309 &render_view_routing_id); 4305 &render_view_routing_id);
4310 } 4306 }
4311 return render_view_routing_id; 4307 return render_view_routing_id;
4312 } 4308 }
4313 4309
4314 void WebContentsImpl::OnUserGesture(RenderWidgetHostImpl* render_widget_host) { 4310 void WebContentsImpl::OnUserGesture(RenderWidgetHostImpl* render_widget_host) {
4315 if (render_widget_host != GetRenderViewHost()->GetWidget()) 4311 if (render_widget_host != GetRenderViewHost()->GetWidget())
4316 return; 4312 return;
4317 4313
4318 // Notify observers. 4314 // Notify observers.
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after
4472 void WebContentsImpl::NotifyMainFrameSwappedFromRenderManager( 4468 void WebContentsImpl::NotifyMainFrameSwappedFromRenderManager(
4473 RenderViewHost* old_host, 4469 RenderViewHost* old_host,
4474 RenderViewHost* new_host) { 4470 RenderViewHost* new_host) {
4475 NotifyViewSwapped(old_host, new_host); 4471 NotifyViewSwapped(old_host, new_host);
4476 } 4472 }
4477 4473
4478 NavigationControllerImpl& WebContentsImpl::GetControllerForRenderManager() { 4474 NavigationControllerImpl& WebContentsImpl::GetControllerForRenderManager() {
4479 return GetController(); 4475 return GetController();
4480 } 4476 }
4481 4477
4482 scoped_ptr<WebUIImpl> WebContentsImpl::CreateWebUIForRenderManager( 4478 scoped_ptr<WebUIImpl> WebContentsImpl::CreateWebUIForRenderFrameHost(
4483 const GURL& url) { 4479 const GURL& url) {
4484 return scoped_ptr<WebUIImpl>(static_cast<WebUIImpl*>(CreateWebUI( 4480 return scoped_ptr<WebUIImpl>(static_cast<WebUIImpl*>(CreateWebUI(
4485 url, std::string()))); 4481 url, std::string())));
4486 } 4482 }
4487 4483
4488 NavigationEntry* 4484 NavigationEntry*
4489 WebContentsImpl::GetLastCommittedNavigationEntryForRenderManager() { 4485 WebContentsImpl::GetLastCommittedNavigationEntryForRenderManager() {
4490 return controller_.GetLastCommittedEntry(); 4486 return controller_.GetLastCommittedEntry();
4491 } 4487 }
4492 4488
(...skipping 296 matching lines...) Expand 10 before | Expand all | Expand 10 after
4789 return NULL; 4785 return NULL;
4790 } 4786 }
4791 4787
4792 void WebContentsImpl::SetForceDisableOverscrollContent(bool force_disable) { 4788 void WebContentsImpl::SetForceDisableOverscrollContent(bool force_disable) {
4793 force_disable_overscroll_content_ = force_disable; 4789 force_disable_overscroll_content_ = force_disable;
4794 if (view_) 4790 if (view_)
4795 view_->SetOverscrollControllerEnabled(CanOverscrollContent()); 4791 view_->SetOverscrollControllerEnabled(CanOverscrollContent());
4796 } 4792 }
4797 4793
4798 } // namespace content 4794 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698