| Index: content/browser/frame_host/navigation_controller_impl_unittest.cc
|
| diff --git a/content/browser/frame_host/navigation_controller_impl_unittest.cc b/content/browser/frame_host/navigation_controller_impl_unittest.cc
|
| index 6bb3d0e21b3cb74ca478ae00f019fc0c24b3da05..bd1ac439356f2259d5b8ccc452e446616a373730 100644
|
| --- a/content/browser/frame_host/navigation_controller_impl_unittest.cc
|
| +++ b/content/browser/frame_host/navigation_controller_impl_unittest.cc
|
| @@ -4329,4 +4329,44 @@ TEST_F(NavigationControllerTest, PostThenReplaceStateThenReload) {
|
| EXPECT_EQ(0, delegate->repost_form_warning_count());
|
| }
|
|
|
| +// Test that the navigation controller preserves an entry when a
|
| +// "Blocking Page" is created.
|
| +TEST_F(NavigationControllerTest, BlockingPageEntry) {
|
| + const GURL url1("http://foo1");
|
| + const GURL url2("http://foo2?x=<script>alert(0)</script>");
|
| + const GURL url3("data:,");
|
| + const GURL url4("http://foo4");
|
| +
|
| + NavigationControllerImpl& controller = controller_impl();
|
| +
|
| + // Set up the controller with initial history.
|
| + NavigateAndCommit(url1);
|
| + NavigateAndCommit(url2);
|
| + EXPECT_FALSE(controller.GetBlockedPageEntry());
|
| +
|
| + // Pretend that XSS was detected by the renderer.
|
| + int32 page_id = controller.GetActiveEntry()->GetPageID();
|
| + contents()->OnDidDetectXSS(page_id, url2, true);
|
| + EXPECT_TRUE(controller.GetBlockedPageEntry());
|
| + EXPECT_EQ(url2, controller.GetBlockedPageEntry()->GetURL());
|
| +
|
| + // Pretend that a "Blocking Page" replacement navigation followed.
|
| + FrameHostMsg_DidCommitProvisionalLoad_Params params;
|
| + params.page_id = page_id;
|
| + params.url = url3;
|
| + params.transition = PAGE_TRANSITION_LINK;
|
| + params.gesture = NavigationGestureUser;
|
| + params.page_state = PageState::CreateFromURL(params.url);
|
| + params.was_within_same_page = true;
|
| + params.is_post = false;
|
| + params.post_id = -1;
|
| + test_rvh()->SendNavigateWithParams(¶ms);
|
| + EXPECT_TRUE(controller.GetBlockedPageEntry());
|
| + EXPECT_EQ(url2, controller.GetBlockedPageEntry()->GetURL());
|
| +
|
| + // Check that further navigation clears the entry.
|
| + NavigateAndCommit(url4);
|
| + EXPECT_FALSE(controller.GetBlockedPageEntry());
|
| +}
|
| +
|
| } // namespace content
|
|
|