OLD | NEW |
---|---|
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 "base/files/scoped_temp_dir.h" | 5 #include "base/files/scoped_temp_dir.h" |
6 #include "base/macros.h" | 6 #include "base/macros.h" |
7 #include "base/test/histogram_tester.h" | 7 #include "base/test/histogram_tester.h" |
8 #include "base/test/scoped_feature_list.h" | |
8 #include "base/threading/thread_restrictions.h" | 9 #include "base/threading/thread_restrictions.h" |
9 #include "base/time/time.h" | 10 #include "base/time/time.h" |
10 #include "chrome/browser/page_load_metrics/metrics_web_contents_observer.h" | 11 #include "chrome/browser/page_load_metrics/metrics_web_contents_observer.h" |
11 #include "chrome/browser/page_load_metrics/observers/aborts_page_load_metrics_ob server.h" | 12 #include "chrome/browser/page_load_metrics/observers/aborts_page_load_metrics_ob server.h" |
12 #include "chrome/browser/page_load_metrics/observers/core_page_load_metrics_obse rver.h" | 13 #include "chrome/browser/page_load_metrics/observers/core_page_load_metrics_obse rver.h" |
13 #include "chrome/browser/page_load_metrics/observers/document_write_page_load_me trics_observer.h" | 14 #include "chrome/browser/page_load_metrics/observers/document_write_page_load_me trics_observer.h" |
14 #include "chrome/browser/page_load_metrics/observers/no_state_prefetch_page_load _metrics_observer.h" | 15 #include "chrome/browser/page_load_metrics/observers/no_state_prefetch_page_load _metrics_observer.h" |
15 #include "chrome/browser/page_load_metrics/page_load_tracker.h" | 16 #include "chrome/browser/page_load_metrics/page_load_tracker.h" |
16 #include "chrome/browser/prerender/prerender_histograms.h" | 17 #include "chrome/browser/prerender/prerender_histograms.h" |
17 #include "chrome/browser/prerender/prerender_origin.h" | 18 #include "chrome/browser/prerender/prerender_origin.h" |
18 #include "chrome/browser/profiles/profile.h" | 19 #include "chrome/browser/profiles/profile.h" |
19 #include "chrome/browser/ui/browser.h" | 20 #include "chrome/browser/ui/browser.h" |
20 #include "chrome/browser/ui/browser_navigator_params.h" | 21 #include "chrome/browser/ui/browser_navigator_params.h" |
21 #include "chrome/browser/ui/tabs/tab_strip_model.h" | 22 #include "chrome/browser/ui/tabs/tab_strip_model.h" |
22 #include "chrome/common/page_load_metrics/page_load_metrics_messages.h" | 23 #include "chrome/common/chrome_features.h" |
23 #include "chrome/common/pref_names.h" | 24 #include "chrome/common/pref_names.h" |
24 #include "chrome/common/url_constants.h" | 25 #include "chrome/common/url_constants.h" |
25 #include "chrome/test/base/in_process_browser_test.h" | 26 #include "chrome/test/base/in_process_browser_test.h" |
26 #include "chrome/test/base/ui_test_utils.h" | 27 #include "chrome/test/base/ui_test_utils.h" |
27 #include "components/prefs/pref_service.h" | 28 #include "components/prefs/pref_service.h" |
28 #include "content/public/browser/browser_thread.h" | 29 #include "content/public/browser/browser_thread.h" |
29 #include "content/public/browser/render_process_host.h" | 30 #include "content/public/browser/render_process_host.h" |
30 #include "content/public/browser/render_view_host.h" | 31 #include "content/public/browser/render_view_host.h" |
31 #include "content/public/test/browser_test_utils.h" | 32 #include "content/public/test/browser_test_utils.h" |
32 #include "content/public/test/download_test_observer.h" | 33 #include "content/public/test/download_test_observer.h" |
33 #include "net/http/failing_http_transaction_factory.h" | 34 #include "net/http/failing_http_transaction_factory.h" |
34 #include "net/http/http_cache.h" | 35 #include "net/http/http_cache.h" |
35 #include "net/test/embedded_test_server/embedded_test_server.h" | 36 #include "net/test/embedded_test_server/embedded_test_server.h" |
36 #include "net/test/url_request/url_request_failed_job.h" | 37 #include "net/test/url_request/url_request_failed_job.h" |
37 #include "net/url_request/url_request_context.h" | 38 #include "net/url_request/url_request_context.h" |
38 #include "net/url_request/url_request_context_getter.h" | 39 #include "net/url_request/url_request_context_getter.h" |
39 | 40 |
40 namespace { | 41 namespace { |
41 | 42 |
43 void FailAllNetworkTransactions(net::URLRequestContextGetter* getter) { | |
44 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); | |
45 net::HttpCache* cache( | |
46 getter->GetURLRequestContext()->http_transaction_factory()->GetCache()); | |
47 DCHECK(cache); | |
48 std::unique_ptr<net::FailingHttpTransactionFactory> factory( | |
49 new net::FailingHttpTransactionFactory(cache->GetSession(), | |
50 net::ERR_FAILED)); | |
51 // Throw away old version; since this is a browser test, there is no | |
52 // need to restore the old state. | |
53 cache->SetHttpNetworkTransactionFactoryForTesting(std::move(factory)); | |
54 } | |
55 | |
42 // Waits until specified timing and metadata expectations are satisfied. | 56 // Waits until specified timing and metadata expectations are satisfied. |
43 class PageLoadMetricsWaiter | 57 class PageLoadMetricsWaiter |
44 : public page_load_metrics::MetricsWebContentsObserver::TestingObserver { | 58 : public page_load_metrics::MetricsWebContentsObserver::TestingObserver { |
45 public: | 59 public: |
46 // A bitvector to express which timing fields to match on. | 60 // A bitvector to express which timing fields to match on. |
47 enum ExpectedTimingFields { | 61 enum ExpectedTimingFields { |
48 FIRST_PAINT = 1 << 0, | 62 FIRST_PAINT = 1 << 0, |
49 FIRST_CONTENTFUL_PAINT = 1 << 1, | 63 FIRST_CONTENTFUL_PAINT = 1 << 1, |
50 STYLE_UPDATE_BEFORE_FCP = 1 << 2 | 64 STYLE_UPDATE_BEFORE_FCP = 1 << 2 |
51 }; | 65 }; |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
108 } | 122 } |
109 | 123 |
110 std::unique_ptr<base::RunLoop> run_loop_; | 124 std::unique_ptr<base::RunLoop> run_loop_; |
111 int matching_fields_ = 0; // A bitvector composed from ExpectedTimingFields. | 125 int matching_fields_ = 0; // A bitvector composed from ExpectedTimingFields. |
112 bool expectations_satisfied_ = false; | 126 bool expectations_satisfied_ = false; |
113 int match_document_write_block_reload_ = 0; | 127 int match_document_write_block_reload_ = 0; |
114 }; | 128 }; |
115 | 129 |
116 } // namespace | 130 } // namespace |
117 | 131 |
118 class PageLoadMetricsBrowserTest : public InProcessBrowserTest { | 132 class PageLoadMetricsMojoficationBrowserTest : public InProcessBrowserTest { |
119 public: | 133 public: |
120 PageLoadMetricsBrowserTest() {} | 134 PageLoadMetricsMojoficationBrowserTest() {} |
121 ~PageLoadMetricsBrowserTest() override {} | 135 ~PageLoadMetricsMojoficationBrowserTest() override {} |
122 | 136 |
123 protected: | 137 protected: |
138 void SetUpCommandLine(base::CommandLine* command_line) override { | |
139 // We need to set the feature state before the render process is created, | |
140 // in order for it to inherit the feature state from the browser process. | |
141 // SetUp() runs too early, and SetUpOnMainThread() runs too late. | |
142 scoped_feature_list_.InitAndEnableFeature( | |
143 features::kPageLoadMetricsMojofication); | |
144 ASSERT_TRUE( | |
145 base::FeatureList::IsEnabled(features::kPageLoadMetricsMojofication)); | |
146 } | |
147 | |
124 void NavigateToUntrackedUrl() { | 148 void NavigateToUntrackedUrl() { |
125 ui_test_utils::NavigateToURL(browser(), GURL(url::kAboutBlankURL)); | 149 ui_test_utils::NavigateToURL(browser(), GURL(url::kAboutBlankURL)); |
126 } | 150 } |
127 | 151 |
128 bool NoPageLoadMetricsRecorded() { | 152 bool NoPageLoadMetricsRecorded() { |
129 // Determine whether any 'public' page load metrics are recorded. We exclude | 153 // Determine whether any 'public' page load metrics are recorded. We exclude |
130 // 'internal' metrics as these may be recorded for debugging purposes. | 154 // 'internal' metrics as these may be recorded for debugging purposes. |
131 size_t total_pageload_histograms = | 155 size_t total_pageload_histograms = |
132 histogram_tester_.GetTotalCountsForPrefix("PageLoad.").size(); | 156 histogram_tester_.GetTotalCountsForPrefix("PageLoad.").size(); |
133 size_t total_internal_histograms = | 157 size_t total_internal_histograms = |
134 histogram_tester_.GetTotalCountsForPrefix("PageLoad.Internal.").size(); | 158 histogram_tester_.GetTotalCountsForPrefix("PageLoad.Internal.").size(); |
135 DCHECK_GE(total_pageload_histograms, total_internal_histograms); | 159 DCHECK_GE(total_pageload_histograms, total_internal_histograms); |
136 return total_pageload_histograms - total_internal_histograms == 0; | 160 return total_pageload_histograms - total_internal_histograms == 0; |
137 } | 161 } |
138 | 162 |
139 std::unique_ptr<PageLoadMetricsWaiter> CreatePageLoadMetricsWaiter() { | 163 std::unique_ptr<PageLoadMetricsWaiter> CreatePageLoadMetricsWaiter() { |
140 content::WebContents* web_contents = | 164 content::WebContents* web_contents = |
141 browser()->tab_strip_model()->GetActiveWebContents(); | 165 browser()->tab_strip_model()->GetActiveWebContents(); |
142 return base::MakeUnique<PageLoadMetricsWaiter>(web_contents); | 166 return base::MakeUnique<PageLoadMetricsWaiter>(web_contents); |
143 } | 167 } |
144 | 168 |
169 base::test::ScopedFeatureList scoped_feature_list_; | |
145 base::HistogramTester histogram_tester_; | 170 base::HistogramTester histogram_tester_; |
146 | 171 |
147 private: | 172 private: |
148 DISALLOW_COPY_AND_ASSIGN(PageLoadMetricsBrowserTest); | 173 DISALLOW_COPY_AND_ASSIGN(PageLoadMetricsMojoficationBrowserTest); |
149 }; | 174 }; |
150 | 175 |
151 void FailAllNetworkTransactions(net::URLRequestContextGetter* getter) { | 176 IN_PROC_BROWSER_TEST_F(PageLoadMetricsMojoficationBrowserTest, NoNavigation) { |
152 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); | 177 ASSERT_TRUE( |
Bryan McQuade
2017/05/07 19:44:41
looks like you can remove this one as well
lpy
2017/05/08 18:38:33
Done.
| |
153 net::HttpCache* cache( | 178 base::FeatureList::IsEnabled(features::kPageLoadMetricsMojofication)); |
154 getter->GetURLRequestContext()->http_transaction_factory()->GetCache()); | |
155 DCHECK(cache); | |
156 std::unique_ptr<net::FailingHttpTransactionFactory> factory( | |
157 new net::FailingHttpTransactionFactory(cache->GetSession(), | |
158 net::ERR_FAILED)); | |
159 // Throw away old version; since this is a browser test, there is no | |
160 // need to restore the old state. | |
161 cache->SetHttpNetworkTransactionFactoryForTesting(std::move(factory)); | |
162 } | |
163 | |
164 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, NoNavigation) { | |
165 ASSERT_TRUE(embedded_test_server()->Start()); | 179 ASSERT_TRUE(embedded_test_server()->Start()); |
166 EXPECT_TRUE(NoPageLoadMetricsRecorded()); | 180 EXPECT_TRUE(NoPageLoadMetricsRecorded()); |
167 } | 181 } |
168 | 182 |
169 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, NewPage) { | 183 IN_PROC_BROWSER_TEST_F(PageLoadMetricsMojoficationBrowserTest, NewPage) { |
170 ASSERT_TRUE(embedded_test_server()->Start()); | 184 ASSERT_TRUE(embedded_test_server()->Start()); |
171 | 185 |
172 ui_test_utils::NavigateToURL(browser(), | 186 ui_test_utils::NavigateToURL(browser(), |
173 embedded_test_server()->GetURL("/title1.html")); | 187 embedded_test_server()->GetURL("/title1.html")); |
174 NavigateToUntrackedUrl(); | 188 NavigateToUntrackedUrl(); |
175 | 189 |
176 histogram_tester_.ExpectTotalCount(internal::kHistogramDomContentLoaded, 1); | 190 histogram_tester_.ExpectTotalCount(internal::kHistogramDomContentLoaded, 1); |
177 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 1); | 191 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 1); |
178 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 1); | 192 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 1); |
179 histogram_tester_.ExpectTotalCount(internal::kHistogramParseDuration, 1); | 193 histogram_tester_.ExpectTotalCount(internal::kHistogramParseDuration, 1); |
180 histogram_tester_.ExpectTotalCount( | 194 histogram_tester_.ExpectTotalCount( |
181 internal::kHistogramParseBlockedOnScriptLoad, 1); | 195 internal::kHistogramParseBlockedOnScriptLoad, 1); |
182 histogram_tester_.ExpectTotalCount( | 196 histogram_tester_.ExpectTotalCount( |
183 internal::kHistogramParseBlockedOnScriptExecution, 1); | 197 internal::kHistogramParseBlockedOnScriptExecution, 1); |
184 histogram_tester_.ExpectTotalCount(internal::kHistogramTotalBytes, 1); | 198 histogram_tester_.ExpectTotalCount(internal::kHistogramTotalBytes, 1); |
185 histogram_tester_.ExpectTotalCount( | 199 histogram_tester_.ExpectTotalCount( |
186 internal::kHistogramPageTimingForegroundDuration, 1); | 200 internal::kHistogramPageTimingForegroundDuration, 1); |
187 | 201 |
188 // Verify that NoPageLoadMetricsRecorded returns false when PageLoad metrics | 202 // Verify that NoPageLoadMetricsRecorded returns false when PageLoad metrics |
189 // have been recorded. | 203 // have been recorded. |
190 EXPECT_FALSE(NoPageLoadMetricsRecorded()); | 204 EXPECT_FALSE(NoPageLoadMetricsRecorded()); |
191 } | 205 } |
192 | 206 |
193 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, SameDocumentNavigation) { | 207 IN_PROC_BROWSER_TEST_F(PageLoadMetricsMojoficationBrowserTest, |
208 SameDocumentNavigation) { | |
194 ASSERT_TRUE(embedded_test_server()->Start()); | 209 ASSERT_TRUE(embedded_test_server()->Start()); |
195 | 210 |
196 ui_test_utils::NavigateToURL(browser(), | 211 ui_test_utils::NavigateToURL(browser(), |
197 embedded_test_server()->GetURL("/title1.html")); | 212 embedded_test_server()->GetURL("/title1.html")); |
198 ui_test_utils::NavigateToURL( | 213 ui_test_utils::NavigateToURL( |
199 browser(), embedded_test_server()->GetURL("/title1.html#hash")); | 214 browser(), embedded_test_server()->GetURL("/title1.html#hash")); |
200 NavigateToUntrackedUrl(); | 215 NavigateToUntrackedUrl(); |
201 | 216 |
202 histogram_tester_.ExpectTotalCount(internal::kHistogramDomContentLoaded, 1); | 217 histogram_tester_.ExpectTotalCount(internal::kHistogramDomContentLoaded, 1); |
203 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 1); | 218 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 1); |
204 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 1); | 219 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 1); |
205 } | 220 } |
206 | 221 |
207 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, SameUrlNavigation) { | 222 IN_PROC_BROWSER_TEST_F(PageLoadMetricsMojoficationBrowserTest, |
223 SameUrlNavigation) { | |
208 ASSERT_TRUE(embedded_test_server()->Start()); | 224 ASSERT_TRUE(embedded_test_server()->Start()); |
209 | 225 |
210 ui_test_utils::NavigateToURL(browser(), | 226 ui_test_utils::NavigateToURL(browser(), |
211 embedded_test_server()->GetURL("/title1.html")); | 227 embedded_test_server()->GetURL("/title1.html")); |
212 ui_test_utils::NavigateToURL(browser(), | 228 ui_test_utils::NavigateToURL(browser(), |
213 embedded_test_server()->GetURL("/title1.html")); | 229 embedded_test_server()->GetURL("/title1.html")); |
214 NavigateToUntrackedUrl(); | 230 NavigateToUntrackedUrl(); |
215 | 231 |
216 // We expect one histogram sample for each navigation to title1.html. | 232 // We expect one histogram sample for each navigation to title1.html. |
217 histogram_tester_.ExpectTotalCount(internal::kHistogramDomContentLoaded, 2); | 233 histogram_tester_.ExpectTotalCount(internal::kHistogramDomContentLoaded, 2); |
218 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 2); | 234 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 2); |
219 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 2); | 235 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 2); |
220 } | 236 } |
221 | 237 |
222 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, NonHtmlMainResource) { | 238 IN_PROC_BROWSER_TEST_F(PageLoadMetricsMojoficationBrowserTest, |
239 NonHtmlMainResource) { | |
223 ASSERT_TRUE(embedded_test_server()->Start()); | 240 ASSERT_TRUE(embedded_test_server()->Start()); |
224 | 241 |
225 ui_test_utils::NavigateToURL(browser(), | 242 ui_test_utils::NavigateToURL(browser(), |
226 embedded_test_server()->GetURL("/circle.svg")); | 243 embedded_test_server()->GetURL("/circle.svg")); |
227 NavigateToUntrackedUrl(); | 244 NavigateToUntrackedUrl(); |
228 EXPECT_TRUE(NoPageLoadMetricsRecorded()); | 245 EXPECT_TRUE(NoPageLoadMetricsRecorded()); |
229 } | 246 } |
230 | 247 |
231 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, NonHttpOrHttpsUrl) { | 248 IN_PROC_BROWSER_TEST_F(PageLoadMetricsMojoficationBrowserTest, |
249 NonHttpOrHttpsUrl) { | |
232 ASSERT_TRUE(embedded_test_server()->Start()); | 250 ASSERT_TRUE(embedded_test_server()->Start()); |
233 | 251 |
234 ui_test_utils::NavigateToURL(browser(), GURL(chrome::kChromeUIVersionURL)); | 252 ui_test_utils::NavigateToURL(browser(), GURL(chrome::kChromeUIVersionURL)); |
235 NavigateToUntrackedUrl(); | 253 NavigateToUntrackedUrl(); |
236 EXPECT_TRUE(NoPageLoadMetricsRecorded()); | 254 EXPECT_TRUE(NoPageLoadMetricsRecorded()); |
237 } | 255 } |
238 | 256 |
239 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, HttpErrorPage) { | 257 IN_PROC_BROWSER_TEST_F(PageLoadMetricsMojoficationBrowserTest, HttpErrorPage) { |
240 ASSERT_TRUE(embedded_test_server()->Start()); | 258 ASSERT_TRUE(embedded_test_server()->Start()); |
241 | 259 |
242 ui_test_utils::NavigateToURL( | 260 ui_test_utils::NavigateToURL( |
243 browser(), embedded_test_server()->GetURL("/page_load_metrics/404.html")); | 261 browser(), embedded_test_server()->GetURL("/page_load_metrics/404.html")); |
244 NavigateToUntrackedUrl(); | 262 NavigateToUntrackedUrl(); |
245 EXPECT_TRUE(NoPageLoadMetricsRecorded()); | 263 EXPECT_TRUE(NoPageLoadMetricsRecorded()); |
246 } | 264 } |
247 | 265 |
248 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, ChromeErrorPage) { | 266 IN_PROC_BROWSER_TEST_F(PageLoadMetricsMojoficationBrowserTest, |
267 ChromeErrorPage) { | |
249 ASSERT_TRUE(embedded_test_server()->Start()); | 268 ASSERT_TRUE(embedded_test_server()->Start()); |
250 | 269 |
251 // Configure the network stack to fail all attempted loads with a network | 270 // Configure the network stack to fail all attempted loads with a network |
252 // error, which will cause Chrome to display an error page. | 271 // error, which will cause Chrome to display an error page. |
253 scoped_refptr<net::URLRequestContextGetter> url_request_context_getter = | 272 scoped_refptr<net::URLRequestContextGetter> url_request_context_getter = |
254 browser()->profile()->GetRequestContext(); | 273 browser()->profile()->GetRequestContext(); |
255 content::BrowserThread::PostTask( | 274 content::BrowserThread::PostTask( |
256 content::BrowserThread::IO, FROM_HERE, | 275 content::BrowserThread::IO, FROM_HERE, |
257 base::BindOnce(&FailAllNetworkTransactions, | 276 base::BindOnce(&FailAllNetworkTransactions, |
258 base::RetainedRef(url_request_context_getter))); | 277 base::RetainedRef(url_request_context_getter))); |
259 | 278 |
260 ui_test_utils::NavigateToURL(browser(), | 279 ui_test_utils::NavigateToURL(browser(), |
261 embedded_test_server()->GetURL("/title1.html")); | 280 embedded_test_server()->GetURL("/title1.html")); |
262 NavigateToUntrackedUrl(); | 281 NavigateToUntrackedUrl(); |
263 EXPECT_TRUE(NoPageLoadMetricsRecorded()); | 282 EXPECT_TRUE(NoPageLoadMetricsRecorded()); |
264 } | 283 } |
265 | 284 |
266 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, Ignore204Pages) { | 285 IN_PROC_BROWSER_TEST_F(PageLoadMetricsMojoficationBrowserTest, Ignore204Pages) { |
267 ASSERT_TRUE(embedded_test_server()->Start()); | 286 ASSERT_TRUE(embedded_test_server()->Start()); |
268 | 287 |
269 ui_test_utils::NavigateToURL(browser(), | 288 ui_test_utils::NavigateToURL(browser(), |
270 embedded_test_server()->GetURL("/page204.html")); | 289 embedded_test_server()->GetURL("/page204.html")); |
271 NavigateToUntrackedUrl(); | 290 NavigateToUntrackedUrl(); |
272 EXPECT_TRUE(NoPageLoadMetricsRecorded()); | 291 EXPECT_TRUE(NoPageLoadMetricsRecorded()); |
273 } | 292 } |
274 | 293 |
275 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, IgnoreDownloads) { | 294 IN_PROC_BROWSER_TEST_F(PageLoadMetricsMojoficationBrowserTest, |
295 IgnoreDownloads) { | |
276 ASSERT_TRUE(embedded_test_server()->Start()); | 296 ASSERT_TRUE(embedded_test_server()->Start()); |
277 | 297 |
278 base::ThreadRestrictions::ScopedAllowIO allow_io; | 298 base::ThreadRestrictions::ScopedAllowIO allow_io; |
279 base::ScopedTempDir downloads_directory; | 299 base::ScopedTempDir downloads_directory; |
280 ASSERT_TRUE(downloads_directory.CreateUniqueTempDir()); | 300 ASSERT_TRUE(downloads_directory.CreateUniqueTempDir()); |
281 browser()->profile()->GetPrefs()->SetFilePath( | 301 browser()->profile()->GetPrefs()->SetFilePath( |
282 prefs::kDownloadDefaultDirectory, downloads_directory.GetPath()); | 302 prefs::kDownloadDefaultDirectory, downloads_directory.GetPath()); |
283 content::DownloadTestObserverTerminal downloads_observer( | 303 content::DownloadTestObserverTerminal downloads_observer( |
284 content::BrowserContext::GetDownloadManager(browser()->profile()), | 304 content::BrowserContext::GetDownloadManager(browser()->profile()), |
285 1, // == wait_count (only waiting for "download-test3.gif"). | 305 1, // == wait_count (only waiting for "download-test3.gif"). |
286 content::DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_FAIL); | 306 content::DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_FAIL); |
287 | 307 |
288 ui_test_utils::NavigateToURL( | 308 ui_test_utils::NavigateToURL( |
289 browser(), embedded_test_server()->GetURL("/download-test3.gif")); | 309 browser(), embedded_test_server()->GetURL("/download-test3.gif")); |
290 downloads_observer.WaitForFinished(); | 310 downloads_observer.WaitForFinished(); |
291 | 311 |
292 NavigateToUntrackedUrl(); | 312 NavigateToUntrackedUrl(); |
293 EXPECT_TRUE(NoPageLoadMetricsRecorded()); | 313 EXPECT_TRUE(NoPageLoadMetricsRecorded()); |
294 } | 314 } |
295 | 315 |
296 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, PreloadDocumentWrite) { | 316 IN_PROC_BROWSER_TEST_F(PageLoadMetricsMojoficationBrowserTest, |
317 PreloadDocumentWrite) { | |
297 ASSERT_TRUE(embedded_test_server()->Start()); | 318 ASSERT_TRUE(embedded_test_server()->Start()); |
298 | 319 |
299 std::unique_ptr<PageLoadMetricsWaiter> fcp_waiter = | 320 std::unique_ptr<PageLoadMetricsWaiter> fcp_waiter = |
300 CreatePageLoadMetricsWaiter(); | 321 CreatePageLoadMetricsWaiter(); |
301 fcp_waiter->AddExpectation(PageLoadMetricsWaiter::FIRST_CONTENTFUL_PAINT); | 322 fcp_waiter->AddExpectation(PageLoadMetricsWaiter::FIRST_CONTENTFUL_PAINT); |
302 | 323 |
303 ui_test_utils::NavigateToURL( | 324 ui_test_utils::NavigateToURL( |
304 browser(), embedded_test_server()->GetURL( | 325 browser(), embedded_test_server()->GetURL( |
305 "/page_load_metrics/document_write_external_script.html")); | 326 "/page_load_metrics/document_write_external_script.html")); |
306 fcp_waiter->Wait(); | 327 fcp_waiter->Wait(); |
307 | 328 |
308 histogram_tester_.ExpectTotalCount( | 329 histogram_tester_.ExpectTotalCount( |
309 internal::kHistogramDocWriteParseStartToFirstContentfulPaint, 1); | 330 internal::kHistogramDocWriteParseStartToFirstContentfulPaint, 1); |
310 } | 331 } |
311 | 332 |
312 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, NoPreloadDocumentWrite) { | 333 IN_PROC_BROWSER_TEST_F(PageLoadMetricsMojoficationBrowserTest, |
334 NoPreloadDocumentWrite) { | |
313 ASSERT_TRUE(embedded_test_server()->Start()); | 335 ASSERT_TRUE(embedded_test_server()->Start()); |
314 | 336 |
315 ui_test_utils::NavigateToURL( | 337 ui_test_utils::NavigateToURL( |
316 browser(), embedded_test_server()->GetURL( | 338 browser(), embedded_test_server()->GetURL( |
317 "/page_load_metrics/document_write_no_script.html")); | 339 "/page_load_metrics/document_write_no_script.html")); |
318 NavigateToUntrackedUrl(); | 340 NavigateToUntrackedUrl(); |
319 | 341 |
320 histogram_tester_.ExpectTotalCount( | 342 histogram_tester_.ExpectTotalCount( |
321 internal::kHistogramDocWriteParseStartToFirstContentfulPaint, 0); | 343 internal::kHistogramDocWriteParseStartToFirstContentfulPaint, 0); |
322 } | 344 } |
323 | 345 |
324 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, NoDocumentWrite) { | 346 IN_PROC_BROWSER_TEST_F(PageLoadMetricsMojoficationBrowserTest, |
347 NoDocumentWrite) { | |
325 ASSERT_TRUE(embedded_test_server()->Start()); | 348 ASSERT_TRUE(embedded_test_server()->Start()); |
326 | 349 |
327 std::unique_ptr<PageLoadMetricsWaiter> fcp_waiter = | 350 std::unique_ptr<PageLoadMetricsWaiter> fcp_waiter = |
328 CreatePageLoadMetricsWaiter(); | 351 CreatePageLoadMetricsWaiter(); |
329 fcp_waiter->AddExpectation(PageLoadMetricsWaiter::FIRST_CONTENTFUL_PAINT); | 352 fcp_waiter->AddExpectation(PageLoadMetricsWaiter::FIRST_CONTENTFUL_PAINT); |
330 | 353 |
331 ui_test_utils::NavigateToURL(browser(), | 354 ui_test_utils::NavigateToURL(browser(), |
332 embedded_test_server()->GetURL("/title1.html")); | 355 embedded_test_server()->GetURL("/title1.html")); |
333 fcp_waiter->Wait(); | 356 fcp_waiter->Wait(); |
334 | 357 |
335 histogram_tester_.ExpectTotalCount( | 358 histogram_tester_.ExpectTotalCount( |
336 internal::kHistogramDocWriteParseStartToFirstContentfulPaint, 0); | 359 internal::kHistogramDocWriteParseStartToFirstContentfulPaint, 0); |
337 histogram_tester_.ExpectTotalCount( | 360 histogram_tester_.ExpectTotalCount( |
338 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 0); | 361 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 0); |
339 histogram_tester_.ExpectTotalCount(internal::kHistogramDocWriteBlockCount, 0); | 362 histogram_tester_.ExpectTotalCount(internal::kHistogramDocWriteBlockCount, 0); |
340 } | 363 } |
341 | 364 |
342 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, DocumentWriteBlock) { | 365 IN_PROC_BROWSER_TEST_F(PageLoadMetricsMojoficationBrowserTest, |
366 DocumentWriteBlock) { | |
343 ASSERT_TRUE(embedded_test_server()->Start()); | 367 ASSERT_TRUE(embedded_test_server()->Start()); |
344 | 368 |
345 std::unique_ptr<PageLoadMetricsWaiter> fcp_waiter = | 369 std::unique_ptr<PageLoadMetricsWaiter> fcp_waiter = |
346 CreatePageLoadMetricsWaiter(); | 370 CreatePageLoadMetricsWaiter(); |
347 fcp_waiter->AddExpectation(PageLoadMetricsWaiter::FIRST_CONTENTFUL_PAINT); | 371 fcp_waiter->AddExpectation(PageLoadMetricsWaiter::FIRST_CONTENTFUL_PAINT); |
348 | 372 |
349 ui_test_utils::NavigateToURL( | 373 ui_test_utils::NavigateToURL( |
350 browser(), embedded_test_server()->GetURL( | 374 browser(), embedded_test_server()->GetURL( |
351 "/page_load_metrics/document_write_script_block.html")); | 375 "/page_load_metrics/document_write_script_block.html")); |
352 fcp_waiter->Wait(); | 376 fcp_waiter->Wait(); |
353 | 377 |
354 histogram_tester_.ExpectTotalCount( | 378 histogram_tester_.ExpectTotalCount( |
355 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 1); | 379 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 1); |
356 histogram_tester_.ExpectTotalCount(internal::kHistogramDocWriteBlockCount, 1); | 380 histogram_tester_.ExpectTotalCount(internal::kHistogramDocWriteBlockCount, 1); |
357 } | 381 } |
358 | 382 |
359 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, DocumentWriteReload) { | 383 IN_PROC_BROWSER_TEST_F(PageLoadMetricsMojoficationBrowserTest, |
384 DocumentWriteReload) { | |
360 ASSERT_TRUE(embedded_test_server()->Start()); | 385 ASSERT_TRUE(embedded_test_server()->Start()); |
361 | 386 |
362 std::unique_ptr<PageLoadMetricsWaiter> fcp_waiter = | 387 std::unique_ptr<PageLoadMetricsWaiter> fcp_waiter = |
363 CreatePageLoadMetricsWaiter(); | 388 CreatePageLoadMetricsWaiter(); |
364 fcp_waiter->AddExpectation(PageLoadMetricsWaiter::FIRST_CONTENTFUL_PAINT); | 389 fcp_waiter->AddExpectation(PageLoadMetricsWaiter::FIRST_CONTENTFUL_PAINT); |
365 std::unique_ptr<PageLoadMetricsWaiter> reload_waiter = | 390 std::unique_ptr<PageLoadMetricsWaiter> reload_waiter = |
366 CreatePageLoadMetricsWaiter(); | 391 CreatePageLoadMetricsWaiter(); |
367 reload_waiter->ExpectDocumentWriteBlockReload(2); | 392 reload_waiter->ExpectDocumentWriteBlockReload(2); |
368 | 393 |
369 ui_test_utils::NavigateToURL( | 394 ui_test_utils::NavigateToURL( |
(...skipping 16 matching lines...) Expand all Loading... | |
386 reload_waiter->Wait(); | 411 reload_waiter->Wait(); |
387 | 412 |
388 histogram_tester_.ExpectTotalCount( | 413 histogram_tester_.ExpectTotalCount( |
389 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 1); | 414 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 1); |
390 | 415 |
391 histogram_tester_.ExpectTotalCount( | 416 histogram_tester_.ExpectTotalCount( |
392 internal::kHistogramDocWriteBlockReloadCount, 2); | 417 internal::kHistogramDocWriteBlockReloadCount, 2); |
393 histogram_tester_.ExpectTotalCount(internal::kHistogramDocWriteBlockCount, 1); | 418 histogram_tester_.ExpectTotalCount(internal::kHistogramDocWriteBlockCount, 1); |
394 } | 419 } |
395 | 420 |
396 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, DocumentWriteAsync) { | 421 IN_PROC_BROWSER_TEST_F(PageLoadMetricsMojoficationBrowserTest, |
422 DocumentWriteAsync) { | |
397 ASSERT_TRUE(embedded_test_server()->Start()); | 423 ASSERT_TRUE(embedded_test_server()->Start()); |
398 | 424 |
399 ui_test_utils::NavigateToURL( | 425 ui_test_utils::NavigateToURL( |
400 browser(), embedded_test_server()->GetURL( | 426 browser(), embedded_test_server()->GetURL( |
401 "/page_load_metrics/document_write_script_async.html")); | 427 "/page_load_metrics/document_write_script_async.html")); |
402 NavigateToUntrackedUrl(); | 428 NavigateToUntrackedUrl(); |
403 | 429 |
404 histogram_tester_.ExpectTotalCount( | 430 histogram_tester_.ExpectTotalCount( |
405 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 0); | 431 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 0); |
406 histogram_tester_.ExpectTotalCount(internal::kHistogramDocWriteBlockCount, 0); | 432 histogram_tester_.ExpectTotalCount(internal::kHistogramDocWriteBlockCount, 0); |
407 } | 433 } |
408 | 434 |
409 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, DocumentWriteSameDomain) { | 435 IN_PROC_BROWSER_TEST_F(PageLoadMetricsMojoficationBrowserTest, |
436 DocumentWriteSameDomain) { | |
410 ASSERT_TRUE(embedded_test_server()->Start()); | 437 ASSERT_TRUE(embedded_test_server()->Start()); |
411 | 438 |
412 ui_test_utils::NavigateToURL( | 439 ui_test_utils::NavigateToURL( |
413 browser(), embedded_test_server()->GetURL( | 440 browser(), embedded_test_server()->GetURL( |
414 "/page_load_metrics/document_write_external_script.html")); | 441 "/page_load_metrics/document_write_external_script.html")); |
415 NavigateToUntrackedUrl(); | 442 NavigateToUntrackedUrl(); |
416 | 443 |
417 histogram_tester_.ExpectTotalCount( | 444 histogram_tester_.ExpectTotalCount( |
418 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 0); | 445 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 0); |
419 histogram_tester_.ExpectTotalCount(internal::kHistogramDocWriteBlockCount, 0); | 446 histogram_tester_.ExpectTotalCount(internal::kHistogramDocWriteBlockCount, 0); |
420 } | 447 } |
421 | 448 |
422 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, NoDocumentWriteScript) { | 449 IN_PROC_BROWSER_TEST_F(PageLoadMetricsMojoficationBrowserTest, |
450 NoDocumentWriteScript) { | |
423 ASSERT_TRUE(embedded_test_server()->Start()); | 451 ASSERT_TRUE(embedded_test_server()->Start()); |
424 | 452 |
425 ui_test_utils::NavigateToURL( | 453 ui_test_utils::NavigateToURL( |
426 browser(), embedded_test_server()->GetURL( | 454 browser(), embedded_test_server()->GetURL( |
427 "/page_load_metrics/document_write_no_script.html")); | 455 "/page_load_metrics/document_write_no_script.html")); |
428 NavigateToUntrackedUrl(); | 456 NavigateToUntrackedUrl(); |
429 | 457 |
430 histogram_tester_.ExpectTotalCount( | 458 histogram_tester_.ExpectTotalCount( |
431 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 0); | 459 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 0); |
432 histogram_tester_.ExpectTotalCount(internal::kHistogramDocWriteBlockCount, 0); | 460 histogram_tester_.ExpectTotalCount(internal::kHistogramDocWriteBlockCount, 0); |
433 } | 461 } |
434 | 462 |
435 // TODO(crbug.com/712935): Flaky on Linux dbg. | 463 // TODO(crbug.com/712935): Flaky on Linux dbg. |
436 #if defined(OS_LINUX) && !defined(NDEBUG) | 464 #if defined(OS_LINUX) && !defined(NDEBUG) |
437 #define MAYBE_BadXhtml DISABLED_BadXhtml | 465 #define MAYBE_BadXhtml DISABLED_BadXhtml |
438 #else | 466 #else |
439 #define MAYBE_BadXhtml BadXhtml | 467 #define MAYBE_BadXhtml BadXhtml |
440 #endif | 468 #endif |
441 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, MAYBE_BadXhtml) { | 469 IN_PROC_BROWSER_TEST_F(PageLoadMetricsMojoficationBrowserTest, MAYBE_BadXhtml) { |
442 ASSERT_TRUE(embedded_test_server()->Start()); | 470 ASSERT_TRUE(embedded_test_server()->Start()); |
443 | 471 |
444 std::unique_ptr<PageLoadMetricsWaiter> timing_waiter = | 472 std::unique_ptr<PageLoadMetricsWaiter> timing_waiter = |
445 CreatePageLoadMetricsWaiter(); | 473 CreatePageLoadMetricsWaiter(); |
446 timing_waiter->AddExpectation(PageLoadMetricsWaiter::FIRST_PAINT); | 474 timing_waiter->AddExpectation(PageLoadMetricsWaiter::FIRST_PAINT); |
447 | 475 |
448 // When an XHTML page contains invalid XML, it causes a paint of the error | 476 // When an XHTML page contains invalid XML, it causes a paint of the error |
449 // message without a layout. Page load metrics currently treats this as an | 477 // message without a layout. Page load metrics currently treats this as an |
450 // error. Eventually, we'll fix this by special casing the handling of | 478 // error. Eventually, we'll fix this by special casing the handling of |
451 // documents with non-well-formed XML on the blink side. See crbug.com/627607 | 479 // documents with non-well-formed XML on the blink side. See crbug.com/627607 |
(...skipping 15 matching lines...) Expand all Loading... | |
467 histogram_tester_.ExpectTotalCount( | 495 histogram_tester_.ExpectTotalCount( |
468 page_load_metrics::internal::kPageLoadTimingStatus, 1); | 496 page_load_metrics::internal::kPageLoadTimingStatus, 1); |
469 histogram_tester_.ExpectBucketCount( | 497 histogram_tester_.ExpectBucketCount( |
470 page_load_metrics::internal::kPageLoadTimingStatus, | 498 page_load_metrics::internal::kPageLoadTimingStatus, |
471 page_load_metrics::internal::INVALID_ORDER_FIRST_LAYOUT_FIRST_PAINT, 1); | 499 page_load_metrics::internal::INVALID_ORDER_FIRST_LAYOUT_FIRST_PAINT, 1); |
472 } | 500 } |
473 | 501 |
474 // Test code that aborts provisional navigations. | 502 // Test code that aborts provisional navigations. |
475 // TODO(csharrison): Move these to unit tests once the navigation API in content | 503 // TODO(csharrison): Move these to unit tests once the navigation API in content |
476 // properly calls NavigationHandle/NavigationThrottle methods. | 504 // properly calls NavigationHandle/NavigationThrottle methods. |
477 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, AbortNewNavigation) { | 505 IN_PROC_BROWSER_TEST_F(PageLoadMetricsMojoficationBrowserTest, |
506 AbortNewNavigation) { | |
478 ASSERT_TRUE(embedded_test_server()->Start()); | 507 ASSERT_TRUE(embedded_test_server()->Start()); |
479 | 508 |
480 GURL url(embedded_test_server()->GetURL("/title1.html")); | 509 GURL url(embedded_test_server()->GetURL("/title1.html")); |
481 chrome::NavigateParams params(browser(), url, ui::PAGE_TRANSITION_LINK); | 510 chrome::NavigateParams params(browser(), url, ui::PAGE_TRANSITION_LINK); |
482 content::TestNavigationManager manager( | 511 content::TestNavigationManager manager( |
483 browser()->tab_strip_model()->GetActiveWebContents(), url); | 512 browser()->tab_strip_model()->GetActiveWebContents(), url); |
484 | 513 |
485 chrome::Navigate(¶ms); | 514 chrome::Navigate(¶ms); |
486 EXPECT_TRUE(manager.WaitForRequestStart()); | 515 EXPECT_TRUE(manager.WaitForRequestStart()); |
487 | 516 |
488 GURL url2(embedded_test_server()->GetURL("/title2.html")); | 517 GURL url2(embedded_test_server()->GetURL("/title2.html")); |
489 chrome::NavigateParams params2(browser(), url2, | 518 chrome::NavigateParams params2(browser(), url2, |
490 ui::PAGE_TRANSITION_FROM_ADDRESS_BAR); | 519 ui::PAGE_TRANSITION_FROM_ADDRESS_BAR); |
491 content::TestNavigationManager manager2( | 520 content::TestNavigationManager manager2( |
492 browser()->tab_strip_model()->GetActiveWebContents(), url2); | 521 browser()->tab_strip_model()->GetActiveWebContents(), url2); |
493 chrome::Navigate(¶ms2); | 522 chrome::Navigate(¶ms2); |
494 | 523 |
495 manager2.WaitForNavigationFinished(); | 524 manager2.WaitForNavigationFinished(); |
496 histogram_tester_.ExpectTotalCount( | 525 histogram_tester_.ExpectTotalCount( |
497 internal::kHistogramAbortNewNavigationBeforeCommit, 1); | 526 internal::kHistogramAbortNewNavigationBeforeCommit, 1); |
498 } | 527 } |
499 | 528 |
500 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, AbortReload) { | 529 IN_PROC_BROWSER_TEST_F(PageLoadMetricsMojoficationBrowserTest, AbortReload) { |
501 ASSERT_TRUE(embedded_test_server()->Start()); | 530 ASSERT_TRUE(embedded_test_server()->Start()); |
502 | 531 |
503 GURL url(embedded_test_server()->GetURL("/title1.html")); | 532 GURL url(embedded_test_server()->GetURL("/title1.html")); |
504 chrome::NavigateParams params(browser(), url, ui::PAGE_TRANSITION_LINK); | 533 chrome::NavigateParams params(browser(), url, ui::PAGE_TRANSITION_LINK); |
505 content::TestNavigationManager manager( | 534 content::TestNavigationManager manager( |
506 browser()->tab_strip_model()->GetActiveWebContents(), url); | 535 browser()->tab_strip_model()->GetActiveWebContents(), url); |
507 | 536 |
508 chrome::Navigate(¶ms); | 537 chrome::Navigate(¶ms); |
509 EXPECT_TRUE(manager.WaitForRequestStart()); | 538 EXPECT_TRUE(manager.WaitForRequestStart()); |
510 | 539 |
511 chrome::NavigateParams params2(browser(), url, ui::PAGE_TRANSITION_RELOAD); | 540 chrome::NavigateParams params2(browser(), url, ui::PAGE_TRANSITION_RELOAD); |
512 content::TestNavigationManager manager2( | 541 content::TestNavigationManager manager2( |
513 browser()->tab_strip_model()->GetActiveWebContents(), url); | 542 browser()->tab_strip_model()->GetActiveWebContents(), url); |
514 chrome::Navigate(¶ms2); | 543 chrome::Navigate(¶ms2); |
515 | 544 |
516 manager2.WaitForNavigationFinished(); | 545 manager2.WaitForNavigationFinished(); |
517 histogram_tester_.ExpectTotalCount( | 546 histogram_tester_.ExpectTotalCount( |
518 internal::kHistogramAbortReloadBeforeCommit, 1); | 547 internal::kHistogramAbortReloadBeforeCommit, 1); |
519 } | 548 } |
520 | 549 |
521 // TODO(crbug.com/675061): Flaky on Win7 dbg. | 550 // TODO(crbug.com/675061): Flaky on Win7 dbg. |
522 #if defined(OS_WIN) | 551 #if defined(OS_WIN) |
523 #define MAYBE_AbortClose DISABLED_AbortClose | 552 #define MAYBE_AbortClose DISABLED_AbortClose |
524 #else | 553 #else |
525 #define MAYBE_AbortClose AbortClose | 554 #define MAYBE_AbortClose AbortClose |
526 #endif | 555 #endif |
527 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, MAYBE_AbortClose) { | 556 IN_PROC_BROWSER_TEST_F(PageLoadMetricsMojoficationBrowserTest, |
557 MAYBE_AbortClose) { | |
528 ASSERT_TRUE(embedded_test_server()->Start()); | 558 ASSERT_TRUE(embedded_test_server()->Start()); |
529 | 559 |
530 GURL url(embedded_test_server()->GetURL("/title1.html")); | 560 GURL url(embedded_test_server()->GetURL("/title1.html")); |
531 chrome::NavigateParams params(browser(), url, ui::PAGE_TRANSITION_LINK); | 561 chrome::NavigateParams params(browser(), url, ui::PAGE_TRANSITION_LINK); |
532 content::TestNavigationManager manager( | 562 content::TestNavigationManager manager( |
533 browser()->tab_strip_model()->GetActiveWebContents(), url); | 563 browser()->tab_strip_model()->GetActiveWebContents(), url); |
534 | 564 |
535 chrome::Navigate(¶ms); | 565 chrome::Navigate(¶ms); |
536 EXPECT_TRUE(manager.WaitForRequestStart()); | 566 EXPECT_TRUE(manager.WaitForRequestStart()); |
537 | 567 |
538 browser()->tab_strip_model()->GetActiveWebContents()->Close(); | 568 browser()->tab_strip_model()->GetActiveWebContents()->Close(); |
539 | 569 |
540 manager.WaitForNavigationFinished(); | 570 manager.WaitForNavigationFinished(); |
541 | 571 |
542 histogram_tester_.ExpectTotalCount(internal::kHistogramAbortCloseBeforeCommit, | 572 histogram_tester_.ExpectTotalCount(internal::kHistogramAbortCloseBeforeCommit, |
543 1); | 573 1); |
544 } | 574 } |
545 | 575 |
546 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, AbortMultiple) { | 576 IN_PROC_BROWSER_TEST_F(PageLoadMetricsMojoficationBrowserTest, AbortMultiple) { |
547 ASSERT_TRUE(embedded_test_server()->Start()); | 577 ASSERT_TRUE(embedded_test_server()->Start()); |
548 | 578 |
549 GURL url(embedded_test_server()->GetURL("/title1.html")); | 579 GURL url(embedded_test_server()->GetURL("/title1.html")); |
550 chrome::NavigateParams params(browser(), url, ui::PAGE_TRANSITION_LINK); | 580 chrome::NavigateParams params(browser(), url, ui::PAGE_TRANSITION_LINK); |
551 content::TestNavigationManager manager( | 581 content::TestNavigationManager manager( |
552 browser()->tab_strip_model()->GetActiveWebContents(), url); | 582 browser()->tab_strip_model()->GetActiveWebContents(), url); |
553 | 583 |
554 chrome::Navigate(¶ms); | 584 chrome::Navigate(¶ms); |
555 EXPECT_TRUE(manager.WaitForRequestStart()); | 585 EXPECT_TRUE(manager.WaitForRequestStart()); |
556 | 586 |
(...skipping 14 matching lines...) Expand all Loading... | |
571 | 601 |
572 EXPECT_TRUE(manager3.WaitForRequestStart()); | 602 EXPECT_TRUE(manager3.WaitForRequestStart()); |
573 manager2.WaitForNavigationFinished(); | 603 manager2.WaitForNavigationFinished(); |
574 | 604 |
575 manager3.WaitForNavigationFinished(); | 605 manager3.WaitForNavigationFinished(); |
576 | 606 |
577 histogram_tester_.ExpectTotalCount( | 607 histogram_tester_.ExpectTotalCount( |
578 internal::kHistogramAbortNewNavigationBeforeCommit, 2); | 608 internal::kHistogramAbortNewNavigationBeforeCommit, 2); |
579 } | 609 } |
580 | 610 |
581 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, | 611 IN_PROC_BROWSER_TEST_F(PageLoadMetricsMojoficationBrowserTest, |
582 NoAbortMetricsOnClientRedirect) { | 612 NoAbortMetricsOnClientRedirect) { |
583 ASSERT_TRUE(embedded_test_server()->Start()); | 613 ASSERT_TRUE(embedded_test_server()->Start()); |
584 | 614 |
585 GURL first_url(embedded_test_server()->GetURL("/title1.html")); | 615 GURL first_url(embedded_test_server()->GetURL("/title1.html")); |
586 ui_test_utils::NavigateToURL(browser(), first_url); | 616 ui_test_utils::NavigateToURL(browser(), first_url); |
587 | 617 |
588 GURL second_url(embedded_test_server()->GetURL("/title2.html")); | 618 GURL second_url(embedded_test_server()->GetURL("/title2.html")); |
589 chrome::NavigateParams params(browser(), second_url, | 619 chrome::NavigateParams params(browser(), second_url, |
590 ui::PAGE_TRANSITION_LINK); | 620 ui::PAGE_TRANSITION_LINK); |
591 content::TestNavigationManager manager( | 621 content::TestNavigationManager manager( |
592 browser()->tab_strip_model()->GetActiveWebContents(), second_url); | 622 browser()->tab_strip_model()->GetActiveWebContents(), second_url); |
593 chrome::Navigate(¶ms); | 623 chrome::Navigate(¶ms); |
594 EXPECT_TRUE(manager.WaitForRequestStart()); | 624 EXPECT_TRUE(manager.WaitForRequestStart()); |
595 | 625 |
596 { | 626 { |
597 content::TestNavigationManager reload_manager( | 627 content::TestNavigationManager reload_manager( |
598 browser()->tab_strip_model()->GetActiveWebContents(), first_url); | 628 browser()->tab_strip_model()->GetActiveWebContents(), first_url); |
599 EXPECT_TRUE(content::ExecuteScript( | 629 EXPECT_TRUE(content::ExecuteScript( |
600 browser()->tab_strip_model()->GetActiveWebContents(), | 630 browser()->tab_strip_model()->GetActiveWebContents(), |
601 "window.location.reload();")); | 631 "window.location.reload();")); |
602 } | 632 } |
603 | 633 |
604 manager.WaitForNavigationFinished(); | 634 manager.WaitForNavigationFinished(); |
605 | 635 |
606 EXPECT_TRUE(histogram_tester_ | 636 EXPECT_TRUE(histogram_tester_ |
607 .GetTotalCountsForPrefix("PageLoad.Experimental.AbortTiming.") | 637 .GetTotalCountsForPrefix("PageLoad.Experimental.AbortTiming.") |
608 .empty()); | 638 .empty()); |
609 } | 639 } |
610 | 640 |
611 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, | 641 IN_PROC_BROWSER_TEST_F(PageLoadMetricsMojoficationBrowserTest, |
612 FirstMeaningfulPaintRecorded) { | 642 FirstMeaningfulPaintRecorded) { |
613 ASSERT_TRUE(embedded_test_server()->Start()); | 643 ASSERT_TRUE(embedded_test_server()->Start()); |
614 | 644 |
615 ui_test_utils::NavigateToURL(browser(), | 645 ui_test_utils::NavigateToURL(browser(), |
616 embedded_test_server()->GetURL("/title1.html")); | 646 embedded_test_server()->GetURL("/title1.html")); |
617 | 647 |
618 // Wait until the renderer finishes observing layouts. | 648 // Wait until the renderer finishes observing layouts. |
619 const int kNetworkIdleTime = 3000; | 649 const int kNetworkIdleTime = 3000; |
620 const int kMargin = 500; | 650 const int kMargin = 500; |
621 const std::string javascript = base::StringPrintf( | 651 const std::string javascript = base::StringPrintf( |
622 "setTimeout(() => window.domAutomationController.send(true), %d)", | 652 "setTimeout(() => window.domAutomationController.send(true), %d)", |
623 kNetworkIdleTime + kMargin); | 653 kNetworkIdleTime + kMargin); |
624 bool result; | 654 bool result; |
625 EXPECT_TRUE(content::ExecuteScriptAndExtractBool( | 655 EXPECT_TRUE(content::ExecuteScriptAndExtractBool( |
626 browser()->tab_strip_model()->GetActiveWebContents(), | 656 browser()->tab_strip_model()->GetActiveWebContents(), javascript, |
627 javascript, &result)); | 657 &result)); |
628 EXPECT_TRUE(result); | 658 EXPECT_TRUE(result); |
629 | 659 |
630 NavigateToUntrackedUrl(); | 660 NavigateToUntrackedUrl(); |
631 histogram_tester_.ExpectUniqueSample( | 661 histogram_tester_.ExpectUniqueSample( |
632 internal::kHistogramFirstMeaningfulPaintStatus, | 662 internal::kHistogramFirstMeaningfulPaintStatus, |
633 internal::FIRST_MEANINGFUL_PAINT_RECORDED, 1); | 663 internal::FIRST_MEANINGFUL_PAINT_RECORDED, 1); |
634 histogram_tester_.ExpectTotalCount( | 664 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstMeaningfulPaint, |
635 internal::kHistogramFirstMeaningfulPaint, 1); | 665 1); |
636 histogram_tester_.ExpectTotalCount( | 666 histogram_tester_.ExpectTotalCount( |
637 internal::kHistogramParseStartToFirstMeaningfulPaint, 1); | 667 internal::kHistogramParseStartToFirstMeaningfulPaint, 1); |
638 } | 668 } |
639 | 669 |
640 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, | 670 IN_PROC_BROWSER_TEST_F(PageLoadMetricsMojoficationBrowserTest, |
641 FirstMeaningfulPaintNotRecorded) { | 671 FirstMeaningfulPaintNotRecorded) { |
642 ASSERT_TRUE(embedded_test_server()->Start()); | 672 ASSERT_TRUE(embedded_test_server()->Start()); |
643 | 673 |
644 std::unique_ptr<PageLoadMetricsWaiter> fcp_waiter = | 674 std::unique_ptr<PageLoadMetricsWaiter> fcp_waiter = |
645 CreatePageLoadMetricsWaiter(); | 675 CreatePageLoadMetricsWaiter(); |
646 fcp_waiter->AddExpectation(PageLoadMetricsWaiter::FIRST_CONTENTFUL_PAINT); | 676 fcp_waiter->AddExpectation(PageLoadMetricsWaiter::FIRST_CONTENTFUL_PAINT); |
647 | 677 |
648 ui_test_utils::NavigateToURL( | 678 ui_test_utils::NavigateToURL( |
649 browser(), embedded_test_server()->GetURL( | 679 browser(), embedded_test_server()->GetURL( |
650 "/page_load_metrics/page_with_active_connections.html")); | 680 "/page_load_metrics/page_with_active_connections.html")); |
651 fcp_waiter->Wait(); | 681 fcp_waiter->Wait(); |
652 | 682 |
653 // Navigate away before a FMP is reported. | 683 // Navigate away before a FMP is reported. |
654 NavigateToUntrackedUrl(); | 684 NavigateToUntrackedUrl(); |
655 | 685 |
656 histogram_tester_.ExpectUniqueSample( | 686 histogram_tester_.ExpectUniqueSample( |
657 internal::kHistogramFirstMeaningfulPaintStatus, | 687 internal::kHistogramFirstMeaningfulPaintStatus, |
658 internal::FIRST_MEANINGFUL_PAINT_DID_NOT_REACH_NETWORK_STABLE, 1); | 688 internal::FIRST_MEANINGFUL_PAINT_DID_NOT_REACH_NETWORK_STABLE, 1); |
659 histogram_tester_.ExpectTotalCount( | 689 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstMeaningfulPaint, |
660 internal::kHistogramFirstMeaningfulPaint, 0); | 690 0); |
661 histogram_tester_.ExpectTotalCount( | 691 histogram_tester_.ExpectTotalCount( |
662 internal::kHistogramParseStartToFirstMeaningfulPaint, 0); | 692 internal::kHistogramParseStartToFirstMeaningfulPaint, 0); |
663 } | 693 } |
664 | 694 |
665 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, | 695 IN_PROC_BROWSER_TEST_F(PageLoadMetricsMojoficationBrowserTest, |
666 NoStatePrefetchObserverCacheable) { | 696 NoStatePrefetchObserverCacheable) { |
667 ASSERT_TRUE(embedded_test_server()->Start()); | 697 ASSERT_TRUE(embedded_test_server()->Start()); |
668 | 698 |
669 std::unique_ptr<PageLoadMetricsWaiter> fcp_waiter = | 699 std::unique_ptr<PageLoadMetricsWaiter> fcp_waiter = |
670 CreatePageLoadMetricsWaiter(); | 700 CreatePageLoadMetricsWaiter(); |
671 fcp_waiter->AddExpectation(PageLoadMetricsWaiter::FIRST_CONTENTFUL_PAINT); | 701 fcp_waiter->AddExpectation(PageLoadMetricsWaiter::FIRST_CONTENTFUL_PAINT); |
672 | 702 |
673 ui_test_utils::NavigateToURL(browser(), | 703 ui_test_utils::NavigateToURL(browser(), |
674 embedded_test_server()->GetURL("/title1.html")); | 704 embedded_test_server()->GetURL("/title1.html")); |
675 | 705 |
676 fcp_waiter->Wait(); | 706 fcp_waiter->Wait(); |
677 | 707 |
678 histogram_tester_.ExpectTotalCount( | 708 histogram_tester_.ExpectTotalCount( |
679 "Prerender.none_PrefetchTTFCP.Reference.NoStore.Visible", 0); | 709 "Prerender.none_PrefetchTTFCP.Reference.NoStore.Visible", 0); |
680 histogram_tester_.ExpectTotalCount( | 710 histogram_tester_.ExpectTotalCount( |
681 "Prerender.none_PrefetchTTFCP.Reference.Cacheable.Visible", 1); | 711 "Prerender.none_PrefetchTTFCP.Reference.Cacheable.Visible", 1); |
682 } | 712 } |
683 | 713 |
684 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, | 714 IN_PROC_BROWSER_TEST_F(PageLoadMetricsMojoficationBrowserTest, |
685 NoStatePrefetchObserverNoStore) { | 715 NoStatePrefetchObserverNoStore) { |
686 ASSERT_TRUE(embedded_test_server()->Start()); | 716 ASSERT_TRUE(embedded_test_server()->Start()); |
687 | 717 |
688 std::unique_ptr<PageLoadMetricsWaiter> fcp_waiter = | 718 std::unique_ptr<PageLoadMetricsWaiter> fcp_waiter = |
689 CreatePageLoadMetricsWaiter(); | 719 CreatePageLoadMetricsWaiter(); |
690 fcp_waiter->AddExpectation(PageLoadMetricsWaiter::FIRST_CONTENTFUL_PAINT); | 720 fcp_waiter->AddExpectation(PageLoadMetricsWaiter::FIRST_CONTENTFUL_PAINT); |
691 | 721 |
692 ui_test_utils::NavigateToURL(browser(), | 722 ui_test_utils::NavigateToURL(browser(), |
693 embedded_test_server()->GetURL("/nostore.html")); | 723 embedded_test_server()->GetURL("/nostore.html")); |
694 | 724 |
695 fcp_waiter->Wait(); | 725 fcp_waiter->Wait(); |
696 | 726 |
697 histogram_tester_.ExpectTotalCount( | 727 histogram_tester_.ExpectTotalCount( |
698 "Prerender.none_PrefetchTTFCP.Reference.NoStore.Visible", 1); | 728 "Prerender.none_PrefetchTTFCP.Reference.NoStore.Visible", 1); |
699 histogram_tester_.ExpectTotalCount( | 729 histogram_tester_.ExpectTotalCount( |
700 "Prerender.none_PrefetchTTFCP.Reference.Cacheable.Visible", 0); | 730 "Prerender.none_PrefetchTTFCP.Reference.Cacheable.Visible", 0); |
701 } | 731 } |
702 | 732 |
703 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, CSSTiming) { | 733 IN_PROC_BROWSER_TEST_F(PageLoadMetricsMojoficationBrowserTest, CSSTiming) { |
704 ASSERT_TRUE(embedded_test_server()->Start()); | 734 ASSERT_TRUE(embedded_test_server()->Start()); |
705 | 735 |
706 std::unique_ptr<PageLoadMetricsWaiter> fcp_waiter = | 736 std::unique_ptr<PageLoadMetricsWaiter> fcp_waiter = |
707 CreatePageLoadMetricsWaiter(); | 737 CreatePageLoadMetricsWaiter(); |
708 fcp_waiter->AddExpectation(PageLoadMetricsWaiter::STYLE_UPDATE_BEFORE_FCP); | 738 fcp_waiter->AddExpectation(PageLoadMetricsWaiter::STYLE_UPDATE_BEFORE_FCP); |
709 | 739 |
710 // Careful: Blink code clamps timestamps to 5us, so any CSS parsing we do here | 740 // Careful: Blink code clamps timestamps to 5us, so any CSS parsing we do here |
711 // must take >> 5us, otherwise we'll log 0 for the value and it will remain | 741 // must take >> 5us, otherwise we'll log 0 for the value and it will remain |
712 // unset here. | 742 // unset here. |
713 ui_test_utils::NavigateToURL( | 743 ui_test_utils::NavigateToURL( |
714 browser(), | 744 browser(), |
715 embedded_test_server()->GetURL("/page_load_metrics/page_with_css.html")); | 745 embedded_test_server()->GetURL("/page_load_metrics/page_with_css.html")); |
716 NavigateToUntrackedUrl(); | 746 NavigateToUntrackedUrl(); |
717 fcp_waiter->Wait(); | 747 fcp_waiter->Wait(); |
718 | 748 |
719 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstContentfulPaint, | 749 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstContentfulPaint, |
720 1); | 750 1); |
721 histogram_tester_.ExpectTotalCount( | 751 histogram_tester_.ExpectTotalCount( |
722 "PageLoad.CSSTiming.Parse.BeforeFirstContentfulPaint", 1); | 752 "PageLoad.CSSTiming.Parse.BeforeFirstContentfulPaint", 1); |
723 histogram_tester_.ExpectTotalCount( | 753 histogram_tester_.ExpectTotalCount( |
724 "PageLoad.CSSTiming.Update.BeforeFirstContentfulPaint", 1); | 754 "PageLoad.CSSTiming.Update.BeforeFirstContentfulPaint", 1); |
725 histogram_tester_.ExpectTotalCount( | 755 histogram_tester_.ExpectTotalCount( |
726 "PageLoad.CSSTiming.ParseAndUpdate.BeforeFirstContentfulPaint", 1); | 756 "PageLoad.CSSTiming.ParseAndUpdate.BeforeFirstContentfulPaint", 1); |
727 } | 757 } |
728 | 758 |
729 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, PayloadSize) { | 759 IN_PROC_BROWSER_TEST_F(PageLoadMetricsMojoficationBrowserTest, PayloadSize) { |
730 ASSERT_TRUE(embedded_test_server()->Start()); | 760 ASSERT_TRUE(embedded_test_server()->Start()); |
731 | 761 |
732 ui_test_utils::NavigateToURL(browser(), embedded_test_server()->GetURL( | 762 ui_test_utils::NavigateToURL(browser(), embedded_test_server()->GetURL( |
733 "/page_load_metrics/large.html")); | 763 "/page_load_metrics/large.html")); |
734 NavigateToUntrackedUrl(); | 764 NavigateToUntrackedUrl(); |
735 | 765 |
736 histogram_tester_.ExpectTotalCount(internal::kHistogramTotalBytes, 1); | 766 histogram_tester_.ExpectTotalCount(internal::kHistogramTotalBytes, 1); |
737 | 767 |
738 // Verify that there is a single sample recorded in the 10kB bucket (the size | 768 // Verify that there is a single sample recorded in the 10kB bucket (the size |
739 // of the main HTML response). | 769 // of the main HTML response). |
740 histogram_tester_.ExpectBucketCount(internal::kHistogramTotalBytes, 10, 1); | 770 histogram_tester_.ExpectBucketCount(internal::kHistogramTotalBytes, 10, 1); |
741 } | 771 } |
OLD | NEW |