Index: content/browser/frame_host/render_frame_host_manager_browsertest.cc |
diff --git a/content/browser/frame_host/render_frame_host_manager_browsertest.cc b/content/browser/frame_host/render_frame_host_manager_browsertest.cc |
index 103709908d6f9ea610d1d11e9d9a862eb8b8c9c0..73927edf90f3bf096e0426e624ecffc7f8b33210 100644 |
--- a/content/browser/frame_host/render_frame_host_manager_browsertest.cc |
+++ b/content/browser/frame_host/render_frame_host_manager_browsertest.cc |
@@ -2163,4 +2163,47 @@ IN_PROC_BROWSER_TEST_F(RenderFrameHostManagerTest, |
EXPECT_TRUE(watcher.did_exit_normally()); |
} |
+// Tests navigating cross-process and reusing an existing RenderViewHost, |
Charlie Reis
2015/10/16 17:02:23
nit: Tests that
nasko
2015/10/16 22:17:38
Done.
|
+// which process has been killed/crashed, doesn't result in creating |
Charlie Reis
2015/10/16 17:02:23
nit: Put the killed/crash phrase in parentheses, n
nasko
2015/10/16 22:17:38
Done.
|
+// a RenderView with no valid RenderFrame or RenderFrameProxy. |
Charlie Reis
2015/10/16 17:02:24
nit: Mention https://crbug.com/543222 here.
nasko
2015/10/16 22:17:38
I ended up filing a master bug (https://crbug.com/
|
+IN_PROC_BROWSER_TEST_F(RenderFrameHostManagerTest, |
+ RenderViewInitAfterProcessKill) { |
+ StartEmbeddedServer(); |
+ NavigateToURL(shell(), |
+ embedded_test_server()->GetURL("a.com", "/title1.html")); |
+ |
+ // Open a popup to navigate. |
+ Shell* new_shell = |
+ OpenPopup(shell()->web_contents(), GURL(url::kAboutBlankURL), "foo"); |
+ EXPECT_EQ(shell()->web_contents()->GetSiteInstance(), |
+ new_shell->web_contents()->GetSiteInstance()); |
+ WebContentsImpl* new_web_contents = |
+ static_cast<WebContentsImpl*>(new_shell->web_contents()); |
+ FrameTreeNode* popup_root = new_web_contents->GetFrameTree()->root(); |
+ RenderViewHostImpl* rvh = new_web_contents->GetRenderViewHost(); |
+ |
+ // Navigate the popup to a different site. |
+ NavigateToURL(new_shell, |
+ embedded_test_server()->GetURL("b.com", "/title2.html")); |
+ EXPECT_NE(shell()->web_contents()->GetSiteInstance(), |
+ new_shell->web_contents()->GetSiteInstance()); |
+ EXPECT_EQ(rvh, popup_root->render_manager()->GetSwappedOutRenderViewHost( |
+ shell()->web_contents()->GetSiteInstance())); |
Charlie Reis
2015/10/16 17:02:24
I'm not sure I understand the bug, but it seems li
nasko
2015/10/16 22:17:38
Yes, you are correct. This RVH was a copy/paste fr
|
+ |
+ // Kill the process for the main tab. |
+ RenderProcessHost* process = popup_root->current_frame_host()->GetProcess(); |
Charlie Reis
2015/10/16 17:02:23
Wait, are the comments wrong? This is killing the
nasko
2015/10/16 22:17:38
Yes, fixed.
|
+ RenderProcessHostWatcher crash_observer( |
+ process, RenderProcessHostWatcher::WATCH_FOR_PROCESS_EXIT); |
+ process->Shutdown(0, false); |
+ crash_observer.Wait(); |
+ EXPECT_FALSE(popup_root->current_frame_host()->IsRenderFrameLive()); |
+ EXPECT_FALSE( |
+ popup_root->current_frame_host()->render_view_host()->IsRenderViewLive()); |
+ |
+ // Navigate the main tab to the site of the popup. This will cause the |
+ // RenderView for b.com in the main tab to be created. |
Charlie Reis
2015/10/16 17:02:23
Can you add some explanation of what this is verif
nasko
2015/10/16 22:17:38
The process crashes, so we don't complete the navi
|
+ NavigateToURL(shell(), |
+ embedded_test_server()->GetURL("b.com", "/title3.html")); |
+} |
+ |
} // namespace content |