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

Side by Side Diff: components/page_load_metrics/browser/metrics_web_contents_observer_unittest.cc

Issue 1879413002: Provide currently_committed_url to PageLoadMetricsObservers (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: address Created 4 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 (c) 2015 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "components/page_load_metrics/browser/metrics_web_contents_observer.h" 5 #include "components/page_load_metrics/browser/metrics_web_contents_observer.h"
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/macros.h" 9 #include "base/macros.h"
10 #include "base/memory/scoped_ptr.h" 10 #include "base/memory/scoped_ptr.h"
11 #include "base/process/kill.h" 11 #include "base/process/kill.h"
12 #include "base/test/histogram_tester.h" 12 #include "base/test/histogram_tester.h"
13 #include "base/time/time.h" 13 #include "base/time/time.h"
14 #include "components/page_load_metrics/browser/page_load_metrics_observer.h" 14 #include "components/page_load_metrics/browser/page_load_metrics_observer.h"
15 #include "components/page_load_metrics/common/page_load_metrics_messages.h" 15 #include "components/page_load_metrics/common/page_load_metrics_messages.h"
16 #include "content/public/browser/navigation_handle.h" 16 #include "content/public/browser/navigation_handle.h"
17 #include "content/public/browser/render_frame_host.h" 17 #include "content/public/browser/render_frame_host.h"
18 #include "content/public/test/test_renderer_host.h" 18 #include "content/public/test/test_renderer_host.h"
19 #include "content/public/test/web_contents_tester.h" 19 #include "content/public/test/web_contents_tester.h"
20 #include "testing/gtest/include/gtest/gtest.h" 20 #include "testing/gtest/include/gtest/gtest.h"
21 #include "url/gurl.h"
21 22
22 namespace page_load_metrics { 23 namespace page_load_metrics {
23 24
24 namespace { 25 namespace {
25 26
26 const char kDefaultTestUrl[] = "https://google.com"; 27 const char kDefaultTestUrl[] = "https://google.com/";
27 const char kDefaultTestUrlAnchor[] = "https://google.com#samepage"; 28 const char kDefaultTestUrlAnchor[] = "https://google.com/#samepage";
28 const char kDefaultTestUrl2[] = "https://whatever.com"; 29 const char kDefaultTestUrl2[] = "https://whatever.com/";
29 30
30 // Simple PageLoadMetricsObserver that copies observed PageLoadTimings into the 31 // Simple PageLoadMetricsObserver that copies observed PageLoadTimings into the
31 // provided std::vector, so they can be analyzed by unit tests. 32 // provided std::vector, so they can be analyzed by unit tests.
32 class TestPageLoadMetricsObserver : public PageLoadMetricsObserver { 33 class TestPageLoadMetricsObserver : public PageLoadMetricsObserver {
33 public: 34 public:
34 explicit TestPageLoadMetricsObserver( 35 explicit TestPageLoadMetricsObserver(
35 std::vector<PageLoadTiming>* observed_timings) 36 std::vector<PageLoadTiming>* observed_timings,
36 : observed_timings_(observed_timings) {} 37 std::vector<GURL>* observed_committed_urls)
38 : observed_timings_(observed_timings),
39 observed_committed_urls_(observed_committed_urls) {}
40
41 void OnStart(content::NavigationHandle* navigation_handle,
42 const GURL& currently_committed_url) override {
43 observed_committed_urls_->push_back(currently_committed_url);
44 }
37 45
38 void OnComplete(const PageLoadTiming& timing, 46 void OnComplete(const PageLoadTiming& timing,
39 const PageLoadExtraInfo&) override { 47 const PageLoadExtraInfo& extra_info) override {
40 observed_timings_->push_back(timing); 48 observed_timings_->push_back(timing);
41 } 49 }
42 50
43 private: 51 private:
44 std::vector<PageLoadTiming>* const observed_timings_; 52 std::vector<PageLoadTiming>* const observed_timings_;
53 std::vector<GURL>* const observed_committed_urls_;
45 }; 54 };
46 55
47 class TestPageLoadMetricsEmbedderInterface 56 class TestPageLoadMetricsEmbedderInterface
48 : public PageLoadMetricsEmbedderInterface { 57 : public PageLoadMetricsEmbedderInterface {
49 public: 58 public:
50 TestPageLoadMetricsEmbedderInterface() : is_prerendering_(false) {} 59 TestPageLoadMetricsEmbedderInterface() : is_prerendering_(false) {}
51 60
52 bool IsPrerendering(content::WebContents* web_contents) override { 61 bool IsPrerendering(content::WebContents* web_contents) override {
53 return is_prerendering_; 62 return is_prerendering_;
54 } 63 }
55 void set_is_prerendering(bool is_prerendering) { 64 void set_is_prerendering(bool is_prerendering) {
56 is_prerendering_ = is_prerendering; 65 is_prerendering_ = is_prerendering;
57 } 66 }
58 void RegisterObservers(PageLoadTracker* tracker) override { 67 void RegisterObservers(PageLoadTracker* tracker) override {
59 tracker->AddObserver( 68 tracker->AddObserver(make_scoped_ptr(new TestPageLoadMetricsObserver(
60 make_scoped_ptr(new TestPageLoadMetricsObserver(&observed_timings_))); 69 &observed_timings_, &observed_committed_urls_)));
61 } 70 }
62 const std::vector<PageLoadTiming>& observed_timings() const { 71 const std::vector<PageLoadTiming>& observed_timings() const {
63 return observed_timings_; 72 return observed_timings_;
64 } 73 }
65 74
75 // currently_committed_urls passed to OnStart().
76 const std::vector<GURL>& observed_committed_urls_from_on_start() const {
77 return observed_committed_urls_;
78 }
79
66 private: 80 private:
67 std::vector<PageLoadTiming> observed_timings_; 81 std::vector<PageLoadTiming> observed_timings_;
82 std::vector<GURL> observed_committed_urls_;
68 bool is_prerendering_; 83 bool is_prerendering_;
69 }; 84 };
70 85
71 } // namespace 86 } // namespace
72 87
73 class MetricsWebContentsObserverTest 88 class MetricsWebContentsObserverTest
74 : public content::RenderViewHostTestHarness { 89 : public content::RenderViewHostTestHarness {
75 public: 90 public:
76 MetricsWebContentsObserverTest() : num_errors_(0) {} 91 MetricsWebContentsObserverTest() : num_errors_(0) {}
77 92
78 void SetUp() override { 93 void SetUp() override {
79 RenderViewHostTestHarness::SetUp(); 94 RenderViewHostTestHarness::SetUp();
80 AttachObserver(); 95 AttachObserver();
81 } 96 }
82 97
98 void SimulateTimingUpdate(const PageLoadTiming& timing) {
99 SimulateTimingUpdate(timing, web_contents()->GetMainFrame());
100 }
101
102 void SimulateTimingUpdate(const PageLoadTiming& timing,
103 content::RenderFrameHost* render_frame_host) {
104 ASSERT_TRUE(observer_->OnMessageReceived(
105 PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing,
106 PageLoadMetadata()),
107 render_frame_host));
108 }
109
83 void AttachObserver() { 110 void AttachObserver() {
84 embedder_interface_ = new TestPageLoadMetricsEmbedderInterface(); 111 embedder_interface_ = new TestPageLoadMetricsEmbedderInterface();
85 observer_.reset(new MetricsWebContentsObserver( 112 observer_.reset(new MetricsWebContentsObserver(
86 web_contents(), make_scoped_ptr(embedder_interface_))); 113 web_contents(), make_scoped_ptr(embedder_interface_)));
87 observer_->WasShown(); 114 observer_->WasShown();
88 } 115 }
89 116
90 void CheckErrorEvent(InternalErrorLoadEvent error, int count) { 117 void CheckErrorEvent(InternalErrorLoadEvent error, int count) {
91 histogram_tester_.ExpectBucketCount(internal::kErrorEvents, error, count); 118 histogram_tester_.ExpectBucketCount(internal::kErrorEvents, error, count);
92 num_errors_ += count; 119 num_errors_ += count;
93 } 120 }
94 121
95 void CheckTotalErrorEvents() { 122 void CheckTotalErrorEvents() {
96 histogram_tester_.ExpectTotalCount(internal::kErrorEvents, num_errors_); 123 histogram_tester_.ExpectTotalCount(internal::kErrorEvents, num_errors_);
97 } 124 }
98 125
99 void CheckNoErrorEvents() { 126 void CheckNoErrorEvents() {
100 histogram_tester_.ExpectTotalCount(internal::kErrorEvents, 0); 127 histogram_tester_.ExpectTotalCount(internal::kErrorEvents, 0);
101 } 128 }
102 129
103 void AssertNoNonEmptyTimingReported() { 130 void AssertNoNonEmptyTimingReported() {
104 ASSERT_FALSE(embedder_interface_->observed_timings().empty()); 131 ASSERT_FALSE(embedder_interface_->observed_timings().empty());
105 for (const auto& timing : embedder_interface_->observed_timings()) { 132 for (const auto& timing : embedder_interface_->observed_timings()) {
106 ASSERT_TRUE(timing.IsEmpty()); 133 ASSERT_TRUE(timing.IsEmpty());
107 } 134 }
108 } 135 }
109 136
137 void AssertNonEmptyTimingsReported(size_t expected_non_empty_timings) {
138 ASSERT_GE(embedder_interface_->observed_timings().size(),
139 expected_non_empty_timings);
140 size_t actual_non_empty_timings = 0;
141 for (const auto& timing : embedder_interface_->observed_timings()) {
142 if (!timing.IsEmpty()) {
143 ++actual_non_empty_timings;
144 }
145 }
146 ASSERT_EQ(expected_non_empty_timings, actual_non_empty_timings);
147 }
148
110 void AssertNoTimingReported() { 149 void AssertNoTimingReported() {
111 ASSERT_TRUE(embedder_interface_->observed_timings().empty()); 150 ASSERT_TRUE(embedder_interface_->observed_timings().empty());
112 } 151 }
113 152
153 const std::vector<GURL>& observed_committed_urls_from_on_start() const {
154 return embedder_interface_->observed_committed_urls_from_on_start();
155 }
156
114 protected: 157 protected:
115 base::HistogramTester histogram_tester_; 158 base::HistogramTester histogram_tester_;
116 TestPageLoadMetricsEmbedderInterface* embedder_interface_; 159 TestPageLoadMetricsEmbedderInterface* embedder_interface_;
117 scoped_ptr<MetricsWebContentsObserver> observer_; 160 scoped_ptr<MetricsWebContentsObserver> observer_;
118 161
119 private: 162 private:
120 int num_errors_; 163 int num_errors_;
121 164
122 DISALLOW_COPY_AND_ASSIGN(MetricsWebContentsObserverTest); 165 DISALLOW_COPY_AND_ASSIGN(MetricsWebContentsObserverTest);
123 }; 166 };
124 167
168 TEST_F(MetricsWebContentsObserverTest, SuccessfulMainFrameNavigation) {
169 PageLoadTiming timing;
170 timing.navigation_start = base::Time::FromDoubleT(1);
171 timing.response_start = base::TimeDelta::FromMilliseconds(2);
172
173 content::WebContentsTester* web_contents_tester =
174 content::WebContentsTester::For(web_contents());
175
176 ASSERT_TRUE(observed_committed_urls_from_on_start().empty());
177 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl));
178 ASSERT_EQ(1u, observed_committed_urls_from_on_start().size());
179 ASSERT_TRUE(observed_committed_urls_from_on_start().at(0).is_empty());
180
181 SimulateTimingUpdate(timing);
182 AssertNoTimingReported();
183
184 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl2));
185 AssertNonEmptyTimingsReported(1);
186 ASSERT_EQ(2u, observed_committed_urls_from_on_start().size());
187 ASSERT_EQ(kDefaultTestUrl,
188 observed_committed_urls_from_on_start().at(1).spec());
189
190 CheckNoErrorEvents();
191 }
192
125 TEST_F(MetricsWebContentsObserverTest, NotInMainFrame) { 193 TEST_F(MetricsWebContentsObserverTest, NotInMainFrame) {
126 PageLoadTiming timing; 194 PageLoadTiming timing;
127 timing.navigation_start = base::Time::FromDoubleT(1); 195 timing.navigation_start = base::Time::FromDoubleT(1);
128 196
129 content::WebContentsTester* web_contents_tester = 197 content::WebContentsTester* web_contents_tester =
130 content::WebContentsTester::For(web_contents()); 198 content::WebContentsTester::For(web_contents());
131 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl)); 199 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl));
132 200
133 content::RenderFrameHostTester* rfh_tester = 201 content::RenderFrameHostTester* rfh_tester =
134 content::RenderFrameHostTester::For(main_rfh()); 202 content::RenderFrameHostTester::For(main_rfh());
135 content::RenderFrameHost* subframe = rfh_tester->AppendChild("subframe"); 203 content::RenderFrameHost* subframe = rfh_tester->AppendChild("subframe");
136 204
137 content::RenderFrameHostTester* subframe_tester = 205 content::RenderFrameHostTester* subframe_tester =
138 content::RenderFrameHostTester::For(subframe); 206 content::RenderFrameHostTester::For(subframe);
139 subframe_tester->SimulateNavigationStart(GURL(kDefaultTestUrl2)); 207 subframe_tester->SimulateNavigationStart(GURL(kDefaultTestUrl2));
140 subframe_tester->SimulateNavigationCommit(GURL(kDefaultTestUrl2)); 208 subframe_tester->SimulateNavigationCommit(GURL(kDefaultTestUrl2));
141 observer_->OnMessageReceived( 209 SimulateTimingUpdate(timing, subframe);
142 PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing,
143 PageLoadMetadata()),
144 subframe);
145 subframe_tester->SimulateNavigationStop(); 210 subframe_tester->SimulateNavigationStop();
146 211
147 // Navigate again to see if the timing updated for a subframe message. 212 // Navigate again to see if the timing updated for a subframe message.
148 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl)); 213 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl));
149 214
150 AssertNoNonEmptyTimingReported(); 215 AssertNoNonEmptyTimingReported();
151 CheckErrorEvent(ERR_IPC_FROM_WRONG_FRAME, 1); 216 CheckErrorEvent(ERR_IPC_FROM_WRONG_FRAME, 1);
152 CheckTotalErrorEvents(); 217 CheckTotalErrorEvents();
153 } 218 }
154 219
155 TEST_F(MetricsWebContentsObserverTest, SamePageNoTrigger) { 220 TEST_F(MetricsWebContentsObserverTest, SamePageNoTrigger) {
156 PageLoadTiming timing; 221 PageLoadTiming timing;
157 timing.navigation_start = base::Time::FromDoubleT(1); 222 timing.navigation_start = base::Time::FromDoubleT(1);
158 223
159 content::WebContentsTester* web_contents_tester = 224 content::WebContentsTester* web_contents_tester =
160 content::WebContentsTester::For(web_contents()); 225 content::WebContentsTester::For(web_contents());
161 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl)); 226 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl));
162 227 SimulateTimingUpdate(timing);
163 observer_->OnMessageReceived(
164 PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing,
165 PageLoadMetadata()),
166 web_contents()->GetMainFrame());
167 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrlAnchor)); 228 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrlAnchor));
168 // A same page navigation shouldn't trigger logging UMA for the original. 229 // A same page navigation shouldn't trigger logging UMA for the original.
169 AssertNoNonEmptyTimingReported(); 230 AssertNoNonEmptyTimingReported();
170 CheckNoErrorEvents(); 231 CheckNoErrorEvents();
171 } 232 }
172 233
173 TEST_F(MetricsWebContentsObserverTest, DontLogPrerender) { 234 TEST_F(MetricsWebContentsObserverTest, DontLogPrerender) {
174 PageLoadTiming timing; 235 PageLoadTiming timing;
175 timing.navigation_start = base::Time::FromDoubleT(1); 236 timing.navigation_start = base::Time::FromDoubleT(1);
176 237
177 content::WebContentsTester* web_contents_tester = 238 content::WebContentsTester* web_contents_tester =
178 content::WebContentsTester::For(web_contents()); 239 content::WebContentsTester::For(web_contents());
179 embedder_interface_->set_is_prerendering(true); 240 embedder_interface_->set_is_prerendering(true);
180 241
181 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl)); 242 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl));
182 observer_->OnMessageReceived( 243 SimulateTimingUpdate(timing);
183 PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing,
184 PageLoadMetadata()),
185 web_contents()->GetMainFrame());
186
187 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl2)); 244 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl2));
188 AssertNoTimingReported(); 245 AssertNoTimingReported();
189 CheckErrorEvent(ERR_IPC_WITH_NO_RELEVANT_LOAD, 1); 246 CheckErrorEvent(ERR_IPC_WITH_NO_RELEVANT_LOAD, 1);
190 CheckTotalErrorEvents(); 247 CheckTotalErrorEvents();
191 } 248 }
192 249
193 TEST_F(MetricsWebContentsObserverTest, DontLogIrrelevantNavigation) { 250 TEST_F(MetricsWebContentsObserverTest, DontLogIrrelevantNavigation) {
194 PageLoadTiming timing; 251 PageLoadTiming timing;
195 timing.navigation_start = base::Time::FromDoubleT(10); 252 timing.navigation_start = base::Time::FromDoubleT(10);
196 253
197 content::WebContentsTester* web_contents_tester = 254 content::WebContentsTester* web_contents_tester =
198 content::WebContentsTester::For(web_contents()); 255 content::WebContentsTester::For(web_contents());
199 256
200 GURL about_blank_url = GURL("about:blank"); 257 GURL about_blank_url = GURL("about:blank");
201 web_contents_tester->NavigateAndCommit(about_blank_url); 258 web_contents_tester->NavigateAndCommit(about_blank_url);
202 259 SimulateTimingUpdate(timing);
203 observer_->OnMessageReceived(
204 PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing,
205 PageLoadMetadata()),
206 main_rfh());
207
208 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl)); 260 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl));
209 261
210 CheckErrorEvent(ERR_IPC_FROM_BAD_URL_SCHEME, 1); 262 CheckErrorEvent(ERR_IPC_FROM_BAD_URL_SCHEME, 1);
211 CheckErrorEvent(ERR_IPC_WITH_NO_RELEVANT_LOAD, 1); 263 CheckErrorEvent(ERR_IPC_WITH_NO_RELEVANT_LOAD, 1);
212 CheckTotalErrorEvents(); 264 CheckTotalErrorEvents();
213 } 265 }
214 266
215 TEST_F(MetricsWebContentsObserverTest, NotInMainError) { 267 TEST_F(MetricsWebContentsObserverTest, NotInMainError) {
216 PageLoadTiming timing; 268 PageLoadTiming timing;
217 timing.navigation_start = base::Time::FromDoubleT(1); 269 timing.navigation_start = base::Time::FromDoubleT(1);
218 270
219 content::WebContentsTester* web_contents_tester = 271 content::WebContentsTester* web_contents_tester =
220 content::WebContentsTester::For(web_contents()); 272 content::WebContentsTester::For(web_contents());
221 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl)); 273 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl));
222 274
223 content::RenderFrameHostTester* rfh_tester = 275 content::RenderFrameHostTester* rfh_tester =
224 content::RenderFrameHostTester::For(main_rfh()); 276 content::RenderFrameHostTester::For(main_rfh());
225 content::RenderFrameHost* subframe = rfh_tester->AppendChild("subframe"); 277 content::RenderFrameHost* subframe = rfh_tester->AppendChild("subframe");
226 278
227 content::RenderFrameHostTester* subframe_tester = 279 content::RenderFrameHostTester* subframe_tester =
228 content::RenderFrameHostTester::For(subframe); 280 content::RenderFrameHostTester::For(subframe);
229 subframe_tester->SimulateNavigationStart(GURL(kDefaultTestUrl2)); 281 subframe_tester->SimulateNavigationStart(GURL(kDefaultTestUrl2));
230 subframe_tester->SimulateNavigationCommit(GURL(kDefaultTestUrl2)); 282 subframe_tester->SimulateNavigationCommit(GURL(kDefaultTestUrl2));
231 observer_->OnMessageReceived( 283 SimulateTimingUpdate(timing, subframe);
232 PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing,
233 PageLoadMetadata()),
234 subframe);
235 CheckErrorEvent(ERR_IPC_FROM_WRONG_FRAME, 1); 284 CheckErrorEvent(ERR_IPC_FROM_WRONG_FRAME, 1);
236 CheckTotalErrorEvents(); 285 CheckTotalErrorEvents();
237 } 286 }
238 287
239 TEST_F(MetricsWebContentsObserverTest, BadIPC) { 288 TEST_F(MetricsWebContentsObserverTest, BadIPC) {
240 PageLoadTiming timing; 289 PageLoadTiming timing;
241 timing.navigation_start = base::Time::FromDoubleT(10); 290 timing.navigation_start = base::Time::FromDoubleT(10);
242 PageLoadTiming timing2; 291 PageLoadTiming timing2;
243 timing2.navigation_start = base::Time::FromDoubleT(100); 292 timing2.navigation_start = base::Time::FromDoubleT(100);
244 293
245 content::WebContentsTester* web_contents_tester = 294 content::WebContentsTester* web_contents_tester =
246 content::WebContentsTester::For(web_contents()); 295 content::WebContentsTester::For(web_contents());
247 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl)); 296 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl));
248 297
249 observer_->OnMessageReceived( 298 SimulateTimingUpdate(timing);
250 PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing, 299 SimulateTimingUpdate(timing2);
251 PageLoadMetadata()),
252 main_rfh());
253 observer_->OnMessageReceived(
254 PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing2,
255 PageLoadMetadata()),
256 main_rfh());
257 300
258 CheckErrorEvent(ERR_BAD_TIMING_IPC, 1); 301 CheckErrorEvent(ERR_BAD_TIMING_IPC, 1);
259 CheckTotalErrorEvents(); 302 CheckTotalErrorEvents();
260 } 303 }
261 304
262 TEST_F(MetricsWebContentsObserverTest, ObservePartialNavigation) { 305 TEST_F(MetricsWebContentsObserverTest, ObservePartialNavigation) {
263 // Delete the observer for this test, add it once the navigation has started. 306 // Delete the observer for this test, add it once the navigation has started.
264 observer_.reset(); 307 observer_.reset();
265 PageLoadTiming timing; 308 PageLoadTiming timing;
266 timing.navigation_start = base::Time::FromDoubleT(10); 309 timing.navigation_start = base::Time::FromDoubleT(10);
267 310
268 content::WebContentsTester* web_contents_tester = 311 content::WebContentsTester* web_contents_tester =
269 content::WebContentsTester::For(web_contents()); 312 content::WebContentsTester::For(web_contents());
270 content::RenderFrameHostTester* rfh_tester = 313 content::RenderFrameHostTester* rfh_tester =
271 content::RenderFrameHostTester::For(main_rfh()); 314 content::RenderFrameHostTester::For(main_rfh());
272 315
273 // Start the navigation, then start observing the web contents. This used to 316 // Start the navigation, then start observing the web contents. This used to
274 // crash us. Make sure we bail out and don't log histograms. 317 // crash us. Make sure we bail out and don't log histograms.
275 web_contents_tester->StartNavigation(GURL(kDefaultTestUrl)); 318 web_contents_tester->StartNavigation(GURL(kDefaultTestUrl));
276 AttachObserver(); 319 AttachObserver();
277 rfh_tester->SimulateNavigationCommit(GURL(kDefaultTestUrl)); 320 rfh_tester->SimulateNavigationCommit(GURL(kDefaultTestUrl));
278 321
279 observer_->OnMessageReceived( 322 SimulateTimingUpdate(timing);
280 PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing, 323
281 PageLoadMetadata()),
282 main_rfh());
283 // Navigate again to force histogram logging. 324 // Navigate again to force histogram logging.
284 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl2)); 325 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl2));
285 AssertNoTimingReported(); 326 AssertNoTimingReported();
286 CheckErrorEvent(ERR_IPC_WITH_NO_RELEVANT_LOAD, 1); 327 CheckErrorEvent(ERR_IPC_WITH_NO_RELEVANT_LOAD, 1);
287 CheckTotalErrorEvents(); 328 CheckTotalErrorEvents();
288 } 329 }
289 330
290 TEST_F(MetricsWebContentsObserverTest, DontLogAbortChains) { 331 TEST_F(MetricsWebContentsObserverTest, DontLogAbortChains) {
291 NavigateAndCommit(GURL(kDefaultTestUrl)); 332 NavigateAndCommit(GURL(kDefaultTestUrl));
292 NavigateAndCommit(GURL(kDefaultTestUrl2)); 333 NavigateAndCommit(GURL(kDefaultTestUrl2));
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
366 rfh_tester->SimulateNavigationStop(); 407 rfh_tester->SimulateNavigationStop();
367 408
368 web_contents()->Stop(); 409 web_contents()->Stop();
369 410
370 histogram_tester_.ExpectTotalCount(internal::kAbortChainSizeNoCommit, 1); 411 histogram_tester_.ExpectTotalCount(internal::kAbortChainSizeNoCommit, 1);
371 histogram_tester_.ExpectBucketCount(internal::kAbortChainSizeNoCommit, 3, 412 histogram_tester_.ExpectBucketCount(internal::kAbortChainSizeNoCommit, 3,
372 1); 413 1);
373 } 414 }
374 415
375 } // namespace page_load_metrics 416 } // namespace page_load_metrics
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698