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

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 browser test for mojofication. Created 3 years, 8 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.
Bryan McQuade 2017/04/25 15:41:14 on first glance i'd really like to see if we can h
lpy 2017/04/26 14:18:41 The reason I didn't add it to exist browser test s
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/time/time.h" 9 #include "base/time/time.h"
9 #include "chrome/browser/page_load_metrics/metrics_web_contents_observer.h" 10 #include "chrome/browser/page_load_metrics/metrics_web_contents_observer.h"
10 #include "chrome/browser/page_load_metrics/observers/aborts_page_load_metrics_ob server.h" 11 #include "chrome/browser/page_load_metrics/observers/aborts_page_load_metrics_ob server.h"
11 #include "chrome/browser/page_load_metrics/observers/core_page_load_metrics_obse rver.h" 12 #include "chrome/browser/page_load_metrics/observers/core_page_load_metrics_obse rver.h"
12 #include "chrome/browser/page_load_metrics/observers/document_write_page_load_me trics_observer.h" 13 #include "chrome/browser/page_load_metrics/observers/document_write_page_load_me trics_observer.h"
13 #include "chrome/browser/page_load_metrics/observers/no_state_prefetch_page_load _metrics_observer.h" 14 #include "chrome/browser/page_load_metrics/observers/no_state_prefetch_page_load _metrics_observer.h"
14 #include "chrome/browser/page_load_metrics/page_load_tracker.h" 15 #include "chrome/browser/page_load_metrics/page_load_tracker.h"
15 #include "chrome/browser/prerender/prerender_histograms.h" 16 #include "chrome/browser/prerender/prerender_histograms.h"
16 #include "chrome/browser/prerender/prerender_origin.h" 17 #include "chrome/browser/prerender/prerender_origin.h"
17 #include "chrome/browser/profiles/profile.h" 18 #include "chrome/browser/profiles/profile.h"
18 #include "chrome/browser/ui/browser.h" 19 #include "chrome/browser/ui/browser.h"
19 #include "chrome/browser/ui/browser_navigator_params.h" 20 #include "chrome/browser/ui/browser_navigator_params.h"
20 #include "chrome/browser/ui/tabs/tab_strip_model.h" 21 #include "chrome/browser/ui/tabs/tab_strip_model.h"
21 #include "chrome/common/page_load_metrics/page_load_metrics_messages.h" 22 #include "chrome/common/chrome_features.h"
22 #include "chrome/common/pref_names.h" 23 #include "chrome/common/pref_names.h"
23 #include "chrome/common/url_constants.h" 24 #include "chrome/common/url_constants.h"
24 #include "chrome/test/base/in_process_browser_test.h" 25 #include "chrome/test/base/in_process_browser_test.h"
25 #include "chrome/test/base/ui_test_utils.h" 26 #include "chrome/test/base/ui_test_utils.h"
26 #include "components/prefs/pref_service.h" 27 #include "components/prefs/pref_service.h"
27 #include "content/public/browser/browser_thread.h" 28 #include "content/public/browser/browser_thread.h"
28 #include "content/public/browser/render_process_host.h" 29 #include "content/public/browser/render_process_host.h"
29 #include "content/public/browser/render_view_host.h" 30 #include "content/public/browser/render_view_host.h"
30 #include "content/public/test/browser_test_utils.h" 31 #include "content/public/test/browser_test_utils.h"
31 #include "content/public/test/download_test_observer.h" 32 #include "content/public/test/download_test_observer.h"
33 #include "content/public/test/web_contents_binding_set_test_binder.h"
34 #include "mojo/public/cpp/bindings/associated_binding.h"
32 #include "net/http/failing_http_transaction_factory.h" 35 #include "net/http/failing_http_transaction_factory.h"
33 #include "net/http/http_cache.h" 36 #include "net/http/http_cache.h"
34 #include "net/test/embedded_test_server/embedded_test_server.h" 37 #include "net/test/embedded_test_server/embedded_test_server.h"
35 #include "net/test/url_request/url_request_failed_job.h" 38 #include "net/test/url_request/url_request_failed_job.h"
36 #include "net/url_request/url_request_context.h" 39 #include "net/url_request/url_request_context.h"
37 #include "net/url_request/url_request_context_getter.h" 40 #include "net/url_request/url_request_context_getter.h"
41 #include "testing/gmock/include/gmock/gmock.h"
38 42
39 namespace { 43 namespace {
40 44
41 // Waits until a PageLoadMetricsMsg_TimingUpdated message IPC is received 45 void FailAllNetworkTransactions(net::URLRequestContextGetter* getter) {
42 // matching a PageLoadTiming. See WaitForMatchingIPC for details. 46 DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
43 class TimingUpdatedObserver : public content::BrowserMessageFilter { 47 net::HttpCache* cache(
48 getter->GetURLRequestContext()->http_transaction_factory()->GetCache());
49 DCHECK(cache);
50 std::unique_ptr<net::FailingHttpTransactionFactory> factory(
51 new net::FailingHttpTransactionFactory(cache->GetSession(),
52 net::ERR_FAILED));
53 // Throw away old version; since this is a browser test, there is no
54 // need to restore the old state.
55 cache->SetHttpNetworkTransactionFactoryForTesting(std::move(factory));
56 }
57
58 // Wait until we dispatch PageLoadTiming through UpdateTiming.
59 // matching a PageLoadTiming. See WaitForTimingUpdated for details.
60 class PageLoadTimingObserver {
44 public: 61 public:
45 // A bitvector to express which timing fields to match on. 62 // A bitvector to express which timing fields to match on.
46 enum ExpectedTimingFields { 63 enum ExpectedTimingFields {
47 FIRST_PAINT = 1 << 0, 64 FIRST_PAINT = 1 << 0,
48 FIRST_CONTENTFUL_PAINT = 1 << 1, 65 FIRST_CONTENTFUL_PAINT = 1 << 1,
49 STYLE_UPDATE_BEFORE_FCP = 1 << 2 66 STYLE_UPDATE_BEFORE_FCP = 1 << 2
50 }; 67 };
51 68
52 explicit TimingUpdatedObserver(content::RenderWidgetHost* render_widget_host) 69 PageLoadTimingObserver() {
53 : content::BrowserMessageFilter(PageLoadMetricsMsgStart) {
54 render_widget_host->GetProcess()->AddFilter(this);
55
56 // Roundtrip to the IO thread, to ensure that the filter is properly 70 // Roundtrip to the IO thread, to ensure that the filter is properly
57 // installed. 71 // installed.
58 content::BrowserThread::PostTaskAndReply( 72 content::BrowserThread::PostTaskAndReply(
59 content::BrowserThread::IO, FROM_HERE, base::BindOnce(&base::DoNothing), 73 content::BrowserThread::IO, FROM_HERE, base::Bind(&base::DoNothing),
60 base::BindOnce(&TimingUpdatedObserver::Quit, this)); 74 base::Bind(&PageLoadTimingObserver::Quit, base::Unretained(this)));
61 run_loop_.reset(new base::RunLoop()); 75 run_loop_.reset(new base::RunLoop());
62 run_loop_->Run(); 76 run_loop_->Run();
63 run_loop_.reset(nullptr); 77 run_loop_.reset(nullptr);
64 } 78 }
65 79
80 ~PageLoadTimingObserver() {}
81
66 // Add the given timing fields to the set of fields to match on. 82 // Add the given timing fields to the set of fields to match on.
67 void AddMatchingFields(ExpectedTimingFields fields) { 83 void AddMatchingFields(ExpectedTimingFields fields) {
68 matching_fields_ |= fields; 84 matching_fields_ |= fields;
69 } 85 }
70 86
71 // Instructs observer to also watch for |count| 87 // Instructs observer to also watch for |count|
72 // WebLoadingBehaviorDocumentWriteBlockReload events. 88 // WebLoadingBehaviorDocumentWriteBlockReload events.
73 void MatchDocumentWriteBlockReload(int count) { 89 void MatchDocumentWriteBlockReload(int count) {
74 match_document_write_block_reload_ = count; 90 match_document_write_block_reload_ = count;
75 } 91 }
76 92
93 // Waits for a PageLoadTiming that matches the fields set by
77 // Waits for a TimingUpdated IPC that matches the fields set by 94 // Waits for a TimingUpdated IPC that matches the fields set by
78 // |AddMatchingFields|. All matching fields must be set in a TimingUpdated 95 // UpdateTiming to end this wait.
79 // IPC for it to end this wait. 96 void WaitForTimingUpdated() {
80 void WaitForMatchingIPC() {
81 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 97 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
82 if (matched_timing_update_) 98 if (matched_timing_update_)
83 return; 99 return;
84 100
85 run_loop_.reset(new base::RunLoop()); 101 run_loop_.reset(new base::RunLoop());
86 run_loop_->Run(); 102 run_loop_->Run();
87 run_loop_.reset(nullptr); 103 run_loop_.reset(nullptr);
88 } 104 }
89 105
90 private: 106 void UpdateTiming(const page_load_metrics::PageLoadTiming& timing,
91 bool OnMessageReceived(const IPC::Message& message) override { 107 const page_load_metrics::PageLoadMetadata& metadata) {
92 DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
93
94 IPC_BEGIN_MESSAGE_MAP(TimingUpdatedObserver, message)
95 IPC_MESSAGE_HANDLER(PageLoadMetricsMsg_TimingUpdated, OnTimingUpdated)
96 IPC_END_MESSAGE_MAP()
97
98 return false;
99 }
100
101 bool OnTimingUpdated(const page_load_metrics::PageLoadTiming& timing,
102 const page_load_metrics::PageLoadMetadata& metadata) {
103 if (match_document_write_block_reload_ > 0 && 108 if (match_document_write_block_reload_ > 0 &&
104 metadata.behavior_flags & 109 metadata.behavior_flags &
105 blink::WebLoadingBehaviorFlag:: 110 blink::WebLoadingBehaviorFlag::
106 kWebLoadingBehaviorDocumentWriteBlockReload) { 111 kWebLoadingBehaviorDocumentWriteBlockReload) {
107 --match_document_write_block_reload_; 112 --match_document_write_block_reload_;
108 } 113 }
109 114
110 if (match_document_write_block_reload_ > 0) { 115 if (match_document_write_block_reload_ > 0) {
111 return true; 116 return;
112 } 117 }
113 118
114 if ((!(matching_fields_ & FIRST_PAINT) || 119 if ((!(matching_fields_ & FIRST_PAINT) ||
115 timing.paint_timing.first_paint) && 120 timing.paint_timing.first_paint) &&
116 (!(matching_fields_ & FIRST_CONTENTFUL_PAINT) || 121 (!(matching_fields_ & FIRST_CONTENTFUL_PAINT) ||
117 timing.paint_timing.first_contentful_paint) && 122 timing.paint_timing.first_contentful_paint) &&
118 (!(matching_fields_ & STYLE_UPDATE_BEFORE_FCP) || 123 (!(matching_fields_ & STYLE_UPDATE_BEFORE_FCP) ||
119 timing.style_sheet_timing.update_style_duration_before_fcp)) { 124 timing.style_sheet_timing.update_style_duration_before_fcp)) {
120 // Ensure that any other handlers of this message, for example the real 125 // Ensure that any other handlers of this message, for example the real
121 // PageLoadMetric observers, get a chance to handle this message before 126 // PageLoadMetric observers, get a chance to handle this message before
122 // this waiter unblocks. 127 // this waiter unblocks.
123 content::BrowserThread::PostTask( 128 content::BrowserThread::PostTask(
124 content::BrowserThread::IO, FROM_HERE, 129 content::BrowserThread::IO, FROM_HERE,
125 base::BindOnce(&TimingUpdatedObserver::BounceTimingUpdate, this, 130 base::Bind(&PageLoadTimingObserver::BounceTimingUpdate,
126 timing, metadata)); 131 base::Unretained(this)));
127 } 132 }
128 return true;
129 } 133 }
130 134
131 void BounceTimingUpdate(const page_load_metrics::PageLoadTiming& timing, 135 private:
132 const page_load_metrics::PageLoadMetadata& metadata) { 136 void BounceTimingUpdate() {
137 base::RunLoop().RunUntilIdle();
Bryan McQuade 2017/04/25 15:41:14 can we add a comment to explain why this is needed
Ken Rockot(use gerrit already) 2017/04/25 19:31:46 I would in fact prefer to never use RunUntilIdle()
lpy 2017/04/26 14:18:41 Done.
133 content::BrowserThread::PostTask( 138 content::BrowserThread::PostTask(
134 content::BrowserThread::UI, FROM_HERE, 139 content::BrowserThread::UI, FROM_HERE,
135 base::BindOnce(&TimingUpdatedObserver::SetTimingUpdatedAndQuit, this)); 140 base::Bind(&PageLoadTimingObserver::SetTimingUpdatedAndQuit,
141 base::Unretained(this)));
136 } 142 }
137 143
138 void Quit() { 144 void Quit() {
139 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 145 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
140 if (run_loop_) 146 if (run_loop_)
141 run_loop_->Quit(); 147 run_loop_->Quit();
142 } 148 }
143 149
144 void SetTimingUpdatedAndQuit() { 150 void SetTimingUpdatedAndQuit() {
145 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 151 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
146 matched_timing_update_ = true; 152 matched_timing_update_ = true;
147 Quit(); 153 Quit();
148 } 154 }
149 155
150 ~TimingUpdatedObserver() override {}
151
152 std::unique_ptr<base::RunLoop> run_loop_; 156 std::unique_ptr<base::RunLoop> run_loop_;
153 int matching_fields_ = 0; // A bitvector composed from ExpectedTimingFields. 157 int matching_fields_ = 0; // A bitvector composed from ExpectedTimingFields.
154 bool matched_timing_update_ = false; 158 bool matched_timing_update_ = false;
155 int match_document_write_block_reload_ = 0; 159 int match_document_write_block_reload_ = 0;
156 }; 160 };
157 161
158 } // namespace 162 } // namespace
159 163
160 class PageLoadMetricsBrowserTest : public InProcessBrowserTest { 164 namespace page_load_metrics {
165
166 class FakePageLoadMetrics : public mojom::PageLoadMetrics {
161 public: 167 public:
162 PageLoadMetricsBrowserTest() {} 168 explicit FakePageLoadMetrics(content::RenderFrameHost* render_frame_host) {
163 ~PageLoadMetricsBrowserTest() override {} 169 metrics_observer_ = content::WebContentsUserData<
170 page_load_metrics::MetricsWebContentsObserver>::
171 FromWebContents(
172 content::WebContents::FromRenderFrameHost(render_frame_host));
173 metrics_observer_->page_load_metrics_binding_for_testing()
Bryan McQuade 2017/04/25 15:41:14 it seems odd that we need to wire this frame mappi
Ken Rockot(use gerrit already) 2017/04/25 19:31:46 This is true. It should only be necessary to injec
lpy 2017/04/26 14:18:40 We are re-directing the mojo incoming request to t
174 .SetCurrentTargetFrameForTesting(render_frame_host);
175 }
176
177 ~FakePageLoadMetrics() override {}
178
179 void AddObserver(PageLoadTimingObserver* observer) {
Bryan McQuade 2017/04/25 15:41:14 hmm, this doesn't seem like it should be here. i'm
lpy 2017/04/26 14:18:40 The basic idea is the same as the old browser test
180 observers_.push_back(base::WrapUnique(observer));
181 }
182
183 private:
184 void UpdateTiming(const PageLoadTiming& timing,
185 const PageLoadMetadata& metadata) override {
186 metrics_observer_->UpdateTiming(timing, metadata);
187 for (auto& observer : observers_) {
188 observer->UpdateTiming(timing, metadata);
189 }
190 }
191
192 MetricsWebContentsObserver* metrics_observer_;
193 std::vector<std::unique_ptr<PageLoadTimingObserver>> observers_;
194 };
195
196 } // namespace page_load_metrics
197
198 namespace {
199
200 class FakePageLoadMetricsBinder
201 : public content::WebContentsBindingSetTestBinder<
202 page_load_metrics::mojom::PageLoadMetrics> {
203 public:
204 FakePageLoadMetricsBinder(
205 page_load_metrics::mojom::PageLoadMetrics* page_load_metrics)
206 : page_load_metrics_(page_load_metrics) {}
207 ~FakePageLoadMetricsBinder() override {}
208
209 void BindRequest(content::RenderFrameHost* frame_host,
210 page_load_metrics::mojom::PageLoadMetricsAssociatedRequest
211 request) override {
212 bindings_.AddBinding(page_load_metrics_, std::move(request), frame_host);
213 }
214
215 private:
216 page_load_metrics::mojom::PageLoadMetrics* page_load_metrics_;
217 mojo::AssociatedBindingSet<page_load_metrics::mojom::PageLoadMetrics,
218 content::RenderFrameHost*>
219 bindings_;
220
221 DISALLOW_COPY_AND_ASSIGN(FakePageLoadMetricsBinder);
222 };
223
224 } // namespace
225
226 class PageLoadMetricsMojoficationBrowserTest : public InProcessBrowserTest {
227 public:
228 PageLoadMetricsMojoficationBrowserTest() {}
229 ~PageLoadMetricsMojoficationBrowserTest() override {}
230
231 void SetUpCommandLine(base::CommandLine* command_line) override {
232 // We need to set the feature state before the render process is created,
233 // in order for it to inherit the feature state from the browser process.
234 // SetUp() runs too early, and SetUpOnMainThread() runs too late.
235 scoped_feature_list_.InitAndEnableFeature(
236 features::kPageLoadMetricsMojofication);
237 }
164 238
165 protected: 239 protected:
166 void NavigateToUntrackedUrl() { 240 void NavigateToUntrackedUrl() {
167 ui_test_utils::NavigateToURL(browser(), GURL(url::kAboutBlankURL)); 241 ui_test_utils::NavigateToURL(browser(), GURL(url::kAboutBlankURL));
168 } 242 }
169 243
170 bool NoPageLoadMetricsRecorded() { 244 bool NoPageLoadMetricsRecorded() {
171 // Determine whether any 'public' page load metrics are recorded. We exclude 245 // Determine whether any 'public' page load metrics are recorded. We exclude
172 // 'internal' metrics as these may be recorded for debugging purposes. 246 // 'internal' metrics as these may be recorded for debugging purposes.
173 size_t total_pageload_histograms = 247 size_t total_pageload_histograms =
174 histogram_tester_.GetTotalCountsForPrefix("PageLoad.").size(); 248 histogram_tester_.GetTotalCountsForPrefix("PageLoad.").size();
175 size_t total_internal_histograms = 249 size_t total_internal_histograms =
176 histogram_tester_.GetTotalCountsForPrefix("PageLoad.Internal.").size(); 250 histogram_tester_.GetTotalCountsForPrefix("PageLoad.Internal.").size();
177 DCHECK_GE(total_pageload_histograms, total_internal_histograms); 251 DCHECK_GE(total_pageload_histograms, total_internal_histograms);
178 return total_pageload_histograms - total_internal_histograms == 0; 252 return total_pageload_histograms - total_internal_histograms == 0;
179 } 253 }
180 254
181 scoped_refptr<TimingUpdatedObserver> CreateTimingUpdatedObserver() { 255 PageLoadTimingObserver* CreatePageLoadTimingObserver() {
182 content::WebContents* web_contents = 256 if (!fake_page_load_metrics_) {
183 browser()->tab_strip_model()->GetActiveWebContents(); 257 content::WebContents* web_contents =
184 scoped_refptr<TimingUpdatedObserver> observer(new TimingUpdatedObserver( 258 browser()->tab_strip_model()->GetActiveWebContents();
185 web_contents->GetRenderViewHost()->GetWidget())); 259 fake_page_load_metrics_.reset(new page_load_metrics::FakePageLoadMetrics(
260 web_contents->GetMainFrame()));
261 content::WebContentsBindingSet::GetForWebContents<
262 page_load_metrics::mojom::PageLoadMetrics>(web_contents)
263 ->SetBinderForTesting(base::MakeUnique<FakePageLoadMetricsBinder>(
264 fake_page_load_metrics_.get()));
265 }
266 PageLoadTimingObserver* observer = new PageLoadTimingObserver();
267 fake_page_load_metrics_->AddObserver(observer);
186 return observer; 268 return observer;
187 } 269 }
188 270
271 base::test::ScopedFeatureList scoped_feature_list_;
272 std::unique_ptr<page_load_metrics::FakePageLoadMetrics>
273 fake_page_load_metrics_;
189 base::HistogramTester histogram_tester_; 274 base::HistogramTester histogram_tester_;
190 275
191 private: 276 private:
192 DISALLOW_COPY_AND_ASSIGN(PageLoadMetricsBrowserTest); 277 DISALLOW_COPY_AND_ASSIGN(PageLoadMetricsMojoficationBrowserTest);
193 }; 278 };
194 279
195 void FailAllNetworkTransactions(net::URLRequestContextGetter* getter) { 280 IN_PROC_BROWSER_TEST_F(PageLoadMetricsMojoficationBrowserTest, NoNavigation) {
196 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); 281 ASSERT_TRUE(
197 net::HttpCache* cache( 282 base::FeatureList::IsEnabled(features::kPageLoadMetricsMojofication));
198 getter->GetURLRequestContext()->http_transaction_factory()->GetCache());
199 DCHECK(cache);
200 std::unique_ptr<net::FailingHttpTransactionFactory> factory(
201 new net::FailingHttpTransactionFactory(cache->GetSession(),
202 net::ERR_FAILED));
203 // Throw away old version; since this is a browser test, there is no
204 // need to restore the old state.
205 cache->SetHttpNetworkTransactionFactoryForTesting(std::move(factory));
206 }
207
208 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, NoNavigation) {
209 ASSERT_TRUE(embedded_test_server()->Start()); 283 ASSERT_TRUE(embedded_test_server()->Start());
210 EXPECT_TRUE(NoPageLoadMetricsRecorded()); 284 EXPECT_TRUE(NoPageLoadMetricsRecorded());
211 } 285 }
212 286
213 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, NewPage) { 287 IN_PROC_BROWSER_TEST_F(PageLoadMetricsMojoficationBrowserTest, NewPage) {
288 ASSERT_TRUE(
289 base::FeatureList::IsEnabled(features::kPageLoadMetricsMojofication));
214 ASSERT_TRUE(embedded_test_server()->Start()); 290 ASSERT_TRUE(embedded_test_server()->Start());
215 291
216 ui_test_utils::NavigateToURL(browser(), 292 ui_test_utils::NavigateToURL(browser(),
217 embedded_test_server()->GetURL("/title1.html")); 293 embedded_test_server()->GetURL("/title1.html"));
218 NavigateToUntrackedUrl(); 294 NavigateToUntrackedUrl();
219 295
220 histogram_tester_.ExpectTotalCount(internal::kHistogramDomContentLoaded, 1); 296 histogram_tester_.ExpectTotalCount(internal::kHistogramDomContentLoaded, 1);
221 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 1); 297 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 1);
222 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 1); 298 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 1);
223 histogram_tester_.ExpectTotalCount(internal::kHistogramParseDuration, 1); 299 histogram_tester_.ExpectTotalCount(internal::kHistogramParseDuration, 1);
224 histogram_tester_.ExpectTotalCount( 300 histogram_tester_.ExpectTotalCount(
225 internal::kHistogramParseBlockedOnScriptLoad, 1); 301 internal::kHistogramParseBlockedOnScriptLoad, 1);
226 histogram_tester_.ExpectTotalCount( 302 histogram_tester_.ExpectTotalCount(
227 internal::kHistogramParseBlockedOnScriptExecution, 1); 303 internal::kHistogramParseBlockedOnScriptExecution, 1);
228 histogram_tester_.ExpectTotalCount(internal::kHistogramTotalBytes, 1); 304 histogram_tester_.ExpectTotalCount(internal::kHistogramTotalBytes, 1);
229 histogram_tester_.ExpectTotalCount( 305 histogram_tester_.ExpectTotalCount(
230 internal::kHistogramPageTimingForegroundDuration, 1); 306 internal::kHistogramPageTimingForegroundDuration, 1);
231 307
232 // Verify that NoPageLoadMetricsRecorded returns false when PageLoad metrics 308 // Verify that NoPageLoadMetricsRecorded returns false when PageLoad metrics
233 // have been recorded. 309 // have been recorded.
234 EXPECT_FALSE(NoPageLoadMetricsRecorded()); 310 EXPECT_FALSE(NoPageLoadMetricsRecorded());
235 } 311 }
236 312
237 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, SameDocumentNavigation) { 313 IN_PROC_BROWSER_TEST_F(PageLoadMetricsMojoficationBrowserTest,
314 SameDocumentNavigation) {
315 ASSERT_TRUE(
316 base::FeatureList::IsEnabled(features::kPageLoadMetricsMojofication));
238 ASSERT_TRUE(embedded_test_server()->Start()); 317 ASSERT_TRUE(embedded_test_server()->Start());
239 318
240 ui_test_utils::NavigateToURL(browser(), 319 ui_test_utils::NavigateToURL(browser(),
241 embedded_test_server()->GetURL("/title1.html")); 320 embedded_test_server()->GetURL("/title1.html"));
242 ui_test_utils::NavigateToURL( 321 ui_test_utils::NavigateToURL(
243 browser(), embedded_test_server()->GetURL("/title1.html#hash")); 322 browser(), embedded_test_server()->GetURL("/title1.html#hash"));
244 NavigateToUntrackedUrl(); 323 NavigateToUntrackedUrl();
245 324
246 histogram_tester_.ExpectTotalCount(internal::kHistogramDomContentLoaded, 1); 325 histogram_tester_.ExpectTotalCount(internal::kHistogramDomContentLoaded, 1);
247 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 1); 326 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 1);
248 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 1); 327 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 1);
249 } 328 }
250 329
251 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, SameUrlNavigation) { 330 IN_PROC_BROWSER_TEST_F(PageLoadMetricsMojoficationBrowserTest,
331 SameUrlNavigation) {
332 ASSERT_TRUE(
333 base::FeatureList::IsEnabled(features::kPageLoadMetricsMojofication));
252 ASSERT_TRUE(embedded_test_server()->Start()); 334 ASSERT_TRUE(embedded_test_server()->Start());
253 335
254 ui_test_utils::NavigateToURL(browser(), 336 ui_test_utils::NavigateToURL(browser(),
255 embedded_test_server()->GetURL("/title1.html")); 337 embedded_test_server()->GetURL("/title1.html"));
256 ui_test_utils::NavigateToURL(browser(), 338 ui_test_utils::NavigateToURL(browser(),
257 embedded_test_server()->GetURL("/title1.html")); 339 embedded_test_server()->GetURL("/title1.html"));
258 NavigateToUntrackedUrl(); 340 NavigateToUntrackedUrl();
259 341
260 // We expect one histogram sample for each navigation to title1.html. 342 // We expect one histogram sample for each navigation to title1.html.
261 histogram_tester_.ExpectTotalCount(internal::kHistogramDomContentLoaded, 2); 343 histogram_tester_.ExpectTotalCount(internal::kHistogramDomContentLoaded, 2);
262 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 2); 344 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 2);
263 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 2); 345 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 2);
264 } 346 }
265 347
266 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, NonHtmlMainResource) { 348 IN_PROC_BROWSER_TEST_F(PageLoadMetricsMojoficationBrowserTest,
349 NonHtmlMainResource) {
350 ASSERT_TRUE(
351 base::FeatureList::IsEnabled(features::kPageLoadMetricsMojofication));
267 ASSERT_TRUE(embedded_test_server()->Start()); 352 ASSERT_TRUE(embedded_test_server()->Start());
268 353
269 ui_test_utils::NavigateToURL(browser(), 354 ui_test_utils::NavigateToURL(browser(),
270 embedded_test_server()->GetURL("/circle.svg")); 355 embedded_test_server()->GetURL("/circle.svg"));
271 NavigateToUntrackedUrl(); 356 NavigateToUntrackedUrl();
272 EXPECT_TRUE(NoPageLoadMetricsRecorded()); 357 EXPECT_TRUE(NoPageLoadMetricsRecorded());
273 } 358 }
274 359
275 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, NonHttpOrHttpsUrl) { 360 IN_PROC_BROWSER_TEST_F(PageLoadMetricsMojoficationBrowserTest,
361 NonHttpOrHttpsUrl) {
362 ASSERT_TRUE(
363 base::FeatureList::IsEnabled(features::kPageLoadMetricsMojofication));
276 ASSERT_TRUE(embedded_test_server()->Start()); 364 ASSERT_TRUE(embedded_test_server()->Start());
277 365
278 ui_test_utils::NavigateToURL(browser(), GURL(chrome::kChromeUIVersionURL)); 366 ui_test_utils::NavigateToURL(browser(), GURL(chrome::kChromeUIVersionURL));
279 NavigateToUntrackedUrl(); 367 NavigateToUntrackedUrl();
280 EXPECT_TRUE(NoPageLoadMetricsRecorded()); 368 EXPECT_TRUE(NoPageLoadMetricsRecorded());
281 } 369 }
282 370
283 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, HttpErrorPage) { 371 IN_PROC_BROWSER_TEST_F(PageLoadMetricsMojoficationBrowserTest, HttpErrorPage) {
372 ASSERT_TRUE(
373 base::FeatureList::IsEnabled(features::kPageLoadMetricsMojofication));
284 ASSERT_TRUE(embedded_test_server()->Start()); 374 ASSERT_TRUE(embedded_test_server()->Start());
285 375
286 ui_test_utils::NavigateToURL( 376 ui_test_utils::NavigateToURL(
287 browser(), embedded_test_server()->GetURL("/page_load_metrics/404.html")); 377 browser(), embedded_test_server()->GetURL("/page_load_metrics/404.html"));
288 NavigateToUntrackedUrl(); 378 NavigateToUntrackedUrl();
289 EXPECT_TRUE(NoPageLoadMetricsRecorded()); 379 EXPECT_TRUE(NoPageLoadMetricsRecorded());
290 } 380 }
291 381
292 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, ChromeErrorPage) { 382 IN_PROC_BROWSER_TEST_F(PageLoadMetricsMojoficationBrowserTest,
383 ChromeErrorPage) {
384 ASSERT_TRUE(
385 base::FeatureList::IsEnabled(features::kPageLoadMetricsMojofication));
293 ASSERT_TRUE(embedded_test_server()->Start()); 386 ASSERT_TRUE(embedded_test_server()->Start());
294 387
295 // Configure the network stack to fail all attempted loads with a network 388 // Configure the network stack to fail all attempted loads with a network
296 // error, which will cause Chrome to display an error page. 389 // error, which will cause Chrome to display an error page.
297 scoped_refptr<net::URLRequestContextGetter> url_request_context_getter = 390 scoped_refptr<net::URLRequestContextGetter> url_request_context_getter =
298 browser()->profile()->GetRequestContext(); 391 browser()->profile()->GetRequestContext();
299 content::BrowserThread::PostTask( 392 content::BrowserThread::PostTask(
300 content::BrowserThread::IO, FROM_HERE, 393 content::BrowserThread::IO, FROM_HERE,
301 base::BindOnce(&FailAllNetworkTransactions, 394 base::Bind(&FailAllNetworkTransactions,
302 base::RetainedRef(url_request_context_getter))); 395 base::RetainedRef(url_request_context_getter)));
303 396
304 ui_test_utils::NavigateToURL(browser(), 397 ui_test_utils::NavigateToURL(browser(),
305 embedded_test_server()->GetURL("/title1.html")); 398 embedded_test_server()->GetURL("/title1.html"));
306 NavigateToUntrackedUrl(); 399 NavigateToUntrackedUrl();
307 EXPECT_TRUE(NoPageLoadMetricsRecorded()); 400 EXPECT_TRUE(NoPageLoadMetricsRecorded());
308 } 401 }
309 402
310 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, Ignore204Pages) { 403 IN_PROC_BROWSER_TEST_F(PageLoadMetricsMojoficationBrowserTest, Ignore204Pages) {
404 ASSERT_TRUE(
405 base::FeatureList::IsEnabled(features::kPageLoadMetricsMojofication));
311 ASSERT_TRUE(embedded_test_server()->Start()); 406 ASSERT_TRUE(embedded_test_server()->Start());
312 407
313 ui_test_utils::NavigateToURL(browser(), 408 ui_test_utils::NavigateToURL(browser(),
314 embedded_test_server()->GetURL("/page204.html")); 409 embedded_test_server()->GetURL("/page204.html"));
315 NavigateToUntrackedUrl(); 410 NavigateToUntrackedUrl();
316 EXPECT_TRUE(NoPageLoadMetricsRecorded()); 411 EXPECT_TRUE(NoPageLoadMetricsRecorded());
317 } 412 }
318 413
319 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, IgnoreDownloads) { 414 IN_PROC_BROWSER_TEST_F(PageLoadMetricsMojoficationBrowserTest,
415 IgnoreDownloads) {
416 ASSERT_TRUE(
417 base::FeatureList::IsEnabled(features::kPageLoadMetricsMojofication));
320 ASSERT_TRUE(embedded_test_server()->Start()); 418 ASSERT_TRUE(embedded_test_server()->Start());
321 419
322 base::ScopedTempDir downloads_directory; 420 base::ScopedTempDir downloads_directory;
323 ASSERT_TRUE(downloads_directory.CreateUniqueTempDir()); 421 ASSERT_TRUE(downloads_directory.CreateUniqueTempDir());
324 browser()->profile()->GetPrefs()->SetFilePath( 422 browser()->profile()->GetPrefs()->SetFilePath(
325 prefs::kDownloadDefaultDirectory, downloads_directory.GetPath()); 423 prefs::kDownloadDefaultDirectory, downloads_directory.GetPath());
326 content::DownloadTestObserverTerminal downloads_observer( 424 content::DownloadTestObserverTerminal downloads_observer(
327 content::BrowserContext::GetDownloadManager(browser()->profile()), 425 content::BrowserContext::GetDownloadManager(browser()->profile()),
328 1, // == wait_count (only waiting for "download-test3.gif"). 426 1, // == wait_count (only waiting for "download-test3.gif").
329 content::DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_FAIL); 427 content::DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_FAIL);
330 428
331 ui_test_utils::NavigateToURL( 429 ui_test_utils::NavigateToURL(
332 browser(), embedded_test_server()->GetURL("/download-test3.gif")); 430 browser(), embedded_test_server()->GetURL("/download-test3.gif"));
333 downloads_observer.WaitForFinished(); 431 downloads_observer.WaitForFinished();
334 432
335 NavigateToUntrackedUrl(); 433 NavigateToUntrackedUrl();
336 EXPECT_TRUE(NoPageLoadMetricsRecorded()); 434 EXPECT_TRUE(NoPageLoadMetricsRecorded());
337 } 435 }
338 436
339 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, PreloadDocumentWrite) { 437 IN_PROC_BROWSER_TEST_F(PageLoadMetricsMojoficationBrowserTest,
438 PreloadDocumentWrite) {
439 ASSERT_TRUE(
440 base::FeatureList::IsEnabled(features::kPageLoadMetricsMojofication));
340 ASSERT_TRUE(embedded_test_server()->Start()); 441 ASSERT_TRUE(embedded_test_server()->Start());
341 442
342 scoped_refptr<TimingUpdatedObserver> fcp_observer = 443 PageLoadTimingObserver* fcp_observer = CreatePageLoadTimingObserver();
343 CreateTimingUpdatedObserver();
344 fcp_observer->AddMatchingFields( 444 fcp_observer->AddMatchingFields(
345 TimingUpdatedObserver::FIRST_CONTENTFUL_PAINT); 445 PageLoadTimingObserver::FIRST_CONTENTFUL_PAINT);
346 446
347 ui_test_utils::NavigateToURL( 447 ui_test_utils::NavigateToURL(
348 browser(), embedded_test_server()->GetURL( 448 browser(), embedded_test_server()->GetURL(
349 "/page_load_metrics/document_write_external_script.html")); 449 "/page_load_metrics/document_write_external_script.html"));
350 fcp_observer->WaitForMatchingIPC(); 450 fcp_observer->WaitForTimingUpdated();
351 451
352 histogram_tester_.ExpectTotalCount( 452 histogram_tester_.ExpectTotalCount(
353 internal::kHistogramDocWriteParseStartToFirstContentfulPaint, 1); 453 internal::kHistogramDocWriteParseStartToFirstContentfulPaint, 1);
354 } 454 }
355 455
356 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, NoPreloadDocumentWrite) { 456 IN_PROC_BROWSER_TEST_F(PageLoadMetricsMojoficationBrowserTest,
457 NoPreloadDocumentWrite) {
458 ASSERT_TRUE(
459 base::FeatureList::IsEnabled(features::kPageLoadMetricsMojofication));
357 ASSERT_TRUE(embedded_test_server()->Start()); 460 ASSERT_TRUE(embedded_test_server()->Start());
358 461
359 ui_test_utils::NavigateToURL( 462 ui_test_utils::NavigateToURL(
360 browser(), embedded_test_server()->GetURL( 463 browser(), embedded_test_server()->GetURL(
361 "/page_load_metrics/document_write_no_script.html")); 464 "/page_load_metrics/document_write_no_script.html"));
362 NavigateToUntrackedUrl(); 465 NavigateToUntrackedUrl();
363 466
364 histogram_tester_.ExpectTotalCount( 467 histogram_tester_.ExpectTotalCount(
365 internal::kHistogramDocWriteParseStartToFirstContentfulPaint, 0); 468 internal::kHistogramDocWriteParseStartToFirstContentfulPaint, 0);
366 } 469 }
367 470
368 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, NoDocumentWrite) { 471 IN_PROC_BROWSER_TEST_F(PageLoadMetricsMojoficationBrowserTest,
472 NoDocumentWrite) {
473 ASSERT_TRUE(
474 base::FeatureList::IsEnabled(features::kPageLoadMetricsMojofication));
369 ASSERT_TRUE(embedded_test_server()->Start()); 475 ASSERT_TRUE(embedded_test_server()->Start());
370 476
371 scoped_refptr<TimingUpdatedObserver> fcp_observer = 477 PageLoadTimingObserver* fcp_observer = CreatePageLoadTimingObserver();
372 CreateTimingUpdatedObserver();
373 fcp_observer->AddMatchingFields( 478 fcp_observer->AddMatchingFields(
374 TimingUpdatedObserver::FIRST_CONTENTFUL_PAINT); 479 PageLoadTimingObserver::FIRST_CONTENTFUL_PAINT);
375 480
376 ui_test_utils::NavigateToURL(browser(), 481 ui_test_utils::NavigateToURL(browser(),
377 embedded_test_server()->GetURL("/title1.html")); 482 embedded_test_server()->GetURL("/title1.html"));
378 fcp_observer->WaitForMatchingIPC(); 483 fcp_observer->WaitForTimingUpdated();
379 484
380 histogram_tester_.ExpectTotalCount( 485 histogram_tester_.ExpectTotalCount(
381 internal::kHistogramDocWriteParseStartToFirstContentfulPaint, 0); 486 internal::kHistogramDocWriteParseStartToFirstContentfulPaint, 0);
382 histogram_tester_.ExpectTotalCount( 487 histogram_tester_.ExpectTotalCount(
383 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 0); 488 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 0);
384 histogram_tester_.ExpectTotalCount(internal::kHistogramDocWriteBlockCount, 0); 489 histogram_tester_.ExpectTotalCount(internal::kHistogramDocWriteBlockCount, 0);
385 } 490 }
386 491
387 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, DocumentWriteBlock) { 492 IN_PROC_BROWSER_TEST_F(PageLoadMetricsMojoficationBrowserTest,
493 DocumentWriteBlock) {
494 ASSERT_TRUE(
495 base::FeatureList::IsEnabled(features::kPageLoadMetricsMojofication));
388 ASSERT_TRUE(embedded_test_server()->Start()); 496 ASSERT_TRUE(embedded_test_server()->Start());
389 497
390 scoped_refptr<TimingUpdatedObserver> fcp_observer = 498 PageLoadTimingObserver* fcp_observer = CreatePageLoadTimingObserver();
391 CreateTimingUpdatedObserver();
392 fcp_observer->AddMatchingFields( 499 fcp_observer->AddMatchingFields(
393 TimingUpdatedObserver::FIRST_CONTENTFUL_PAINT); 500 PageLoadTimingObserver::FIRST_CONTENTFUL_PAINT);
394 501
395 ui_test_utils::NavigateToURL( 502 ui_test_utils::NavigateToURL(
396 browser(), embedded_test_server()->GetURL( 503 browser(), embedded_test_server()->GetURL(
397 "/page_load_metrics/document_write_script_block.html")); 504 "/page_load_metrics/document_write_script_block.html"));
398 fcp_observer->WaitForMatchingIPC(); 505 fcp_observer->WaitForTimingUpdated();
399 506
400 histogram_tester_.ExpectTotalCount( 507 histogram_tester_.ExpectTotalCount(
401 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 1); 508 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 1);
402 histogram_tester_.ExpectTotalCount(internal::kHistogramDocWriteBlockCount, 1); 509 histogram_tester_.ExpectTotalCount(internal::kHistogramDocWriteBlockCount, 1);
403 } 510 }
404 511
405 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, DocumentWriteReload) { 512 IN_PROC_BROWSER_TEST_F(PageLoadMetricsMojoficationBrowserTest,
513 DocumentWriteReload) {
514 ASSERT_TRUE(
515 base::FeatureList::IsEnabled(features::kPageLoadMetricsMojofication));
406 ASSERT_TRUE(embedded_test_server()->Start()); 516 ASSERT_TRUE(embedded_test_server()->Start());
407 517
408 scoped_refptr<TimingUpdatedObserver> fcp_observer = 518 PageLoadTimingObserver* fcp_observer = CreatePageLoadTimingObserver();
409 CreateTimingUpdatedObserver();
410 fcp_observer->AddMatchingFields( 519 fcp_observer->AddMatchingFields(
411 TimingUpdatedObserver::FIRST_CONTENTFUL_PAINT); 520 PageLoadTimingObserver::FIRST_CONTENTFUL_PAINT);
412 scoped_refptr<TimingUpdatedObserver> reload_observer = 521 PageLoadTimingObserver* reload_observer = CreatePageLoadTimingObserver();
413 CreateTimingUpdatedObserver();
414 reload_observer->MatchDocumentWriteBlockReload(2); 522 reload_observer->MatchDocumentWriteBlockReload(2);
415 523
416 ui_test_utils::NavigateToURL( 524 ui_test_utils::NavigateToURL(
417 browser(), embedded_test_server()->GetURL( 525 browser(), embedded_test_server()->GetURL(
418 "/page_load_metrics/document_write_script_block.html")); 526 "/page_load_metrics/document_write_script_block.html"));
419 527
420 // Reload should not log the histogram as the script is not blocked. 528 // Reload should not log the histogram as the script is not blocked.
421 ui_test_utils::NavigateToURL( 529 ui_test_utils::NavigateToURL(
422 browser(), embedded_test_server()->GetURL( 530 browser(), embedded_test_server()->GetURL(
423 "/page_load_metrics/document_write_script_block.html")); 531 "/page_load_metrics/document_write_script_block.html"));
424 532
425 ui_test_utils::NavigateToURL( 533 ui_test_utils::NavigateToURL(
426 browser(), embedded_test_server()->GetURL( 534 browser(), embedded_test_server()->GetURL(
427 "/page_load_metrics/document_write_script_block.html")); 535 "/page_load_metrics/document_write_script_block.html"));
428 536
429 histogram_tester_.ExpectTotalCount( 537 histogram_tester_.ExpectTotalCount(
430 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 1); 538 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 1);
431 539
432 fcp_observer->WaitForMatchingIPC(); 540 fcp_observer->WaitForTimingUpdated();
433 reload_observer->WaitForMatchingIPC(); 541 reload_observer->WaitForTimingUpdated();
434 542
435 histogram_tester_.ExpectTotalCount( 543 histogram_tester_.ExpectTotalCount(
436 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 1); 544 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 1);
437 545
438 histogram_tester_.ExpectTotalCount( 546 histogram_tester_.ExpectTotalCount(
439 internal::kHistogramDocWriteBlockReloadCount, 2); 547 internal::kHistogramDocWriteBlockReloadCount, 2);
440 histogram_tester_.ExpectTotalCount(internal::kHistogramDocWriteBlockCount, 1); 548 histogram_tester_.ExpectTotalCount(internal::kHistogramDocWriteBlockCount, 1);
441 } 549 }
442 550
443 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, DocumentWriteAsync) { 551 IN_PROC_BROWSER_TEST_F(PageLoadMetricsMojoficationBrowserTest,
552 DocumentWriteAsync) {
553 ASSERT_TRUE(
554 base::FeatureList::IsEnabled(features::kPageLoadMetricsMojofication));
444 ASSERT_TRUE(embedded_test_server()->Start()); 555 ASSERT_TRUE(embedded_test_server()->Start());
445 556
446 ui_test_utils::NavigateToURL( 557 ui_test_utils::NavigateToURL(
447 browser(), embedded_test_server()->GetURL( 558 browser(), embedded_test_server()->GetURL(
448 "/page_load_metrics/document_write_script_async.html")); 559 "/page_load_metrics/document_write_script_async.html"));
449 NavigateToUntrackedUrl(); 560 NavigateToUntrackedUrl();
450 561
451 histogram_tester_.ExpectTotalCount( 562 histogram_tester_.ExpectTotalCount(
452 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 0); 563 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 0);
453 histogram_tester_.ExpectTotalCount(internal::kHistogramDocWriteBlockCount, 0); 564 histogram_tester_.ExpectTotalCount(internal::kHistogramDocWriteBlockCount, 0);
454 } 565 }
455 566
456 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, DocumentWriteSameDomain) { 567 IN_PROC_BROWSER_TEST_F(PageLoadMetricsMojoficationBrowserTest,
568 DocumentWriteSameDomain) {
569 ASSERT_TRUE(
570 base::FeatureList::IsEnabled(features::kPageLoadMetricsMojofication));
457 ASSERT_TRUE(embedded_test_server()->Start()); 571 ASSERT_TRUE(embedded_test_server()->Start());
458 572
459 ui_test_utils::NavigateToURL( 573 ui_test_utils::NavigateToURL(
460 browser(), embedded_test_server()->GetURL( 574 browser(), embedded_test_server()->GetURL(
461 "/page_load_metrics/document_write_external_script.html")); 575 "/page_load_metrics/document_write_external_script.html"));
462 NavigateToUntrackedUrl(); 576 NavigateToUntrackedUrl();
463 577
464 histogram_tester_.ExpectTotalCount( 578 histogram_tester_.ExpectTotalCount(
465 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 0); 579 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 0);
466 histogram_tester_.ExpectTotalCount(internal::kHistogramDocWriteBlockCount, 0); 580 histogram_tester_.ExpectTotalCount(internal::kHistogramDocWriteBlockCount, 0);
467 } 581 }
468 582
469 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, NoDocumentWriteScript) { 583 IN_PROC_BROWSER_TEST_F(PageLoadMetricsMojoficationBrowserTest,
584 NoDocumentWriteScript) {
585 ASSERT_TRUE(
586 base::FeatureList::IsEnabled(features::kPageLoadMetricsMojofication));
470 ASSERT_TRUE(embedded_test_server()->Start()); 587 ASSERT_TRUE(embedded_test_server()->Start());
471 588
472 ui_test_utils::NavigateToURL( 589 ui_test_utils::NavigateToURL(
473 browser(), embedded_test_server()->GetURL( 590 browser(), embedded_test_server()->GetURL(
474 "/page_load_metrics/document_write_no_script.html")); 591 "/page_load_metrics/document_write_no_script.html"));
475 NavigateToUntrackedUrl(); 592 NavigateToUntrackedUrl();
476 593
477 histogram_tester_.ExpectTotalCount( 594 histogram_tester_.ExpectTotalCount(
478 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 0); 595 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 0);
479 histogram_tester_.ExpectTotalCount(internal::kHistogramDocWriteBlockCount, 0); 596 histogram_tester_.ExpectTotalCount(internal::kHistogramDocWriteBlockCount, 0);
480 } 597 }
481 598
482 // TODO(crbug.com/712935): Flaky on Linux dbg. 599 IN_PROC_BROWSER_TEST_F(PageLoadMetricsMojoficationBrowserTest, BadXhtml) {
483 #if defined(OS_LINUX) && !defined(NDEBUG) 600 ASSERT_TRUE(
484 #define MAYBE_BadXhtml DISABLED_BadXhtml 601 base::FeatureList::IsEnabled(features::kPageLoadMetricsMojofication));
485 #else
486 #define MAYBE_BadXhtml BadXhtml
487 #endif
488 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, MAYBE_BadXhtml) {
489 ASSERT_TRUE(embedded_test_server()->Start()); 602 ASSERT_TRUE(embedded_test_server()->Start());
490 603
491 scoped_refptr<TimingUpdatedObserver> timing_observer = 604 PageLoadTimingObserver* timing_observer = CreatePageLoadTimingObserver();
492 CreateTimingUpdatedObserver(); 605 timing_observer->AddMatchingFields(PageLoadTimingObserver::FIRST_PAINT);
493 timing_observer->AddMatchingFields(TimingUpdatedObserver::FIRST_PAINT);
494 606
495 // When an XHTML page contains invalid XML, it causes a paint of the error 607 // When an XHTML page contains invalid XML, it causes a paint of the error
496 // message without a layout. Page load metrics currently treats this as an 608 // message without a layout. Page load metrics currently treats this as an
497 // error. Eventually, we'll fix this by special casing the handling of 609 // error. Eventually, we'll fix this by special casing the handling of
498 // documents with non-well-formed XML on the blink side. See crbug.com/627607 610 // documents with non-well-formed XML on the blink side. See crbug.com/627607
499 // for more. 611 // for more.
500 ui_test_utils::NavigateToURL( 612 ui_test_utils::NavigateToURL(
501 browser(), 613 browser(),
502 embedded_test_server()->GetURL("/page_load_metrics/badxml.xhtml")); 614 embedded_test_server()->GetURL("/page_load_metrics/badxml.xhtml"));
503 615
504 timing_observer->WaitForMatchingIPC(); 616 timing_observer->WaitForTimingUpdated();
505 617
506 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 0); 618 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 0);
507 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstPaint, 0); 619 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstPaint, 0);
508 histogram_tester_.ExpectTotalCount(page_load_metrics::internal::kErrorEvents, 620 histogram_tester_.ExpectTotalCount(page_load_metrics::internal::kErrorEvents,
509 1); 621 1);
510 histogram_tester_.ExpectBucketCount( 622 histogram_tester_.ExpectBucketCount(
511 page_load_metrics::internal::kErrorEvents, 623 page_load_metrics::internal::kErrorEvents,
512 page_load_metrics::ERR_BAD_TIMING_IPC_INVALID_TIMING, 1); 624 page_load_metrics::ERR_BAD_TIMING_IPC_INVALID_TIMING, 1);
513 625
514 histogram_tester_.ExpectTotalCount( 626 histogram_tester_.ExpectTotalCount(
515 page_load_metrics::internal::kPageLoadTimingStatus, 1); 627 page_load_metrics::internal::kPageLoadTimingStatus, 1);
516 histogram_tester_.ExpectBucketCount( 628 histogram_tester_.ExpectBucketCount(
517 page_load_metrics::internal::kPageLoadTimingStatus, 629 page_load_metrics::internal::kPageLoadTimingStatus,
518 page_load_metrics::internal::INVALID_ORDER_FIRST_LAYOUT_FIRST_PAINT, 1); 630 page_load_metrics::internal::INVALID_ORDER_FIRST_LAYOUT_FIRST_PAINT, 1);
519 } 631 }
520 632
521 // Test code that aborts provisional navigations. 633 // Test code that aborts provisional navigations.
522 // TODO(csharrison): Move these to unit tests once the navigation API in content 634 // TODO(csharrison): Move these to unit tests once the navigation API in content
523 // properly calls NavigationHandle/NavigationThrottle methods. 635 // properly calls NavigationHandle/NavigationThrottle methods.
524 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, AbortNewNavigation) { 636 IN_PROC_BROWSER_TEST_F(PageLoadMetricsMojoficationBrowserTest,
637 AbortNewNavigation) {
638 ASSERT_TRUE(
639 base::FeatureList::IsEnabled(features::kPageLoadMetricsMojofication));
525 ASSERT_TRUE(embedded_test_server()->Start()); 640 ASSERT_TRUE(embedded_test_server()->Start());
526 641
527 GURL url(embedded_test_server()->GetURL("/title1.html")); 642 GURL url(embedded_test_server()->GetURL("/title1.html"));
528 chrome::NavigateParams params(browser(), url, ui::PAGE_TRANSITION_LINK); 643 chrome::NavigateParams params(browser(), url, ui::PAGE_TRANSITION_LINK);
529 content::TestNavigationManager manager( 644 content::TestNavigationManager manager(
530 browser()->tab_strip_model()->GetActiveWebContents(), url); 645 browser()->tab_strip_model()->GetActiveWebContents(), url);
531 646
532 chrome::Navigate(&params); 647 chrome::Navigate(&params);
533 EXPECT_TRUE(manager.WaitForRequestStart()); 648 EXPECT_TRUE(manager.WaitForRequestStart());
534 649
535 GURL url2(embedded_test_server()->GetURL("/title2.html")); 650 GURL url2(embedded_test_server()->GetURL("/title2.html"));
536 chrome::NavigateParams params2(browser(), url2, 651 chrome::NavigateParams params2(browser(), url2,
537 ui::PAGE_TRANSITION_FROM_ADDRESS_BAR); 652 ui::PAGE_TRANSITION_FROM_ADDRESS_BAR);
538 content::TestNavigationManager manager2( 653 content::TestNavigationManager manager2(
539 browser()->tab_strip_model()->GetActiveWebContents(), url2); 654 browser()->tab_strip_model()->GetActiveWebContents(), url2);
540 chrome::Navigate(&params2); 655 chrome::Navigate(&params2);
541 656
542 manager2.WaitForNavigationFinished(); 657 manager2.WaitForNavigationFinished();
543 histogram_tester_.ExpectTotalCount( 658 histogram_tester_.ExpectTotalCount(
544 internal::kHistogramAbortNewNavigationBeforeCommit, 1); 659 internal::kHistogramAbortNewNavigationBeforeCommit, 1);
545 } 660 }
546 661
547 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, AbortReload) { 662 IN_PROC_BROWSER_TEST_F(PageLoadMetricsMojoficationBrowserTest, AbortReload) {
663 ASSERT_TRUE(
664 base::FeatureList::IsEnabled(features::kPageLoadMetricsMojofication));
548 ASSERT_TRUE(embedded_test_server()->Start()); 665 ASSERT_TRUE(embedded_test_server()->Start());
549 666
550 GURL url(embedded_test_server()->GetURL("/title1.html")); 667 GURL url(embedded_test_server()->GetURL("/title1.html"));
551 chrome::NavigateParams params(browser(), url, ui::PAGE_TRANSITION_LINK); 668 chrome::NavigateParams params(browser(), url, ui::PAGE_TRANSITION_LINK);
552 content::TestNavigationManager manager( 669 content::TestNavigationManager manager(
553 browser()->tab_strip_model()->GetActiveWebContents(), url); 670 browser()->tab_strip_model()->GetActiveWebContents(), url);
554 671
555 chrome::Navigate(&params); 672 chrome::Navigate(&params);
556 EXPECT_TRUE(manager.WaitForRequestStart()); 673 EXPECT_TRUE(manager.WaitForRequestStart());
557 674
558 chrome::NavigateParams params2(browser(), url, ui::PAGE_TRANSITION_RELOAD); 675 chrome::NavigateParams params2(browser(), url, ui::PAGE_TRANSITION_RELOAD);
559 content::TestNavigationManager manager2( 676 content::TestNavigationManager manager2(
560 browser()->tab_strip_model()->GetActiveWebContents(), url); 677 browser()->tab_strip_model()->GetActiveWebContents(), url);
561 chrome::Navigate(&params2); 678 chrome::Navigate(&params2);
562 679
563 manager2.WaitForNavigationFinished(); 680 manager2.WaitForNavigationFinished();
564 histogram_tester_.ExpectTotalCount( 681 histogram_tester_.ExpectTotalCount(
565 internal::kHistogramAbortReloadBeforeCommit, 1); 682 internal::kHistogramAbortReloadBeforeCommit, 1);
566 } 683 }
567 684
568 // TODO(crbug.com/675061): Flaky on Win7 dbg. 685 // TODO(crbug.com/675061): Flaky on Win7 dbg.
569 #if defined(OS_WIN) 686 #if defined(OS_WIN)
570 #define MAYBE_AbortClose DISABLED_AbortClose 687 #define MAYBE_AbortClose DISABLED_AbortClose
571 #else 688 #else
572 #define MAYBE_AbortClose AbortClose 689 #define MAYBE_AbortClose AbortClose
573 #endif 690 #endif
574 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, MAYBE_AbortClose) { 691 IN_PROC_BROWSER_TEST_F(PageLoadMetricsMojoficationBrowserTest,
692 MAYBE_AbortClose) {
693 ASSERT_TRUE(
694 base::FeatureList::IsEnabled(features::kPageLoadMetricsMojofication));
575 ASSERT_TRUE(embedded_test_server()->Start()); 695 ASSERT_TRUE(embedded_test_server()->Start());
576 696
577 GURL url(embedded_test_server()->GetURL("/title1.html")); 697 GURL url(embedded_test_server()->GetURL("/title1.html"));
578 chrome::NavigateParams params(browser(), url, ui::PAGE_TRANSITION_LINK); 698 chrome::NavigateParams params(browser(), url, ui::PAGE_TRANSITION_LINK);
579 content::TestNavigationManager manager( 699 content::TestNavigationManager manager(
580 browser()->tab_strip_model()->GetActiveWebContents(), url); 700 browser()->tab_strip_model()->GetActiveWebContents(), url);
581 701
582 chrome::Navigate(&params); 702 chrome::Navigate(&params);
583 EXPECT_TRUE(manager.WaitForRequestStart()); 703 EXPECT_TRUE(manager.WaitForRequestStart());
584 704
585 browser()->tab_strip_model()->GetActiveWebContents()->Close(); 705 browser()->tab_strip_model()->GetActiveWebContents()->Close();
586 706
587 manager.WaitForNavigationFinished(); 707 manager.WaitForNavigationFinished();
588 708
589 histogram_tester_.ExpectTotalCount(internal::kHistogramAbortCloseBeforeCommit, 709 histogram_tester_.ExpectTotalCount(internal::kHistogramAbortCloseBeforeCommit,
590 1); 710 1);
591 } 711 }
592 712
593 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, AbortMultiple) { 713 IN_PROC_BROWSER_TEST_F(PageLoadMetricsMojoficationBrowserTest, AbortMultiple) {
714 ASSERT_TRUE(
715 base::FeatureList::IsEnabled(features::kPageLoadMetricsMojofication));
594 ASSERT_TRUE(embedded_test_server()->Start()); 716 ASSERT_TRUE(embedded_test_server()->Start());
595 717
596 GURL url(embedded_test_server()->GetURL("/title1.html")); 718 GURL url(embedded_test_server()->GetURL("/title1.html"));
597 chrome::NavigateParams params(browser(), url, ui::PAGE_TRANSITION_LINK); 719 chrome::NavigateParams params(browser(), url, ui::PAGE_TRANSITION_LINK);
598 content::TestNavigationManager manager( 720 content::TestNavigationManager manager(
599 browser()->tab_strip_model()->GetActiveWebContents(), url); 721 browser()->tab_strip_model()->GetActiveWebContents(), url);
600 722
601 chrome::Navigate(&params); 723 chrome::Navigate(&params);
602 EXPECT_TRUE(manager.WaitForRequestStart()); 724 EXPECT_TRUE(manager.WaitForRequestStart());
603 725
(...skipping 14 matching lines...) Expand all
618 740
619 EXPECT_TRUE(manager3.WaitForRequestStart()); 741 EXPECT_TRUE(manager3.WaitForRequestStart());
620 manager2.WaitForNavigationFinished(); 742 manager2.WaitForNavigationFinished();
621 743
622 manager3.WaitForNavigationFinished(); 744 manager3.WaitForNavigationFinished();
623 745
624 histogram_tester_.ExpectTotalCount( 746 histogram_tester_.ExpectTotalCount(
625 internal::kHistogramAbortNewNavigationBeforeCommit, 2); 747 internal::kHistogramAbortNewNavigationBeforeCommit, 2);
626 } 748 }
627 749
628 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, 750 IN_PROC_BROWSER_TEST_F(PageLoadMetricsMojoficationBrowserTest,
629 NoAbortMetricsOnClientRedirect) { 751 NoAbortMetricsOnClientRedirect) {
752 ASSERT_TRUE(
753 base::FeatureList::IsEnabled(features::kPageLoadMetricsMojofication));
630 ASSERT_TRUE(embedded_test_server()->Start()); 754 ASSERT_TRUE(embedded_test_server()->Start());
631 755
632 GURL first_url(embedded_test_server()->GetURL("/title1.html")); 756 GURL first_url(embedded_test_server()->GetURL("/title1.html"));
633 ui_test_utils::NavigateToURL(browser(), first_url); 757 ui_test_utils::NavigateToURL(browser(), first_url);
634 758
635 GURL second_url(embedded_test_server()->GetURL("/title2.html")); 759 GURL second_url(embedded_test_server()->GetURL("/title2.html"));
636 chrome::NavigateParams params(browser(), second_url, 760 chrome::NavigateParams params(browser(), second_url,
637 ui::PAGE_TRANSITION_LINK); 761 ui::PAGE_TRANSITION_LINK);
638 content::TestNavigationManager manager( 762 content::TestNavigationManager manager(
639 browser()->tab_strip_model()->GetActiveWebContents(), second_url); 763 browser()->tab_strip_model()->GetActiveWebContents(), second_url);
640 chrome::Navigate(&params); 764 chrome::Navigate(&params);
641 EXPECT_TRUE(manager.WaitForRequestStart()); 765 EXPECT_TRUE(manager.WaitForRequestStart());
642 766
643 { 767 {
644 content::TestNavigationManager reload_manager( 768 content::TestNavigationManager reload_manager(
645 browser()->tab_strip_model()->GetActiveWebContents(), first_url); 769 browser()->tab_strip_model()->GetActiveWebContents(), first_url);
646 EXPECT_TRUE(content::ExecuteScript( 770 EXPECT_TRUE(content::ExecuteScript(
647 browser()->tab_strip_model()->GetActiveWebContents(), 771 browser()->tab_strip_model()->GetActiveWebContents(),
648 "window.location.reload();")); 772 "window.location.reload();"));
649 } 773 }
650 774
651 manager.WaitForNavigationFinished(); 775 manager.WaitForNavigationFinished();
652 776
653 EXPECT_TRUE(histogram_tester_ 777 EXPECT_TRUE(histogram_tester_
654 .GetTotalCountsForPrefix("PageLoad.Experimental.AbortTiming.") 778 .GetTotalCountsForPrefix("PageLoad.Experimental.AbortTiming.")
655 .empty()); 779 .empty());
656 } 780 }
657 781
658 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, 782 IN_PROC_BROWSER_TEST_F(PageLoadMetricsMojoficationBrowserTest,
659 FirstMeaningfulPaintRecorded) { 783 FirstMeaningfulPaintRecorded) {
784 ASSERT_TRUE(
785 base::FeatureList::IsEnabled(features::kPageLoadMetricsMojofication));
660 ASSERT_TRUE(embedded_test_server()->Start()); 786 ASSERT_TRUE(embedded_test_server()->Start());
661 787
662 ui_test_utils::NavigateToURL(browser(), 788 ui_test_utils::NavigateToURL(browser(),
663 embedded_test_server()->GetURL("/title1.html")); 789 embedded_test_server()->GetURL("/title1.html"));
664 790
665 // Wait until the renderer finishes observing layouts. 791 // Wait until the renderer finishes observing layouts.
666 const int kNetworkIdleTime = 3000; 792 const int kNetworkIdleTime = 3000;
667 const int kMargin = 500; 793 const int kMargin = 500;
668 const std::string javascript = base::StringPrintf( 794 const std::string javascript = base::StringPrintf(
669 "setTimeout(() => window.domAutomationController.send(true), %d)", 795 "setTimeout(() => window.domAutomationController.send(true), %d)",
670 kNetworkIdleTime + kMargin); 796 kNetworkIdleTime + kMargin);
671 bool result; 797 bool result;
672 EXPECT_TRUE(content::ExecuteScriptAndExtractBool( 798 EXPECT_TRUE(content::ExecuteScriptAndExtractBool(
673 browser()->tab_strip_model()->GetActiveWebContents(), 799 browser()->tab_strip_model()->GetActiveWebContents(), javascript,
674 javascript, &result)); 800 &result));
675 EXPECT_TRUE(result); 801 EXPECT_TRUE(result);
676 802
677 NavigateToUntrackedUrl(); 803 NavigateToUntrackedUrl();
678 histogram_tester_.ExpectUniqueSample( 804 histogram_tester_.ExpectUniqueSample(
679 internal::kHistogramFirstMeaningfulPaintStatus, 805 internal::kHistogramFirstMeaningfulPaintStatus,
680 internal::FIRST_MEANINGFUL_PAINT_RECORDED, 1); 806 internal::FIRST_MEANINGFUL_PAINT_RECORDED, 1);
681 histogram_tester_.ExpectTotalCount( 807 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstMeaningfulPaint,
682 internal::kHistogramFirstMeaningfulPaint, 1); 808 1);
683 histogram_tester_.ExpectTotalCount( 809 histogram_tester_.ExpectTotalCount(
684 internal::kHistogramParseStartToFirstMeaningfulPaint, 1); 810 internal::kHistogramParseStartToFirstMeaningfulPaint, 1);
685 } 811 }
686 812
687 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, 813 IN_PROC_BROWSER_TEST_F(PageLoadMetricsMojoficationBrowserTest,
688 FirstMeaningfulPaintNotRecorded) { 814 FirstMeaningfulPaintNotRecorded) {
815 ASSERT_TRUE(
816 base::FeatureList::IsEnabled(features::kPageLoadMetricsMojofication));
689 ASSERT_TRUE(embedded_test_server()->Start()); 817 ASSERT_TRUE(embedded_test_server()->Start());
690 818
691 scoped_refptr<TimingUpdatedObserver> fcp_observer = 819 PageLoadTimingObserver* fcp_observer = CreatePageLoadTimingObserver();
692 CreateTimingUpdatedObserver();
693 fcp_observer->AddMatchingFields( 820 fcp_observer->AddMatchingFields(
694 TimingUpdatedObserver::FIRST_CONTENTFUL_PAINT); 821 PageLoadTimingObserver::FIRST_CONTENTFUL_PAINT);
695 822
696 ui_test_utils::NavigateToURL( 823 ui_test_utils::NavigateToURL(
697 browser(), embedded_test_server()->GetURL( 824 browser(), embedded_test_server()->GetURL(
698 "/page_load_metrics/page_with_active_connections.html")); 825 "/page_load_metrics/page_with_active_connections.html"));
699 fcp_observer->WaitForMatchingIPC(); 826 fcp_observer->WaitForTimingUpdated();
700 827
701 // Navigate away before a FMP is reported. 828 // Navigate away before a FMP is reported.
702 NavigateToUntrackedUrl(); 829 NavigateToUntrackedUrl();
703 830
704 histogram_tester_.ExpectUniqueSample( 831 histogram_tester_.ExpectUniqueSample(
705 internal::kHistogramFirstMeaningfulPaintStatus, 832 internal::kHistogramFirstMeaningfulPaintStatus,
706 internal::FIRST_MEANINGFUL_PAINT_DID_NOT_REACH_NETWORK_STABLE, 1); 833 internal::FIRST_MEANINGFUL_PAINT_DID_NOT_REACH_NETWORK_STABLE, 1);
707 histogram_tester_.ExpectTotalCount( 834 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstMeaningfulPaint,
708 internal::kHistogramFirstMeaningfulPaint, 0); 835 0);
709 histogram_tester_.ExpectTotalCount( 836 histogram_tester_.ExpectTotalCount(
710 internal::kHistogramParseStartToFirstMeaningfulPaint, 0); 837 internal::kHistogramParseStartToFirstMeaningfulPaint, 0);
711 } 838 }
712 839
713 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, 840 IN_PROC_BROWSER_TEST_F(PageLoadMetricsMojoficationBrowserTest,
714 NoStatePrefetchObserverCacheable) { 841 NoStatePrefetchObserverCacheable) {
842 ASSERT_TRUE(
843 base::FeatureList::IsEnabled(features::kPageLoadMetricsMojofication));
715 ASSERT_TRUE(embedded_test_server()->Start()); 844 ASSERT_TRUE(embedded_test_server()->Start());
716 845
717 scoped_refptr<TimingUpdatedObserver> fcp_observer = 846 PageLoadTimingObserver* fcp_observer = CreatePageLoadTimingObserver();
718 CreateTimingUpdatedObserver();
719 fcp_observer->AddMatchingFields( 847 fcp_observer->AddMatchingFields(
720 TimingUpdatedObserver::FIRST_CONTENTFUL_PAINT); 848 PageLoadTimingObserver::FIRST_CONTENTFUL_PAINT);
721 849
722 ui_test_utils::NavigateToURL(browser(), 850 ui_test_utils::NavigateToURL(browser(),
723 embedded_test_server()->GetURL("/title1.html")); 851 embedded_test_server()->GetURL("/title1.html"));
724 852
725 fcp_observer->WaitForMatchingIPC(); 853 fcp_observer->WaitForTimingUpdated();
726 854
727 histogram_tester_.ExpectTotalCount( 855 histogram_tester_.ExpectTotalCount(
728 "Prerender.none_PrefetchTTFCP.Reference.NoStore.Visible", 0); 856 "Prerender.none_PrefetchTTFCP.Reference.NoStore.Visible", 0);
729 histogram_tester_.ExpectTotalCount( 857 histogram_tester_.ExpectTotalCount(
730 "Prerender.none_PrefetchTTFCP.Reference.Cacheable.Visible", 1); 858 "Prerender.none_PrefetchTTFCP.Reference.Cacheable.Visible", 1);
731 } 859 }
732 860
733 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, 861 IN_PROC_BROWSER_TEST_F(PageLoadMetricsMojoficationBrowserTest,
734 NoStatePrefetchObserverNoStore) { 862 NoStatePrefetchObserverNoStore) {
863 ASSERT_TRUE(
864 base::FeatureList::IsEnabled(features::kPageLoadMetricsMojofication));
735 ASSERT_TRUE(embedded_test_server()->Start()); 865 ASSERT_TRUE(embedded_test_server()->Start());
736 866
737 scoped_refptr<TimingUpdatedObserver> fcp_observer = 867 PageLoadTimingObserver* fcp_observer = CreatePageLoadTimingObserver();
738 CreateTimingUpdatedObserver();
739 fcp_observer->AddMatchingFields( 868 fcp_observer->AddMatchingFields(
740 TimingUpdatedObserver::FIRST_CONTENTFUL_PAINT); 869 PageLoadTimingObserver::FIRST_CONTENTFUL_PAINT);
741 870
742 ui_test_utils::NavigateToURL(browser(), 871 ui_test_utils::NavigateToURL(browser(),
743 embedded_test_server()->GetURL("/nostore.html")); 872 embedded_test_server()->GetURL("/nostore.html"));
744 873
745 fcp_observer->WaitForMatchingIPC(); 874 fcp_observer->WaitForTimingUpdated();
746 875
747 histogram_tester_.ExpectTotalCount( 876 histogram_tester_.ExpectTotalCount(
748 "Prerender.none_PrefetchTTFCP.Reference.NoStore.Visible", 1); 877 "Prerender.none_PrefetchTTFCP.Reference.NoStore.Visible", 1);
749 histogram_tester_.ExpectTotalCount( 878 histogram_tester_.ExpectTotalCount(
750 "Prerender.none_PrefetchTTFCP.Reference.Cacheable.Visible", 0); 879 "Prerender.none_PrefetchTTFCP.Reference.Cacheable.Visible", 0);
751 } 880 }
752 881
753 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, CSSTiming) { 882 IN_PROC_BROWSER_TEST_F(PageLoadMetricsMojoficationBrowserTest, CSSTiming) {
883 ASSERT_TRUE(
884 base::FeatureList::IsEnabled(features::kPageLoadMetricsMojofication));
754 ASSERT_TRUE(embedded_test_server()->Start()); 885 ASSERT_TRUE(embedded_test_server()->Start());
755 886
756 scoped_refptr<TimingUpdatedObserver> fcp_observer = 887 PageLoadTimingObserver* fcp_observer = CreatePageLoadTimingObserver();
757 CreateTimingUpdatedObserver();
758 fcp_observer->AddMatchingFields( 888 fcp_observer->AddMatchingFields(
759 TimingUpdatedObserver::STYLE_UPDATE_BEFORE_FCP); 889 PageLoadTimingObserver::STYLE_UPDATE_BEFORE_FCP);
760 890
761 // Careful: Blink code clamps timestamps to 5us, so any CSS parsing we do here 891 // Careful: Blink code clamps timestamps to 5us, so any CSS parsing we do here
762 // must take >> 5us, otherwise we'll log 0 for the value and it will remain 892 // must take >> 5us, otherwise we'll log 0 for the value and it will remain
763 // unset here. 893 // unset here.
764 ui_test_utils::NavigateToURL( 894 ui_test_utils::NavigateToURL(
765 browser(), 895 browser(),
766 embedded_test_server()->GetURL("/page_load_metrics/page_with_css.html")); 896 embedded_test_server()->GetURL("/page_load_metrics/page_with_css.html"));
767 NavigateToUntrackedUrl(); 897 NavigateToUntrackedUrl();
768 fcp_observer->WaitForMatchingIPC(); 898 fcp_observer->WaitForTimingUpdated();
769 899
770 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstContentfulPaint, 900 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstContentfulPaint,
771 1); 901 1);
772 histogram_tester_.ExpectTotalCount( 902 histogram_tester_.ExpectTotalCount(
773 "PageLoad.CSSTiming.Parse.BeforeFirstContentfulPaint", 1); 903 "PageLoad.CSSTiming.Parse.BeforeFirstContentfulPaint", 1);
774 histogram_tester_.ExpectTotalCount( 904 histogram_tester_.ExpectTotalCount(
775 "PageLoad.CSSTiming.Update.BeforeFirstContentfulPaint", 1); 905 "PageLoad.CSSTiming.Update.BeforeFirstContentfulPaint", 1);
776 histogram_tester_.ExpectTotalCount( 906 histogram_tester_.ExpectTotalCount(
777 "PageLoad.CSSTiming.ParseAndUpdate.BeforeFirstContentfulPaint", 1); 907 "PageLoad.CSSTiming.ParseAndUpdate.BeforeFirstContentfulPaint", 1);
778 } 908 }
779 909
780 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, PayloadSize) { 910 IN_PROC_BROWSER_TEST_F(PageLoadMetricsMojoficationBrowserTest, PayloadSize) {
911 ASSERT_TRUE(
912 base::FeatureList::IsEnabled(features::kPageLoadMetricsMojofication));
781 ASSERT_TRUE(embedded_test_server()->Start()); 913 ASSERT_TRUE(embedded_test_server()->Start());
782 914
783 ui_test_utils::NavigateToURL(browser(), embedded_test_server()->GetURL( 915 ui_test_utils::NavigateToURL(browser(), embedded_test_server()->GetURL(
784 "/page_load_metrics/large.html")); 916 "/page_load_metrics/large.html"));
785 NavigateToUntrackedUrl(); 917 NavigateToUntrackedUrl();
786 918
787 histogram_tester_.ExpectTotalCount(internal::kHistogramTotalBytes, 1); 919 histogram_tester_.ExpectTotalCount(internal::kHistogramTotalBytes, 1);
788 920
789 // Verify that there is a single sample recorded in the 10kB bucket (the size 921 // Verify that there is a single sample recorded in the 10kB bucket (the size
790 // of the main HTML response). 922 // of the main HTML response).
791 histogram_tester_.ExpectBucketCount(internal::kHistogramTotalBytes, 10, 1); 923 histogram_tester_.ExpectBucketCount(internal::kHistogramTotalBytes, 10, 1);
792 } 924 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698