| 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 21f1d2bfb6630ff0d72b198475db07c779d5720a..853002523f03cbbe4d88e812071bab92e4b82e48 100644
 | 
| --- a/content/browser/frame_host/render_frame_host_manager_unittest.cc
 | 
| +++ b/content/browser/frame_host/render_frame_host_manager_unittest.cc
 | 
| @@ -10,6 +10,7 @@
 | 
|  #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_parameters.h"
 | 
|  #include "content/browser/frame_host/navigation_request.h"
 | 
|  #include "content/browser/frame_host/navigator.h"
 | 
|  #include "content/browser/frame_host/navigator_impl.h"
 | 
| @@ -39,6 +40,7 @@
 | 
|  #include "content/test/test_render_frame_host.h"
 | 
|  #include "content/test/test_render_view_host.h"
 | 
|  #include "content/test/test_web_contents.h"
 | 
| +#include "net/base/load_flags.h"
 | 
|  #include "testing/gtest/include/gtest/gtest.h"
 | 
|  
 | 
|  namespace content {
 | 
| @@ -387,6 +389,36 @@ class RenderFrameHostManagerTest
 | 
|      CommandLine::ForCurrentProcess()->AppendSwitch(
 | 
|          switches::kEnableBrowserSideNavigation);
 | 
|    }
 | 
| +
 | 
| +  void SendRequestNavigation(const GURL& url,
 | 
| +                                  FrameTreeNode* node) {
 | 
| +    SendRequestNavigationWithParameters(
 | 
| +        url, node, Referrer(), PAGE_TRANSITION_LINK,
 | 
| +        NavigationController::NO_RELOAD);
 | 
| +  }
 | 
| +
 | 
| +  void SendRequestNavigationWithParameters(
 | 
| +      const GURL& url,
 | 
| +      FrameTreeNode* node,
 | 
| +      const Referrer& referrer,
 | 
| +      PageTransition transition_type,
 | 
| +      NavigationController::ReloadType reload_type) {
 | 
| +    scoped_ptr<NavigationEntryImpl> entry(
 | 
| +        NavigationEntryImpl::FromNavigationEntry(
 | 
| +            NavigationController::CreateNavigationEntry(
 | 
| +            url, referrer, transition_type, false, std::string(),
 | 
| +            controller().GetBrowserContext())));
 | 
| +    NavigatorImpl* navigator = static_cast<NavigatorImpl*>(node->navigator());
 | 
| +    node->render_manager()->RequestNavigation(
 | 
| +        scoped_ptr<NavigationParameters>(
 | 
| +            navigator->MakeNavigationParametersForTest(*entry, reload_type)));
 | 
| +  }
 | 
| +
 | 
| +  NavigationParameters* GetNavigationParams(
 | 
| +      RenderFrameHostManager* manager) {
 | 
| +    return manager->navigation_parameters_.get();
 | 
| +  }
 | 
| +
 | 
|   private:
 | 
|    RenderFrameHostManagerTestWebUIControllerFactory factory_;
 | 
|    scoped_ptr<FrameLifetimeConsistencyChecker> lifetime_checker_;
 | 
| @@ -1694,6 +1726,8 @@ 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/");
 | 
| @@ -1710,11 +1744,13 @@ TEST_F(RenderFrameHostManagerTest, BrowserSideNavigationBeginNavigation) {
 | 
|        contents()->GetFrameTree()->AddFrame(
 | 
|            contents()->GetFrameTree()->root(), 14, "Child"));
 | 
|  
 | 
| +  RenderFrameHostManager* subframe_manager =
 | 
| +      subframe_rfh->frame_tree_node()->render_manager();
 | 
| +  SendRequestNavigation(kUrl2, subframe_rfh->frame_tree_node());
 | 
|    // Simulate a BeginNavigation IPC on the subframe.
 | 
|    subframe_rfh->SendBeginNavigationWithURL(kUrl2);
 | 
|    NavigationRequest* subframe_request =
 | 
| -      GetNavigationRequestForRenderFrameManager(
 | 
| -          subframe_rfh->frame_tree_node()->render_manager());
 | 
| +      GetNavigationRequestForRenderFrameManager(subframe_manager);
 | 
|    ASSERT_TRUE(subframe_request);
 | 
|    EXPECT_EQ(kUrl2, subframe_request->info().navigation_params.url);
 | 
|    // First party for cookies url should be that of the main frame.
 | 
