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

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: Fix moar nits 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 mock_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 mock_probe_count_--;
32 }
33
34 int mock_probe_count() const { return mock_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 mock_probe_count_++;
41 }
42
43 virtual void SendInfo() OVERRIDE {
44 mock_sent_status_ = dns_probe_status_;
45 mock_sent_count_++;
46 }
47
48 int mock_probe_count_;
mmenke 2013/06/26 16:31:28 nit: Think this is a bit of a misnomer. Suggest
Deprecated (see juliatuttle) 2013/06/26 22:23:56 Done.
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_.mock_probe_count(); }
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, ProbeResponseBeforeStart) {
137 StartProvisionalLoad(MAIN_FRAME, NORMAL_PAGE);
138 FailProvisionalLoad(MAIN_FRAME, DNS_ERROR);
139 EXPECT_EQ(1, probe_count());
140 EXPECT_EQ(1, sent_count());
141 EXPECT_EQ(chrome_common_net::DNS_PROBE_STARTED, sent_status());
142
143 FinishProbe(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN);
144 EXPECT_EQ(0, probe_count());
145 EXPECT_EQ(2, sent_count());
146 EXPECT_EQ(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN, sent_status());
147
148 StartProvisionalLoad(MAIN_FRAME, ERROR_PAGE);
149 CommitProvisionalLoad(MAIN_FRAME);
150 EXPECT_EQ(3, sent_count());
151 EXPECT_EQ(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN, sent_status());
152 }
153
154 TEST_F(NetErrorTabHelperTest, ProbeResponseBetweenStartAndCommit) {
155 StartProvisionalLoad(MAIN_FRAME, NORMAL_PAGE);
156 FailProvisionalLoad(MAIN_FRAME, DNS_ERROR);
157 EXPECT_EQ(1, probe_count());
158 EXPECT_EQ(1, sent_count());
159 EXPECT_EQ(chrome_common_net::DNS_PROBE_STARTED, sent_status());
160
161 StartProvisionalLoad(MAIN_FRAME, ERROR_PAGE);
162
163 FinishProbe(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN);
164 EXPECT_EQ(0, probe_count());
165 EXPECT_EQ(2, sent_count());
166 EXPECT_EQ(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN, sent_status());
167
168 CommitProvisionalLoad(MAIN_FRAME);
169 EXPECT_EQ(3, sent_count());
170 EXPECT_EQ(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN, sent_status());
171 }
172
173 TEST_F(NetErrorTabHelperTest, ProbeResponseAfterCommit) {
174 StartProvisionalLoad(MAIN_FRAME, NORMAL_PAGE);
175 FailProvisionalLoad(MAIN_FRAME, DNS_ERROR);
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 StartProvisionalLoad(MAIN_FRAME, ERROR_PAGE);
181 CommitProvisionalLoad(MAIN_FRAME);
182 EXPECT_EQ(2, sent_count());
183 EXPECT_EQ(chrome_common_net::DNS_PROBE_STARTED, sent_status());
184
185 FinishProbe(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN);
186 EXPECT_EQ(0, probe_count());
187 EXPECT_EQ(3, sent_count());
188 EXPECT_EQ(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN, sent_status());
189 }
190
191 // Send result even if we've started a new page load; the error page is still
192 // visible, and the user might cancel the load.
193 TEST_F(NetErrorTabHelperTest, ProbeResponseAfterNewStart) {
194 StartProvisionalLoad(MAIN_FRAME, NORMAL_PAGE);
195 FailProvisionalLoad(MAIN_FRAME, DNS_ERROR);
196 EXPECT_EQ(1, probe_count());
197 EXPECT_EQ(1, sent_count());
198 EXPECT_EQ(chrome_common_net::DNS_PROBE_STARTED, sent_status());
199
200 StartProvisionalLoad(MAIN_FRAME, ERROR_PAGE);
201 CommitProvisionalLoad(MAIN_FRAME);
202 EXPECT_EQ(2, sent_count());
203 EXPECT_EQ(chrome_common_net::DNS_PROBE_STARTED, sent_status());
204
205 StartProvisionalLoad(MAIN_FRAME, NORMAL_PAGE);
206
207 FinishProbe(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN);
208 EXPECT_EQ(0, probe_count());
209 EXPECT_EQ(3, sent_count());
210 EXPECT_EQ(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN, sent_status());
211 }
212
213 // Don't send result if we've committed a new page load; the result would go
214 // to the wrong page, and the error page is gone anyway.
215 TEST_F(NetErrorTabHelperTest, ProbeResponseAfterNewCommit) {
216 StartProvisionalLoad(MAIN_FRAME, NORMAL_PAGE);
217 FailProvisionalLoad(MAIN_FRAME, DNS_ERROR);
218 EXPECT_EQ(1, probe_count());
219 EXPECT_EQ(1, sent_count());
220 EXPECT_EQ(chrome_common_net::DNS_PROBE_STARTED, sent_status());
221
222 StartProvisionalLoad(MAIN_FRAME, ERROR_PAGE);
223 CommitProvisionalLoad(MAIN_FRAME);
224 EXPECT_EQ(2, sent_count());
225 EXPECT_EQ(chrome_common_net::DNS_PROBE_STARTED, sent_status());
226
227 StartProvisionalLoad(MAIN_FRAME, NORMAL_PAGE);
228 CommitProvisionalLoad(MAIN_FRAME);
229
230 FinishProbe(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN);
231 EXPECT_EQ(0, probe_count());
232 EXPECT_EQ(2, sent_count());
233 }
234
235 TEST_F(NetErrorTabHelperTest, MultipleProbesWithoutErrorPage) {
236 StartProvisionalLoad(MAIN_FRAME, NORMAL_PAGE);
237 FailProvisionalLoad(MAIN_FRAME, DNS_ERROR);
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 FinishProbe(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN);
243 EXPECT_EQ(0, probe_count());
244 EXPECT_EQ(2, sent_count());
245 EXPECT_EQ(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN, sent_status());
246
247 StartProvisionalLoad(MAIN_FRAME, NORMAL_PAGE);
248 FailProvisionalLoad(MAIN_FRAME, DNS_ERROR);
249 EXPECT_EQ(1, probe_count());
250 EXPECT_EQ(3, sent_count());
251 EXPECT_EQ(chrome_common_net::DNS_PROBE_STARTED, sent_status());
252
253 FinishProbe(chrome_common_net::DNS_PROBE_FINISHED_NO_INTERNET);
254 EXPECT_EQ(0, probe_count());
255 EXPECT_EQ(4, sent_count());
256 EXPECT_EQ(chrome_common_net::DNS_PROBE_FINISHED_NO_INTERNET, sent_status());
257 }
258
259 TEST_F(NetErrorTabHelperTest, MultipleProbesWithErrorPage) {
260 StartProvisionalLoad(MAIN_FRAME, NORMAL_PAGE);
261 FailProvisionalLoad(MAIN_FRAME, DNS_ERROR);
262 EXPECT_EQ(1, probe_count());
263 EXPECT_EQ(1, sent_count());
264 EXPECT_EQ(chrome_common_net::DNS_PROBE_STARTED, sent_status());
265
266 StartProvisionalLoad(MAIN_FRAME, ERROR_PAGE);
267 CommitProvisionalLoad(MAIN_FRAME);
268 EXPECT_EQ(2, sent_count());
269 EXPECT_EQ(chrome_common_net::DNS_PROBE_STARTED, sent_status());
270
271 FinishProbe(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN);
272 EXPECT_EQ(0, probe_count());
273 EXPECT_EQ(3, sent_count());
274 EXPECT_EQ(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN, sent_status());
275
276 StartProvisionalLoad(MAIN_FRAME, NORMAL_PAGE);
277 FailProvisionalLoad(MAIN_FRAME, DNS_ERROR);
278 EXPECT_EQ(1, probe_count());
279 EXPECT_EQ(4, sent_count());
280 EXPECT_EQ(chrome_common_net::DNS_PROBE_STARTED, sent_status());
281
282 StartProvisionalLoad(MAIN_FRAME, ERROR_PAGE);
283 CommitProvisionalLoad(MAIN_FRAME);
284 EXPECT_EQ(5, sent_count());
285 EXPECT_EQ(chrome_common_net::DNS_PROBE_STARTED, sent_status());
286
287 FinishProbe(chrome_common_net::DNS_PROBE_FINISHED_NO_INTERNET);
288 EXPECT_EQ(0, probe_count());
289 EXPECT_EQ(6, sent_count());
290 EXPECT_EQ(chrome_common_net::DNS_PROBE_FINISHED_NO_INTERNET, sent_status());
291 }
292
293 // If we see multiple errors in a row before a probe result, send STARTED for
294 // each error, but don't start multiple probes.
295 TEST_F(NetErrorTabHelperTest, CoalesceFailures) {
296 StartProvisionalLoad(MAIN_FRAME, NORMAL_PAGE);
297 FailProvisionalLoad(MAIN_FRAME, DNS_ERROR);
298 EXPECT_EQ(1, probe_count());
299 EXPECT_EQ(1, sent_count());
300 EXPECT_EQ(chrome_common_net::DNS_PROBE_STARTED, sent_status());
301
302 StartProvisionalLoad(MAIN_FRAME, NORMAL_PAGE);
303 FailProvisionalLoad(MAIN_FRAME, DNS_ERROR);
304 EXPECT_EQ(1, probe_count());
305 EXPECT_EQ(2, sent_count());
306 EXPECT_EQ(chrome_common_net::DNS_PROBE_STARTED, sent_status());
307
308 StartProvisionalLoad(MAIN_FRAME, NORMAL_PAGE);
309 FailProvisionalLoad(MAIN_FRAME, DNS_ERROR);
310 EXPECT_EQ(1, probe_count());
311 EXPECT_EQ(3, sent_count());
312 EXPECT_EQ(chrome_common_net::DNS_PROBE_STARTED, sent_status());
313
314 StartProvisionalLoad(MAIN_FRAME, ERROR_PAGE);
315 CommitProvisionalLoad(MAIN_FRAME);
316 EXPECT_EQ(4, sent_count());
317 EXPECT_EQ(chrome_common_net::DNS_PROBE_STARTED, sent_status());
318
319 FinishProbe(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN);
320 EXPECT_EQ(0, probe_count());
321 EXPECT_EQ(5, sent_count());
322 EXPECT_EQ(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN, sent_status());
323 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698