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

Side by Side Diff: chrome/browser/page_load_metrics/page_load_metrics_mojofication_browsertest.cc

Issue 2823523003: [Page Load Metrics] PageLoadMetrics Mojofication. (Closed)
Patch Set: Add unit test for page_load_metrics_struct_traits Created 3 years, 7 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
OLDNEW
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
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
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
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(&params); 514 chrome::Navigate(&params);
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(&params2); 522 chrome::Navigate(&params2);
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(&params); 537 chrome::Navigate(&params);
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(&params2); 543 chrome::Navigate(&params2);
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(&params); 565 chrome::Navigate(&params);
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(&params); 584 chrome::Navigate(&params);
555 EXPECT_TRUE(manager.WaitForRequestStart()); 585 EXPECT_TRUE(manager.WaitForRequestStart());
556 586
(...skipping 14 matching lines...) Expand all
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(&params); 623 chrome::Navigate(&params);
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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698