| @@ -1723,10 +1759,14 @@ TEST_F(RenderFrameHostManagerTest, BrowserSideNavigationBeginNavigation) {
 | 
|    EXPECT_FALSE(subframe_request->info().is_main_frame);
 | 
|    EXPECT_TRUE(subframe_request->info().parent_is_main_frame);
 | 
|  
 | 
| +  RenderFrameHostManager* main_frame_manager =
 | 
| +      contents()->GetMainFrame()->frame_tree_node()->render_manager();
 | 
| +  SendRequestNavigation(
 | 
| +      kUrl2, contents()->GetMainFrame()->frame_tree_node());
 | 
|    // Simulate a BeginNavigation IPC on the main frame.
 | 
|    contents()->GetMainFrame()->SendBeginNavigationWithURL(kUrl3);
 | 
|    NavigationRequest* main_request = GetNavigationRequestForRenderFrameManager(
 | 
| -      contents()->GetMainFrame()->frame_tree_node()->render_manager());
 | 
| +      main_frame_manager);
 | 
|    ASSERT_TRUE(main_request);
 | 
|    EXPECT_EQ(kUrl3, main_request->info().navigation_params.url);
 | 
|    EXPECT_EQ(kUrl3, main_request->info().first_party_for_cookies);
 | 
| @@ -1742,10 +1782,9 @@ TEST_F(RenderFrameHostManagerTest,
 | 
|  
 | 
|    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();
 | 
| +  SendRequestNavigation(kUrl, main_test_rfh()->frame_tree_node());
 | 
|    NavigationRequest* main_request =
 | 
|        GetNavigationRequestForRenderFrameManager(render_manager);
 | 
|    // A NavigationRequest should have been generated.
 | 
| @@ -1783,6 +1822,7 @@ TEST_F(RenderFrameHostManagerTest,
 | 
|  
 | 
|    EnableBrowserSideNavigation();
 | 
|    // Navigate to a different site.
 | 
| +  SendRequestNavigation(kUrl2, main_test_rfh()->frame_tree_node());
 | 
|    main_test_rfh()->SendBeginNavigationWithURL(kUrl2);
 | 
|    NavigationRequest* main_request =
 | 
|        GetNavigationRequestForRenderFrameManager(render_manager);
 | 
| @@ -1796,4 +1836,52 @@ TEST_F(RenderFrameHostManagerTest,
 | 
|    EXPECT_TRUE(main_test_rfh()->render_view_host()->IsRenderViewLive());
 | 
|  }
 | 
|  
 | 
| +// 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(
 | 
| +      kUrl, main_test_rfh()->frame_tree_node(), Referrer(),
 | 
| +      PAGE_TRANSITION_LINK, NavigationController::RELOAD);
 | 
| +  contents()->GetMainFrame()->SendBeginNavigationWithURL(kUrl);
 | 
| +  // A NavigationRequest should have been generated.
 | 
| +  NavigationRequest* main_request =
 | 
| +      GetNavigationRequestForRenderFrameManager(render_manager);
 | 
| +  ASSERT_TRUE(main_request != NULL);
 | 
| +  // Navigation parameters should have been generated.
 | 
| +  NavigationParameters* navigation_parameters =
 | 
| +      GetNavigationParams(render_manager);
 | 
| +  ASSERT_TRUE(navigation_parameters != NULL);
 | 
| +  EXPECT_EQ(FrameMsg_Navigate_Type::RELOAD,
 | 
| +            navigation_parameters->navigation_type_for_testing());
 | 
| +  int page_id = contents()->GetMaxPageIDForSiteInstance(
 | 
| +      main_test_rfh()->GetSiteInstance()) + 1;
 | 
| +  main_test_rfh()->SendNavigate(page_id, kUrl);
 | 
| +
 | 
| +  // Now do a shift+reload.
 | 
| +  SendRequestNavigationWithParameters(
 | 
| +      kUrl, main_test_rfh()->frame_tree_node(), Referrer(),
 | 
| +      PAGE_TRANSITION_LINK, NavigationController::RELOAD_IGNORING_CACHE);
 | 
| +  contents()->GetMainFrame()->SendBeginNavigationWithURL(kUrl);
 | 
| +  // A NavigationRequest should have been generated.
 | 
| +  main_request =
 | 
| +      GetNavigationRequestForRenderFrameManager(render_manager);
 | 
| +  ASSERT_TRUE(main_request != NULL);
 | 
| +  // Navigation parameters should have been generated.
 | 
| +  navigation_parameters =
 | 
| +      GetNavigationParams(render_manager);
 | 
| +  ASSERT_TRUE(navigation_parameters != NULL);
 | 
| +  EXPECT_EQ(FrameMsg_Navigate_Type::RELOAD_IGNORING_CACHE,
 | 
| +            navigation_parameters->navigation_type_for_testing());
 | 
| +  page_id = contents()->GetMaxPageIDForSiteInstance(
 | 
| +      main_test_rfh()->GetSiteInstance()) + 1;
 | 
| +  main_test_rfh()->SendNavigate(page_id, kUrl);
 | 
| +}
 | 
| +
 | 
|  }  // namespace content
 | 
| 
 |