Index: content/renderer/render_view_browsertest.cc |
diff --git a/content/renderer/render_view_browsertest.cc b/content/renderer/render_view_browsertest.cc |
index 4093458222a8dc65ec3b85bf7fd0545d5ad7a4e2..b159181b1c3aaeda4c997d3dda50fd67ad0cbdec 100644 |
--- a/content/renderer/render_view_browsertest.cc |
+++ b/content/renderer/render_view_browsertest.cc |
@@ -2309,6 +2309,108 @@ TEST_F(RenderViewImplTest, NavigationStartOverride) { |
EXPECT_LE(late_nav_reported_start, after_navigation); |
} |
+TEST_F(RenderViewImplTest, RendererNavigationStartTransmittedToBrowser) { |
+ base::TimeTicks lower_bound_navigation_start; |
+ frame()->GetWebFrame()->loadHTMLString( |
+ "hello world", blink::WebURL(GURL("data:text/html,"))); |
+ ProcessPendingMessages(); |
+ const IPC::Message* frame_navigate_msg = |
+ render_thread_->sink().GetUniqueMessageMatching( |
+ FrameHostMsg_DidStartProvisionalLoadForFrame::ID); |
+ FrameHostMsg_DidStartProvisionalLoadForFrame::Param host_nav_params; |
+ FrameHostMsg_DidStartProvisionalLoadForFrame::Read(frame_navigate_msg, |
+ &host_nav_params); |
+ base::TimeTicks transmitted_start = base::get<1>(host_nav_params); |
+ EXPECT_FALSE(transmitted_start.is_null()); |
+ EXPECT_LT(lower_bound_navigation_start, transmitted_start); |
+} |
+ |
+TEST_F(RenderViewImplTest, BrowserNavigationStartNotUsedForReload) { |
+ const char url_string[] = "data:text/html,<div>Page</div>"; |
+ // Navigate once, then reload. |
+ LoadHTML(url_string); |
+ ProcessPendingMessages(); |
+ render_thread_->sink().ClearMessages(); |
+ |
+ CommonNavigationParams common_params; |
+ common_params.url = GURL(url_string); |
+ common_params.navigation_type = |
+ FrameMsg_Navigate_Type::RELOAD_ORIGINAL_REQUEST_URL; |
+ common_params.transition = ui::PAGE_TRANSITION_LINK; |
+ |
+ frame()->Navigate(common_params, StartNavigationParams(), |
+ RequestNavigationParams()); |
+ ProcessPendingMessages(); |
+ |
+ const IPC::Message* frame_navigate_msg = |
+ render_thread_->sink().GetUniqueMessageMatching( |
+ FrameHostMsg_DidStartProvisionalLoadForFrame::ID); |
+ FrameHostMsg_DidStartProvisionalLoadForFrame::Param host_nav_params; |
+ FrameHostMsg_DidStartProvisionalLoadForFrame::Read(frame_navigate_msg, |
+ &host_nav_params); |
+ // The true timestamp is later than the browser initiated one. |
+ EXPECT_GT(base::get<1>(host_nav_params), common_params.navigation_start); |
+} |
+ |
+TEST_F(RenderViewImplTest, BrowserNavigationStartNotUsedForHistoryNavigation) { |
+ LoadHTML("<div id=pagename>Page A</div>"); |
+ LoadHTML("<div id=pagename>Page B</div>"); |
+ PageState back_state = |
+ HistoryEntryToPageState(view()->history_controller()->GetCurrentEntry()); |
+ LoadHTML("<div id=pagename>Page C</div>"); |
+ PageState forward_state = |
+ HistoryEntryToPageState(view()->history_controller()->GetCurrentEntry()); |
+ ProcessPendingMessages(); |
+ render_thread_->sink().ClearMessages(); |
+ |
+ CommonNavigationParams common_params; |
+ common_params.transition = ui::PAGE_TRANSITION_FORWARD_BACK; |
+ // Go back. |
+ GoToOffsetWithParams(-1, back_state, common_params, StartNavigationParams(), |
+ RequestNavigationParams()); |
+ ProcessPendingMessages(); |
+ const IPC::Message* frame_navigate_msg = |
+ render_thread_->sink().GetUniqueMessageMatching( |
+ FrameHostMsg_DidStartProvisionalLoadForFrame::ID); |
+ FrameHostMsg_DidStartProvisionalLoadForFrame::Param host_nav_params; |
+ FrameHostMsg_DidStartProvisionalLoadForFrame::Read(frame_navigate_msg, |
+ &host_nav_params); |
+ EXPECT_GT(base::get<1>(host_nav_params), common_params.navigation_start); |
+ render_thread_->sink().ClearMessages(); |
+ |
+ // Go forward. |
+ GoToOffsetWithParams(1, forward_state, common_params, |
+ StartNavigationParams(), |
+ RequestNavigationParams()); |
+ ProcessPendingMessages(); |
+ const IPC::Message* frame_navigate_msg2 = |
+ render_thread_->sink().GetUniqueMessageMatching( |
+ FrameHostMsg_DidStartProvisionalLoadForFrame::ID); |
+ FrameHostMsg_DidStartProvisionalLoadForFrame::Param host_nav_params2; |
+ FrameHostMsg_DidStartProvisionalLoadForFrame::Read(frame_navigate_msg2, |
+ &host_nav_params2); |
+ EXPECT_GT(base::get<1>(host_nav_params2), common_params.navigation_start); |
+} |
+ |
+TEST_F(RenderViewImplTest, BrowserNavigationStartSuccessfullyTransmitted) { |
+ CommonNavigationParams common_params; |
+ common_params.url = GURL("data:text/html,<div>Page</div>"); |
+ common_params.navigation_type = FrameMsg_Navigate_Type::NORMAL; |
+ common_params.transition = ui::PAGE_TRANSITION_TYPED; |
+ |
+ frame()->Navigate(common_params, StartNavigationParams(), |
+ RequestNavigationParams()); |
+ ProcessPendingMessages(); |
+ |
+ const IPC::Message* frame_navigate_msg = |
+ render_thread_->sink().GetUniqueMessageMatching( |
+ FrameHostMsg_DidStartProvisionalLoadForFrame::ID); |
+ FrameHostMsg_DidStartProvisionalLoadForFrame::Param host_nav_params; |
+ FrameHostMsg_DidStartProvisionalLoadForFrame::Read(frame_navigate_msg, |
+ &host_nav_params); |
+ EXPECT_EQ(base::get<1>(host_nav_params), common_params.navigation_start); |
+} |
+ |
TEST_F(RenderViewImplTest, PreferredSizeZoomed) { |
LoadHTML("<body style='margin:0;'><div style='display:inline-block; " |
"width:400px; height:400px;'/></body>"); |