Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 |
| OLD | NEW |