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

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

Issue 1545973002: Remove the is_loading_ field from WebContentsImpl (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase + addressed Nasko's nits Created 4 years, 10 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
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 <stddef.h> 7 #include <stddef.h>
8 8
9 #include <algorithm> 9 #include <algorithm>
10 #include <utility> 10 #include <utility>
(...skipping 419 matching lines...) Expand 10 before | Expand all | Expand 10 after
430 // navigations can just continue and wait to run the unload handler (by 430 // navigations can just continue and wait to run the unload handler (by
431 // swapping out) when the new navigation commits. 431 // swapping out) when the new navigation commits.
432 CHECK(cross_site_transferring_request); 432 CHECK(cross_site_transferring_request);
433 433
434 // A transfer should only have come from our pending or current RFH. 434 // A transfer should only have come from our pending or current RFH.
435 // TODO(creis): We need to handle the case that the pending RFH has changed 435 // TODO(creis): We need to handle the case that the pending RFH has changed
436 // in the mean time, while this was being posted from the IO thread. We 436 // in the mean time, while this was being posted from the IO thread. We
437 // should probably cancel the request in that case. 437 // should probably cancel the request in that case.
438 DCHECK(pending_render_frame_host == pending_render_frame_host_.get() || 438 DCHECK(pending_render_frame_host == pending_render_frame_host_.get() ||
439 pending_render_frame_host == render_frame_host_.get()); 439 pending_render_frame_host == render_frame_host_.get());
440 DCHECK(frame_tree_node_->IsLoading());
440 441
441 // Store the transferring request so that we can release it if the transfer 442 // Store the transferring request so that we can release it if the transfer
442 // navigation matches. 443 // navigation matches.
443 cross_site_transferring_request_ = std::move(cross_site_transferring_request); 444 cross_site_transferring_request_ = std::move(cross_site_transferring_request);
444 445
445 // Store the NavigationHandle to give it to the appropriate RenderFrameHost 446 // Store the NavigationHandle to give it to the appropriate RenderFrameHost
446 // after it started navigating. 447 // after it started navigating.
447 transfer_navigation_handle_ = 448 transfer_navigation_handle_ =
448 pending_render_frame_host->PassNavigationHandleOwnership(); 449 pending_render_frame_host->PassNavigationHandleOwnership();
449 DCHECK(transfer_navigation_handle_); 450 DCHECK(transfer_navigation_handle_);
450 451
452 // Set the transferring RenderFrameHost as not loading, so that it does not
453 // emit a DidStopLoading notification if it is destroyed when creating the
454 // new navigating RenderFrameHost.
455 pending_render_frame_host->set_is_loading(false);
456
451 // Sanity check that the params are for the correct frame and process. 457 // Sanity check that the params are for the correct frame and process.
452 // These should match the RenderFrameHost that made the request. 458 // These should match the RenderFrameHost that made the request.
453 // If it started as a cross-process navigation via OpenURL, this is the 459 // If it started as a cross-process navigation via OpenURL, this is the
454 // pending one. If it wasn't cross-process until the transfer, this is 460 // pending one. If it wasn't cross-process until the transfer, this is
455 // the current one. 461 // the current one.
456 int render_frame_id = pending_render_frame_host_ 462 int render_frame_id = pending_render_frame_host_
457 ? pending_render_frame_host_->GetRoutingID() 463 ? pending_render_frame_host_->GetRoutingID()
458 : render_frame_host_->GetRoutingID(); 464 : render_frame_host_->GetRoutingID();
459 DCHECK_EQ(render_frame_id, pending_render_frame_host->GetRoutingID()); 465 DCHECK_EQ(render_frame_id, pending_render_frame_host->GetRoutingID());
460 int process_id = pending_render_frame_host_ ? 466 int process_id = pending_render_frame_host_ ?
(...skipping 12 matching lines...) Expand all
473 pending_render_frame_host, transfer_url, rest_of_chain, referrer, 479 pending_render_frame_host, transfer_url, rest_of_chain, referrer,
474 page_transition, global_request_id, should_replace_current_entry); 480 page_transition, global_request_id, should_replace_current_entry);
475 481
476 // The transferring request was only needed during the RequestTransferURL 482 // The transferring request was only needed during the RequestTransferURL
477 // call, so it is safe to clear at this point. 483 // call, so it is safe to clear at this point.
478 cross_site_transferring_request_.reset(); 484 cross_site_transferring_request_.reset();
479 485
480 // If the navigation continued, the NavigationHandle should have been 486 // If the navigation continued, the NavigationHandle should have been
481 // transfered to a RenderFrameHost. In the other cases, it should be cleared. 487 // transfered to a RenderFrameHost. In the other cases, it should be cleared.
482 transfer_navigation_handle_.reset(); 488 transfer_navigation_handle_.reset();
489
490 // If the navigation in the new renderer did not start, inform the
491 // FrameTreeNode that it stopped loading.
492 if (!frame_tree_node_->IsLoading())
493 frame_tree_node_->DidStopLoading();
483 } 494 }
484 495
485 void RenderFrameHostManager::DidNavigateFrame( 496 void RenderFrameHostManager::DidNavigateFrame(
486 RenderFrameHostImpl* render_frame_host, 497 RenderFrameHostImpl* render_frame_host,
487 bool was_caused_by_user_gesture) { 498 bool was_caused_by_user_gesture) {
488 CommitPendingIfNecessary(render_frame_host, was_caused_by_user_gesture); 499 CommitPendingIfNecessary(render_frame_host, was_caused_by_user_gesture);
489 500
490 // Make sure any dynamic changes to this frame's sandbox flags that were made 501 // Make sure any dynamic changes to this frame's sandbox flags that were made
491 // prior to navigation take effect. 502 // prior to navigation take effect.
492 CommitPendingSandboxFlags(); 503 CommitPendingSandboxFlags();
(...skipping 412 matching lines...) Expand 10 before | Expand all | Expand 10 after
905 if (notify_webui_of_rv_creation && GetNavigatingWebUI()) 916 if (notify_webui_of_rv_creation && GetNavigatingWebUI())
906 GetNavigatingWebUI()->RenderViewCreated(navigation_rfh->render_view_host()); 917 GetNavigatingWebUI()->RenderViewCreated(navigation_rfh->render_view_host());
907 918
908 return navigation_rfh; 919 return navigation_rfh;
909 } 920 }
910 921
911 // PlzNavigate 922 // PlzNavigate
912 void RenderFrameHostManager::CleanUpNavigation() { 923 void RenderFrameHostManager::CleanUpNavigation() {
913 CHECK(IsBrowserSideNavigationEnabled()); 924 CHECK(IsBrowserSideNavigationEnabled());
914 render_frame_host_->ClearPendingWebUI(); 925 render_frame_host_->ClearPendingWebUI();
915 if (speculative_render_frame_host_) 926 if (speculative_render_frame_host_) {
927 bool was_loading = speculative_render_frame_host_->is_loading();
916 DiscardUnusedFrame(UnsetSpeculativeRenderFrameHost()); 928 DiscardUnusedFrame(UnsetSpeculativeRenderFrameHost());
929 if (was_loading)
930 frame_tree_node_->DidStopLoading();
931 }
917 } 932 }
918 933
919 // PlzNavigate 934 // PlzNavigate
920 scoped_ptr<RenderFrameHostImpl> 935 scoped_ptr<RenderFrameHostImpl>
921 RenderFrameHostManager::UnsetSpeculativeRenderFrameHost() { 936 RenderFrameHostManager::UnsetSpeculativeRenderFrameHost() {
922 CHECK(IsBrowserSideNavigationEnabled()); 937 CHECK(IsBrowserSideNavigationEnabled());
923 speculative_render_frame_host_->GetProcess()->RemovePendingView(); 938 speculative_render_frame_host_->GetProcess()->RemovePendingView();
924 return std::move(speculative_render_frame_host_); 939 return std::move(speculative_render_frame_host_);
925 } 940 }
926 941
(...skipping 1068 matching lines...) Expand 10 before | Expand all | Expand 10 after
1995 if (!delegate_->IsHidden() && new_rfh_has_view) { 2010 if (!delegate_->IsHidden() && new_rfh_has_view) {
1996 // In most cases, we need to show the new view. 2011 // In most cases, we need to show the new view.
1997 render_frame_host_->GetView()->Show(); 2012 render_frame_host_->GetView()->Show();
1998 } 2013 }
1999 if (!new_rfh_has_view) { 2014 if (!new_rfh_has_view) {
2000 // If the view is gone, then this RenderViewHost died while it was hidden. 2015 // If the view is gone, then this RenderViewHost died while it was hidden.
2001 // We ignored the RenderProcessGone call at the time, so we should send it 2016 // We ignored the RenderProcessGone call at the time, so we should send it
2002 // now to make sure the sad tab shows up, etc. 2017 // now to make sure the sad tab shows up, etc.
2003 DCHECK(!render_frame_host_->IsRenderFrameLive()); 2018 DCHECK(!render_frame_host_->IsRenderFrameLive());
2004 DCHECK(!render_frame_host_->render_view_host()->IsRenderViewLive()); 2019 DCHECK(!render_frame_host_->render_view_host()->IsRenderViewLive());
2020 render_frame_host_->ResetLoadingState();
2005 delegate_->RenderProcessGoneFromRenderManager( 2021 delegate_->RenderProcessGoneFromRenderManager(
2006 render_frame_host_->render_view_host()); 2022 render_frame_host_->render_view_host());
2007 } 2023 }
2008 2024
2009 // For top-level frames, also hide the old RenderViewHost's view. 2025 // For top-level frames, also hide the old RenderViewHost's view.
2010 // TODO(creis): As long as show/hide are on RVH, we don't want to hide on 2026 // TODO(creis): As long as show/hide are on RVH, we don't want to hide on
2011 // subframe navigations or we will interfere with the top-level frame. 2027 // subframe navigations or we will interfere with the top-level frame.
2012 if (is_main_frame && 2028 if (is_main_frame &&
2013 old_render_frame_host->render_view_host()->GetWidget()->GetView()) { 2029 old_render_frame_host->render_view_host()->GetWidget()->GetView()) {
2014 old_render_frame_host->render_view_host()->GetWidget()->GetView()->Hide(); 2030 old_render_frame_host->render_view_host()->GetWidget()->GetView()->Hide();
(...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after
2246 render_frame_host_->pending_web_ui()->RenderViewCreated( 2262 render_frame_host_->pending_web_ui()->RenderViewCreated(
2247 render_frame_host_->render_view_host()); 2263 render_frame_host_->render_view_host());
2248 } 2264 }
2249 } 2265 }
2250 } 2266 }
2251 2267
2252 void RenderFrameHostManager::CancelPending() { 2268 void RenderFrameHostManager::CancelPending() {
2253 TRACE_EVENT1("navigation", "RenderFrameHostManager::CancelPending", 2269 TRACE_EVENT1("navigation", "RenderFrameHostManager::CancelPending",
2254 "FrameTreeNode id", frame_tree_node_->frame_tree_node_id()); 2270 "FrameTreeNode id", frame_tree_node_->frame_tree_node_id());
2255 render_frame_host_->ClearPendingWebUI(); 2271 render_frame_host_->ClearPendingWebUI();
2272
2273 bool pending_was_loading = pending_render_frame_host_->is_loading();
2256 DiscardUnusedFrame(UnsetPendingRenderFrameHost()); 2274 DiscardUnusedFrame(UnsetPendingRenderFrameHost());
2275 if (pending_was_loading)
2276 frame_tree_node_->DidStopLoading();
2257 } 2277 }
2258 2278
2259 scoped_ptr<RenderFrameHostImpl> 2279 scoped_ptr<RenderFrameHostImpl>
2260 RenderFrameHostManager::UnsetPendingRenderFrameHost() { 2280 RenderFrameHostManager::UnsetPendingRenderFrameHost() {
2261 scoped_ptr<RenderFrameHostImpl> pending_render_frame_host = 2281 scoped_ptr<RenderFrameHostImpl> pending_render_frame_host =
2262 std::move(pending_render_frame_host_); 2282 std::move(pending_render_frame_host_);
2263 2283
2264 RenderFrameDevToolsAgentHost::OnCancelPendingNavigation( 2284 RenderFrameDevToolsAgentHost::OnCancelPendingNavigation(
2265 pending_render_frame_host.get(), 2285 pending_render_frame_host.get(),
2266 render_frame_host_.get()); 2286 render_frame_host_.get());
(...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after
2480 int RenderFrameHostManager::GetOpenerRoutingID(SiteInstance* instance) { 2500 int RenderFrameHostManager::GetOpenerRoutingID(SiteInstance* instance) {
2481 if (!frame_tree_node_->opener()) 2501 if (!frame_tree_node_->opener())
2482 return MSG_ROUTING_NONE; 2502 return MSG_ROUTING_NONE;
2483 2503
2484 return frame_tree_node_->opener() 2504 return frame_tree_node_->opener()
2485 ->render_manager() 2505 ->render_manager()
2486 ->GetRoutingIdForSiteInstance(instance); 2506 ->GetRoutingIdForSiteInstance(instance);
2487 } 2507 }
2488 2508
2489 } // namespace content 2509 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/frame_host/render_frame_host_impl.cc ('k') | content/browser/site_instance_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698