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

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

Issue 1408743005: Properly recreate swapped out RenderView. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Clear main RFH on cancelling the pending RFH. Created 5 years, 2 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 <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 895 matching lines...) Expand 10 before | Expand all | Expand 10 after
906 906
907 // When using swapped out RenderFrameHosts, it is possible for the pending 907 // When using swapped out RenderFrameHosts, it is possible for the pending
908 // RenderFrameHost to be an existing one in swapped out state. Since it 908 // RenderFrameHost to be an existing one in swapped out state. Since it
909 // has been used to start a navigation, it could have committed a 909 // has been used to start a navigation, it could have committed a
910 // document. Check if |render_frame_host| is already swapped out, to avoid 910 // document. Check if |render_frame_host| is already swapped out, to avoid
911 // swapping it out again. 911 // swapping it out again.
912 if (!render_frame_host->is_swapped_out()) 912 if (!render_frame_host->is_swapped_out())
913 render_frame_host->SwapOut(proxy, false); 913 render_frame_host->SwapOut(proxy, false);
914 914
915 proxy->TakeFrameHostOwnership(render_frame_host.Pass()); 915 proxy->TakeFrameHostOwnership(render_frame_host.Pass());
916 } else {
917 // If |render_frame_host| is the RenderViewHost's main frame, it must
918 // be cleared, as it will be deleted at the end of this method.
Charlie Reis 2015/10/16 17:02:23 s/, it must be cleared/, then the RenderViewHost m
919 if (frame_tree_node_->IsMainFrame() &&
920 render_frame_host->render_view_host()->GetMainFrame() ==
921 render_frame_host.get()) {
922 render_frame_host->render_view_host()->set_main_frame_routing_id(
923 MSG_ROUTING_NONE);
924 }
916 } 925 }
917 } 926 }
918 927
919 if (render_frame_host) { 928 if (render_frame_host) {
920 // We won't be coming back, so delete this one. 929 // We won't be coming back, so delete this one.
921 ShutdownProxiesIfLastActiveFrameInSiteInstance(render_frame_host.get()); 930 ShutdownProxiesIfLastActiveFrameInSiteInstance(render_frame_host.get());
922 render_frame_host.reset(); 931 render_frame_host.reset();
923 } 932 }
924 } 933 }
925 934
(...skipping 897 matching lines...) Expand 10 before | Expand all | Expand 10 after
1823 } else { 1832 } else {
1824 proxy = new RenderFrameProxyHost( 1833 proxy = new RenderFrameProxyHost(
1825 new_render_frame_host->GetSiteInstance(), 1834 new_render_frame_host->GetSiteInstance(),
1826 new_render_frame_host->render_view_host(), frame_tree_node_); 1835 new_render_frame_host->render_view_host(), frame_tree_node_);
1827 proxy_hosts_->Add(instance->GetId(), make_scoped_ptr(proxy)); 1836 proxy_hosts_->Add(instance->GetId(), make_scoped_ptr(proxy));
1828 proxy_routing_id = proxy->GetRoutingID(); 1837 proxy_routing_id = proxy->GetRoutingID();
1829 proxy->TakeFrameHostOwnership(new_render_frame_host.Pass()); 1838 proxy->TakeFrameHostOwnership(new_render_frame_host.Pass());
1830 } 1839 }
1831 1840
1832 if (frame_tree_node_->IsMainFrame()) { 1841 if (frame_tree_node_->IsMainFrame()) {
1842 if (!render_view_host->GetMainFrame()) {
Charlie Reis 2015/10/16 17:02:23 What would happen if it had a main frame routing I
1843 CHECK(!render_view_host->is_active());
1844 render_view_host->set_main_frame_routing_id(
1845 new_render_frame_host->GetRoutingID());
1846 }
1847
1833 success = InitRenderView(render_view_host, proxy_routing_id); 1848 success = InitRenderView(render_view_host, proxy_routing_id);
1834 1849
1835 // If we are reusing the RenderViewHost and it doesn't already have a 1850 // If we are reusing the RenderViewHost and it doesn't already have a
1836 // RenderWidgetHostView, we need to create one if this is the main frame. 1851 // RenderWidgetHostView, we need to create one if this is the main frame.
1837 if (!swapped_out && !render_view_host->GetView()) 1852 if (!swapped_out && !render_view_host->GetView())
1838 delegate_->CreateRenderWidgetHostViewForRenderManager(render_view_host); 1853 delegate_->CreateRenderWidgetHostViewForRenderManager(render_view_host);
1839 } else { 1854 } else {
1840 DCHECK(render_view_host->IsRenderViewLive()); 1855 DCHECK(render_view_host->IsRenderViewLive());
1841 } 1856 }
1842 1857
(...skipping 798 matching lines...) Expand 10 before | Expand all | Expand 10 after
2641 int RenderFrameHostManager::GetOpenerRoutingID(SiteInstance* instance) { 2656 int RenderFrameHostManager::GetOpenerRoutingID(SiteInstance* instance) {
2642 if (!frame_tree_node_->opener()) 2657 if (!frame_tree_node_->opener())
2643 return MSG_ROUTING_NONE; 2658 return MSG_ROUTING_NONE;
2644 2659
2645 return frame_tree_node_->opener() 2660 return frame_tree_node_->opener()
2646 ->render_manager() 2661 ->render_manager()
2647 ->GetRoutingIdForSiteInstance(instance); 2662 ->GetRoutingIdForSiteInstance(instance);
2648 } 2663 }
2649 2664
2650 } // namespace content 2665 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698