| 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 cd10a01267ce571887eb87a174b9f3962c9a8321..467aacca2fe0cd0ad15783f10cad25d7ef7aa7d8 100644
|
| --- a/content/browser/frame_host/navigation_controller_impl_unittest.cc
|
| +++ b/content/browser/frame_host/navigation_controller_impl_unittest.cc
|
| @@ -2068,13 +2068,38 @@ TEST_F(NavigationControllerTest, NewSubframe) {
|
| RegisterForAllNavNotifications(¬ifications, &controller);
|
|
|
| const GURL url1("http://foo1");
|
| - main_test_rfh()->NavigateAndCommitRendererInitiated(0, true, url1);
|
| + main_test_rfh()->NavigateAndCommitRendererInitiated(1, true, url1);
|
| EXPECT_EQ(1U, navigation_entry_committed_counter_);
|
| navigation_entry_committed_counter_ = 0;
|
|
|
| + // Prereq: add a subframe with an initial auto-subframe navigation.
|
| + main_test_rfh()->OnCreateChildFrame(MSG_ROUTING_NONE, std::string(),
|
| + SandboxFlags::NONE);
|
| + RenderFrameHostImpl* subframe =
|
| + contents()->GetFrameTree()->root()->child_at(0)->current_frame_host();
|
| + const GURL subframe_url("http://foo1/subframe");
|
| + {
|
| + FrameHostMsg_DidCommitProvisionalLoad_Params params;
|
| + params.page_id = 1;
|
| + params.nav_entry_id = 0;
|
| + params.did_create_new_entry = false;
|
| + params.url = subframe_url;
|
| + params.transition = ui::PAGE_TRANSITION_AUTO_SUBFRAME;
|
| + params.should_update_history = false;
|
| + params.gesture = NavigationGestureUser;
|
| + params.is_post = false;
|
| + params.page_state = PageState::CreateFromURL(subframe_url);
|
| +
|
| + // Navigating should do nothing.
|
| + LoadCommittedDetails details;
|
| + EXPECT_FALSE(controller.RendererDidNavigate(subframe, params, &details));
|
| + EXPECT_EQ(0U, notifications.size());
|
| + }
|
| +
|
| + // Now do a new navigation in the frame.
|
| const GURL url2("http://foo2");
|
| FrameHostMsg_DidCommitProvisionalLoad_Params params;
|
| - params.page_id = 1;
|
| + params.page_id = 2;
|
| params.nav_entry_id = 0;
|
| params.did_create_new_entry = true;
|
| params.url = url2;
|
| @@ -2085,8 +2110,7 @@ TEST_F(NavigationControllerTest, NewSubframe) {
|
| params.page_state = PageState::CreateFromURL(url2);
|
|
|
| LoadCommittedDetails details;
|
| - EXPECT_TRUE(controller.RendererDidNavigate(main_test_rfh(), params,
|
| - &details));
|
| + EXPECT_TRUE(controller.RendererDidNavigate(subframe, params, &details));
|
| EXPECT_EQ(1U, navigation_entry_committed_counter_);
|
| navigation_entry_committed_counter_ = 0;
|
| EXPECT_EQ(url1, details.previous_url);
|
| @@ -2094,12 +2118,25 @@ TEST_F(NavigationControllerTest, NewSubframe) {
|
| EXPECT_FALSE(details.is_main_frame);
|
|
|
| // The new entry should be appended.
|
| + NavigationEntryImpl* entry = controller.GetLastCommittedEntry();
|
| EXPECT_EQ(2, controller.GetEntryCount());
|
| + EXPECT_EQ(entry, details.entry);
|
|
|
| // New entry should refer to the new page, but the old URL (entries only
|
| // reflect the toplevel URL).
|
| - EXPECT_EQ(url1, details.entry->GetURL());
|
| - EXPECT_EQ(params.page_id, details.entry->GetPageID());
|
| + EXPECT_EQ(url1, entry->GetURL());
|
| + EXPECT_EQ(params.page_id, entry->GetPageID());
|
| +
|
| + // Verify subframe entries if we're in --site-per-process mode.
|
| + if (base::CommandLine::ForCurrentProcess()->HasSwitch(
|
| + switches::kSitePerProcess)) {
|
| + // The entry should have a subframe FrameNavigationEntry.
|
| + ASSERT_EQ(1U, entry->root_node()->children.size());
|
| + EXPECT_EQ(url2, entry->root_node()->children[0]->frame_entry->url());
|
| + } else {
|
| + // There are no subframe FrameNavigationEntries by default.
|
| + EXPECT_EQ(0U, entry->root_node()->children.size());
|
| + }
|
| }
|
|
|
| // Auto subframes are ones the page loads automatically like ads. They should
|
| @@ -2264,15 +2301,39 @@ TEST_F(NavigationControllerTest, BackSubframe) {
|
|
|
| // Main page.
|
| const GURL url1("http://foo1");
|
| - main_test_rfh()->NavigateAndCommitRendererInitiated(0, true, url1);
|
| + main_test_rfh()->NavigateAndCommitRendererInitiated(1, true, url1);
|
| EXPECT_EQ(1U, navigation_entry_committed_counter_);
|
| NavigationEntry* entry1 = controller.GetLastCommittedEntry();
|
| navigation_entry_committed_counter_ = 0;
|
|
|
| + // Prereq: add a subframe with an initial auto-subframe navigation.
|
| + main_test_rfh()->OnCreateChildFrame(MSG_ROUTING_NONE, std::string(),
|
| + SandboxFlags::NONE);
|
| + RenderFrameHostImpl* subframe =
|
| + contents()->GetFrameTree()->root()->child_at(0)->current_frame_host();
|
| + const GURL subframe_url("http://foo1/subframe");
|
| + {
|
| + FrameHostMsg_DidCommitProvisionalLoad_Params params;
|
| + params.page_id = 1;
|
| + params.nav_entry_id = 0;
|
| + params.did_create_new_entry = false;
|
| + params.url = subframe_url;
|
| + params.transition = ui::PAGE_TRANSITION_AUTO_SUBFRAME;
|
| + params.should_update_history = false;
|
| + params.gesture = NavigationGestureUser;
|
| + params.is_post = false;
|
| + params.page_state = PageState::CreateFromURL(subframe_url);
|
| +
|
| + // Navigating should do nothing.
|
| + LoadCommittedDetails details;
|
| + EXPECT_FALSE(controller.RendererDidNavigate(subframe, params, &details));
|
| + EXPECT_EQ(0U, notifications.size());
|
| + }
|
| +
|
| // First manual subframe navigation.
|
| const GURL url2("http://foo2");
|
| FrameHostMsg_DidCommitProvisionalLoad_Params params;
|
| - params.page_id = 1;
|
| + params.page_id = 2;
|
| params.nav_entry_id = 0;
|
| params.did_create_new_entry = true;
|
| params.url = url2;
|
| @@ -2284,38 +2345,59 @@ TEST_F(NavigationControllerTest, BackSubframe) {
|
|
|
| // This should generate a new entry.
|
| LoadCommittedDetails details;
|
| - EXPECT_TRUE(controller.RendererDidNavigate(main_test_rfh(), params,
|
| - &details));
|
| - NavigationEntry* entry2 = controller.GetLastCommittedEntry();
|
| + EXPECT_TRUE(controller.RendererDidNavigate(subframe, params, &details));
|
| + NavigationEntryImpl* entry2 = controller.GetLastCommittedEntry();
|
| EXPECT_EQ(1U, navigation_entry_committed_counter_);
|
| navigation_entry_committed_counter_ = 0;
|
| EXPECT_EQ(2, controller.GetEntryCount());
|
|
|
| + // Verify subframe entries if we're in --site-per-process mode.
|
| + if (base::CommandLine::ForCurrentProcess()->HasSwitch(
|
| + switches::kSitePerProcess)) {
|
| + // The entry should have a subframe FrameNavigationEntry.
|
| + ASSERT_EQ(1U, entry2->root_node()->children.size());
|
| + EXPECT_EQ(url2, entry2->root_node()->children[0]->frame_entry->url());
|
| + } else {
|
| + // There are no subframe FrameNavigationEntries by default.
|
| + EXPECT_EQ(0U, entry2->root_node()->children.size());
|
| + }
|
| +
|
| // Second manual subframe navigation should also make a new entry.
|
| const GURL url3("http://foo3");
|
| - params.page_id = 2;
|
| + params.page_id = 3;
|
| params.nav_entry_id = 0;
|
| params.did_create_new_entry = true;
|
| params.url = url3;
|
| params.transition = ui::PAGE_TRANSITION_MANUAL_SUBFRAME;
|
| - EXPECT_TRUE(controller.RendererDidNavigate(main_test_rfh(), params,
|
| - &details));
|
| + EXPECT_TRUE(controller.RendererDidNavigate(subframe, params, &details));
|
| EXPECT_EQ(1U, navigation_entry_committed_counter_);
|
| navigation_entry_committed_counter_ = 0;
|
| + NavigationEntryImpl* entry3 = controller.GetLastCommittedEntry();
|
| EXPECT_EQ(3, controller.GetEntryCount());
|
| EXPECT_EQ(2, controller.GetCurrentEntryIndex());
|
|
|
| + // Verify subframe entries if we're in --site-per-process mode.
|
| + if (base::CommandLine::ForCurrentProcess()->HasSwitch(
|
| + switches::kSitePerProcess)) {
|
| + // The entry should have a subframe FrameNavigationEntry.
|
| + ASSERT_EQ(1U, entry3->root_node()->children.size());
|
| + EXPECT_EQ(url3, entry3->root_node()->children[0]->frame_entry->url());
|
| + } else {
|
| + // There are no subframe FrameNavigationEntries by default.
|
| + EXPECT_EQ(0U, entry3->root_node()->children.size());
|
| + }
|
| +
|
| // Go back one.
|
| controller.GoBack();
|
| - params.page_id = 1;
|
| + params.page_id = 2;
|
| params.nav_entry_id = entry2->GetUniqueID();
|
| params.did_create_new_entry = false;
|
| params.url = url2;
|
| params.transition = ui::PAGE_TRANSITION_AUTO_SUBFRAME;
|
| - EXPECT_TRUE(controller.RendererDidNavigate(main_test_rfh(), params,
|
| - &details));
|
| + EXPECT_TRUE(controller.RendererDidNavigate(subframe, params, &details));
|
| EXPECT_EQ(1U, navigation_entry_committed_counter_);
|
| navigation_entry_committed_counter_ = 0;
|
| + EXPECT_EQ(entry2, controller.GetLastCommittedEntry());
|
| EXPECT_EQ(3, controller.GetEntryCount());
|
| EXPECT_EQ(1, controller.GetCurrentEntryIndex());
|
| EXPECT_EQ(-1, controller.GetPendingEntryIndex());
|
| @@ -2323,15 +2405,15 @@ TEST_F(NavigationControllerTest, BackSubframe) {
|
|
|
| // Go back one more.
|
| controller.GoBack();
|
| - params.page_id = 0;
|
| + params.page_id = 1;
|
| params.nav_entry_id = entry1->GetUniqueID();
|
| params.did_create_new_entry = false;
|
| params.url = url1;
|
| params.transition = ui::PAGE_TRANSITION_AUTO_SUBFRAME;
|
| - EXPECT_TRUE(controller.RendererDidNavigate(main_test_rfh(), params,
|
| - &details));
|
| + EXPECT_TRUE(controller.RendererDidNavigate(subframe, params, &details));
|
| EXPECT_EQ(1U, navigation_entry_committed_counter_);
|
| navigation_entry_committed_counter_ = 0;
|
| + EXPECT_EQ(entry1, controller.GetLastCommittedEntry());
|
| EXPECT_EQ(3, controller.GetEntryCount());
|
| EXPECT_EQ(0, controller.GetCurrentEntryIndex());
|
| EXPECT_EQ(-1, controller.GetPendingEntryIndex());
|
|
|