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

Side by Side Diff: content/browser/frame_host/render_frame_host_manager.cc

Issue 1418853003: Remove RFHM::GetNavigatingWebUI() and RFHM::web_ui(). (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@webui-refactor
Patch Set: Rebase. 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 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 "content/browser/frame_host/render_frame_host_manager.h" 5 #include "content/browser/frame_host/render_frame_host_manager.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/command_line.h" 10 #include "base/command_line.h"
(...skipping 265 matching lines...) Expand 10 before | Expand all | Expand 10 after
276 return nullptr; 276 return nullptr;
277 return render_frame_host_->render_view_host(); 277 return render_frame_host_->render_view_host();
278 } 278 }
279 279
280 RenderViewHostImpl* RenderFrameHostManager::pending_render_view_host() const { 280 RenderViewHostImpl* RenderFrameHostManager::pending_render_view_host() const {
281 if (!pending_render_frame_host_) 281 if (!pending_render_frame_host_)
282 return nullptr; 282 return nullptr;
283 return pending_render_frame_host_->render_view_host(); 283 return pending_render_frame_host_->render_view_host();
284 } 284 }
285 285
286 WebUIImpl* RenderFrameHostManager::GetNavigatingWebUI() const {
287 if (current_web_ui_is_navigating_)
288 return render_frame_host_->web_ui();
289
290 if (base::CommandLine::ForCurrentProcess()->HasSwitch(
291 switches::kEnableBrowserSideNavigation)) {
292 if (speculative_render_frame_host_)
293 return speculative_render_frame_host_->web_ui();
294 } else {
295 if (pending_render_frame_host_)
296 return pending_render_frame_host_->web_ui();
297 }
298 return nullptr;
299 }
300
301 RenderWidgetHostView* RenderFrameHostManager::GetRenderWidgetHostView() const { 286 RenderWidgetHostView* RenderFrameHostManager::GetRenderWidgetHostView() const {
302 if (interstitial_page_) 287 if (interstitial_page_)
303 return interstitial_page_->GetView(); 288 return interstitial_page_->GetView();
304 if (render_frame_host_) 289 if (render_frame_host_)
305 return render_frame_host_->GetView(); 290 return render_frame_host_->GetView();
306 return nullptr; 291 return nullptr;
307 } 292 }
308 293
309 bool RenderFrameHostManager::ForInnerDelegate() { 294 bool RenderFrameHostManager::ForInnerDelegate() {
310 return delegate_->GetOuterDelegateFrameTreeNodeID() != 295 return delegate_->GetOuterDelegateFrameTreeNodeID() !=
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
407 // site that is handled via Mojo, then Mojo WebUI code in //chrome will 392 // site that is handled via Mojo, then Mojo WebUI code in //chrome will
408 // add a service to this RFH's ServiceRegistry). 393 // add a service to this RFH's ServiceRegistry).
409 dest_render_frame_host->SetUpMojoIfNeeded(); 394 dest_render_frame_host->SetUpMojoIfNeeded();
410 395
411 // Recreate the opener chain. 396 // Recreate the opener chain.
412 CreateOpenerProxies(dest_render_frame_host->GetSiteInstance(), 397 CreateOpenerProxies(dest_render_frame_host->GetSiteInstance(),
413 frame_tree_node_); 398 frame_tree_node_);
414 if (!InitRenderView(dest_render_frame_host->render_view_host(), nullptr)) 399 if (!InitRenderView(dest_render_frame_host->render_view_host(), nullptr))
415 return nullptr; 400 return nullptr;
416 401
417 if (GetNavigatingWebUI()) { 402 if (dest_render_frame_host->web_ui()) {
418 GetNavigatingWebUI()->RenderViewCreated( 403 dest_render_frame_host->web_ui()->RenderViewCreated(
419 dest_render_frame_host->render_view_host()); 404 dest_render_frame_host->render_view_host());
420 } 405 }
421 406
422 // Now that we've created a new renderer, be sure to hide it if it isn't 407 // Now that we've created a new renderer, be sure to hide it if it isn't
423 // our primary one. Otherwise, we might crash if we try to call Show() 408 // our primary one. Otherwise, we might crash if we try to call Show()
424 // on it later. 409 // on it later.
425 if (dest_render_frame_host != render_frame_host_) { 410 if (dest_render_frame_host != render_frame_host_) {
426 if (dest_render_frame_host->GetView()) 411 if (dest_render_frame_host->GetView())
427 dest_render_frame_host->GetView()->Hide(); 412 dest_render_frame_host->GetView()->Hide();
428 } else { 413 } else {
(...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after
667 652
668 void RenderFrameHostManager::CommitPendingIfNecessary( 653 void RenderFrameHostManager::CommitPendingIfNecessary(
669 RenderFrameHostImpl* render_frame_host, 654 RenderFrameHostImpl* render_frame_host,
670 bool was_caused_by_user_gesture) { 655 bool was_caused_by_user_gesture) {
671 if (!pending_render_frame_host_ && !speculative_render_frame_host_) { 656 if (!pending_render_frame_host_ && !speculative_render_frame_host_) {
672 DCHECK(!current_web_ui_is_navigating_ || render_frame_host_->web_ui()); 657 DCHECK(!current_web_ui_is_navigating_ || render_frame_host_->web_ui());
673 658
674 // We should only hear this from our current renderer. 659 // We should only hear this from our current renderer.
675 DCHECK_EQ(render_frame_host_, render_frame_host); 660 DCHECK_EQ(render_frame_host_, render_frame_host);
676 661
677 // A commit is required if there is a navigating WebUI, even without a 662 // If the current RenderFrameHost has a WebUI it must be committed (for
678 // pending or speculative RenderFrameHost. 663 // proper focus setting).
nasko 2015/11/04 17:23:26 Is the detail about focus setting important?
carlosk 2015/11/04 21:50:38 I chose to mention it here because I spent some ti
nasko 2015/11/05 00:46:43 Let's put that as a separate sentence then explain
carlosk 2015/11/05 13:40:41 Done.
679 if (GetNavigatingWebUI()) 664 if (render_frame_host_->web_ui())
680 CommitPending(); 665 CommitPending();
681 return; 666 return;
682 } 667 }
683 668
684 if (render_frame_host == pending_render_frame_host_ || 669 if (render_frame_host == pending_render_frame_host_ ||
685 render_frame_host == speculative_render_frame_host_) { 670 render_frame_host == speculative_render_frame_host_) {
686 // The pending cross-process navigation completed, so show the renderer. 671 // The pending cross-process navigation completed, so show the renderer.
687 CommitPending(); 672 CommitPending();
688 } else if (render_frame_host == render_frame_host_) { 673 } else if (render_frame_host == render_frame_host_) {
689 if (base::CommandLine::ForCurrentProcess()->HasSwitch( 674 if (base::CommandLine::ForCurrentProcess()->HasSwitch(
(...skipping 340 matching lines...) Expand 10 before | Expand all | Expand 10 after
1030 request.common_params().url, request.bindings()); 1015 request.common_params().url, request.bindings());
1031 1016
1032 // If a change in WebUI happened, check this is an acceptable case. 1017 // If a change in WebUI happened, check this is an acceptable case.
1033 CHECK(!changed_web_ui || 1018 CHECK(!changed_web_ui ||
1034 (IsAcceptableWebUITransition( 1019 (IsAcceptableWebUITransition(
1035 previous_web_ui_type, request.common_params().url, 1020 previous_web_ui_type, request.common_params().url,
1036 request.restore_type() != NavigationEntryImpl::RESTORE_NONE))); 1021 request.restore_type() != NavigationEntryImpl::RESTORE_NONE)));
1037 1022
1038 // If there is a WebUI in the current RenderFrameHost, it will navigate. 1023 // If there is a WebUI in the current RenderFrameHost, it will navigate.
1039 current_web_ui_is_navigating_ = !!render_frame_host_->web_ui(); 1024 current_web_ui_is_navigating_ = !!render_frame_host_->web_ui();
1040 DCHECK_EQ(GetNavigatingWebUI(), render_frame_host_->web_ui());
1041 1025
1042 // If the current RenderFrameHost has a WebUI and the associated RenderFrame 1026 // If the current RenderFrameHost has a WebUI and the associated RenderFrame
1043 // is alive, notify to the WebUI that the RenderView is being created or 1027 // is alive, notify to the WebUI that the RenderView is being created or
1044 // reused depending on whether the WebUI was changed or not. 1028 // reused depending on whether the WebUI was changed or not.
1045 if (GetNavigatingWebUI() && render_frame_host_->IsRenderFrameLive()) { 1029 if (render_frame_host_->web_ui() &&
1030 render_frame_host_->IsRenderFrameLive()) {
1046 if (changed_web_ui) { 1031 if (changed_web_ui) {
1047 GetNavigatingWebUI()->RenderViewCreated( 1032 render_frame_host_->web_ui()->RenderViewCreated(
1048 render_frame_host_->render_view_host()); 1033 render_frame_host_->render_view_host());
1049 } else { 1034 } else {
1050 GetNavigatingWebUI()->RenderViewReused( 1035 render_frame_host_->web_ui()->RenderViewReused(
1051 render_frame_host_->render_view_host(), 1036 render_frame_host_->render_view_host(),
1052 frame_tree_node_->IsMainFrame()); 1037 frame_tree_node_->IsMainFrame());
1053 } 1038 }
1054 } 1039 }
1055 1040
1056 DCHECK(!speculative_render_frame_host_); 1041 DCHECK(!speculative_render_frame_host_);
1057 } else { 1042 } else {
1058 // If the SiteInstance for the final URL doesn't match the one from the 1043 // If the SiteInstance for the final URL doesn't match the one from the
1059 // speculatively created RenderFrameHost, create a new RenderFrameHost using 1044 // speculatively created RenderFrameHost, create a new RenderFrameHost using
1060 // this new SiteInstance. 1045 // this new SiteInstance.
(...skipping 16 matching lines...) Expand all
1077 } else { 1062 } else {
1078 // Reuses the previous speculative RenderFrameHost. 1063 // Reuses the previous speculative RenderFrameHost.
1079 bool changed_web_ui = speculative_render_frame_host_->UpdateWebUI( 1064 bool changed_web_ui = speculative_render_frame_host_->UpdateWebUI(
1080 request.common_params().url, request.bindings()); 1065 request.common_params().url, request.bindings());
1081 if (changed_web_ui && speculative_render_frame_host_->web_ui()) { 1066 if (changed_web_ui && speculative_render_frame_host_->web_ui()) {
1082 speculative_render_frame_host_->web_ui()->RenderViewCreated( 1067 speculative_render_frame_host_->web_ui()->RenderViewCreated(
1083 speculative_render_frame_host_->render_view_host()); 1068 speculative_render_frame_host_->render_view_host());
1084 } 1069 }
1085 } 1070 }
1086 DCHECK(speculative_render_frame_host_); 1071 DCHECK(speculative_render_frame_host_);
1087 DCHECK_EQ(GetNavigatingWebUI(), speculative_render_frame_host_->web_ui());
1088 1072
1089 navigation_rfh = speculative_render_frame_host_.get(); 1073 navigation_rfh = speculative_render_frame_host_.get();
1090 1074
1091 // Check if our current RFH is live. 1075 // Check if our current RFH is live.
1092 if (!render_frame_host_->IsRenderFrameLive()) { 1076 if (!render_frame_host_->IsRenderFrameLive()) {
1093 // The current RFH is not live. There's no reason to sit around with a 1077 // The current RFH is not live. There's no reason to sit around with a
1094 // sad tab or a newly created RFH while we wait for the navigation to 1078 // sad tab or a newly created RFH while we wait for the navigation to
1095 // complete. Just switch to the speculative RFH now and go back to normal. 1079 // complete. Just switch to the speculative RFH now and go back to normal.
1096 // (Note that we don't care about on{before}unload handlers if the current 1080 // (Note that we don't care about on{before}unload handlers if the current
1097 // RFH isn't live.) 1081 // RFH isn't live.)
1098 CommitPending(); 1082 CommitPending();
1099 } 1083 }
1100 DCHECK(!current_web_ui_is_navigating_); 1084 DCHECK(!current_web_ui_is_navigating_);
1101 } 1085 }
1102 DCHECK(navigation_rfh && 1086 DCHECK(navigation_rfh &&
1103 (navigation_rfh == render_frame_host_.get() || 1087 (navigation_rfh == render_frame_host_.get() ||
1104 navigation_rfh == speculative_render_frame_host_.get())); 1088 navigation_rfh == speculative_render_frame_host_.get()));
1105 1089
1106 // If the RenderFrame that needs to navigate is not live (its process was just 1090 // If the RenderFrame that needs to navigate is not live (its process was just
1107 // created or has crashed), initialize it. 1091 // created or has crashed), initialize it.
1108 if (!navigation_rfh->IsRenderFrameLive()) { 1092 if (!navigation_rfh->IsRenderFrameLive()) {
1109 // Recreate the opener chain. 1093 // Recreate the opener chain.
1110 CreateOpenerProxies(navigation_rfh->GetSiteInstance(), frame_tree_node_); 1094 CreateOpenerProxies(navigation_rfh->GetSiteInstance(), frame_tree_node_);
1111 if (!InitRenderView(navigation_rfh->render_view_host(), nullptr)) 1095 if (!InitRenderView(navigation_rfh->render_view_host(), nullptr))
1112 return nullptr; 1096 return nullptr;
1113 1097
1114 if (GetNavigatingWebUI()) { 1098 if (navigation_rfh->web_ui()) {
1115 GetNavigatingWebUI()->RenderViewCreated( 1099 navigation_rfh->web_ui()->RenderViewCreated(
1116 navigation_rfh->render_view_host()); 1100 navigation_rfh->render_view_host());
1117 } 1101 }
1118 1102
1119 if (navigation_rfh == render_frame_host_) { 1103 if (navigation_rfh == render_frame_host_) {
1120 // TODO(nasko): This is a very ugly hack. The Chrome extensions process 1104 // TODO(nasko): This is a very ugly hack. The Chrome extensions process
1121 // manager still uses NotificationService and expects to see a 1105 // manager still uses NotificationService and expects to see a
1122 // RenderViewHost changed notification after WebContents and 1106 // RenderViewHost changed notification after WebContents and
1123 // RenderFrameHostManager are completely initialized. This should be 1107 // RenderFrameHostManager are completely initialized. This should be
1124 // removed once the process manager moves away from NotificationService. 1108 // removed once the process manager moves away from NotificationService.
1125 // See https://crbug.com/462682. 1109 // See https://crbug.com/462682.
(...skipping 985 matching lines...) Expand 10 before | Expand all | Expand 10 after
2111 void RenderFrameHostManager::CommitPending() { 2095 void RenderFrameHostManager::CommitPending() {
2112 TRACE_EVENT1("navigation", "RenderFrameHostManager::CommitPending", 2096 TRACE_EVENT1("navigation", "RenderFrameHostManager::CommitPending",
2113 "FrameTreeNode id", frame_tree_node_->frame_tree_node_id()); 2097 "FrameTreeNode id", frame_tree_node_->frame_tree_node_id());
2114 // First check whether we're going to want to focus the location bar after 2098 // First check whether we're going to want to focus the location bar after
2115 // this commit. We do this now because the navigation hasn't formally 2099 // this commit. We do this now because the navigation hasn't formally
2116 // committed yet, so if we've already cleared the pending WebUI the call chain 2100 // committed yet, so if we've already cleared the pending WebUI the call chain
2117 // this triggers won't be able to figure out what's going on. 2101 // this triggers won't be able to figure out what's going on.
2118 bool will_focus_location_bar = delegate_->FocusLocationBarByDefault(); 2102 bool will_focus_location_bar = delegate_->FocusLocationBarByDefault();
2119 2103
2120 if (!pending_render_frame_host_ && !speculative_render_frame_host_) { 2104 if (!pending_render_frame_host_ && !speculative_render_frame_host_) {
2121 DCHECK_EQ(current_web_ui_is_navigating_, !!render_frame_host_->web_ui()); 2105 DCHECK(!current_web_ui_is_navigating_ || render_frame_host_->web_ui());
nasko 2015/11/04 17:23:26 I thought this variable is only needed to support
carlosk 2015/11/04 21:50:38 Oops! My bad! I forgot to remove it but it was alr
2122 current_web_ui_is_navigating_ = false; 2106 current_web_ui_is_navigating_ = false;
2123 // If there's no pending/speculative RenderFrameHost then the current 2107 // If there's no pending/speculative RenderFrameHost then the current
2124 // RenderFrameHost is committing. 2108 // RenderFrameHost is committing.
2125 if (will_focus_location_bar) 2109 if (will_focus_location_bar)
2126 delegate_->SetFocusToLocationBar(false); 2110 delegate_->SetFocusToLocationBar(false);
2127 return; 2111 return;
2128 } 2112 }
2129 2113
2130 // Remember if the page was focused so we can focus the new renderer in 2114 // Remember if the page was focused so we can focus the new renderer in
2131 // that case. 2115 // that case.
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after
2326 DCHECK(pending_render_frame_host_); 2310 DCHECK(pending_render_frame_host_);
2327 if (!pending_render_frame_host_) 2311 if (!pending_render_frame_host_)
2328 return nullptr; 2312 return nullptr;
2329 2313
2330 pending_render_frame_host_->UpdateWebUI(dest_url, bindings); 2314 pending_render_frame_host_->UpdateWebUI(dest_url, bindings);
2331 if (pending_render_frame_host_->web_ui()) { 2315 if (pending_render_frame_host_->web_ui()) {
2332 pending_render_frame_host_->web_ui()->RenderViewCreated( 2316 pending_render_frame_host_->web_ui()->RenderViewCreated(
2333 pending_render_frame_host_->render_view_host()); 2317 pending_render_frame_host_->render_view_host());
2334 } 2318 }
2335 2319
2336 // We now have a pending RFH and possibly an associated pending WebUI.
2337 DCHECK_EQ(GetNavigatingWebUI(), pending_render_frame_host_->web_ui());
2338
2339 // Check if our current RFH is live before we set up a transition. 2320 // Check if our current RFH is live before we set up a transition.
2340 if (!render_frame_host_->IsRenderFrameLive()) { 2321 if (!render_frame_host_->IsRenderFrameLive()) {
2341 // The current RFH is not live. There's no reason to sit around with a 2322 // The current RFH is not live. There's no reason to sit around with a
2342 // sad tab or a newly created RFH while we wait for the pending RFH to 2323 // sad tab or a newly created RFH while we wait for the pending RFH to
2343 // navigate. Just switch to the pending RFH now and go back to normal. 2324 // navigate. Just switch to the pending RFH now and go back to normal.
2344 // (Note that we don't care about on{before}unload handlers if the current 2325 // (Note that we don't care about on{before}unload handlers if the current
2345 // RFH isn't live.) 2326 // RFH isn't live.)
2346 CommitPending(); 2327 CommitPending();
2347 return render_frame_host_.get(); 2328 return render_frame_host_.get();
2348 } 2329 }
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
2391 WebUI::TypeID previous_web_ui_type = render_frame_host_->web_ui_type(); 2372 WebUI::TypeID previous_web_ui_type = render_frame_host_->web_ui_type();
2392 bool changed_web_ui = render_frame_host_->UpdateWebUI(dest_url, bindings); 2373 bool changed_web_ui = render_frame_host_->UpdateWebUI(dest_url, bindings);
2393 2374
2394 // If a change in WebUI happened, check this is an acceptable case. 2375 // If a change in WebUI happened, check this is an acceptable case.
2395 CHECK(!changed_web_ui || 2376 CHECK(!changed_web_ui ||
2396 IsAcceptableWebUITransition(previous_web_ui_type, dest_url, 2377 IsAcceptableWebUITransition(previous_web_ui_type, dest_url,
2397 dest_is_restore)); 2378 dest_is_restore));
2398 2379
2399 // If there is a WebUI in the current RenderFrameHost, it will navigate. 2380 // If there is a WebUI in the current RenderFrameHost, it will navigate.
2400 current_web_ui_is_navigating_ = !!render_frame_host_->web_ui(); 2381 current_web_ui_is_navigating_ = !!render_frame_host_->web_ui();
2401 DCHECK_EQ(GetNavigatingWebUI(), render_frame_host_->web_ui());
2402 2382
2403 // If the current RenderFrameHost has a WebUI and the associated RenderFrame 2383 // If the current RenderFrameHost has a WebUI and the associated RenderFrame
2404 // is alive, notify to the WebUI that the RenderView is being created or 2384 // is alive, notify to the WebUI that the RenderView is being created or
2405 // reused depending on whether the WebUI was changed or not. 2385 // reused depending on whether the WebUI was changed or not.
2406 if (GetNavigatingWebUI() && render_frame_host_->IsRenderFrameLive()) { 2386 if (render_frame_host_->web_ui() && render_frame_host_->IsRenderFrameLive()) {
2407 if (changed_web_ui) { 2387 if (changed_web_ui) {
2408 GetNavigatingWebUI()->RenderViewCreated( 2388 render_frame_host_->web_ui()->RenderViewCreated(
2409 render_frame_host_->render_view_host()); 2389 render_frame_host_->render_view_host());
2410 } else { 2390 } else {
2411 GetNavigatingWebUI()->RenderViewReused( 2391 render_frame_host_->web_ui()->RenderViewReused(
2412 render_frame_host_->render_view_host(), 2392 render_frame_host_->render_view_host(),
2413 frame_tree_node_->IsMainFrame()); 2393 frame_tree_node_->IsMainFrame());
2414 } 2394 }
2415 } 2395 }
2416 2396
2417 // The renderer can exit view source mode when any error or cancellation 2397 // The renderer can exit view source mode when any error or cancellation
2418 // happen. We must overwrite to recover the mode. 2398 // happen. We must overwrite to recover the mode.
2419 if (dest_is_view_source_mode) { 2399 if (dest_is_view_source_mode) {
2420 render_frame_host_->render_view_host()->Send( 2400 render_frame_host_->render_view_host()->Send(
2421 new ViewMsg_EnableViewSourceMode( 2401 new ViewMsg_EnableViewSourceMode(
(...skipping 251 matching lines...) Expand 10 before | Expand all | Expand 10 after
2673 } else { 2653 } else {
2674 // Going from having to not having a WebUI is acceptable for: 2654 // Going from having to not having a WebUI is acceptable for:
2675 // - Navigating to a special, renderer controlled URL. 2655 // - Navigating to a special, renderer controlled URL.
2676 DCHECK(IsRendererDebugURL( 2656 DCHECK(IsRendererDebugURL(
2677 SiteInstanceImpl::GetEffectiveURL(browser_context, dest_url))); 2657 SiteInstanceImpl::GetEffectiveURL(browser_context, dest_url)));
2678 } 2658 }
2679 return true; 2659 return true;
2680 } 2660 }
2681 2661
2682 } // namespace content 2662 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698