Index: chrome/browser/site_per_process_interactive_browsertest.cc |
diff --git a/chrome/browser/site_per_process_interactive_browsertest.cc b/chrome/browser/site_per_process_interactive_browsertest.cc |
index c063ef805fb898a86ef14784d33f07679e2c7d4d..9c105d7c029a4926584f89cc5cd594e4b7693cfe 100644 |
--- a/chrome/browser/site_per_process_interactive_browsertest.cc |
+++ b/chrome/browser/site_per_process_interactive_browsertest.cc |
@@ -741,3 +741,32 @@ IN_PROC_BROWSER_TEST_F(SitePerProcessInteractiveBrowserTest, |
EXPECT_FALSE(ElementHasFullscreenStyle(c_middle, "child-0")); |
} |
+// Test that deleting a RenderWidgetHost that holds the mouse lock won't cause a |
+// crash. https://crbug.com/619571. |
+IN_PROC_BROWSER_TEST_F(SitePerProcessInteractiveBrowserTest, |
+ RenderWidgetHostDeletedWhileMouseLocked) { |
+ GURL main_url(embedded_test_server()->GetURL( |
+ "a.com", "/cross_site_iframe_factory.html?a(b)")); |
+ ui_test_utils::NavigateToURL(browser(), main_url); |
+ |
+ content::WebContents* web_contents = |
+ browser()->tab_strip_model()->GetActiveWebContents(); |
+ |
+ content::RenderFrameHost* main_frame = web_contents->GetMainFrame(); |
+ content::RenderFrameHost* child = ChildFrameAt(main_frame, 0); |
+ |
+ EXPECT_TRUE(ExecuteScript(child, "document.body.requestPointerLock()")); |
+ bool mouse_locked = false; |
+ EXPECT_TRUE(ExecuteScriptAndExtractBool(child, |
+ "window.domAutomationController.send(" |
+ "document.body == " |
+ "document.pointerLockElement)", |
+ &mouse_locked)); |
+ EXPECT_TRUE(mouse_locked); |
+ EXPECT_TRUE(main_frame->GetView()->IsMouseLocked()); |
+ |
+ EXPECT_TRUE(ExecuteScript(main_frame, |
+ "document.querySelector('iframe').parentNode." |
+ "removeChild(document.querySelector('iframe'))")); |
+ EXPECT_FALSE(main_frame->GetView()->IsMouseLocked()); |
+} |