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

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: rebase 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/threading/thread_restrictions.h" 8 #include "base/threading/thread_restrictions.h"
9 #include "base/test/scoped_feature_list.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 }
145
124 void NavigateToUntrackedUrl() { 146 void NavigateToUntrackedUrl() {
125 ui_test_utils::NavigateToURL(browser(), GURL(url::kAboutBlankURL)); 147 ui_test_utils::NavigateToURL(browser(), GURL(url::kAboutBlankURL));
126 } 148 }
127 149
128 bool NoPageLoadMetricsRecorded() { 150 bool NoPageLoadMetricsRecorded() {
129 // Determine whether any 'public' page load metrics are recorded. We exclude 151 // Determine whether any 'public' page load metrics are recorded. We exclude
130 // 'internal' metrics as these may be recorded for debugging purposes. 152 // 'internal' metrics as these may be recorded for debugging purposes.
131 size_t total_pageload_histograms = 153 size_t total_pageload_histograms =
132 histogram_tester_.GetTotalCountsForPrefix("PageLoad.").size(); 154 histogram_tester_.GetTotalCountsForPrefix("PageLoad.").size();
133 size_t total_internal_histograms = 155 size_t total_internal_histograms =
134 histogram_tester_.GetTotalCountsForPrefix("PageLoad.Internal.").size(); 156 histogram_tester_.GetTotalCountsForPrefix("PageLoad.Internal.").size();
135 DCHECK_GE(total_pageload_histograms, total_internal_histograms); 157 DCHECK_GE(total_pageload_histograms, total_internal_histograms);
136 return total_pageload_histograms - total_internal_histograms == 0; 158 return total_pageload_histograms - total_internal_histograms == 0;
137 } 159 }
138 160
139 std::unique_ptr<PageLoadMetricsWaiter> CreatePageLoadMetricsWaiter() { 161 std::unique_ptr<PageLoadMetricsWaiter> CreatePageLoadMetricsWaiter() {
140 content::WebContents* web_contents = 162 content::WebContents* web_contents =
141 browser()->tab_strip_model()->GetActiveWebContents(); 163 browser()->tab_strip_model()->GetActiveWebContents();
142 return base::MakeUnique<PageLoadMetricsWaiter>(web_contents); 164 return base::MakeUnique<PageLoadMetricsWaiter>(web_contents);
143 } 165 }
144 166
167 base::test::ScopedFeatureList scoped_feature_list_;
145 base::HistogramTester histogram_tester_; 168 base::HistogramTester histogram_tester_;
146 169
147 private: 170 private:
148 DISALLOW_COPY_AND_ASSIGN(PageLoadMetricsBrowserTest); 171 DISALLOW_COPY_AND_ASSIGN(PageLoadMetricsMojoficationBrowserTest);
149 }; 172 };
150 173
151 void FailAllNetworkTransactions(net::URLRequestContextGetter* getter) { 174 IN_PROC_BROWSER_TEST_F(PageLoadMetricsMojoficationBrowserTest, NoNavigation) {
152 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); 175 ASSERT_TRUE(
Bryan McQuade 2017/05/03 19:03:05 i think you can get rid of these assertions in eac
lpy 2017/05/05 17:49:30 Done.
153 net::HttpCache* cache( 176 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()); 177 ASSERT_TRUE(embedded_test_server()->Start());
166 EXPECT_TRUE(NoPageLoadMetricsRecorded()); 178 EXPECT_TRUE(NoPageLoadMetricsRecorded());
167 } 179 }
168 180
169 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, NewPage) { 181 IN_PROC_BROWSER_TEST_F(PageLoadMetricsMojoficationBrowserTest, NewPage) {
182 ASSERT_TRUE(
183 base::FeatureList::IsEnabled(features::kPageLoadMetricsMojofication));
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) {
209 ASSERT_TRUE(
210 base::FeatureList::IsEnabled(features::kPageLoadMetricsMojofication));
194 ASSERT_TRUE(embedded_test_server()->Start()); 211 ASSERT_TRUE(embedded_test_server()->Start());
195 212
196 ui_test_utils::NavigateToURL(browser(), 213 ui_test_utils::NavigateToURL(browser(),
197 embedded_test_server()->GetURL("/title1.html")); 214 embedded_test_server()->GetURL("/title1.html"));
198 ui_test_utils::NavigateToURL( 215 ui_test_utils::NavigateToURL(
199 browser(), embedded_test_server()->GetURL("/title1.html#hash")); 216 browser(), embedded_test_server()->GetURL("/title1.html#hash"));
200 NavigateToUntrackedUrl(); 217 NavigateToUntrackedUrl();
201 218
202 histogram_tester_.ExpectTotalCount(internal::kHistogramDomContentLoaded, 1); 219 histogram_tester_.ExpectTotalCount(internal::kHistogramDomContentLoaded, 1);
203 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 1); 220 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 1);
204 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 1); 221 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 1);
205 } 222 }
206 223
207 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, SameUrlNavigation) { 224 IN_PROC_BROWSER_TEST_F(PageLoadMetricsMojoficationBrowserTest,
225 SameUrlNavigation) {
226 ASSERT_TRUE(
227 base::FeatureList::IsEnabled(features::kPageLoadMetricsMojofication));
208 ASSERT_TRUE(embedded_test_server()->Start()); 228 ASSERT_TRUE(embedded_test_server()->Start());
209 229
210 ui_test_utils::NavigateToURL(browser(), 230 ui_test_utils::NavigateToURL(browser(),
211 embedded_test_server()->GetURL("/title1.html")); 231 embedded_test_server()->GetURL("/title1.html"));
212 ui_test_utils::NavigateToURL(browser(), 232 ui_test_utils::NavigateToURL(browser(),
213 embedded_test_server()->GetURL("/title1.html")); 233 embedded_test_server()->GetURL("/title1.html"));
214 NavigateToUntrackedUrl(); 234 NavigateToUntrackedUrl();
215 235
216 // We expect one histogram sample for each navigation to title1.html. 236 // We expect one histogram sample for each navigation to title1.html.
217 histogram_tester_.ExpectTotalCount(internal::kHistogramDomContentLoaded, 2); 237 histogram_tester_.ExpectTotalCount(internal::kHistogramDomContentLoaded, 2);
218 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 2); 238 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 2);
219 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 2); 239 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 2);
220 } 240 }
221 241
222 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, NonHtmlMainResource) { 242 IN_PROC_BROWSER_TEST_F(PageLoadMetricsMojoficationBrowserTest,
243 NonHtmlMainResource) {
244 ASSERT_TRUE(
245 base::FeatureList::IsEnabled(features::kPageLoadMetricsMojofication));
223 ASSERT_TRUE(embedded_test_server()->Start()); 246 ASSERT_TRUE(embedded_test_server()->Start());
224 247
225 ui_test_utils::NavigateToURL(browser(), 248 ui_test_utils::NavigateToURL(browser(),
226 embedded_test_server()->GetURL("/circle.svg")); 249 embedded_test_server()->GetURL("/circle.svg"));
227 NavigateToUntrackedUrl(); 250 NavigateToUntrackedUrl();
228 EXPECT_TRUE(NoPageLoadMetricsRecorded()); 251 EXPECT_TRUE(NoPageLoadMetricsRecorded());
229 } 252 }
230 253
231 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, NonHttpOrHttpsUrl) { 254 IN_PROC_BROWSER_TEST_F(PageLoadMetricsMojoficationBrowserTest,
255 NonHttpOrHttpsUrl) {
256 ASSERT_TRUE(
257 base::FeatureList::IsEnabled(features::kPageLoadMetricsMojofication));
232 ASSERT_TRUE(embedded_test_server()->Start()); 258 ASSERT_TRUE(embedded_test_server()->Start());
233 259
234 ui_test_utils::NavigateToURL(browser(), GURL(chrome::kChromeUIVersionURL)); 260 ui_test_utils::NavigateToURL(browser(), GURL(chrome::kChromeUIVersionURL));
235 NavigateToUntrackedUrl(); 261 NavigateToUntrackedUrl();
236 EXPECT_TRUE(NoPageLoadMetricsRecorded()); 262 EXPECT_TRUE(NoPageLoadMetricsRecorded());
237 } 263 }
238 264
239 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, HttpErrorPage) { 265 IN_PROC_BROWSER_TEST_F(PageLoadMetricsMojoficationBrowserTest, HttpErrorPage) {
266 ASSERT_TRUE(
267 base::FeatureList::IsEnabled(features::kPageLoadMetricsMojofication));
240 ASSERT_TRUE(embedded_test_server()->Start()); 268 ASSERT_TRUE(embedded_test_server()->Start());
241 269
242 ui_test_utils::NavigateToURL( 270 ui_test_utils::NavigateToURL(
243 browser(), embedded_test_server()->GetURL("/page_load_metrics/404.html")); 271 browser(), embedded_test_server()->GetURL("/page_load_metrics/404.html"));
244 NavigateToUntrackedUrl(); 272 NavigateToUntrackedUrl();
245 EXPECT_TRUE(NoPageLoadMetricsRecorded()); 273 EXPECT_TRUE(NoPageLoadMetricsRecorded());
246 } 274 }
247 275
248 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, ChromeErrorPage) { 276 IN_PROC_BROWSER_TEST_F(PageLoadMetricsMojoficationBrowserTest,
277 ChromeErrorPage) {
278 ASSERT_TRUE(
279 base::FeatureList::IsEnabled(features::kPageLoadMetricsMojofication));
249 ASSERT_TRUE(embedded_test_server()->Start()); 280 ASSERT_TRUE(embedded_test_server()->Start());
250 281
251 // Configure the network stack to fail all attempted loads with a network 282 // Configure the network stack to fail all attempted loads with a network
252 // error, which will cause Chrome to display an error page. 283 // error, which will cause Chrome to display an error page.
253 scoped_refptr<net::URLRequestContextGetter> url_request_context_getter = 284 scoped_refptr<net::URLRequestContextGetter> url_request_context_getter =
254 browser()->profile()->GetRequestContext(); 285 browser()->profile()->GetRequestContext();
255 content::BrowserThread::PostTask( 286 content::BrowserThread::PostTask(
256 content::BrowserThread::IO, FROM_HERE, 287 content::BrowserThread::IO, FROM_HERE,
257 base::BindOnce(&FailAllNetworkTransactions, 288 base::BindOnce(&FailAllNetworkTransactions,
258 base::RetainedRef(url_request_context_getter))); 289 base::RetainedRef(url_request_context_getter)));
259 290
260 ui_test_utils::NavigateToURL(browser(), 291 ui_test_utils::NavigateToURL(browser(),
261 embedded_test_server()->GetURL("/title1.html")); 292 embedded_test_server()->GetURL("/title1.html"));
262 NavigateToUntrackedUrl(); 293 NavigateToUntrackedUrl();
263 EXPECT_TRUE(NoPageLoadMetricsRecorded()); 294 EXPECT_TRUE(NoPageLoadMetricsRecorded());
264 } 295 }
265 296
266 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, Ignore204Pages) { 297 IN_PROC_BROWSER_TEST_F(PageLoadMetricsMojoficationBrowserTest, Ignore204Pages) {
298 ASSERT_TRUE(
299 base::FeatureList::IsEnabled(features::kPageLoadMetricsMojofication));
267 ASSERT_TRUE(embedded_test_server()->Start()); 300 ASSERT_TRUE(embedded_test_server()->Start());
268 301
269 ui_test_utils::NavigateToURL(browser(), 302 ui_test_utils::NavigateToURL(browser(),
270 embedded_test_server()->GetURL("/page204.html")); 303 embedded_test_server()->GetURL("/page204.html"));
271 NavigateToUntrackedUrl(); 304 NavigateToUntrackedUrl();
272 EXPECT_TRUE(NoPageLoadMetricsRecorded()); 305 EXPECT_TRUE(NoPageLoadMetricsRecorded());
273 } 306 }
274 307
275 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, IgnoreDownloads) { 308 IN_PROC_BROWSER_TEST_F(PageLoadMetricsMojoficationBrowserTest,
309 IgnoreDownloads) {
310 ASSERT_TRUE(
311 base::FeatureList::IsEnabled(features::kPageLoadMetricsMojofication));
276 ASSERT_TRUE(embedded_test_server()->Start()); 312 ASSERT_TRUE(embedded_test_server()->Start());
277 313
278 base::ThreadRestrictions::ScopedAllowIO allow_io; 314 base::ThreadRestrictions::ScopedAllowIO allow_io;
279 base::ScopedTempDir downloads_directory; 315 base::ScopedTempDir downloads_directory;
280 ASSERT_TRUE(downloads_directory.CreateUniqueTempDir()); 316 ASSERT_TRUE(downloads_directory.CreateUniqueTempDir());
281 browser()->profile()->GetPrefs()->SetFilePath( 317 browser()->profile()->GetPrefs()->SetFilePath(
282 prefs::kDownloadDefaultDirectory, downloads_directory.GetPath()); 318 prefs::kDownloadDefaultDirectory, downloads_directory.GetPath());
283 content::DownloadTestObserverTerminal downloads_observer( 319 content::DownloadTestObserverTerminal downloads_observer(
284 content::BrowserContext::GetDownloadManager(browser()->profile()), 320 content::BrowserContext::GetDownloadManager(browser()->profile()),
285 1, // == wait_count (only waiting for "download-test3.gif"). 321 1, // == wait_count (only waiting for "download-test3.gif").
286 content::DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_FAIL); 322 content::DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_FAIL);
287 323
288 ui_test_utils::NavigateToURL( 324 ui_test_utils::NavigateToURL(
289 browser(), embedded_test_server()->GetURL("/download-test3.gif")); 325 browser(), embedded_test_server()->GetURL("/download-test3.gif"));
290 downloads_observer.WaitForFinished(); 326 downloads_observer.WaitForFinished();
291 327
292 NavigateToUntrackedUrl(); 328 NavigateToUntrackedUrl();
293 EXPECT_TRUE(NoPageLoadMetricsRecorded()); 329 EXPECT_TRUE(NoPageLoadMetricsRecorded());
294 } 330 }
295 331
296 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, PreloadDocumentWrite) { 332 IN_PROC_BROWSER_TEST_F(PageLoadMetricsMojoficationBrowserTest,
333 PreloadDocumentWrite) {
334 ASSERT_TRUE(
335 base::FeatureList::IsEnabled(features::kPageLoadMetricsMojofication));
297 ASSERT_TRUE(embedded_test_server()->Start()); 336 ASSERT_TRUE(embedded_test_server()->Start());
298 337
299 std::unique_ptr<PageLoadMetricsWaiter> fcp_waiter = 338 std::unique_ptr<PageLoadMetricsWaiter> fcp_waiter =
300 CreatePageLoadMetricsWaiter(); 339 CreatePageLoadMetricsWaiter();
301 fcp_waiter->AddExpectation(PageLoadMetricsWaiter::FIRST_CONTENTFUL_PAINT); 340 fcp_waiter->AddExpectation(PageLoadMetricsWaiter::FIRST_CONTENTFUL_PAINT);
302 341
303 ui_test_utils::NavigateToURL( 342 ui_test_utils::NavigateToURL(
304 browser(), embedded_test_server()->GetURL( 343 browser(), embedded_test_server()->GetURL(
305 "/page_load_metrics/document_write_external_script.html")); 344 "/page_load_metrics/document_write_external_script.html"));
306 fcp_waiter->Wait(); 345 fcp_waiter->Wait();
307 346
308 histogram_tester_.ExpectTotalCount( 347 histogram_tester_.ExpectTotalCount(
309 internal::kHistogramDocWriteParseStartToFirstContentfulPaint, 1); 348 internal::kHistogramDocWriteParseStartToFirstContentfulPaint, 1);
310 } 349 }
311 350
312 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, NoPreloadDocumentWrite) { 351 IN_PROC_BROWSER_TEST_F(PageLoadMetricsMojoficationBrowserTest,
352 NoPreloadDocumentWrite) {
353 ASSERT_TRUE(
354 base::FeatureList::IsEnabled(features::kPageLoadMetricsMojofication));
313 ASSERT_TRUE(embedded_test_server()->Start()); 355 ASSERT_TRUE(embedded_test_server()->Start());
314 356
315 ui_test_utils::NavigateToURL( 357 ui_test_utils::NavigateToURL(
316 browser(), embedded_test_server()->GetURL( 358 browser(), embedded_test_server()->GetURL(
317 "/page_load_metrics/document_write_no_script.html")); 359 "/page_load_metrics/document_write_no_script.html"));
318 NavigateToUntrackedUrl(); 360 NavigateToUntrackedUrl();
319 361
320 histogram_tester_.ExpectTotalCount( 362 histogram_tester_.ExpectTotalCount(
321 internal::kHistogramDocWriteParseStartToFirstContentfulPaint, 0); 363 internal::kHistogramDocWriteParseStartToFirstContentfulPaint, 0);
322 } 364 }
323 365
324 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, NoDocumentWrite) { 366 IN_PROC_BROWSER_TEST_F(PageLoadMetricsMojoficationBrowserTest,
367 NoDocumentWrite) {
368 ASSERT_TRUE(
369 base::FeatureList::IsEnabled(features::kPageLoadMetricsMojofication));
325 ASSERT_TRUE(embedded_test_server()->Start()); 370 ASSERT_TRUE(embedded_test_server()->Start());
326 371
327 std::unique_ptr<PageLoadMetricsWaiter> fcp_waiter = 372 std::unique_ptr<PageLoadMetricsWaiter> fcp_waiter =
328 CreatePageLoadMetricsWaiter(); 373 CreatePageLoadMetricsWaiter();
329 fcp_waiter->AddExpectation(PageLoadMetricsWaiter::FIRST_CONTENTFUL_PAINT); 374 fcp_waiter->AddExpectation(PageLoadMetricsWaiter::FIRST_CONTENTFUL_PAINT);
330 375
331 ui_test_utils::NavigateToURL(browser(), 376 ui_test_utils::NavigateToURL(browser(),
332 embedded_test_server()->GetURL("/title1.html")); 377 embedded_test_server()->GetURL("/title1.html"));
333 fcp_waiter->Wait(); 378 fcp_waiter->Wait();
334 379
335 histogram_tester_.ExpectTotalCount( 380 histogram_tester_.ExpectTotalCount(
336 internal::kHistogramDocWriteParseStartToFirstContentfulPaint, 0); 381 internal::kHistogramDocWriteParseStartToFirstContentfulPaint, 0);
337 histogram_tester_.ExpectTotalCount( 382 histogram_tester_.ExpectTotalCount(
338 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 0); 383 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 0);
339 histogram_tester_.ExpectTotalCount(internal::kHistogramDocWriteBlockCount, 0); 384 histogram_tester_.ExpectTotalCount(internal::kHistogramDocWriteBlockCount, 0);
340 } 385 }
341 386
342 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, DocumentWriteBlock) { 387 IN_PROC_BROWSER_TEST_F(PageLoadMetricsMojoficationBrowserTest,
388 DocumentWriteBlock) {
389 ASSERT_TRUE(
390 base::FeatureList::IsEnabled(features::kPageLoadMetricsMojofication));
343 ASSERT_TRUE(embedded_test_server()->Start()); 391 ASSERT_TRUE(embedded_test_server()->Start());
344 392
345 std::unique_ptr<PageLoadMetricsWaiter> fcp_waiter = 393 std::unique_ptr<PageLoadMetricsWaiter> fcp_waiter =
346 CreatePageLoadMetricsWaiter(); 394 CreatePageLoadMetricsWaiter();
347 fcp_waiter->AddExpectation(PageLoadMetricsWaiter::FIRST_CONTENTFUL_PAINT); 395 fcp_waiter->AddExpectation(PageLoadMetricsWaiter::FIRST_CONTENTFUL_PAINT);
348 396
349 ui_test_utils::NavigateToURL( 397 ui_test_utils::NavigateToURL(
350 browser(), embedded_test_server()->GetURL( 398 browser(), embedded_test_server()->GetURL(
351 "/page_load_metrics/document_write_script_block.html")); 399 "/page_load_metrics/document_write_script_block.html"));
352 fcp_waiter->Wait(); 400 fcp_waiter->Wait();
353 401
354 histogram_tester_.ExpectTotalCount( 402 histogram_tester_.ExpectTotalCount(
355 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 1); 403 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 1);
356 histogram_tester_.ExpectTotalCount(internal::kHistogramDocWriteBlockCount, 1); 404 histogram_tester_.ExpectTotalCount(internal::kHistogramDocWriteBlockCount, 1);
357 } 405 }
358 406
359 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, DocumentWriteReload) { 407 IN_PROC_BROWSER_TEST_F(PageLoadMetricsMojoficationBrowserTest,
408 DocumentWriteReload) {
409 ASSERT_TRUE(
410 base::FeatureList::IsEnabled(features::kPageLoadMetricsMojofication));
360 ASSERT_TRUE(embedded_test_server()->Start()); 411 ASSERT_TRUE(embedded_test_server()->Start());
361 412
362 std::unique_ptr<PageLoadMetricsWaiter> fcp_waiter = 413 std::unique_ptr<PageLoadMetricsWaiter> fcp_waiter =
363 CreatePageLoadMetricsWaiter(); 414 CreatePageLoadMetricsWaiter();
364 fcp_waiter->AddExpectation(PageLoadMetricsWaiter::FIRST_CONTENTFUL_PAINT); 415 fcp_waiter->AddExpectation(PageLoadMetricsWaiter::FIRST_CONTENTFUL_PAINT);
365 std::unique_ptr<PageLoadMetricsWaiter> reload_waiter = 416 std::unique_ptr<PageLoadMetricsWaiter> reload_waiter =
366 CreatePageLoadMetricsWaiter(); 417 CreatePageLoadMetricsWaiter();
367 reload_waiter->ExpectDocumentWriteBlockReload(2); 418 reload_waiter->ExpectDocumentWriteBlockReload(2);
368 419
369 ui_test_utils::NavigateToURL( 420 ui_test_utils::NavigateToURL(
(...skipping 16 matching lines...) Expand all
386 reload_waiter->Wait(); 437 reload_waiter->Wait();
387 438
388 histogram_tester_.ExpectTotalCount( 439 histogram_tester_.ExpectTotalCount(
389 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 1); 440 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 1);
390 441
391 histogram_tester_.ExpectTotalCount( 442 histogram_tester_.ExpectTotalCount(
392 internal::kHistogramDocWriteBlockReloadCount, 2); 443 internal::kHistogramDocWriteBlockReloadCount, 2);
393 histogram_tester_.ExpectTotalCount(internal::kHistogramDocWriteBlockCount, 1); 444 histogram_tester_.ExpectTotalCount(internal::kHistogramDocWriteBlockCount, 1);
394 } 445 }
395 446
396 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, DocumentWriteAsync) { 447 IN_PROC_BROWSER_TEST_F(PageLoadMetricsMojoficationBrowserTest,
448 DocumentWriteAsync) {
449 ASSERT_TRUE(
450 base::FeatureList::IsEnabled(features::kPageLoadMetricsMojofication));
397 ASSERT_TRUE(embedded_test_server()->Start()); 451 ASSERT_TRUE(embedded_test_server()->Start());
398 452
399 ui_test_utils::NavigateToURL( 453 ui_test_utils::NavigateToURL(
400 browser(), embedded_test_server()->GetURL( 454 browser(), embedded_test_server()->GetURL(
401 "/page_load_metrics/document_write_script_async.html")); 455 "/page_load_metrics/document_write_script_async.html"));
402 NavigateToUntrackedUrl(); 456 NavigateToUntrackedUrl();
403 457
404 histogram_tester_.ExpectTotalCount( 458 histogram_tester_.ExpectTotalCount(
405 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 0); 459 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 0);
406 histogram_tester_.ExpectTotalCount(internal::kHistogramDocWriteBlockCount, 0); 460 histogram_tester_.ExpectTotalCount(internal::kHistogramDocWriteBlockCount, 0);
407 } 461 }
408 462
409 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, DocumentWriteSameDomain) { 463 IN_PROC_BROWSER_TEST_F(PageLoadMetricsMojoficationBrowserTest,
464 DocumentWriteSameDomain) {
465 ASSERT_TRUE(
466 base::FeatureList::IsEnabled(features::kPageLoadMetricsMojofication));
410 ASSERT_TRUE(embedded_test_server()->Start()); 467 ASSERT_TRUE(embedded_test_server()->Start());
411 468
412 ui_test_utils::NavigateToURL( 469 ui_test_utils::NavigateToURL(
413 browser(), embedded_test_server()->GetURL( 470 browser(), embedded_test_server()->GetURL(
414 "/page_load_metrics/document_write_external_script.html")); 471 "/page_load_metrics/document_write_external_script.html"));
415 NavigateToUntrackedUrl(); 472 NavigateToUntrackedUrl();
416 473
417 histogram_tester_.ExpectTotalCount( 474 histogram_tester_.ExpectTotalCount(
418 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 0); 475 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 0);
419 histogram_tester_.ExpectTotalCount(internal::kHistogramDocWriteBlockCount, 0); 476 histogram_tester_.ExpectTotalCount(internal::kHistogramDocWriteBlockCount, 0);
420 } 477 }
421 478
422 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, NoDocumentWriteScript) { 479 IN_PROC_BROWSER_TEST_F(PageLoadMetricsMojoficationBrowserTest,
480 NoDocumentWriteScript) {
481 ASSERT_TRUE(
482 base::FeatureList::IsEnabled(features::kPageLoadMetricsMojofication));
423 ASSERT_TRUE(embedded_test_server()->Start()); 483 ASSERT_TRUE(embedded_test_server()->Start());
424 484
425 ui_test_utils::NavigateToURL( 485 ui_test_utils::NavigateToURL(
426 browser(), embedded_test_server()->GetURL( 486 browser(), embedded_test_server()->GetURL(
427 "/page_load_metrics/document_write_no_script.html")); 487 "/page_load_metrics/document_write_no_script.html"));
428 NavigateToUntrackedUrl(); 488 NavigateToUntrackedUrl();
429 489
430 histogram_tester_.ExpectTotalCount( 490 histogram_tester_.ExpectTotalCount(
431 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 0); 491 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 0);
432 histogram_tester_.ExpectTotalCount(internal::kHistogramDocWriteBlockCount, 0); 492 histogram_tester_.ExpectTotalCount(internal::kHistogramDocWriteBlockCount, 0);
433 } 493 }
434 494
435 // TODO(crbug.com/712935): Flaky on Linux dbg. 495 // TODO(crbug.com/712935): Flaky on Linux dbg.
436 #if defined(OS_LINUX) && !defined(NDEBUG) 496 #if defined(OS_LINUX) && !defined(NDEBUG)
437 #define MAYBE_BadXhtml DISABLED_BadXhtml 497 #define MAYBE_BadXhtml DISABLED_BadXhtml
438 #else 498 #else
439 #define MAYBE_BadXhtml BadXhtml 499 #define MAYBE_BadXhtml BadXhtml
440 #endif 500 #endif
441 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, MAYBE_BadXhtml) { 501 IN_PROC_BROWSER_TEST_F(PageLoadMetricsMojoficationBrowserTest, MAYBE_BadXhtml) {
502 ASSERT_TRUE(
503 base::FeatureList::IsEnabled(features::kPageLoadMetricsMojofication));
442 ASSERT_TRUE(embedded_test_server()->Start()); 504 ASSERT_TRUE(embedded_test_server()->Start());
443 505
444 std::unique_ptr<PageLoadMetricsWaiter> timing_waiter = 506 std::unique_ptr<PageLoadMetricsWaiter> timing_waiter =
445 CreatePageLoadMetricsWaiter(); 507 CreatePageLoadMetricsWaiter();
446 timing_waiter->AddExpectation(PageLoadMetricsWaiter::FIRST_PAINT); 508 timing_waiter->AddExpectation(PageLoadMetricsWaiter::FIRST_PAINT);
447 509
448 // When an XHTML page contains invalid XML, it causes a paint of the error 510 // 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 511 // 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 512 // 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 513 // documents with non-well-formed XML on the blink side. See crbug.com/627607
(...skipping 15 matching lines...) Expand all
467 histogram_tester_.ExpectTotalCount( 529 histogram_tester_.ExpectTotalCount(
468 page_load_metrics::internal::kPageLoadTimingStatus, 1); 530 page_load_metrics::internal::kPageLoadTimingStatus, 1);
469 histogram_tester_.ExpectBucketCount( 531 histogram_tester_.ExpectBucketCount(
470 page_load_metrics::internal::kPageLoadTimingStatus, 532 page_load_metrics::internal::kPageLoadTimingStatus,
471 page_load_metrics::internal::INVALID_ORDER_FIRST_LAYOUT_FIRST_PAINT, 1); 533 page_load_metrics::internal::INVALID_ORDER_FIRST_LAYOUT_FIRST_PAINT, 1);
472 } 534 }
473 535
474 // Test code that aborts provisional navigations. 536 // Test code that aborts provisional navigations.
475 // TODO(csharrison): Move these to unit tests once the navigation API in content 537 // TODO(csharrison): Move these to unit tests once the navigation API in content
476 // properly calls NavigationHandle/NavigationThrottle methods. 538 // properly calls NavigationHandle/NavigationThrottle methods.
477 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, AbortNewNavigation) { 539 IN_PROC_BROWSER_TEST_F(PageLoadMetricsMojoficationBrowserTest,
540 AbortNewNavigation) {
541 ASSERT_TRUE(
542 base::FeatureList::IsEnabled(features::kPageLoadMetricsMojofication));
478 ASSERT_TRUE(embedded_test_server()->Start()); 543 ASSERT_TRUE(embedded_test_server()->Start());
479 544
480 GURL url(embedded_test_server()->GetURL("/title1.html")); 545 GURL url(embedded_test_server()->GetURL("/title1.html"));
481 chrome::NavigateParams params(browser(), url, ui::PAGE_TRANSITION_LINK); 546 chrome::NavigateParams params(browser(), url, ui::PAGE_TRANSITION_LINK);
482 content::TestNavigationManager manager( 547 content::TestNavigationManager manager(
483 browser()->tab_strip_model()->GetActiveWebContents(), url); 548 browser()->tab_strip_model()->GetActiveWebContents(), url);
484 549
485 chrome::Navigate(&params); 550 chrome::Navigate(&params);
486 EXPECT_TRUE(manager.WaitForRequestStart()); 551 EXPECT_TRUE(manager.WaitForRequestStart());
487 552
488 GURL url2(embedded_test_server()->GetURL("/title2.html")); 553 GURL url2(embedded_test_server()->GetURL("/title2.html"));
489 chrome::NavigateParams params2(browser(), url2, 554 chrome::NavigateParams params2(browser(), url2,
490 ui::PAGE_TRANSITION_FROM_ADDRESS_BAR); 555 ui::PAGE_TRANSITION_FROM_ADDRESS_BAR);
491 content::TestNavigationManager manager2( 556 content::TestNavigationManager manager2(
492 browser()->tab_strip_model()->GetActiveWebContents(), url2); 557 browser()->tab_strip_model()->GetActiveWebContents(), url2);
493 chrome::Navigate(&params2); 558 chrome::Navigate(&params2);
494 559
495 manager2.WaitForNavigationFinished(); 560 manager2.WaitForNavigationFinished();
496 histogram_tester_.ExpectTotalCount( 561 histogram_tester_.ExpectTotalCount(
497 internal::kHistogramAbortNewNavigationBeforeCommit, 1); 562 internal::kHistogramAbortNewNavigationBeforeCommit, 1);
498 } 563 }
499 564
500 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, AbortReload) { 565 IN_PROC_BROWSER_TEST_F(PageLoadMetricsMojoficationBrowserTest, AbortReload) {
566 ASSERT_TRUE(
567 base::FeatureList::IsEnabled(features::kPageLoadMetricsMojofication));
501 ASSERT_TRUE(embedded_test_server()->Start()); 568 ASSERT_TRUE(embedded_test_server()->Start());
502 569
503 GURL url(embedded_test_server()->GetURL("/title1.html")); 570 GURL url(embedded_test_server()->GetURL("/title1.html"));
504 chrome::NavigateParams params(browser(), url, ui::PAGE_TRANSITION_LINK); 571 chrome::NavigateParams params(browser(), url, ui::PAGE_TRANSITION_LINK);
505 content::TestNavigationManager manager( 572 content::TestNavigationManager manager(
506 browser()->tab_strip_model()->GetActiveWebContents(), url); 573 browser()->tab_strip_model()->GetActiveWebContents(), url);
507 574
508 chrome::Navigate(&params); 575 chrome::Navigate(&params);
509 EXPECT_TRUE(manager.WaitForRequestStart()); 576 EXPECT_TRUE(manager.WaitForRequestStart());
510 577
511 chrome::NavigateParams params2(browser(), url, ui::PAGE_TRANSITION_RELOAD); 578 chrome::NavigateParams params2(browser(), url, ui::PAGE_TRANSITION_RELOAD);
512 content::TestNavigationManager manager2( 579 content::TestNavigationManager manager2(
513 browser()->tab_strip_model()->GetActiveWebContents(), url); 580 browser()->tab_strip_model()->GetActiveWebContents(), url);
514 chrome::Navigate(&params2); 581 chrome::Navigate(&params2);
515 582
516 manager2.WaitForNavigationFinished(); 583 manager2.WaitForNavigationFinished();
517 histogram_tester_.ExpectTotalCount( 584 histogram_tester_.ExpectTotalCount(
518 internal::kHistogramAbortReloadBeforeCommit, 1); 585 internal::kHistogramAbortReloadBeforeCommit, 1);
519 } 586 }
520 587
521 // TODO(crbug.com/675061): Flaky on Win7 dbg. 588 // TODO(crbug.com/675061): Flaky on Win7 dbg.
522 #if defined(OS_WIN) 589 #if defined(OS_WIN)
523 #define MAYBE_AbortClose DISABLED_AbortClose 590 #define MAYBE_AbortClose DISABLED_AbortClose
524 #else 591 #else
525 #define MAYBE_AbortClose AbortClose 592 #define MAYBE_AbortClose AbortClose
526 #endif 593 #endif
527 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, MAYBE_AbortClose) { 594 IN_PROC_BROWSER_TEST_F(PageLoadMetricsMojoficationBrowserTest,
595 MAYBE_AbortClose) {
596 ASSERT_TRUE(
597 base::FeatureList::IsEnabled(features::kPageLoadMetricsMojofication));
528 ASSERT_TRUE(embedded_test_server()->Start()); 598 ASSERT_TRUE(embedded_test_server()->Start());
529 599
530 GURL url(embedded_test_server()->GetURL("/title1.html")); 600 GURL url(embedded_test_server()->GetURL("/title1.html"));
531 chrome::NavigateParams params(browser(), url, ui::PAGE_TRANSITION_LINK); 601 chrome::NavigateParams params(browser(), url, ui::PAGE_TRANSITION_LINK);
532 content::TestNavigationManager manager( 602 content::TestNavigationManager manager(
533 browser()->tab_strip_model()->GetActiveWebContents(), url); 603 browser()->tab_strip_model()->GetActiveWebContents(), url);
534 604
535 chrome::Navigate(&params); 605 chrome::Navigate(&params);
536 EXPECT_TRUE(manager.WaitForRequestStart()); 606 EXPECT_TRUE(manager.WaitForRequestStart());
537 607
538 browser()->tab_strip_model()->GetActiveWebContents()->Close(); 608 browser()->tab_strip_model()->GetActiveWebContents()->Close();
539 609
540 manager.WaitForNavigationFinished(); 610 manager.WaitForNavigationFinished();
541 611
542 histogram_tester_.ExpectTotalCount(internal::kHistogramAbortCloseBeforeCommit, 612 histogram_tester_.ExpectTotalCount(internal::kHistogramAbortCloseBeforeCommit,
543 1); 613 1);
544 } 614 }
545 615
546 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, AbortMultiple) { 616 IN_PROC_BROWSER_TEST_F(PageLoadMetricsMojoficationBrowserTest, AbortMultiple) {
617 ASSERT_TRUE(
618 base::FeatureList::IsEnabled(features::kPageLoadMetricsMojofication));
547 ASSERT_TRUE(embedded_test_server()->Start()); 619 ASSERT_TRUE(embedded_test_server()->Start());
548 620
549 GURL url(embedded_test_server()->GetURL("/title1.html")); 621 GURL url(embedded_test_server()->GetURL("/title1.html"));
550 chrome::NavigateParams params(browser(), url, ui::PAGE_TRANSITION_LINK); 622 chrome::NavigateParams params(browser(), url, ui::PAGE_TRANSITION_LINK);
551 content::TestNavigationManager manager( 623 content::TestNavigationManager manager(
552 browser()->tab_strip_model()->GetActiveWebContents(), url); 624 browser()->tab_strip_model()->GetActiveWebContents(), url);
553 625
554 chrome::Navigate(&params); 626 chrome::Navigate(&params);
555 EXPECT_TRUE(manager.WaitForRequestStart()); 627 EXPECT_TRUE(manager.WaitForRequestStart());
556 628
(...skipping 14 matching lines...) Expand all
571 643
572 EXPECT_TRUE(manager3.WaitForRequestStart()); 644 EXPECT_TRUE(manager3.WaitForRequestStart());
573 manager2.WaitForNavigationFinished(); 645 manager2.WaitForNavigationFinished();
574 646
575 manager3.WaitForNavigationFinished(); 647 manager3.WaitForNavigationFinished();
576 648
577 histogram_tester_.ExpectTotalCount( 649 histogram_tester_.ExpectTotalCount(
578 internal::kHistogramAbortNewNavigationBeforeCommit, 2); 650 internal::kHistogramAbortNewNavigationBeforeCommit, 2);
579 } 651 }
580 652
581 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, 653 IN_PROC_BROWSER_TEST_F(PageLoadMetricsMojoficationBrowserTest,
582 NoAbortMetricsOnClientRedirect) { 654 NoAbortMetricsOnClientRedirect) {
655 ASSERT_TRUE(
656 base::FeatureList::IsEnabled(features::kPageLoadMetricsMojofication));
583 ASSERT_TRUE(embedded_test_server()->Start()); 657 ASSERT_TRUE(embedded_test_server()->Start());
584 658
585 GURL first_url(embedded_test_server()->GetURL("/title1.html")); 659 GURL first_url(embedded_test_server()->GetURL("/title1.html"));
586 ui_test_utils::NavigateToURL(browser(), first_url); 660 ui_test_utils::NavigateToURL(browser(), first_url);
587 661
588 GURL second_url(embedded_test_server()->GetURL("/title2.html")); 662 GURL second_url(embedded_test_server()->GetURL("/title2.html"));
589 chrome::NavigateParams params(browser(), second_url, 663 chrome::NavigateParams params(browser(), second_url,
590 ui::PAGE_TRANSITION_LINK); 664 ui::PAGE_TRANSITION_LINK);
591 content::TestNavigationManager manager( 665 content::TestNavigationManager manager(
592 browser()->tab_strip_model()->GetActiveWebContents(), second_url); 666 browser()->tab_strip_model()->GetActiveWebContents(), second_url);
593 chrome::Navigate(&params); 667 chrome::Navigate(&params);
594 EXPECT_TRUE(manager.WaitForRequestStart()); 668 EXPECT_TRUE(manager.WaitForRequestStart());
595 669
596 { 670 {
597 content::TestNavigationManager reload_manager( 671 content::TestNavigationManager reload_manager(
598 browser()->tab_strip_model()->GetActiveWebContents(), first_url); 672 browser()->tab_strip_model()->GetActiveWebContents(), first_url);
599 EXPECT_TRUE(content::ExecuteScript( 673 EXPECT_TRUE(content::ExecuteScript(
600 browser()->tab_strip_model()->GetActiveWebContents(), 674 browser()->tab_strip_model()->GetActiveWebContents(),
601 "window.location.reload();")); 675 "window.location.reload();"));
602 } 676 }
603 677
604 manager.WaitForNavigationFinished(); 678 manager.WaitForNavigationFinished();
605 679
606 EXPECT_TRUE(histogram_tester_ 680 EXPECT_TRUE(histogram_tester_
607 .GetTotalCountsForPrefix("PageLoad.Experimental.AbortTiming.") 681 .GetTotalCountsForPrefix("PageLoad.Experimental.AbortTiming.")
608 .empty()); 682 .empty());
609 } 683 }
610 684
611 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, 685 IN_PROC_BROWSER_TEST_F(PageLoadMetricsMojoficationBrowserTest,
612 FirstMeaningfulPaintRecorded) { 686 FirstMeaningfulPaintRecorded) {
687 ASSERT_TRUE(
688 base::FeatureList::IsEnabled(features::kPageLoadMetricsMojofication));
613 ASSERT_TRUE(embedded_test_server()->Start()); 689 ASSERT_TRUE(embedded_test_server()->Start());
614 690
615 ui_test_utils::NavigateToURL(browser(), 691 ui_test_utils::NavigateToURL(browser(),
616 embedded_test_server()->GetURL("/title1.html")); 692 embedded_test_server()->GetURL("/title1.html"));
617 693
618 // Wait until the renderer finishes observing layouts. 694 // Wait until the renderer finishes observing layouts.
619 const int kNetworkIdleTime = 3000; 695 const int kNetworkIdleTime = 3000;
620 const int kMargin = 500; 696 const int kMargin = 500;
621 const std::string javascript = base::StringPrintf( 697 const std::string javascript = base::StringPrintf(
622 "setTimeout(() => window.domAutomationController.send(true), %d)", 698 "setTimeout(() => window.domAutomationController.send(true), %d)",
623 kNetworkIdleTime + kMargin); 699 kNetworkIdleTime + kMargin);
624 bool result; 700 bool result;
625 EXPECT_TRUE(content::ExecuteScriptAndExtractBool( 701 EXPECT_TRUE(content::ExecuteScriptAndExtractBool(
626 browser()->tab_strip_model()->GetActiveWebContents(), 702 browser()->tab_strip_model()->GetActiveWebContents(), javascript,
627 javascript, &result)); 703 &result));
628 EXPECT_TRUE(result); 704 EXPECT_TRUE(result);
629 705
630 NavigateToUntrackedUrl(); 706 NavigateToUntrackedUrl();
631 histogram_tester_.ExpectUniqueSample( 707 histogram_tester_.ExpectUniqueSample(
632 internal::kHistogramFirstMeaningfulPaintStatus, 708 internal::kHistogramFirstMeaningfulPaintStatus,
633 internal::FIRST_MEANINGFUL_PAINT_RECORDED, 1); 709 internal::FIRST_MEANINGFUL_PAINT_RECORDED, 1);
634 histogram_tester_.ExpectTotalCount( 710 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstMeaningfulPaint,
635 internal::kHistogramFirstMeaningfulPaint, 1); 711 1);
636 histogram_tester_.ExpectTotalCount( 712 histogram_tester_.ExpectTotalCount(
637 internal::kHistogramParseStartToFirstMeaningfulPaint, 1); 713 internal::kHistogramParseStartToFirstMeaningfulPaint, 1);
638 } 714 }
639 715
640 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, 716 IN_PROC_BROWSER_TEST_F(PageLoadMetricsMojoficationBrowserTest,
641 FirstMeaningfulPaintNotRecorded) { 717 FirstMeaningfulPaintNotRecorded) {
718 ASSERT_TRUE(
719 base::FeatureList::IsEnabled(features::kPageLoadMetricsMojofication));
642 ASSERT_TRUE(embedded_test_server()->Start()); 720 ASSERT_TRUE(embedded_test_server()->Start());
643 721
644 std::unique_ptr<PageLoadMetricsWaiter> fcp_waiter = 722 std::unique_ptr<PageLoadMetricsWaiter> fcp_waiter =
645 CreatePageLoadMetricsWaiter(); 723 CreatePageLoadMetricsWaiter();
646 fcp_waiter->AddExpectation(PageLoadMetricsWaiter::FIRST_CONTENTFUL_PAINT); 724 fcp_waiter->AddExpectation(PageLoadMetricsWaiter::FIRST_CONTENTFUL_PAINT);
647 725
648 ui_test_utils::NavigateToURL( 726 ui_test_utils::NavigateToURL(
649 browser(), embedded_test_server()->GetURL( 727 browser(), embedded_test_server()->GetURL(
650 "/page_load_metrics/page_with_active_connections.html")); 728 "/page_load_metrics/page_with_active_connections.html"));
651 fcp_waiter->Wait(); 729 fcp_waiter->Wait();
652 730
653 // Navigate away before a FMP is reported. 731 // Navigate away before a FMP is reported.
654 NavigateToUntrackedUrl(); 732 NavigateToUntrackedUrl();
655 733
656 histogram_tester_.ExpectUniqueSample( 734 histogram_tester_.ExpectUniqueSample(
657 internal::kHistogramFirstMeaningfulPaintStatus, 735 internal::kHistogramFirstMeaningfulPaintStatus,
658 internal::FIRST_MEANINGFUL_PAINT_DID_NOT_REACH_NETWORK_STABLE, 1); 736 internal::FIRST_MEANINGFUL_PAINT_DID_NOT_REACH_NETWORK_STABLE, 1);
659 histogram_tester_.ExpectTotalCount( 737 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstMeaningfulPaint,
660 internal::kHistogramFirstMeaningfulPaint, 0); 738 0);
661 histogram_tester_.ExpectTotalCount( 739 histogram_tester_.ExpectTotalCount(
662 internal::kHistogramParseStartToFirstMeaningfulPaint, 0); 740 internal::kHistogramParseStartToFirstMeaningfulPaint, 0);
663 } 741 }
664 742
665 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, 743 IN_PROC_BROWSER_TEST_F(PageLoadMetricsMojoficationBrowserTest,
666 NoStatePrefetchObserverCacheable) { 744 NoStatePrefetchObserverCacheable) {
745 ASSERT_TRUE(
746 base::FeatureList::IsEnabled(features::kPageLoadMetricsMojofication));
667 ASSERT_TRUE(embedded_test_server()->Start()); 747 ASSERT_TRUE(embedded_test_server()->Start());
668 748
669 std::unique_ptr<PageLoadMetricsWaiter> fcp_waiter = 749 std::unique_ptr<PageLoadMetricsWaiter> fcp_waiter =
670 CreatePageLoadMetricsWaiter(); 750 CreatePageLoadMetricsWaiter();
671 fcp_waiter->AddExpectation(PageLoadMetricsWaiter::FIRST_CONTENTFUL_PAINT); 751 fcp_waiter->AddExpectation(PageLoadMetricsWaiter::FIRST_CONTENTFUL_PAINT);
672 752
673 ui_test_utils::NavigateToURL(browser(), 753 ui_test_utils::NavigateToURL(browser(),
674 embedded_test_server()->GetURL("/title1.html")); 754 embedded_test_server()->GetURL("/title1.html"));
675 755
676 fcp_waiter->Wait(); 756 fcp_waiter->Wait();
677 757
678 histogram_tester_.ExpectTotalCount( 758 histogram_tester_.ExpectTotalCount(
679 "Prerender.none_PrefetchTTFCP.Reference.NoStore.Visible", 0); 759 "Prerender.none_PrefetchTTFCP.Reference.NoStore.Visible", 0);
680 histogram_tester_.ExpectTotalCount( 760 histogram_tester_.ExpectTotalCount(
681 "Prerender.none_PrefetchTTFCP.Reference.Cacheable.Visible", 1); 761 "Prerender.none_PrefetchTTFCP.Reference.Cacheable.Visible", 1);
682 } 762 }
683 763
684 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, 764 IN_PROC_BROWSER_TEST_F(PageLoadMetricsMojoficationBrowserTest,
685 NoStatePrefetchObserverNoStore) { 765 NoStatePrefetchObserverNoStore) {
766 ASSERT_TRUE(
767 base::FeatureList::IsEnabled(features::kPageLoadMetricsMojofication));
686 ASSERT_TRUE(embedded_test_server()->Start()); 768 ASSERT_TRUE(embedded_test_server()->Start());
687 769
688 std::unique_ptr<PageLoadMetricsWaiter> fcp_waiter = 770 std::unique_ptr<PageLoadMetricsWaiter> fcp_waiter =
689 CreatePageLoadMetricsWaiter(); 771 CreatePageLoadMetricsWaiter();
690 fcp_waiter->AddExpectation(PageLoadMetricsWaiter::FIRST_CONTENTFUL_PAINT); 772 fcp_waiter->AddExpectation(PageLoadMetricsWaiter::FIRST_CONTENTFUL_PAINT);
691 773
692 ui_test_utils::NavigateToURL(browser(), 774 ui_test_utils::NavigateToURL(browser(),
693 embedded_test_server()->GetURL("/nostore.html")); 775 embedded_test_server()->GetURL("/nostore.html"));
694 776
695 fcp_waiter->Wait(); 777 fcp_waiter->Wait();
696 778
697 histogram_tester_.ExpectTotalCount( 779 histogram_tester_.ExpectTotalCount(
698 "Prerender.none_PrefetchTTFCP.Reference.NoStore.Visible", 1); 780 "Prerender.none_PrefetchTTFCP.Reference.NoStore.Visible", 1);
699 histogram_tester_.ExpectTotalCount( 781 histogram_tester_.ExpectTotalCount(
700 "Prerender.none_PrefetchTTFCP.Reference.Cacheable.Visible", 0); 782 "Prerender.none_PrefetchTTFCP.Reference.Cacheable.Visible", 0);
701 } 783 }
702 784
703 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, CSSTiming) { 785 IN_PROC_BROWSER_TEST_F(PageLoadMetricsMojoficationBrowserTest, CSSTiming) {
786 ASSERT_TRUE(
787 base::FeatureList::IsEnabled(features::kPageLoadMetricsMojofication));
704 ASSERT_TRUE(embedded_test_server()->Start()); 788 ASSERT_TRUE(embedded_test_server()->Start());
705 789
706 std::unique_ptr<PageLoadMetricsWaiter> fcp_waiter = 790 std::unique_ptr<PageLoadMetricsWaiter> fcp_waiter =
707 CreatePageLoadMetricsWaiter(); 791 CreatePageLoadMetricsWaiter();
708 fcp_waiter->AddExpectation(PageLoadMetricsWaiter::STYLE_UPDATE_BEFORE_FCP); 792 fcp_waiter->AddExpectation(PageLoadMetricsWaiter::STYLE_UPDATE_BEFORE_FCP);
709 793
710 // Careful: Blink code clamps timestamps to 5us, so any CSS parsing we do here 794 // 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 795 // must take >> 5us, otherwise we'll log 0 for the value and it will remain
712 // unset here. 796 // unset here.
713 ui_test_utils::NavigateToURL( 797 ui_test_utils::NavigateToURL(
714 browser(), 798 browser(),
715 embedded_test_server()->GetURL("/page_load_metrics/page_with_css.html")); 799 embedded_test_server()->GetURL("/page_load_metrics/page_with_css.html"));
716 NavigateToUntrackedUrl(); 800 NavigateToUntrackedUrl();
717 fcp_waiter->Wait(); 801 fcp_waiter->Wait();
718 802
719 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstContentfulPaint, 803 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstContentfulPaint,
720 1); 804 1);
721 histogram_tester_.ExpectTotalCount( 805 histogram_tester_.ExpectTotalCount(
722 "PageLoad.CSSTiming.Parse.BeforeFirstContentfulPaint", 1); 806 "PageLoad.CSSTiming.Parse.BeforeFirstContentfulPaint", 1);
723 histogram_tester_.ExpectTotalCount( 807 histogram_tester_.ExpectTotalCount(
724 "PageLoad.CSSTiming.Update.BeforeFirstContentfulPaint", 1); 808 "PageLoad.CSSTiming.Update.BeforeFirstContentfulPaint", 1);
725 histogram_tester_.ExpectTotalCount( 809 histogram_tester_.ExpectTotalCount(
726 "PageLoad.CSSTiming.ParseAndUpdate.BeforeFirstContentfulPaint", 1); 810 "PageLoad.CSSTiming.ParseAndUpdate.BeforeFirstContentfulPaint", 1);
727 } 811 }
728 812
729 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, PayloadSize) { 813 IN_PROC_BROWSER_TEST_F(PageLoadMetricsMojoficationBrowserTest, PayloadSize) {
814 ASSERT_TRUE(
815 base::FeatureList::IsEnabled(features::kPageLoadMetricsMojofication));
730 ASSERT_TRUE(embedded_test_server()->Start()); 816 ASSERT_TRUE(embedded_test_server()->Start());
731 817
732 ui_test_utils::NavigateToURL(browser(), embedded_test_server()->GetURL( 818 ui_test_utils::NavigateToURL(browser(), embedded_test_server()->GetURL(
733 "/page_load_metrics/large.html")); 819 "/page_load_metrics/large.html"));
734 NavigateToUntrackedUrl(); 820 NavigateToUntrackedUrl();
735 821
736 histogram_tester_.ExpectTotalCount(internal::kHistogramTotalBytes, 1); 822 histogram_tester_.ExpectTotalCount(internal::kHistogramTotalBytes, 1);
737 823
738 // Verify that there is a single sample recorded in the 10kB bucket (the size 824 // Verify that there is a single sample recorded in the 10kB bucket (the size
739 // of the main HTML response). 825 // of the main HTML response).
740 histogram_tester_.ExpectBucketCount(internal::kHistogramTotalBytes, 10, 1); 826 histogram_tester_.ExpectBucketCount(internal::kHistogramTotalBytes, 10, 1);
741 } 827 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698