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

Side by Side Diff: chrome/browser/net/net_error_tab_helper_unittest.cc

Issue 13270005: Display DNS probe results. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Don't break DnsProbe histograms Created 7 years, 5 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
(Empty)
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chrome/browser/net/net_error_tab_helper.h"
6
7 #include "base/message_loop.h"
8 #include "chrome/common/net/net_error_info.h"
9 #include "content/public/browser/browser_thread.h"
10 #include "content/public/common/page_transition_types.h"
11 #include "content/public/test/test_browser_thread.h"
12 #include "net/base/net_errors.h"
13 #include "testing/gtest/include/gtest/gtest.h"
14
15 using base::MessageLoop;
16 using chrome_browser_net::NetErrorTabHelper;
17 using chrome_common_net::DnsProbeStatus;
18 using content::BrowserThread;
19 using content::TestBrowserThread;
20
21 class TestNetErrorTabHelper : public NetErrorTabHelper {
22 public:
23 TestNetErrorTabHelper()
24 : NetErrorTabHelper(NULL),
25 running_probe_count_(0),
26 mock_sent_status_(chrome_common_net::DNS_PROBE_MAX),
27 mock_sent_count_(0) {}
28
29 void FinishProbe(DnsProbeStatus status) {
30 OnDnsProbeFinished(status);
31 running_probe_count_--;
32 }
33
34 int running_probe_count() const { return running_probe_count_; }
35 DnsProbeStatus mock_sent_status() const { return mock_sent_status_; }
36 int mock_sent_count() const { return mock_sent_count_; }
37
38 private:
39 virtual void StartDnsProbe() OVERRIDE {
40 running_probe_count_++;
41 }
42
43 virtual void SendInfo() OVERRIDE {
44 mock_sent_status_ = dns_probe_status_;
45 mock_sent_count_++;
46 }
47
48 int running_probe_count_;
49 DnsProbeStatus mock_sent_status_;
50 int mock_sent_count_;
51 };
52
53 class NetErrorTabHelperTest : public testing::Test {
54 protected:
55 enum MainFrame { SUB_FRAME, MAIN_FRAME };
56 enum ErrorPage { NORMAL_PAGE, ERROR_PAGE };
57 enum ErrorType { DNS_ERROR, OTHER_ERROR };
58
59 NetErrorTabHelperTest()
60 : fake_ui_thread_(BrowserThread::UI, &message_loop_) {
61 NetErrorTabHelper::set_state_for_testing(
62 NetErrorTabHelper::TESTING_FORCE_ENABLED);
63 }
64
65 void StartProvisionalLoad(MainFrame main_frame, ErrorPage error_page) {
66 tab_helper_.DidStartProvisionalLoadForFrame(
67 1, // frame_id
68 0, // parent_frame_id
69 (main_frame == MAIN_FRAME),
70 bogus_url_, // validated_url
71 (error_page == ERROR_PAGE),
72 false, // is_iframe_srcdoc
73 NULL); // render_view_host
74 }
75
76 void CommitProvisionalLoad(MainFrame main_frame) {
77 tab_helper_.DidCommitProvisionalLoadForFrame(
78 1, // frame id
79 (main_frame == MAIN_FRAME),
80 bogus_url_, // url
81 content::PAGE_TRANSITION_TYPED,
82 NULL); // render_view_host
83 }
84
85 void FailProvisionalLoad(MainFrame main_frame, ErrorType error_type) {
86 string16 bogus_error_description;
87 int net_error;
88
89 if (error_type == DNS_ERROR)
90 net_error = net::ERR_NAME_NOT_RESOLVED;
91 else
92 net_error = net::ERR_TIMED_OUT;
93
94 tab_helper_.DidFailProvisionalLoad(
95 1, // frame id
96 (main_frame == MAIN_FRAME),
97 bogus_url_, // validated_url
98 net_error,
99 bogus_error_description,
100 NULL); // render_view_host
101 }
102
103 void FinishProbe(DnsProbeStatus status) {
104 tab_helper_.FinishProbe(status);
105 }
106
107 int probe_count() { return tab_helper_.running_probe_count(); }
mmenke 2013/06/28 20:43:27 running_probe_count() (probe_count going from 1 t
Deprecated (see juliatuttle) 2013/07/01 17:39:55 Done.
108 DnsProbeStatus sent_status() { return tab_helper_.mock_sent_status(); }
109 int sent_count() { return tab_helper_.mock_sent_count(); }
110
111 private:
112 MessageLoop message_loop_;
113 TestBrowserThread fake_ui_thread_;
114 TestNetErrorTabHelper tab_helper_;
115 GURL bogus_url_;
116 };
117
118 TEST_F(NetErrorTabHelperTest, Null) {
119 EXPECT_EQ(0, probe_count());
120 }
121
122 TEST_F(NetErrorTabHelperTest, MainFrameNonDnsError) {
123 StartProvisionalLoad(MAIN_FRAME, NORMAL_PAGE);
124 FailProvisionalLoad(MAIN_FRAME, OTHER_ERROR);
125 EXPECT_EQ(0, probe_count());
126 EXPECT_EQ(0, sent_count());
127 }
128
129 TEST_F(NetErrorTabHelperTest, NonMainFrameDnsError) {
130 StartProvisionalLoad(SUB_FRAME, NORMAL_PAGE);
131 FailProvisionalLoad(SUB_FRAME, DNS_ERROR);
132 EXPECT_EQ(0, probe_count());
133 EXPECT_EQ(0, sent_count());
134 }
135
136 TEST_F(NetErrorTabHelperTest, ProbeResponseBeforeFirstCommit) {
137 StartProvisionalLoad(MAIN_FRAME, NORMAL_PAGE);
138 FailProvisionalLoad(MAIN_FRAME, DNS_ERROR);
139 EXPECT_EQ(1, probe_count());
140 EXPECT_EQ(0, sent_count());
141
142 StartProvisionalLoad(MAIN_FRAME, ERROR_PAGE);
143 EXPECT_EQ(1, probe_count());
144 EXPECT_EQ(0, sent_count());
145
146 FinishProbe(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN);
147 EXPECT_EQ(0, probe_count());
148 EXPECT_EQ(0, sent_count());
149
150 CommitProvisionalLoad(MAIN_FRAME);
151 EXPECT_EQ(0, probe_count());
152 EXPECT_EQ(1, sent_count());
153 EXPECT_EQ(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN, sent_status());
154
155 StartProvisionalLoad(MAIN_FRAME, ERROR_PAGE);
156 EXPECT_EQ(0, probe_count());
157 EXPECT_EQ(1, sent_count());
158
159 CommitProvisionalLoad(MAIN_FRAME);
160 EXPECT_EQ(0, probe_count());
161 EXPECT_EQ(2, sent_count());
162 EXPECT_EQ(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN, sent_status());
163 }
164
165 TEST_F(NetErrorTabHelperTest, ProbeResponseBetweenFirstAndSecondCommit) {
166 StartProvisionalLoad(MAIN_FRAME, NORMAL_PAGE);
167 FailProvisionalLoad(MAIN_FRAME, DNS_ERROR);
168 EXPECT_EQ(1, probe_count());
169 EXPECT_EQ(0, sent_count());
170
171 StartProvisionalLoad(MAIN_FRAME, ERROR_PAGE);
172 EXPECT_EQ(1, probe_count());
173 EXPECT_EQ(0, sent_count());
174
175 CommitProvisionalLoad(MAIN_FRAME);
176 EXPECT_EQ(1, probe_count());
177 EXPECT_EQ(1, sent_count());
178 EXPECT_EQ(chrome_common_net::DNS_PROBE_STARTED, sent_status());
179
180 FinishProbe(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN);
181 EXPECT_EQ(0, probe_count());
182 EXPECT_EQ(2, sent_count());
183 EXPECT_EQ(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN, sent_status());
184
185 StartProvisionalLoad(MAIN_FRAME, ERROR_PAGE);
186 EXPECT_EQ(0, probe_count());
187 EXPECT_EQ(2, sent_count());
188
189 CommitProvisionalLoad(MAIN_FRAME);
190 EXPECT_EQ(0, probe_count());
191 EXPECT_EQ(3, sent_count());
192 EXPECT_EQ(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN, sent_status());
193 }
194
195 TEST_F(NetErrorTabHelperTest, ProbeResponseAfterSecondCommit) {
196 StartProvisionalLoad(MAIN_FRAME, NORMAL_PAGE);
197 FailProvisionalLoad(MAIN_FRAME, DNS_ERROR);
198 EXPECT_EQ(1, probe_count());
199 EXPECT_EQ(0, sent_count());
200
201 StartProvisionalLoad(MAIN_FRAME, ERROR_PAGE);
202 EXPECT_EQ(1, probe_count());
203 EXPECT_EQ(0, sent_count());
204
205 CommitProvisionalLoad(MAIN_FRAME);
206 EXPECT_EQ(1, probe_count());
207 EXPECT_EQ(1, sent_count());
208 EXPECT_EQ(chrome_common_net::DNS_PROBE_STARTED, sent_status());
209
210 StartProvisionalLoad(MAIN_FRAME, ERROR_PAGE);
211 EXPECT_EQ(1, probe_count());
212 EXPECT_EQ(1, sent_count());
213
214 CommitProvisionalLoad(MAIN_FRAME);
215 EXPECT_EQ(1, probe_count());
216 EXPECT_EQ(2, sent_count());
217 EXPECT_EQ(chrome_common_net::DNS_PROBE_STARTED, sent_status());
218
219 FinishProbe(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN);
220 EXPECT_EQ(0, probe_count());
221 EXPECT_EQ(3, sent_count());
222 EXPECT_EQ(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN, sent_status());
223 }
224
225 // Send result even if we've started a new page load; the error page is still
226 // visible, and the user might cancel the load.
227 TEST_F(NetErrorTabHelperTest, ProbeResponseAfterNewStart) {
228 StartProvisionalLoad(MAIN_FRAME, NORMAL_PAGE);
229 FailProvisionalLoad(MAIN_FRAME, DNS_ERROR);
230 EXPECT_EQ(1, probe_count());
231 EXPECT_EQ(0, sent_count());
232
233 StartProvisionalLoad(MAIN_FRAME, ERROR_PAGE);
234 EXPECT_EQ(1, probe_count());
235 EXPECT_EQ(0, sent_count());
236
237 CommitProvisionalLoad(MAIN_FRAME);
238 EXPECT_EQ(1, probe_count());
239 EXPECT_EQ(1, sent_count());
240 EXPECT_EQ(chrome_common_net::DNS_PROBE_STARTED, sent_status());
241
242 StartProvisionalLoad(MAIN_FRAME, ERROR_PAGE);
243 EXPECT_EQ(1, probe_count());
244 EXPECT_EQ(1, sent_count());
245
246 CommitProvisionalLoad(MAIN_FRAME);
247 EXPECT_EQ(1, probe_count());
248 EXPECT_EQ(2, sent_count());
249 EXPECT_EQ(chrome_common_net::DNS_PROBE_STARTED, sent_status());
250
251 StartProvisionalLoad(MAIN_FRAME, NORMAL_PAGE);
252 EXPECT_EQ(1, probe_count());
253 EXPECT_EQ(2, sent_count());
254
255 FinishProbe(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN);
256 EXPECT_EQ(0, probe_count());
257 EXPECT_EQ(3, sent_count());
258 EXPECT_EQ(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN, sent_status());
259 }
260
261 // Don't send result if we've committed a new page load; the result would go
262 // to the wrong page, and the error page is gone anyway.
263 TEST_F(NetErrorTabHelperTest, ProbeResponseAfterNewCommit) {
264 StartProvisionalLoad(MAIN_FRAME, NORMAL_PAGE);
265 FailProvisionalLoad(MAIN_FRAME, DNS_ERROR);
266 EXPECT_EQ(1, probe_count());
267 EXPECT_EQ(0, sent_count());
268
269 StartProvisionalLoad(MAIN_FRAME, ERROR_PAGE);
270 EXPECT_EQ(1, probe_count());
271 EXPECT_EQ(0, sent_count());
272
273 CommitProvisionalLoad(MAIN_FRAME);
274 EXPECT_EQ(1, probe_count());
275 EXPECT_EQ(1, sent_count());
276 EXPECT_EQ(chrome_common_net::DNS_PROBE_STARTED, sent_status());
277
278 StartProvisionalLoad(MAIN_FRAME, ERROR_PAGE);
279 EXPECT_EQ(1, probe_count());
280 EXPECT_EQ(1, sent_count());
281
282 CommitProvisionalLoad(MAIN_FRAME);
283 EXPECT_EQ(1, probe_count());
284 EXPECT_EQ(2, sent_count());
285 EXPECT_EQ(chrome_common_net::DNS_PROBE_STARTED, sent_status());
286
287 StartProvisionalLoad(MAIN_FRAME, NORMAL_PAGE);
288 EXPECT_EQ(1, probe_count());
289 EXPECT_EQ(2, sent_count());
290
291 CommitProvisionalLoad(MAIN_FRAME);
292 EXPECT_EQ(1, probe_count());
293 EXPECT_EQ(2, sent_count());
294
295 FinishProbe(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN);
296 EXPECT_EQ(0, probe_count());
297 EXPECT_EQ(2, sent_count());
298 }
299
300 TEST_F(NetErrorTabHelperTest, MultipleProbesWithoutErrorPage) {
301 StartProvisionalLoad(MAIN_FRAME, NORMAL_PAGE);
302 FailProvisionalLoad(MAIN_FRAME, DNS_ERROR);
303 EXPECT_EQ(1, probe_count());
304 EXPECT_EQ(0, sent_count());
305
306 FinishProbe(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN);
307 EXPECT_EQ(0, probe_count());
308 EXPECT_EQ(0, sent_count());
309
310 StartProvisionalLoad(MAIN_FRAME, NORMAL_PAGE);
311 FailProvisionalLoad(MAIN_FRAME, DNS_ERROR);
312 EXPECT_EQ(1, probe_count());
313 EXPECT_EQ(0, sent_count());
314
315 FinishProbe(chrome_common_net::DNS_PROBE_FINISHED_NO_INTERNET);
316 EXPECT_EQ(0, probe_count());
317 EXPECT_EQ(0, sent_count());
318 }
319
320 TEST_F(NetErrorTabHelperTest, MultipleProbesWithErrorPage) {
321 StartProvisionalLoad(MAIN_FRAME, NORMAL_PAGE);
322 FailProvisionalLoad(MAIN_FRAME, DNS_ERROR);
323 EXPECT_EQ(1, probe_count());
324 EXPECT_EQ(0, sent_count());
325
326 StartProvisionalLoad(MAIN_FRAME, ERROR_PAGE);
327 CommitProvisionalLoad(MAIN_FRAME);
328 EXPECT_EQ(1, probe_count());
329 EXPECT_EQ(1, sent_count());
330 EXPECT_EQ(chrome_common_net::DNS_PROBE_STARTED, sent_status());
331
332 FinishProbe(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN);
333 EXPECT_EQ(0, probe_count());
334 EXPECT_EQ(2, sent_count());
335 EXPECT_EQ(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN, sent_status());
336
337 StartProvisionalLoad(MAIN_FRAME, NORMAL_PAGE);
338 FailProvisionalLoad(MAIN_FRAME, DNS_ERROR);
339 EXPECT_EQ(1, probe_count());
340 EXPECT_EQ(2, sent_count());
341
342 StartProvisionalLoad(MAIN_FRAME, ERROR_PAGE);
343 CommitProvisionalLoad(MAIN_FRAME);
344 EXPECT_EQ(1, probe_count());
345 EXPECT_EQ(3, sent_count());
346 EXPECT_EQ(chrome_common_net::DNS_PROBE_STARTED, sent_status());
347
348 FinishProbe(chrome_common_net::DNS_PROBE_FINISHED_NO_INTERNET);
349 EXPECT_EQ(0, probe_count());
350 EXPECT_EQ(4, sent_count());
351 EXPECT_EQ(chrome_common_net::DNS_PROBE_FINISHED_NO_INTERNET, sent_status());
352 }
353
354 // If we see multiple errors in a row before a probe result, don't start
355 // multiple probes.
356 TEST_F(NetErrorTabHelperTest, CoalesceFailures) {
357 StartProvisionalLoad(MAIN_FRAME, NORMAL_PAGE);
358 FailProvisionalLoad(MAIN_FRAME, DNS_ERROR);
359 StartProvisionalLoad(MAIN_FRAME, ERROR_PAGE);
360 CommitProvisionalLoad(MAIN_FRAME);
361 EXPECT_EQ(1, probe_count());
362 EXPECT_EQ(1, sent_count());
363 EXPECT_EQ(chrome_common_net::DNS_PROBE_STARTED, sent_status());
364
365 StartProvisionalLoad(MAIN_FRAME, NORMAL_PAGE);
366 FailProvisionalLoad(MAIN_FRAME, DNS_ERROR);
367 StartProvisionalLoad(MAIN_FRAME, ERROR_PAGE);
368 CommitProvisionalLoad(MAIN_FRAME);
369 EXPECT_EQ(1, probe_count());
370 EXPECT_EQ(2, sent_count());
371 EXPECT_EQ(chrome_common_net::DNS_PROBE_STARTED, sent_status());
372
373 StartProvisionalLoad(MAIN_FRAME, NORMAL_PAGE);
374 FailProvisionalLoad(MAIN_FRAME, DNS_ERROR);
375 StartProvisionalLoad(MAIN_FRAME, ERROR_PAGE);
376 CommitProvisionalLoad(MAIN_FRAME);
377 EXPECT_EQ(1, probe_count());
378 EXPECT_EQ(3, sent_count());
379 EXPECT_EQ(chrome_common_net::DNS_PROBE_STARTED, sent_status());
380
381 FinishProbe(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN);
382 EXPECT_EQ(0, probe_count());
383 EXPECT_EQ(4, sent_count());
384 EXPECT_EQ(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN, sent_status());
385 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698