| Index: content/browser/frame_host/navigator_impl_unittest.cc
|
| diff --git a/content/browser/frame_host/navigator_impl_unittest.cc b/content/browser/frame_host/navigator_impl_unittest.cc
|
| index e31ce22eb170c76e91378ca9d111bec52f4da125..0f73230a5bf58373f4e87a3b8c66ad4e7038f214 100644
|
| --- a/content/browser/frame_host/navigator_impl_unittest.cc
|
| +++ b/content/browser/frame_host/navigator_impl_unittest.cc
|
| @@ -193,6 +193,33 @@ TEST_F(NavigatorTestWithBrowserSideNavigation,
|
| EXPECT_FALSE(node->render_manager()->pending_frame_host());
|
| }
|
|
|
| +// PlzNavigate: Test that the navigator waits for a beforeUnload ack before
|
| +// starting the navigation when beforeUnload handlers are present in the frame.
|
| +TEST_F(NavigatorTestWithBrowserSideNavigation, BeforeUnloadACK) {
|
| + const GURL kUrl1("http://www.google.com/");
|
| + const GURL kUrl2("http://www.chromium.org/");
|
| +
|
| + contents()->NavigateAndCommit(kUrl1);
|
| + main_test_rfh()->SendBeforeUnloadHandlersPresent(true);
|
| +
|
| + // Start a new navigation.
|
| + FrameTreeNode* node = main_test_rfh()->frame_tree_node();
|
| + RequestNavigation(node, kUrl2);
|
| + NavigationRequest* request = GetNavigationRequestForFrameTreeNode(node);
|
| + ASSERT_TRUE(request);
|
| + EXPECT_TRUE(request->browser_initiated());
|
| + EXPECT_EQ(NavigationRequest::WAITING_FOR_RENDERER_RESPONSE, request->state());
|
| + EXPECT_FALSE(GetSpeculativeRenderFrameHost(node));
|
| + EXPECT_FALSE(request->loader_for_testing());
|
| +
|
| + // Simulate a beforeUnload ACK.
|
| + main_test_rfh()->SendBeforeUnloadACK(true);
|
| + EXPECT_TRUE(GetNavigationRequestForFrameTreeNode(node));
|
| + EXPECT_TRUE(GetSpeculativeRenderFrameHost(node));
|
| + EXPECT_EQ(NavigationRequest::STARTED, request->state());
|
| + EXPECT_TRUE(request->loader_for_testing());
|
| +}
|
| +
|
| // PlzNavigate: Test that a beforeUnload denial cancels the navigation.
|
| TEST_F(NavigatorTestWithBrowserSideNavigation,
|
| BeforeUnloadDenialCancelNavigation) {
|
| @@ -200,6 +227,7 @@ TEST_F(NavigatorTestWithBrowserSideNavigation,
|
| const GURL kUrl2("http://www.chromium.org/");
|
|
|
| contents()->NavigateAndCommit(kUrl1);
|
| + main_test_rfh()->SendBeforeUnloadHandlersPresent(true);
|
|
|
| // Start a new navigation.
|
| FrameTreeNode* node = main_test_rfh()->frame_tree_node();
|
| @@ -267,12 +295,7 @@ TEST_F(NavigatorTestWithBrowserSideNavigation, BeginNavigation) {
|
| NavigationRequest* main_request =
|
| GetNavigationRequestForFrameTreeNode(root_node);
|
| ASSERT_TRUE(main_request);
|
| - EXPECT_EQ(NavigationRequest::WAITING_FOR_RENDERER_RESPONSE,
|
| - main_request->state());
|
| - EXPECT_FALSE(GetSpeculativeRenderFrameHost(root_node));
|
| -
|
| - // Simulate a BeforeUnloadACK IPC on the main frame.
|
| - main_test_rfh()->SendBeforeUnloadACK(true);
|
| + EXPECT_EQ(NavigationRequest::STARTED, main_request->state());
|
| TestNavigationURLLoader* main_loader =
|
| GetLoaderForNavigationRequest(main_request);
|
| EXPECT_EQ(kUrl3, main_request->common_params().url);
|
| @@ -281,9 +304,6 @@ TEST_F(NavigatorTestWithBrowserSideNavigation, BeginNavigation) {
|
| EXPECT_TRUE(main_loader->request_info()->is_main_frame);
|
| EXPECT_FALSE(main_loader->request_info()->parent_is_main_frame);
|
| EXPECT_TRUE(main_request->browser_initiated());
|
| - // BeforeUnloadACK was received from the renderer so the navigation should
|
| - // have started.
|
| - EXPECT_EQ(NavigationRequest::STARTED, main_request->state());
|
|
|
| // Main frame navigation to a different site should use a speculative
|
| // RenderFrameHost.
|
| @@ -698,7 +718,6 @@ TEST_F(NavigatorTestWithBrowserSideNavigation,
|
| ->sink()
|
| .ClearMessages();
|
| RequestNavigation(node, kUrl1);
|
| - main_test_rfh()->SendBeforeUnloadACK(true);
|
| EXPECT_EQ(rfh1, GetSpeculativeRenderFrameHost(node));
|
| EXPECT_NE(RenderFrameHostImpl::STATE_DEFAULT,
|
| GetSpeculativeRenderFrameHost(node)->rfh_state());
|
|
|