OLD | NEW |
---|---|
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(¶ms); | 647 chrome::Navigate(¶ms); |
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(¶ms2); | 655 chrome::Navigate(¶ms2); |
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(¶ms); | 672 chrome::Navigate(¶ms); |
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(¶ms2); | 678 chrome::Navigate(¶ms2); |
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(¶ms); | 702 chrome::Navigate(¶ms); |
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(¶ms); | 723 chrome::Navigate(¶ms); |
602 EXPECT_TRUE(manager.WaitForRequestStart()); | 724 EXPECT_TRUE(manager.WaitForRequestStart()); |
603 | 725 |
(...skipping 14 matching lines...) Expand all Loading... | |
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(¶ms); | 764 chrome::Navigate(¶ms); |
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 } |
OLD | NEW |