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

Unified Diff: content/renderer/render_view_browsertest.cc

Issue 2103733004: Set navigationStart correctly for all load types. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 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
« no previous file with comments | « content/renderer/render_frame_impl.cc ('k') | third_party/WebKit/Source/core/dom/Document.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/renderer/render_view_browsertest.cc
diff --git a/content/renderer/render_view_browsertest.cc b/content/renderer/render_view_browsertest.cc
index 57747020cd76fa2e412df893ef676a95cfbfb620..3e032ae657eb216a1bf9b592cae18ecea3368d16 100644
--- a/content/renderer/render_view_browsertest.cc
+++ b/content/renderer/render_view_browsertest.cc
@@ -2039,10 +2039,33 @@ TEST_F(RenderViewImplTest, OnSetAccessibilityMode) {
ASSERT_TRUE(frame()->render_accessibility());
}
+TEST_F(RenderViewImplTest, BrowserNavigationStart) {
+ base::TimeTicks browser_navigation_start =
+ base::TimeTicks::Now() - base::TimeDelta::FromSeconds(1);
+ 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;
+ common_params.navigation_start = browser_navigation_start;
+
+ frame()->Navigate(common_params, StartNavigationParams(),
+ RequestNavigationParams());
+ ProcessPendingMessages();
+
+ blink::WebDataSource* ds = frame()->GetWebFrame()->dataSource();
+ ASSERT_TRUE(ds);
+ DocumentState* document_state = DocumentState::FromDataSource(ds);
Charlie Harrison 2016/06/28 14:01:43 Getting the navigation start from the document_sta
Alexander Semashko 2016/06/28 14:47:45 It's ok to take it from the IPC (to avoid comparin
Charlie Harrison 2016/06/28 15:54:15 Sounds good to me.
+ base::TimeTicks navigation_start =
+ static_cast<NavigationStateImpl*>(document_state->navigation_state())
+ ->common_params().navigation_start;
+
+ EXPECT_EQ(browser_navigation_start, navigation_start);
+}
+
// Sanity check for the Navigation Timing API |navigationStart| override. We
// are asserting only most basic constraints, as TimeTicks (passed as the
// override) are not comparable with the wall time (returned by the Blink API).
-TEST_F(RenderViewImplTest, NavigationStartOverride) {
+TEST_F(RenderViewImplTest, BrowserNavigationStartSanitized) {
// Verify that a navigation that claims to have started in the future - 42
// days from now is *not* reported as one that starts in the future; as we
// sanitize the override allowing a maximum of ::Now().
@@ -2081,6 +2104,32 @@ TEST_F(RenderViewImplTest, RendererNavigationStartTransmittedToBrowser) {
EXPECT_LT(lower_bound_navigation_start, transmitted_start);
}
+TEST_F(RenderViewImplTest, FiringBeforeUnloadDiscardsBrowserNavigationStart) {
+ const char url_string[] = "data:text/html,<script>"
+ "window.onbeforeunload = function() {"
+ " var finishTime = new Date().getTime() + 100;"
+ " while (new Date() < finishTime) {}"
+ " return null;"
+ "};"
+ "</script>";
+ LoadHTML(url_string);
+ ProcessPendingMessages();
+ render_thread_->sink().ClearMessages();
+
+ CommonNavigationParams common_params;
+ common_params.url = GURL("data:text/html,<div>Another page</div>");
+ common_params.navigation_type = FrameMsg_Navigate_Type::NORMAL;
+ common_params.transition = ui::PAGE_TRANSITION_TYPED;
+
+ frame()->Navigate(common_params, StartNavigationParams(),
+ RequestNavigationParams());
+
+ FrameHostMsg_DidStartProvisionalLoad::Param host_nav_params =
+ ProcessAndReadIPC<FrameHostMsg_DidStartProvisionalLoad>();
+ EXPECT_PRED2(TimeTicksGT, std::get<1>(host_nav_params),
+ common_params.navigation_start);
+}
+
TEST_F(RenderViewImplTest, BrowserNavigationStartNotUsedForReload) {
const char url_string[] = "data:text/html,<div>Page</div>";
// Navigate once, then reload.
@@ -2094,17 +2143,19 @@ TEST_F(RenderViewImplTest, BrowserNavigationStartNotUsedForReload) {
FrameMsg_Navigate_Type::RELOAD_ORIGINAL_REQUEST_URL;
common_params.transition = ui::PAGE_TRANSITION_RELOAD;
+ // The browser navigation_start should not be used because beforeunload was
+ // not fired yet.
Charlie Harrison 2016/06/28 14:01:43 This comment is unclear. If we're getting the DidS
Alexander Semashko 2016/06/28 14:47:45 I meant that it is not fired at the moment where t
frame()->Navigate(common_params, StartNavigationParams(),
RequestNavigationParams());
FrameHostMsg_DidStartProvisionalLoad::Param host_nav_params =
ProcessAndReadIPC<FrameHostMsg_DidStartProvisionalLoad>();
- // The true timestamp is later than the browser initiated one.
EXPECT_PRED2(TimeTicksGT, std::get<1>(host_nav_params),
common_params.navigation_start);
}
-TEST_F(RenderViewImplTest, BrowserNavigationStartNotUsedForHistoryNavigation) {
+TEST_F(RenderViewImplTest,
+ BrowserNavigationStartNotUsedForSameProcessHistoryNavigation) {
LoadHTML("<div id=pagename>Page A</div>");
LoadHTML("<div id=pagename>Page B</div>");
PageState back_state = GetCurrentPageState();
« no previous file with comments | « content/renderer/render_frame_impl.cc ('k') | third_party/WebKit/Source/core/dom/Document.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698