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

Unified 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, 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 side-by-side diff with in-line comments
Download patch
Index: content/browser/web_contents/web_contents_impl.cc
diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc
index 273f864216521154bca581126385875967bd4a02..a24c1c1ce949014724687905473205f4968ad5d0 100644
--- a/content/browser/web_contents/web_contents_impl.cc
+++ b/content/browser/web_contents/web_contents_impl.cc
@@ -429,6 +429,9 @@ WebContentsImpl::~WebContentsImpl() {
frame_tree_.ForEach(
base::Bind(&RenderFrameHostManager::ClearRFHsPendingShutdown));
+ // Destroy all WebUI instances.
+ frame_tree_.ForEach(base::Bind(&RenderFrameHostManager::ClearWebUIInstances));
+
ClearAllPowerSaveBlockers();
for (std::set<RenderWidgetHostImpl*>::iterator iter =
@@ -851,12 +854,13 @@ WebUI* WebContentsImpl::CreateSubframeWebUI(const GURL& url,
}
WebUI* WebContentsImpl::GetWebUI() const {
- return GetRenderManager()->web_ui() ? GetRenderManager()->web_ui()
- : GetRenderManager()->pending_web_ui();
+ WebUI* commited_web_ui = GetCommittedWebUI();
+ return commited_web_ui ? commited_web_ui
+ : GetRenderManager()->GetNavigatingWebUI();
}
WebUI* WebContentsImpl::GetCommittedWebUI() const {
- return GetRenderManager()->web_ui();
+ return frame_tree_.root()->current_frame_host()->web_ui();
}
void WebContentsImpl::SetUserAgentOverride(const std::string& override) {
@@ -923,8 +927,12 @@ const base::string16& WebContentsImpl::GetTitle() const {
if (entry) {
return entry->GetTitleForDisplay(accept_languages);
}
- WebUI* our_web_ui = GetRenderManager()->pending_web_ui() ?
- GetRenderManager()->pending_web_ui() : GetRenderManager()->web_ui();
+
+ WebUI* navigating_web_ui = GetRenderManager()->GetNavigatingWebUI();
+ WebUI* our_web_ui = navigating_web_ui
+ ? navigating_web_ui
+ : GetRenderManager()->current_frame_host()->web_ui();
+
if (our_web_ui) {
// Don't override the title in view source mode.
entry = controller_.GetVisibleEntry();
@@ -3879,18 +3887,6 @@ void WebContentsImpl::RenderViewCreated(RenderViewHost* render_view_host) {
Source<WebContents>(this),
Details<RenderViewHost>(render_view_host));
- // When we're creating views, we're still doing initial setup, so we always
- // use the pending Web UI rather than any possibly existing committed one.
- if (GetRenderManager()->pending_web_ui())
- GetRenderManager()->pending_web_ui()->RenderViewCreated(render_view_host);
-
- if (base::CommandLine::ForCurrentProcess()->HasSwitch(
- switches::kEnableBrowserSideNavigation) &&
- GetRenderManager()->speculative_web_ui()) {
- GetRenderManager()->speculative_web_ui()->RenderViewCreated(
- render_view_host);
- }
-
NavigationEntry* entry = controller_.GetPendingEntry();
if (entry && entry->IsViewSourceMode()) {
// Put the renderer in view source mode.
@@ -4305,7 +4301,7 @@ int WebContentsImpl::CreateSwappedOutRenderView(
GetRenderManager()->CreateRenderFrameProxy(instance);
} else {
GetRenderManager()->CreateRenderFrame(
- instance, nullptr, CREATE_RF_SWAPPED_OUT | CREATE_RF_HIDDEN,
+ instance, CREATE_RF_SWAPPED_OUT | CREATE_RF_HIDDEN,
&render_view_routing_id);
}
return render_view_routing_id;
@@ -4479,7 +4475,7 @@ NavigationControllerImpl& WebContentsImpl::GetControllerForRenderManager() {
return GetController();
}
-scoped_ptr<WebUIImpl> WebContentsImpl::CreateWebUIForRenderManager(
+scoped_ptr<WebUIImpl> WebContentsImpl::CreateWebUIForRenderFrameHost(
const GURL& url) {
return scoped_ptr<WebUIImpl>(static_cast<WebUIImpl*>(CreateWebUI(
url, std::string())));

Powered by Google App Engine
This is Rietveld 408576698