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

Side by Side 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, 5 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 unified diff | 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 »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <stddef.h> 5 #include <stddef.h>
6 #include <stdint.h> 6 #include <stdint.h>
7 #include <tuple> 7 #include <tuple>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/callback.h" 10 #include "base/callback.h"
(...skipping 2021 matching lines...) Expand 10 before | Expand all | Expand 10 after
2032 2032
2033 frame()->SetAccessibilityMode(AccessibilityModeOff); 2033 frame()->SetAccessibilityMode(AccessibilityModeOff);
2034 ASSERT_EQ(AccessibilityModeOff, frame()->accessibility_mode()); 2034 ASSERT_EQ(AccessibilityModeOff, frame()->accessibility_mode());
2035 ASSERT_FALSE(frame()->render_accessibility()); 2035 ASSERT_FALSE(frame()->render_accessibility());
2036 2036
2037 frame()->SetAccessibilityMode(AccessibilityModeComplete); 2037 frame()->SetAccessibilityMode(AccessibilityModeComplete);
2038 ASSERT_EQ(AccessibilityModeComplete, frame()->accessibility_mode()); 2038 ASSERT_EQ(AccessibilityModeComplete, frame()->accessibility_mode());
2039 ASSERT_TRUE(frame()->render_accessibility()); 2039 ASSERT_TRUE(frame()->render_accessibility());
2040 } 2040 }
2041 2041
2042 TEST_F(RenderViewImplTest, BrowserNavigationStart) {
2043 base::TimeTicks browser_navigation_start =
2044 base::TimeTicks::Now() - base::TimeDelta::FromSeconds(1);
2045 CommonNavigationParams common_params;
2046 common_params.url = GURL("data:text/html,<div>Page</div>");
2047 common_params.navigation_type = FrameMsg_Navigate_Type::NORMAL;
2048 common_params.transition = ui::PAGE_TRANSITION_TYPED;
2049 common_params.navigation_start = browser_navigation_start;
2050
2051 frame()->Navigate(common_params, StartNavigationParams(),
2052 RequestNavigationParams());
2053 ProcessPendingMessages();
2054
2055 blink::WebDataSource* ds = frame()->GetWebFrame()->dataSource();
2056 ASSERT_TRUE(ds);
2057 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.
2058 base::TimeTicks navigation_start =
2059 static_cast<NavigationStateImpl*>(document_state->navigation_state())
2060 ->common_params().navigation_start;
2061
2062 EXPECT_EQ(browser_navigation_start, navigation_start);
2063 }
2064
2042 // Sanity check for the Navigation Timing API |navigationStart| override. We 2065 // Sanity check for the Navigation Timing API |navigationStart| override. We
2043 // are asserting only most basic constraints, as TimeTicks (passed as the 2066 // are asserting only most basic constraints, as TimeTicks (passed as the
2044 // override) are not comparable with the wall time (returned by the Blink API). 2067 // override) are not comparable with the wall time (returned by the Blink API).
2045 TEST_F(RenderViewImplTest, NavigationStartOverride) { 2068 TEST_F(RenderViewImplTest, BrowserNavigationStartSanitized) {
2046 // Verify that a navigation that claims to have started in the future - 42 2069 // Verify that a navigation that claims to have started in the future - 42
2047 // days from now is *not* reported as one that starts in the future; as we 2070 // days from now is *not* reported as one that starts in the future; as we
2048 // sanitize the override allowing a maximum of ::Now(). 2071 // sanitize the override allowing a maximum of ::Now().
2049 CommonNavigationParams late_common_params; 2072 CommonNavigationParams late_common_params;
2050 late_common_params.url = GURL("data:text/html,<div>Another page</div>"); 2073 late_common_params.url = GURL("data:text/html,<div>Another page</div>");
2051 late_common_params.navigation_type = FrameMsg_Navigate_Type::NORMAL; 2074 late_common_params.navigation_type = FrameMsg_Navigate_Type::NORMAL;
2052 late_common_params.transition = ui::PAGE_TRANSITION_TYPED; 2075 late_common_params.transition = ui::PAGE_TRANSITION_TYPED;
2053 late_common_params.navigation_start = 2076 late_common_params.navigation_start =
2054 base::TimeTicks::Now() + base::TimeDelta::FromDays(42); 2077 base::TimeTicks::Now() + base::TimeDelta::FromDays(42);
2055 late_common_params.method = "POST"; 2078 late_common_params.method = "POST";
(...skipping 18 matching lines...) Expand all
2074 render_thread_->sink().GetUniqueMessageMatching( 2097 render_thread_->sink().GetUniqueMessageMatching(
2075 FrameHostMsg_DidStartProvisionalLoad::ID); 2098 FrameHostMsg_DidStartProvisionalLoad::ID);
2076 FrameHostMsg_DidStartProvisionalLoad::Param host_nav_params; 2099 FrameHostMsg_DidStartProvisionalLoad::Param host_nav_params;
2077 FrameHostMsg_DidStartProvisionalLoad::Read(frame_navigate_msg, 2100 FrameHostMsg_DidStartProvisionalLoad::Read(frame_navigate_msg,
2078 &host_nav_params); 2101 &host_nav_params);
2079 base::TimeTicks transmitted_start = std::get<1>(host_nav_params); 2102 base::TimeTicks transmitted_start = std::get<1>(host_nav_params);
2080 EXPECT_FALSE(transmitted_start.is_null()); 2103 EXPECT_FALSE(transmitted_start.is_null());
2081 EXPECT_LT(lower_bound_navigation_start, transmitted_start); 2104 EXPECT_LT(lower_bound_navigation_start, transmitted_start);
2082 } 2105 }
2083 2106
2107 TEST_F(RenderViewImplTest, FiringBeforeUnloadDiscardsBrowserNavigationStart) {
2108 const char url_string[] = "data:text/html,<script>"
2109 "window.onbeforeunload = function() {"
2110 " var finishTime = new Date().getTime() + 100;"
2111 " while (new Date() < finishTime) {}"
2112 " return null;"
2113 "};"
2114 "</script>";
2115 LoadHTML(url_string);
2116 ProcessPendingMessages();
2117 render_thread_->sink().ClearMessages();
2118
2119 CommonNavigationParams common_params;
2120 common_params.url = GURL("data:text/html,<div>Another page</div>");
2121 common_params.navigation_type = FrameMsg_Navigate_Type::NORMAL;
2122 common_params.transition = ui::PAGE_TRANSITION_TYPED;
2123
2124 frame()->Navigate(common_params, StartNavigationParams(),
2125 RequestNavigationParams());
2126
2127 FrameHostMsg_DidStartProvisionalLoad::Param host_nav_params =
2128 ProcessAndReadIPC<FrameHostMsg_DidStartProvisionalLoad>();
2129 EXPECT_PRED2(TimeTicksGT, std::get<1>(host_nav_params),
2130 common_params.navigation_start);
2131 }
2132
2084 TEST_F(RenderViewImplTest, BrowserNavigationStartNotUsedForReload) { 2133 TEST_F(RenderViewImplTest, BrowserNavigationStartNotUsedForReload) {
2085 const char url_string[] = "data:text/html,<div>Page</div>"; 2134 const char url_string[] = "data:text/html,<div>Page</div>";
2086 // Navigate once, then reload. 2135 // Navigate once, then reload.
2087 LoadHTML(url_string); 2136 LoadHTML(url_string);
2088 ProcessPendingMessages(); 2137 ProcessPendingMessages();
2089 render_thread_->sink().ClearMessages(); 2138 render_thread_->sink().ClearMessages();
2090 2139
2091 CommonNavigationParams common_params; 2140 CommonNavigationParams common_params;
2092 common_params.url = GURL(url_string); 2141 common_params.url = GURL(url_string);
2093 common_params.navigation_type = 2142 common_params.navigation_type =
2094 FrameMsg_Navigate_Type::RELOAD_ORIGINAL_REQUEST_URL; 2143 FrameMsg_Navigate_Type::RELOAD_ORIGINAL_REQUEST_URL;
2095 common_params.transition = ui::PAGE_TRANSITION_RELOAD; 2144 common_params.transition = ui::PAGE_TRANSITION_RELOAD;
2096 2145
2146 // The browser navigation_start should not be used because beforeunload was
2147 // 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
2097 frame()->Navigate(common_params, StartNavigationParams(), 2148 frame()->Navigate(common_params, StartNavigationParams(),
2098 RequestNavigationParams()); 2149 RequestNavigationParams());
2099 2150
2100 FrameHostMsg_DidStartProvisionalLoad::Param host_nav_params = 2151 FrameHostMsg_DidStartProvisionalLoad::Param host_nav_params =
2101 ProcessAndReadIPC<FrameHostMsg_DidStartProvisionalLoad>(); 2152 ProcessAndReadIPC<FrameHostMsg_DidStartProvisionalLoad>();
2102 // The true timestamp is later than the browser initiated one.
2103 EXPECT_PRED2(TimeTicksGT, std::get<1>(host_nav_params), 2153 EXPECT_PRED2(TimeTicksGT, std::get<1>(host_nav_params),
2104 common_params.navigation_start); 2154 common_params.navigation_start);
2105 } 2155 }
2106 2156
2107 TEST_F(RenderViewImplTest, BrowserNavigationStartNotUsedForHistoryNavigation) { 2157 TEST_F(RenderViewImplTest,
2158 BrowserNavigationStartNotUsedForSameProcessHistoryNavigation) {
2108 LoadHTML("<div id=pagename>Page A</div>"); 2159 LoadHTML("<div id=pagename>Page A</div>");
2109 LoadHTML("<div id=pagename>Page B</div>"); 2160 LoadHTML("<div id=pagename>Page B</div>");
2110 PageState back_state = GetCurrentPageState(); 2161 PageState back_state = GetCurrentPageState();
2111 LoadHTML("<div id=pagename>Page C</div>"); 2162 LoadHTML("<div id=pagename>Page C</div>");
2112 PageState forward_state = GetCurrentPageState(); 2163 PageState forward_state = GetCurrentPageState();
2113 ProcessPendingMessages(); 2164 ProcessPendingMessages();
2114 render_thread_->sink().ClearMessages(); 2165 render_thread_->sink().ClearMessages();
2115 2166
2116 // Go back. 2167 // Go back.
2117 CommonNavigationParams common_params_back; 2168 CommonNavigationParams common_params_back;
(...skipping 378 matching lines...) Expand 10 before | Expand all | Expand 10 after
2496 ExpectPauseAndResume(3); 2547 ExpectPauseAndResume(3);
2497 blink::WebScriptSource source2( 2548 blink::WebScriptSource source2(
2498 WebString::fromUTF8("function func2() { func1(); }; func2();")); 2549 WebString::fromUTF8("function func2() { func1(); }; func2();"));
2499 frame()->GetWebFrame()->executeScriptInIsolatedWorld(17, &source2, 1, 1); 2550 frame()->GetWebFrame()->executeScriptInIsolatedWorld(17, &source2, 1, 1);
2500 2551
2501 EXPECT_FALSE(IsPaused()); 2552 EXPECT_FALSE(IsPaused());
2502 Detach(); 2553 Detach();
2503 } 2554 }
2504 2555
2505 } // namespace content 2556 } // namespace content
OLDNEW
« 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