Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1743)

Unified Diff: content/browser/frame_host/navigation_controller_impl_unittest.cc

Issue 1143653002: Create FrameNavigationEntries for manual subframe navigations. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 f8133933b6692bf3754d538a4e9578259967c497..eb752429758edbad177fd4b16f57dbd767b68500 100644
--- a/content/browser/frame_host/navigation_controller_impl_unittest.cc
+++ b/content/browser/frame_host/navigation_controller_impl_unittest.cc
@@ -2070,18 +2070,39 @@ TEST_F(NavigationControllerTest, NewSubframe) {
RegisterForAllNavNotifications(&notifications, &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, blink::WebTreeScopeType::Document, std::string(),
blink::WebSandboxFlags::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;
@@ -2100,12 +2121,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
@@ -2273,15 +2307,40 @@ 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, blink::WebTreeScopeType::Document, std::string(),
+ blink::WebSandboxFlags::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;
@@ -2293,38 +2352,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());
@@ -2332,15 +2412,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());

Powered by Google App Engine
This is Rietveld 408576698