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

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

Issue 2380773002: Prevent tracking metrics for cases such as 204s and downloads. (Closed)
Patch Set: fix comment, and disable tests for browser side navigation Created 4 years, 2 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 (c) 2015 The Chromium Authors. All rights reserved. 1 // Copyright (c) 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/macros.h" 5 #include "base/macros.h"
6 #include "base/test/histogram_tester.h" 6 #include "base/test/histogram_tester.h"
7 #include "base/time/time.h" 7 #include "base/time/time.h"
8 #include "chrome/browser/page_load_metrics/metrics_web_contents_observer.h" 8 #include "chrome/browser/page_load_metrics/metrics_web_contents_observer.h"
9 #include "chrome/browser/page_load_metrics/observers/aborts_page_load_metrics_ob server.h" 9 #include "chrome/browser/page_load_metrics/observers/aborts_page_load_metrics_ob server.h"
10 #include "chrome/browser/page_load_metrics/observers/core_page_load_metrics_obse rver.h" 10 #include "chrome/browser/page_load_metrics/observers/core_page_load_metrics_obse rver.h"
11 #include "chrome/browser/page_load_metrics/observers/document_write_page_load_me trics_observer.h" 11 #include "chrome/browser/page_load_metrics/observers/document_write_page_load_me trics_observer.h"
12 #include "chrome/browser/page_load_metrics/observers/no_state_prefetch_page_load _metrics_observer.h" 12 #include "chrome/browser/page_load_metrics/observers/no_state_prefetch_page_load _metrics_observer.h"
13 #include "chrome/browser/prerender/prerender_histograms.h" 13 #include "chrome/browser/prerender/prerender_histograms.h"
14 #include "chrome/browser/prerender/prerender_origin.h" 14 #include "chrome/browser/prerender/prerender_origin.h"
15 #include "chrome/browser/profiles/profile.h" 15 #include "chrome/browser/profiles/profile.h"
16 #include "chrome/browser/ui/browser.h" 16 #include "chrome/browser/ui/browser.h"
17 #include "chrome/browser/ui/browser_navigator_params.h" 17 #include "chrome/browser/ui/browser_navigator_params.h"
18 #include "chrome/browser/ui/tabs/tab_strip_model.h" 18 #include "chrome/browser/ui/tabs/tab_strip_model.h"
19 #include "chrome/common/url_constants.h" 19 #include "chrome/common/url_constants.h"
20 #include "chrome/test/base/in_process_browser_test.h" 20 #include "chrome/test/base/in_process_browser_test.h"
21 #include "chrome/test/base/ui_test_utils.h" 21 #include "chrome/test/base/ui_test_utils.h"
22 #include "content/public/browser/browser_thread.h" 22 #include "content/public/browser/browser_thread.h"
23 #include "content/public/test/browser_test_utils.h" 23 #include "content/public/test/browser_test_utils.h"
24 #include "content/public/test/download_test_observer.h"
24 #include "net/http/failing_http_transaction_factory.h" 25 #include "net/http/failing_http_transaction_factory.h"
25 #include "net/http/http_cache.h" 26 #include "net/http/http_cache.h"
26 #include "net/test/embedded_test_server/embedded_test_server.h" 27 #include "net/test/embedded_test_server/embedded_test_server.h"
27 #include "net/test/url_request/url_request_failed_job.h" 28 #include "net/test/url_request/url_request_failed_job.h"
28 #include "net/url_request/url_request_context.h" 29 #include "net/url_request/url_request_context.h"
29 #include "net/url_request/url_request_context_getter.h" 30 #include "net/url_request/url_request_context_getter.h"
30 31
31 class PageLoadMetricsBrowserTest : public InProcessBrowserTest { 32 class PageLoadMetricsBrowserTest : public InProcessBrowserTest {
32 public: 33 public:
33 PageLoadMetricsBrowserTest() {} 34 PageLoadMetricsBrowserTest() {}
34 ~PageLoadMetricsBrowserTest() override {} 35 ~PageLoadMetricsBrowserTest() override {}
35 36
36 protected: 37 protected:
37 void NavigateToUntrackedUrl() { 38 void NavigateToUntrackedUrl() {
38 ui_test_utils::NavigateToURL(browser(), GURL(url::kAboutBlankURL)); 39 ui_test_utils::NavigateToURL(browser(), GURL(url::kAboutBlankURL));
39 } 40 }
40 41
42 bool NoPageLoadMetricsRecorded() {
43 return histogram_tester_.GetTotalCountsForPrefix("PageLoad.").empty();
44 }
45
41 base::HistogramTester histogram_tester_; 46 base::HistogramTester histogram_tester_;
42 47
43 DISALLOW_COPY_AND_ASSIGN(PageLoadMetricsBrowserTest); 48 DISALLOW_COPY_AND_ASSIGN(PageLoadMetricsBrowserTest);
44 }; 49 };
45 50
46 void FailAllNetworkTransactions(net::URLRequestContextGetter* getter) { 51 void FailAllNetworkTransactions(net::URLRequestContextGetter* getter) {
47 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); 52 DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
48 net::HttpCache* cache( 53 net::HttpCache* cache(
49 getter->GetURLRequestContext()->http_transaction_factory()->GetCache()); 54 getter->GetURLRequestContext()->http_transaction_factory()->GetCache());
50 DCHECK(cache); 55 DCHECK(cache);
51 std::unique_ptr<net::FailingHttpTransactionFactory> factory( 56 std::unique_ptr<net::FailingHttpTransactionFactory> factory(
52 new net::FailingHttpTransactionFactory(cache->GetSession(), 57 new net::FailingHttpTransactionFactory(cache->GetSession(),
53 net::ERR_FAILED)); 58 net::ERR_FAILED));
54 // Throw away old version; since this is a browser test, there is no 59 // Throw away old version; since this is a browser test, there is no
55 // need to restore the old state. 60 // need to restore the old state.
56 cache->SetHttpNetworkTransactionFactoryForTesting(std::move(factory)); 61 cache->SetHttpNetworkTransactionFactoryForTesting(std::move(factory));
57 } 62 }
58 63
59 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, NoNavigation) { 64 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, NoNavigation) {
60 ASSERT_TRUE(embedded_test_server()->Start()); 65 ASSERT_TRUE(embedded_test_server()->Start());
61 66 EXPECT_TRUE(NoPageLoadMetricsRecorded());
62 histogram_tester_.ExpectTotalCount(internal::kHistogramCommit, 0);
63 histogram_tester_.ExpectTotalCount(internal::kHistogramDomContentLoaded, 0);
64 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 0);
65 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 0);
66 } 67 }
67 68
68 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, NewPage) { 69 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, NewPage) {
69 ASSERT_TRUE(embedded_test_server()->Start()); 70 ASSERT_TRUE(embedded_test_server()->Start());
70 71
71 ui_test_utils::NavigateToURL(browser(), 72 ui_test_utils::NavigateToURL(browser(),
72 embedded_test_server()->GetURL("/title1.html")); 73 embedded_test_server()->GetURL("/title1.html"));
73 NavigateToUntrackedUrl(); 74 NavigateToUntrackedUrl();
74 75
75 histogram_tester_.ExpectTotalCount(internal::kHistogramDomContentLoaded, 1); 76 histogram_tester_.ExpectTotalCount(internal::kHistogramDomContentLoaded, 1);
76 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 1); 77 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 1);
77 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 1); 78 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 1);
78 histogram_tester_.ExpectTotalCount(internal::kHistogramParseDuration, 1); 79 histogram_tester_.ExpectTotalCount(internal::kHistogramParseDuration, 1);
79 histogram_tester_.ExpectTotalCount( 80 histogram_tester_.ExpectTotalCount(
80 internal::kHistogramParseBlockedOnScriptLoad, 1); 81 internal::kHistogramParseBlockedOnScriptLoad, 1);
81 histogram_tester_.ExpectTotalCount( 82 histogram_tester_.ExpectTotalCount(
82 internal::kHistogramParseBlockedOnScriptExecution, 1); 83 internal::kHistogramParseBlockedOnScriptExecution, 1);
84
85 // Verify that NoPageLoadMetricsRecorded returns false when PageLoad metrics
86 // have been recorded.
87 EXPECT_FALSE(NoPageLoadMetricsRecorded());
83 } 88 }
84 89
85 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, SamePageNavigation) { 90 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, SamePageNavigation) {
86 ASSERT_TRUE(embedded_test_server()->Start()); 91 ASSERT_TRUE(embedded_test_server()->Start());
87 92
88 ui_test_utils::NavigateToURL(browser(), 93 ui_test_utils::NavigateToURL(browser(),
89 embedded_test_server()->GetURL("/title1.html")); 94 embedded_test_server()->GetURL("/title1.html"));
90 ui_test_utils::NavigateToURL( 95 ui_test_utils::NavigateToURL(
91 browser(), embedded_test_server()->GetURL("/title1.html#hash")); 96 browser(), embedded_test_server()->GetURL("/title1.html#hash"));
92 NavigateToUntrackedUrl(); 97 NavigateToUntrackedUrl();
(...skipping 18 matching lines...) Expand all
111 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 2); 116 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 2);
112 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 2); 117 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 2);
113 } 118 }
114 119
115 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, NonHtmlMainResource) { 120 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, NonHtmlMainResource) {
116 ASSERT_TRUE(embedded_test_server()->Start()); 121 ASSERT_TRUE(embedded_test_server()->Start());
117 122
118 ui_test_utils::NavigateToURL(browser(), 123 ui_test_utils::NavigateToURL(browser(),
119 embedded_test_server()->GetURL("/circle.svg")); 124 embedded_test_server()->GetURL("/circle.svg"));
120 NavigateToUntrackedUrl(); 125 NavigateToUntrackedUrl();
121 126 EXPECT_TRUE(NoPageLoadMetricsRecorded());
122 histogram_tester_.ExpectTotalCount(internal::kHistogramCommit, 0);
123 histogram_tester_.ExpectTotalCount(page_load_metrics::internal::kErrorEvents,
124 0);
125 } 127 }
126 128
127 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, NonHttpOrHttpsUrl) { 129 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, NonHttpOrHttpsUrl) {
128 ASSERT_TRUE(embedded_test_server()->Start()); 130 ASSERT_TRUE(embedded_test_server()->Start());
129 131
130 ui_test_utils::NavigateToURL(browser(), GURL(chrome::kChromeUIVersionURL)); 132 ui_test_utils::NavigateToURL(browser(), GURL(chrome::kChromeUIVersionURL));
131 NavigateToUntrackedUrl(); 133 NavigateToUntrackedUrl();
132 134 EXPECT_TRUE(NoPageLoadMetricsRecorded());
133 histogram_tester_.ExpectTotalCount(internal::kHistogramCommit, 0);
134 histogram_tester_.ExpectTotalCount(page_load_metrics::internal::kErrorEvents,
135 0);
136 } 135 }
137 136
138 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, HttpErrorPage) { 137 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, HttpErrorPage) {
139 ASSERT_TRUE(embedded_test_server()->Start()); 138 ASSERT_TRUE(embedded_test_server()->Start());
140 139
141 ui_test_utils::NavigateToURL( 140 ui_test_utils::NavigateToURL(
142 browser(), embedded_test_server()->GetURL("/page_load_metrics/404.html")); 141 browser(), embedded_test_server()->GetURL("/page_load_metrics/404.html"));
143 NavigateToUntrackedUrl(); 142 NavigateToUntrackedUrl();
144 143 EXPECT_TRUE(NoPageLoadMetricsRecorded());
145 histogram_tester_.ExpectTotalCount(internal::kHistogramCommit, 0);
146 histogram_tester_.ExpectTotalCount(page_load_metrics::internal::kErrorEvents,
147 0);
148 } 144 }
149 145
150 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, ChromeErrorPage) { 146 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, ChromeErrorPage) {
151 ASSERT_TRUE(embedded_test_server()->Start()); 147 ASSERT_TRUE(embedded_test_server()->Start());
152 148
153 // Configure the network stack to fail all attempted loads with a network 149 // Configure the network stack to fail all attempted loads with a network
154 // error, which will cause Chrome to display an error page. 150 // error, which will cause Chrome to display an error page.
155 scoped_refptr<net::URLRequestContextGetter> url_request_context_getter = 151 scoped_refptr<net::URLRequestContextGetter> url_request_context_getter =
156 browser()->profile()->GetRequestContext(); 152 browser()->profile()->GetRequestContext();
157 content::BrowserThread::PostTask( 153 content::BrowserThread::PostTask(
158 content::BrowserThread::IO, FROM_HERE, 154 content::BrowserThread::IO, FROM_HERE,
159 base::Bind(&FailAllNetworkTransactions, 155 base::Bind(&FailAllNetworkTransactions,
160 base::RetainedRef(url_request_context_getter))); 156 base::RetainedRef(url_request_context_getter)));
161 157
162 ui_test_utils::NavigateToURL(browser(), 158 ui_test_utils::NavigateToURL(browser(),
163 embedded_test_server()->GetURL("/title1.html")); 159 embedded_test_server()->GetURL("/title1.html"));
164 NavigateToUntrackedUrl(); 160 NavigateToUntrackedUrl();
161 EXPECT_TRUE(NoPageLoadMetricsRecorded());
162 }
165 163
166 histogram_tester_.ExpectTotalCount(internal::kHistogramCommit, 0); 164 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, Ignore204Pages) {
167 histogram_tester_.ExpectTotalCount(page_load_metrics::internal::kErrorEvents, 165 ASSERT_TRUE(embedded_test_server()->Start());
168 0); 166
167 ui_test_utils::NavigateToURL(browser(),
168 embedded_test_server()->GetURL("/page204.html"));
169 NavigateToUntrackedUrl();
170 EXPECT_TRUE(NoPageLoadMetricsRecorded());
171 }
172
173 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, IgnoreDownloads) {
174 ASSERT_TRUE(embedded_test_server()->Start());
175
176 content::DownloadTestObserverTerminal downloads_observer(
177 content::BrowserContext::GetDownloadManager(browser()->profile()),
178 1, // == wait_count (only waiting for "download-test3.gif").
179 content::DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_FAIL);
180
181 ui_test_utils::NavigateToURL(
182 browser(), embedded_test_server()->GetURL("/download-test3.gif"));
183 downloads_observer.WaitForFinished();
184
185 NavigateToUntrackedUrl();
186 EXPECT_TRUE(NoPageLoadMetricsRecorded());
169 } 187 }
170 188
171 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, PreloadDocumentWrite) { 189 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, PreloadDocumentWrite) {
172 ASSERT_TRUE(embedded_test_server()->Start()); 190 ASSERT_TRUE(embedded_test_server()->Start());
173 191
174 ui_test_utils::NavigateToURL( 192 ui_test_utils::NavigateToURL(
175 browser(), embedded_test_server()->GetURL( 193 browser(), embedded_test_server()->GetURL(
176 "/page_load_metrics/document_write_external_script.html")); 194 "/page_load_metrics/document_write_external_script.html"));
177 NavigateToUntrackedUrl(); 195 NavigateToUntrackedUrl();
178 196
(...skipping 325 matching lines...) Expand 10 before | Expand all | Expand 10 after
504 522
505 histogram_tester_.ExpectTotalCount( 523 histogram_tester_.ExpectTotalCount(
506 prerender::PrerenderHistograms::GetFirstContentfulPaintHistogramName( 524 prerender::PrerenderHistograms::GetFirstContentfulPaintHistogramName(
507 prerender::ORIGIN_NONE, false, true, base::TimeDelta()), 525 prerender::ORIGIN_NONE, false, true, base::TimeDelta()),
508 1); 526 1);
509 histogram_tester_.ExpectTotalCount( 527 histogram_tester_.ExpectTotalCount(
510 prerender::PrerenderHistograms::GetFirstContentfulPaintHistogramName( 528 prerender::PrerenderHistograms::GetFirstContentfulPaintHistogramName(
511 prerender::ORIGIN_NONE, false, false, base::TimeDelta()), 529 prerender::ORIGIN_NONE, false, false, base::TimeDelta()),
512 0); 530 0);
513 } 531 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698