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 82a49874ec9561ca5d6d17ec8a0aeb1c70cb8cce..a4d5a65ebb4db390bb14b999fe35423665125990 100644 |
--- a/content/browser/frame_host/navigator_impl_unittest.cc |
+++ b/content/browser/frame_host/navigator_impl_unittest.cc |
@@ -941,4 +941,49 @@ TEST_F(NavigatorTestWithBrowserSideNavigation, |
EXPECT_FALSE(rfhm->IsOnSwappedOutList(rfh1)); |
} |
+// PlzNavigate: Verify that data urls are properly handled. |
+TEST_F(NavigatorTestWithBrowserSideNavigation, DataUrls) { |
+ const GURL kUrl1("http://wikipedia.org/"); |
+ const GURL kUrl2("data:test"); |
nasko
2015/02/26 17:35:24
nit: this isn't a valid data URL. It needs a comma
Charlie Reis
2015/02/26 20:49:01
Yes, it seems like it should be data:text/html,tes
clamy
2015/02/27 12:53:59
Done. No it was there from the start.
|
+ |
+ // Navigate to an initial site. |
+ contents()->NavigateAndCommit(kUrl1); |
+ FrameTreeNode* node = main_test_rfh()->frame_tree_node(); |
+ |
+ // Navigate to a data url. |
+ RequestNavigation(node, kUrl2); |
+ NavigationRequest* navigation_request = |
+ GetNavigationRequestForFrameTreeNode(node); |
+ ASSERT_TRUE(navigation_request); |
+ EXPECT_EQ(NavigationRequest::WAITING_FOR_RENDERER_RESPONSE, |
+ navigation_request->state()); |
+ main_test_rfh()->SendBeforeUnloadACK(true); |
+ |
+ // The request should not have been sent to the IO thread but committed |
+ // immediately. |
+ EXPECT_EQ(NavigationRequest::RESPONSE_STARTED, |
+ navigation_request->state()); |
+ EXPECT_FALSE(navigation_request->loader_for_testing()); |
+ TestRenderFrameHost* speculative_rfh = GetSpeculativeRenderFrameHost(node); |
+ ASSERT_TRUE(speculative_rfh); |
+ speculative_rfh->SendNavigate(0, kUrl2); |
+ EXPECT_EQ(main_test_rfh(), speculative_rfh); |
+ |
+ // Go back to the initial site. |
+ contents()->NavigateAndCommit(kUrl1); |
+ |
+ // Do a renderer-initiated navigation to a data url. The request should not be |
+ // sent to the IO thread, nor committed. |
+ TestRenderFrameHost* main_rfh = main_test_rfh(); |
+ main_rfh->SendBeginNavigationWithURL(kUrl2); |
+ navigation_request = GetNavigationRequestForFrameTreeNode(node); |
+ ASSERT_TRUE(navigation_request); |
+ EXPECT_EQ(NavigationRequest::RESPONSE_STARTED, |
+ navigation_request->state()); |
+ EXPECT_FALSE(navigation_request->loader_for_testing()); |
+ EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
+ main_rfh->SendNavigate(1, kUrl2); |
+ EXPECT_EQ(main_test_rfh(), main_rfh); |
+} |
+ |
} // namespace content |