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

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

Issue 615633005: PlzNavigate: Move the navigation logic to NavigatorImpl (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@commit-nav
Patch Set: Addressed comment Created 6 years, 2 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
« no previous file with comments | « content/browser/frame_host/render_frame_host_manager.cc ('k') | content/content_tests.gypi » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/browser/frame_host/render_frame_host_manager_unittest.cc
diff --git a/content/browser/frame_host/render_frame_host_manager_unittest.cc b/content/browser/frame_host/render_frame_host_manager_unittest.cc
index 23b49c8cde575de2dec6b95bc533236b58a864e0..5d6e7d4a515afb882fa377bbe9b006e570621c4e 100644
--- a/content/browser/frame_host/render_frame_host_manager_unittest.cc
+++ b/content/browser/frame_host/render_frame_host_manager_unittest.cc
@@ -8,18 +8,14 @@
#include "base/test/histogram_tester.h"
#include "base/time/time.h"
#include "content/browser/frame_host/cross_site_transferring_request.h"
-#include "content/browser/frame_host/navigation_before_commit_info.h"
#include "content/browser/frame_host/navigation_controller_impl.h"
#include "content/browser/frame_host/navigation_entry_impl.h"
-#include "content/browser/frame_host/navigation_request.h"
-#include "content/browser/frame_host/navigation_request_info.h"
#include "content/browser/frame_host/navigator.h"
-#include "content/browser/frame_host/navigator_impl.h"
#include "content/browser/frame_host/render_frame_host_manager.h"
#include "content/browser/frame_host/render_frame_proxy_host.h"
#include "content/browser/site_instance_impl.h"
#include "content/browser/webui/web_ui_controller_factory_registry.h"
-#include "content/common/navigation_params.h"
+#include "content/common/frame_messages.h"
#include "content/common/view_messages.h"
#include "content/public/browser/notification_details.h"
#include "content/public/browser/notification_service.h"
@@ -388,56 +384,6 @@ class RenderFrameHostManagerTest
return ntp_rfh;
}
- NavigationRequest* GetNavigationRequestForRenderFrameManager(
- RenderFrameHostManager* manager) const {
- return manager->navigation_request_for_testing();
- }
-
- void EnableBrowserSideNavigation() {
- CommandLine::ForCurrentProcess()->AppendSwitch(
- switches::kEnableBrowserSideNavigation);
- }
-
- void SendRequestNavigation(FrameTreeNode* node,
- const GURL& url) {
- SendRequestNavigationWithParameters(
- node, url, Referrer(), ui::PAGE_TRANSITION_LINK,
- FrameMsg_Navigate_Type::NORMAL);
- }
-
- void SendRequestNavigationWithParameters(
- FrameTreeNode* node,
- const GURL& url,
- const Referrer& referrer,
- ui::PageTransition transition_type,
- FrameMsg_Navigate_Type::Value navigation_type) {
- scoped_ptr<NavigationEntryImpl> entry(
- NavigationEntryImpl::FromNavigationEntry(
- NavigationController::CreateNavigationEntry(
- url,
- referrer,
- transition_type,
- false,
- std::string(),
- controller().GetBrowserContext())));
- scoped_ptr<NavigationRequest> navigation_request(new NavigationRequest(
- node->frame_tree_node_id(),
- CommonNavigationParams(entry->GetURL(),
- entry->GetReferrer(),
- entry->GetTransitionType(),
- navigation_type,
- !entry->IsViewSourceMode()),
- CommitNavigationParams(entry->GetPageState(),
- entry->GetIsOverridingUserAgent(),
- base::TimeTicks::Now())));
- RequestNavigationParams request_params(
- entry->GetHasPostData(),
- entry->extra_headers(),
- entry->GetBrowserInitiatedPostData());
- node->render_manager()->RequestNavigation(navigation_request.Pass(),
- request_params);
- }
-
private:
RenderFrameHostManagerTestWebUIControllerFactory factory_;
scoped_ptr<FrameLifetimeConsistencyChecker> lifetime_checker_;
@@ -1750,235 +1696,4 @@ TEST_F(RenderFrameHostManagerTest,
}
}
-// PlzNavigate: Test that a proper NavigationRequest is created by
-// BeginNavigation.
-// Note that all PlzNavigate methods on the browser side require the use of the
-// flag kEnableBrowserSideNavigation.
-TEST_F(RenderFrameHostManagerTest, BrowserSideNavigationBeginNavigation) {
- const GURL kUrl1("http://www.google.com/");
- const GURL kUrl2("http://www.chromium.org/");
- const GURL kUrl3("http://www.gmail.com/");
- const int64 kFirstNavRequestID = 1;
-
- // TODO(clamy): we should be enabling browser side navigations here
- // when CommitNavigation is properly implemented.
- // Navigate to the first page.
- contents()->NavigateAndCommit(kUrl1);
-
- EnableBrowserSideNavigation();
- // Add a subframe.
- TestRenderFrameHost* subframe_rfh = static_cast<TestRenderFrameHost*>(
- contents()->GetFrameTree()->AddFrame(
- contents()->GetFrameTree()->root(), 14, "Child"));
-
- RenderFrameHostManager* subframe_manager =
- subframe_rfh->frame_tree_node()->render_manager();
- SendRequestNavigation(subframe_rfh->frame_tree_node(), kUrl2);
- // Simulate a BeginNavigation IPC on the subframe.
- subframe_rfh->SendBeginNavigationWithURL(kUrl2);
- NavigationRequest* subframe_request =
- GetNavigationRequestForRenderFrameManager(subframe_manager);
- ASSERT_TRUE(subframe_request);
- EXPECT_EQ(kUrl2, subframe_request->common_params().url);
- // First party for cookies url should be that of the main frame.
- EXPECT_EQ(kUrl1, subframe_request->info_for_test()->first_party_for_cookies);
- EXPECT_FALSE(subframe_request->info_for_test()->is_main_frame);
- EXPECT_TRUE(subframe_request->info_for_test()->parent_is_main_frame);
- EXPECT_EQ(kFirstNavRequestID, subframe_request->navigation_request_id());
-
- RenderFrameHostManager* main_frame_manager =
- contents()->GetMainFrame()->frame_tree_node()->render_manager();
- SendRequestNavigation(contents()->GetMainFrame()->frame_tree_node(), kUrl3);
- // Simulate a BeginNavigation IPC on the main frame.
- contents()->GetMainFrame()->SendBeginNavigationWithURL(kUrl3);
- NavigationRequest* main_request =
- GetNavigationRequestForRenderFrameManager(main_frame_manager);
- ASSERT_TRUE(main_request);
- EXPECT_EQ(kUrl3, main_request->common_params().url);
- EXPECT_EQ(kUrl3, main_request->info_for_test()->first_party_for_cookies);
- EXPECT_TRUE(main_request->info_for_test()->is_main_frame);
- EXPECT_FALSE(main_request->info_for_test()->parent_is_main_frame);
- EXPECT_EQ(kFirstNavRequestID + 1, main_request->navigation_request_id());
-}
-
-// PlzNavigate: Test that RequestNavigation creates a NavigationRequest and that
-// RenderFrameHost is not modified when the navigation commits.
-TEST_F(RenderFrameHostManagerTest,
- BrowserSideNavigationRequestNavigationNoLiveRenderer) {
- const GURL kUrl("http://www.google.com/");
-
- EnableBrowserSideNavigation();
- EXPECT_FALSE(main_test_rfh()->render_view_host()->IsRenderViewLive());
- RenderFrameHostManager* render_manager =
- main_test_rfh()->frame_tree_node()->render_manager();
- SendRequestNavigation(main_test_rfh()->frame_tree_node(), kUrl);
- NavigationRequest* main_request =
- GetNavigationRequestForRenderFrameManager(render_manager);
- // A NavigationRequest should have been generated.
- EXPECT_TRUE(main_request != NULL);
- RenderFrameHostImpl* rfh = main_test_rfh();
-
- // Now commit the same url.
- NavigationBeforeCommitInfo commit_info;
- commit_info.navigation_url = kUrl;
- commit_info.navigation_request_id = main_request->navigation_request_id();
- render_manager->CommitNavigation(commit_info);
- main_request = GetNavigationRequestForRenderFrameManager(render_manager);
-
- // The main RFH should not have been changed, and the renderer should have
- // been initialized.
- EXPECT_EQ(rfh, main_test_rfh());
- EXPECT_TRUE(main_test_rfh()->IsRenderFrameLive());
- EXPECT_TRUE(main_test_rfh()->render_view_host()->IsRenderViewLive());
-}
-
-// PlzNavigate: Test that a new RenderFrameHost is created when doing a cross
-// site navigation.
-TEST_F(RenderFrameHostManagerTest,
- BrowserSideNavigationCrossSiteNavigation) {
- const GURL kUrl1("http://www.chromium.org/");
- const GURL kUrl2("http://www.google.com/");
-
- // TODO(clamy): we should be enabling browser side navigations here
- // when CommitNavigation is properly implemented.
- // Navigate to the first page.
- contents()->NavigateAndCommit(kUrl1);
- RenderFrameHostImpl* rfh = main_test_rfh();
- EXPECT_EQ(RenderFrameHostImpl::STATE_DEFAULT, rfh->rfh_state());
- RenderFrameHostManager* render_manager =
- main_test_rfh()->frame_tree_node()->render_manager();
-
- EnableBrowserSideNavigation();
- // Navigate to a different site.
- SendRequestNavigation(main_test_rfh()->frame_tree_node(), kUrl2);
- main_test_rfh()->SendBeginNavigationWithURL(kUrl2);
- NavigationRequest* main_request =
- GetNavigationRequestForRenderFrameManager(render_manager);
- ASSERT_TRUE(main_request);
-
- NavigationBeforeCommitInfo commit_info;
- commit_info.navigation_url = kUrl2;
- commit_info.navigation_request_id = main_request->navigation_request_id();
- render_manager->CommitNavigation(commit_info);
- EXPECT_NE(main_test_rfh(), rfh);
- EXPECT_TRUE(main_test_rfh()->IsRenderFrameLive());
- EXPECT_TRUE(main_test_rfh()->render_view_host()->IsRenderViewLive());
-}
-
-// PlzNavigate: Test that a navigation commit is ignored if another request has
-// been issued in the meantime.
-// TODO(carlosk): add checks to assert that the cancel call was sent to
-// ResourceDispatcherHost in the IO thread by extending
-// ResourceDispatcherHostDelegate (like in cross_site_transfer_browsertest.cc
-// and plugin_browsertest.cc).
-TEST_F(RenderFrameHostManagerTest,
- BrowserSideNavigationIgnoreStaleNavigationCommit) {
- const GURL kUrl0("http://www.wikipedia.org/");
- const GURL kUrl0_site = SiteInstance::GetSiteForURL(browser_context(), kUrl0);
- const GURL kUrl1("http://www.chromium.org/");
- const GURL kUrl2("http://www.google.com/");
- const GURL kUrl2_site = SiteInstance::GetSiteForURL(browser_context(), kUrl2);
-
- // Initialization.
- contents()->NavigateAndCommit(kUrl0);
- RenderFrameHostManager* render_manager =
- main_test_rfh()->frame_tree_node()->render_manager();
- EnableBrowserSideNavigation();
- EXPECT_EQ(kUrl0_site, main_test_rfh()->GetSiteInstance()->GetSiteURL());
-
- // Request navigation to the 1st URL and gather data.
- SendRequestNavigation(main_test_rfh()->frame_tree_node(), kUrl1);
- main_test_rfh()->SendBeginNavigationWithURL(kUrl1);
- NavigationRequest* request1 =
- GetNavigationRequestForRenderFrameManager(render_manager);
- ASSERT_TRUE(request1);
- int64 request_id1 = request1->navigation_request_id();
-
- // Request navigation to the 2nd URL and gather more data.
- SendRequestNavigation(main_test_rfh()->frame_tree_node(), kUrl2);
- main_test_rfh()->SendBeginNavigationWithURL(kUrl2);
- NavigationRequest* request2 =
- GetNavigationRequestForRenderFrameManager(render_manager);
- ASSERT_TRUE(request2);
- int64 request_id2 = request2->navigation_request_id();
- EXPECT_NE(request_id1, request_id2);
-
- // Confirms that a stale commit is ignored by the RHFM.
- NavigationBeforeCommitInfo nbc_info;
- nbc_info.navigation_url = kUrl1;
- nbc_info.navigation_request_id = request_id1;
- render_manager->CommitNavigation(nbc_info);
- EXPECT_EQ(kUrl0_site, main_test_rfh()->GetSiteInstance()->GetSiteURL());
-
- // Confirms that a valid, request-matching commit is correctly processed.
- nbc_info.navigation_url = kUrl2;
- nbc_info.navigation_request_id = request_id2;
- render_manager->CommitNavigation(nbc_info);
- EXPECT_EQ(kUrl2_site, main_test_rfh()->GetSiteInstance()->GetSiteURL());
-}
-
-// PlzNavigate: Tests that the navigation histograms are correctly tracked both
-// when PlzNavigate is enabled and disabled, and also ignores in-tab renderer
-// initiated navigation for the non-enabled case.
-// Note: the related histogram, Navigation.TimeToURLJobStart, cannot be tracked
-// by this test as the IO thread is not running.
-TEST_F(RenderFrameHostManagerTest, BrowserSideNavigationHistogramTest) {
- const GURL kUrl0("http://www.google.com/");
- const GURL kUrl1("http://www.chromium.org/");
- base::HistogramTester histo_tester;
-
- // Performs a "normal" non-PlzNavigate navigation
- contents()->NavigateAndCommit(kUrl0);
- histo_tester.ExpectTotalCount("Navigation.TimeToCommit", 1);
-
- // Performs an in-tab renderer initiated navigation
- int32 new_page_id = 1 + contents()->GetMaxPageIDForSiteInstance(
- main_test_rfh()->GetSiteInstance());
- main_test_rfh()->SendNavigate(new_page_id, kUrl0);
- histo_tester.ExpectTotalCount("Navigation.TimeToCommit", 1);
-
- // Performs a PlzNavigate navigation
- EnableBrowserSideNavigation();
- contents()->NavigateAndCommit(kUrl1);
- histo_tester.ExpectTotalCount("Navigation.TimeToCommit", 2);
-}
-
-// PlzNavigate: Test that a reload navigation is properly signaled to the
-// renderer when the navigation can commit.
-TEST_F(RenderFrameHostManagerTest, BrowserSideNavigationReload) {
- const GURL kUrl("http://www.google.com/");
- contents()->NavigateAndCommit(kUrl);
-
- EnableBrowserSideNavigation();
- RenderFrameHostManager* render_manager =
- main_test_rfh()->frame_tree_node()->render_manager();
- SendRequestNavigationWithParameters(
- main_test_rfh()->frame_tree_node(), kUrl, Referrer(),
- ui::PAGE_TRANSITION_LINK, FrameMsg_Navigate_Type::RELOAD);
- contents()->GetMainFrame()->SendBeginNavigationWithURL(kUrl);
- // A NavigationRequest should have been generated.
- NavigationRequest* main_request =
- GetNavigationRequestForRenderFrameManager(render_manager);
- ASSERT_TRUE(main_request != NULL);
- EXPECT_EQ(FrameMsg_Navigate_Type::RELOAD,
- main_request->common_params().navigation_type);
- int page_id = contents()->GetMaxPageIDForSiteInstance(
- main_test_rfh()->GetSiteInstance()) + 1;
- main_test_rfh()->SendNavigate(page_id, kUrl);
-
- // Now do a shift+reload.
- SendRequestNavigationWithParameters(
- main_test_rfh()->frame_tree_node(),
- kUrl,
- Referrer(),
- ui::PAGE_TRANSITION_LINK,
- FrameMsg_Navigate_Type::RELOAD_IGNORING_CACHE);
- contents()->GetMainFrame()->SendBeginNavigationWithURL(kUrl);
- // A NavigationRequest should have been generated.
- main_request = GetNavigationRequestForRenderFrameManager(render_manager);
- ASSERT_TRUE(main_request != NULL);
- EXPECT_EQ(FrameMsg_Navigate_Type::RELOAD_IGNORING_CACHE,
- main_request->common_params().navigation_type);
-}
-
} // namespace content
« no previous file with comments | « content/browser/frame_host/render_frame_host_manager.cc ('k') | content/content_tests.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698