| OLD | NEW |
| 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 "base/strings/utf_string_conversions.h" | 5 #include "base/strings/utf_string_conversions.h" |
| 6 #include "content/browser/frame_host/navigation_controller_impl.h" | 6 #include "content/browser/frame_host/navigation_controller_impl.h" |
| 7 #include "content/browser/frame_host/navigation_entry_impl.h" | 7 #include "content/browser/frame_host/navigation_entry_impl.h" |
| 8 #include "content/browser/frame_host/render_view_host_manager.h" | 8 #include "content/browser/frame_host/render_view_host_manager.h" |
| 9 #include "content/browser/renderer_host/test_render_view_host.h" | 9 #include "content/browser/renderer_host/test_render_view_host.h" |
| 10 #include "content/browser/site_instance_impl.h" | 10 #include "content/browser/site_instance_impl.h" |
| (...skipping 1074 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1085 EXPECT_FALSE(opener1_manager->GetSwappedOutRenderViewHost( | 1085 EXPECT_FALSE(opener1_manager->GetSwappedOutRenderViewHost( |
| 1086 rvh3->GetSiteInstance())); | 1086 rvh3->GetSiteInstance())); |
| 1087 EXPECT_FALSE(opener2_manager->GetSwappedOutRenderViewHost( | 1087 EXPECT_FALSE(opener2_manager->GetSwappedOutRenderViewHost( |
| 1088 rvh3->GetSiteInstance())); | 1088 rvh3->GetSiteInstance())); |
| 1089 } | 1089 } |
| 1090 | 1090 |
| 1091 // Test that we clean up swapped out RenderViewHosts when a process hosting | 1091 // Test that we clean up swapped out RenderViewHosts when a process hosting |
| 1092 // those associated RenderViews crashes. http://crbug.com/258993 | 1092 // those associated RenderViews crashes. http://crbug.com/258993 |
| 1093 TEST_F(RenderViewHostManagerTest, CleanUpSwappedOutRVHOnProcessCrash) { | 1093 TEST_F(RenderViewHostManagerTest, CleanUpSwappedOutRVHOnProcessCrash) { |
| 1094 const GURL kUrl1("http://www.google.com/"); | 1094 const GURL kUrl1("http://www.google.com/"); |
| 1095 const GURL kUrl2("http://www.chromium.org/"); |
| 1095 | 1096 |
| 1096 // Navigate to an initial URL. | 1097 // Navigate to an initial URL. |
| 1097 contents()->NavigateAndCommit(kUrl1); | 1098 contents()->NavigateAndCommit(kUrl1); |
| 1098 TestRenderViewHost* rvh1 = test_rvh(); | 1099 TestRenderViewHost* rvh1 = test_rvh(); |
| 1099 | 1100 |
| 1100 // Create a new tab as an opener for the main tab. | 1101 // Create a new tab as an opener for the main tab. |
| 1101 scoped_ptr<TestWebContents> opener1( | 1102 scoped_ptr<TestWebContents> opener1( |
| 1102 TestWebContents::Create(browser_context(), rvh1->GetSiteInstance())); | 1103 TestWebContents::Create(browser_context(), rvh1->GetSiteInstance())); |
| 1103 RenderViewHostManager* opener1_manager = | 1104 RenderViewHostManager* opener1_manager = |
| 1104 opener1->GetRenderManagerForTesting(); | 1105 opener1->GetRenderManagerForTesting(); |
| 1105 contents()->SetOpener(opener1.get()); | 1106 contents()->SetOpener(opener1.get()); |
| 1106 | 1107 |
| 1108 // Make sure the new opener RVH is considered live. |
| 1109 opener1_manager->current_host()->CreateRenderView(string16(), -1, -1); |
| 1110 |
| 1111 // Use a cross-process navigation in the opener to swap out the old RVH. |
| 1107 EXPECT_FALSE(opener1_manager->GetSwappedOutRenderViewHost( | 1112 EXPECT_FALSE(opener1_manager->GetSwappedOutRenderViewHost( |
| 1108 rvh1->GetSiteInstance())); | 1113 rvh1->GetSiteInstance())); |
| 1109 opener1->CreateSwappedOutRenderView(rvh1->GetSiteInstance()); | 1114 opener1->NavigateAndCommit(kUrl2); |
| 1110 EXPECT_TRUE(opener1_manager->GetSwappedOutRenderViewHost( | 1115 EXPECT_TRUE(opener1_manager->GetSwappedOutRenderViewHost( |
| 1111 rvh1->GetSiteInstance())); | 1116 rvh1->GetSiteInstance())); |
| 1112 | 1117 |
| 1113 // Fake a process crash. | 1118 // Fake a process crash. |
| 1114 RenderProcessHost::RendererClosedDetails details( | 1119 RenderProcessHost::RendererClosedDetails details( |
| 1115 rvh1->GetProcess()->GetHandle(), | 1120 rvh1->GetProcess()->GetHandle(), |
| 1116 base::TERMINATION_STATUS_PROCESS_CRASHED, | 1121 base::TERMINATION_STATUS_PROCESS_CRASHED, |
| 1117 0); | 1122 0); |
| 1118 NotificationService::current()->Notify( | 1123 NotificationService::current()->Notify( |
| 1119 NOTIFICATION_RENDERER_PROCESS_CLOSED, | 1124 NOTIFICATION_RENDERER_PROCESS_CLOSED, |
| 1120 Source<RenderProcessHost>(rvh1->GetProcess()), | 1125 Source<RenderProcessHost>(rvh1->GetProcess()), |
| 1121 Details<RenderProcessHost::RendererClosedDetails>(&details)); | 1126 Details<RenderProcessHost::RendererClosedDetails>(&details)); |
| 1122 rvh1->set_render_view_created(false); | 1127 rvh1->set_render_view_created(false); |
| 1123 | 1128 |
| 1124 // Ensure that the swapped out RenderViewHost has been deleted. | 1129 // Ensure that the swapped out RenderViewHost has been deleted. |
| 1125 EXPECT_FALSE(opener1_manager->GetSwappedOutRenderViewHost( | 1130 EXPECT_FALSE(opener1_manager->GetSwappedOutRenderViewHost( |
| 1126 rvh1->GetSiteInstance())); | 1131 rvh1->GetSiteInstance())); |
| 1127 | 1132 |
| 1128 // Reload the initial tab. This should recreate the opener. | 1133 // Reload the initial tab. This should recreate the opener's swapped out RVH |
| 1134 // in the original SiteInstance. |
| 1129 contents()->GetController().Reload(true); | 1135 contents()->GetController().Reload(true); |
| 1130 | 1136 EXPECT_EQ(opener1_manager->GetSwappedOutRenderViewHost( |
| 1131 EXPECT_EQ(opener1_manager->current_host()->GetRoutingID(), | 1137 rvh1->GetSiteInstance())->GetRoutingID(), |
| 1132 test_rvh()->opener_route_id()); | 1138 test_rvh()->opener_route_id()); |
| 1133 } | 1139 } |
| 1134 | 1140 |
| 1135 // Test that RenderViewHosts created for WebUI navigations are properly | 1141 // Test that RenderViewHosts created for WebUI navigations are properly |
| 1136 // granted WebUI bindings even if an unprivileged swapped out RenderViewHost | 1142 // granted WebUI bindings even if an unprivileged swapped out RenderViewHost |
| 1137 // is in the same process (http://crbug.com/79918). | 1143 // is in the same process (http://crbug.com/79918). |
| 1138 TEST_F(RenderViewHostManagerTest, EnableWebUIWithSwappedOutOpener) { | 1144 TEST_F(RenderViewHostManagerTest, EnableWebUIWithSwappedOutOpener) { |
| 1139 set_should_create_webui(true); | 1145 set_should_create_webui(true); |
| 1140 const GURL kSettingsUrl("chrome://chrome/settings"); | 1146 const GURL kSettingsUrl("chrome://chrome/settings"); |
| 1141 const GURL kPluginUrl("chrome://plugins"); | 1147 const GURL kPluginUrl("chrome://plugins"); |
| (...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1303 Source<RenderWidgetHost>(host2)); | 1309 Source<RenderWidgetHost>(host2)); |
| 1304 manager.ShouldClosePage(false, true, base::TimeTicks()); | 1310 manager.ShouldClosePage(false, true, base::TimeTicks()); |
| 1305 | 1311 |
| 1306 EXPECT_TRUE( | 1312 EXPECT_TRUE( |
| 1307 notifications.Check1AndReset(NOTIFICATION_RENDER_WIDGET_HOST_DESTROYED)); | 1313 notifications.Check1AndReset(NOTIFICATION_RENDER_WIDGET_HOST_DESTROYED)); |
| 1308 EXPECT_FALSE(manager.pending_render_view_host()); | 1314 EXPECT_FALSE(manager.pending_render_view_host()); |
| 1309 EXPECT_EQ(host, manager.current_host()); | 1315 EXPECT_EQ(host, manager.current_host()); |
| 1310 } | 1316 } |
| 1311 | 1317 |
| 1312 } // namespace content | 1318 } // namespace content |
| OLD | NEW |