| 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 eac088a9e7d94491d6f055654b1240125556fde4..3b3f3549ba63bbc585c7bd950cc92397b38c4dc3 100644
|
| --- a/content/browser/frame_host/render_frame_host_manager_unittest.cc
|
| +++ b/content/browser/frame_host/render_frame_host_manager_unittest.cc
|
| @@ -2,13 +2,17 @@
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| +#include "base/command_line.h"
|
| #include "base/files/file_path.h"
|
| #include "base/strings/utf_string_conversions.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/navigator.h"
|
| +#include "content/browser/frame_host/navigator_impl.h"
|
| #include "content/browser/frame_host/render_frame_host_manager.h"
|
| #include "content/browser/site_instance_impl.h"
|
| #include "content/browser/webui/web_ui_controller_factory_registry.h"
|
| @@ -23,6 +27,7 @@
|
| #include "content/public/browser/web_contents_observer.h"
|
| #include "content/public/browser/web_ui_controller.h"
|
| #include "content/public/common/bindings_policy.h"
|
| +#include "content/public/common/content_switches.h"
|
| #include "content/public/common/javascript_message_type.h"
|
| #include "content/public/common/page_transition_types.h"
|
| #include "content/public/common/url_constants.h"
|
| @@ -374,11 +379,15 @@ class RenderFrameHostManagerTest
|
| return ntp_rfh->GetRenderViewHost();
|
| }
|
|
|
| - NavigationRequest* NavigationRequestForRenderFrameManager(
|
| + NavigationRequest* GetNavigationRequestForRenderFrameManager(
|
| RenderFrameHostManager* manager) const {
|
| return manager->navigation_request_for_testing();
|
| }
|
|
|
| + void EnableBrowserSideNavigation() {
|
| + CommandLine::ForCurrentProcess()->AppendSwitch(
|
| + switches::kEnableBrowserSideNavigation);
|
| + }
|
| private:
|
| RenderFrameHostManagerTestWebUIControllerFactory factory_;
|
| scoped_ptr<FrameLifetimeConsistencyChecker> lifetime_checker_;
|
| @@ -1873,16 +1882,19 @@ TEST_F(RenderFrameHostManagerTest,
|
| }
|
| }
|
|
|
| -// Browser-side navigation: Test that a proper NavigationRequest is created by
|
| +// PlzNavigate: Test that a proper NavigationRequest is created by
|
| // BeginNavigation.
|
| 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/");
|
|
|
| + // 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(
|
| @@ -1891,25 +1903,84 @@ TEST_F(RenderFrameHostManagerTest, BrowserSideNavigationBeginNavigation) {
|
| // Simulate a BeginNavigation IPC on the subframe.
|
| subframe_rfh->SendBeginNavigationWithURL(kUrl2);
|
| NavigationRequest* subframe_request =
|
| - NavigationRequestForRenderFrameManager(
|
| + GetNavigationRequestForRenderFrameManager(
|
| subframe_rfh->frame_tree_node()->render_manager());
|
| ASSERT_TRUE(subframe_request);
|
| - EXPECT_EQ(kUrl2, subframe_request->info_for_testing().navigation_params.url);
|
| + EXPECT_EQ(kUrl2, subframe_request->info().navigation_params.url);
|
| // First party for cookies url should be that of the main frame.
|
| EXPECT_EQ(
|
| - kUrl1, subframe_request->info_for_testing().first_party_for_cookies);
|
| - EXPECT_FALSE(subframe_request->info_for_testing().is_main_frame);
|
| - EXPECT_TRUE(subframe_request->info_for_testing().parent_is_main_frame);
|
| + kUrl1, subframe_request->info().first_party_for_cookies);
|
| + EXPECT_FALSE(subframe_request->info().is_main_frame);
|
| + EXPECT_TRUE(subframe_request->info().parent_is_main_frame);
|
|
|
| // Simulate a BeginNavigation IPC on the main frame.
|
| contents()->GetMainFrame()->SendBeginNavigationWithURL(kUrl3);
|
| - NavigationRequest* main_request = NavigationRequestForRenderFrameManager(
|
| + NavigationRequest* main_request = GetNavigationRequestForRenderFrameManager(
|
| contents()->GetMainFrame()->frame_tree_node()->render_manager());
|
| ASSERT_TRUE(main_request);
|
| - EXPECT_EQ(kUrl3, main_request->info_for_testing().navigation_params.url);
|
| - EXPECT_EQ(kUrl3, main_request->info_for_testing().first_party_for_cookies);
|
| - EXPECT_TRUE(main_request->info_for_testing().is_main_frame);
|
| - EXPECT_FALSE(main_request->info_for_testing().parent_is_main_frame);
|
| + EXPECT_EQ(kUrl3, main_request->info().navigation_params.url);
|
| + EXPECT_EQ(kUrl3, main_request->info().first_party_for_cookies);
|
| + EXPECT_TRUE(main_request->info().is_main_frame);
|
| + EXPECT_FALSE(main_request->info().parent_is_main_frame);
|
| +}
|
| +
|
| +// 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());
|
| + contents()->GetController().LoadURL(
|
| + kUrl, Referrer(), PAGE_TRANSITION_LINK, std::string());
|
| + RenderFrameHostManager* render_manager =
|
| + main_test_rfh()->frame_tree_node()->render_manager();
|
| + 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;
|
| + render_manager->CommitNavigation(commit_info);
|
| + main_request = GetNavigationRequestForRenderFrameManager(render_manager);
|
| +
|
| + // The main RFH should not have been changed.
|
| + EXPECT_EQ(rfh, main_test_rfh());
|
| +}
|
| +
|
| +// 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);
|
| + TestRenderViewHost* rvh1 = test_rvh();
|
| + EXPECT_EQ(RenderViewHostImpl::STATE_DEFAULT, rvh1->rvh_state());
|
| + RenderFrameHostImpl* rfh = main_test_rfh();
|
| + RenderFrameHostManager* render_manager =
|
| + main_test_rfh()->frame_tree_node()->render_manager();
|
| +
|
| + EnableBrowserSideNavigation();
|
| + // Navigate to a different site.
|
| + main_test_rfh()->SendBeginNavigationWithURL(kUrl2);
|
| + NavigationRequest* main_request =
|
| + GetNavigationRequestForRenderFrameManager(render_manager);
|
| + ASSERT_TRUE(main_request);
|
| +
|
| + NavigationBeforeCommitInfo commit_info;
|
| + commit_info.navigation_url = kUrl2;
|
| + render_manager->CommitNavigation(commit_info);
|
| + main_request = GetNavigationRequestForRenderFrameManager(render_manager);
|
| + EXPECT_NE(main_test_rfh(), rfh);
|
| }
|
|
|
| } // namespace content
|
|
|