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

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: Refactor a bit again (DnsProbeRunner is now tied to a single DnsClient), other fixes Created 7 years, 6 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_;
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 );
mmenke 2013/06/12 19:17:12 This should go on the previous line (x3).
Deprecated (see juliatuttle) 2013/06/13 14:37:04 Done.
75 }
76
77 void CommitProvisionalLoad(MainFrame main_frame) {
78 tab_helper_.DidCommitProvisionalLoadForFrame(
79 1, // frame id
80 (main_frame == MAIN_FRAME),
81 bogus_url_, // url
82 content::PAGE_TRANSITION_TYPED,
83 NULL // render_view_host
84 );
85 }
86
87 void FailProvisionalLoad(MainFrame main_frame, ErrorType error_type) {
88 string16 bogus_error_description;
89 int net_error;
90
91 if (error_type == DNS_ERROR)
92 net_error = net::ERR_NAME_NOT_RESOLVED;
93 else
94 net_error = net::ERR_TIMED_OUT;
95
96 tab_helper_.DidFailProvisionalLoad(
97 1, // frame id
98 (main_frame == MAIN_FRAME),
99 bogus_url_, // validated_url
100 net_error,
101 bogus_error_description,
102 NULL // render_view_host
103 );
104 }
105
106 void FinishProbe(DnsProbeStatus status) {
107 tab_helper_.FinishProbe(status);
108 }
109
110 int probe_count() { return tab_helper_.mock_probe_count(); }
111 DnsProbeStatus sent_status() { return tab_helper_.mock_sent_status(); }
112 int sent_count() { return tab_helper_.mock_sent_count(); }
113
114 private:
115 MessageLoop message_loop_;
116 TestBrowserThread fake_ui_thread_;
117 TestNetErrorTabHelper tab_helper_;
118 GURL bogus_url_;
119 };
120
121 TEST_F(NetErrorTabHelperTest, Null) {
122 EXPECT_EQ(0, probe_count());
123 }
124
125 TEST_F(NetErrorTabHelperTest, MainFrameNonDnsError) {
126 StartProvisionalLoad(MAIN_FRAME, NORMAL_PAGE);
127 FailProvisionalLoad(MAIN_FRAME, OTHER_ERROR);
128 EXPECT_EQ(0, probe_count());
129 EXPECT_EQ(0, sent_count());
130 }
131
132 TEST_F(NetErrorTabHelperTest, NonMainFrameDnsError) {
133 StartProvisionalLoad(SUB_FRAME, NORMAL_PAGE);
134 FailProvisionalLoad(SUB_FRAME, DNS_ERROR);
135 EXPECT_EQ(0, probe_count());
136 EXPECT_EQ(0, sent_count());
137 }
138
139 TEST_F(NetErrorTabHelperTest, ProbeResponseBeforeStart) {
140 StartProvisionalLoad(MAIN_FRAME, NORMAL_PAGE);
141 FailProvisionalLoad(MAIN_FRAME, DNS_ERROR);
142 EXPECT_EQ(1, probe_count());
143 EXPECT_EQ(1, sent_count());
144 EXPECT_EQ(chrome_common_net::DNS_PROBE_STARTED, sent_status());
145
146 FinishProbe(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN);
147 EXPECT_EQ(0, probe_count());
148 EXPECT_EQ(2, sent_count());
149 EXPECT_EQ(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN, sent_status());
150
151 StartProvisionalLoad(MAIN_FRAME, ERROR_PAGE);
152 CommitProvisionalLoad(MAIN_FRAME);
153 EXPECT_EQ(3, sent_count());
154 EXPECT_EQ(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN, sent_status());
155 }
156
157 TEST_F(NetErrorTabHelperTest, ProbeResponseBetweenStartAndCommit) {
158 StartProvisionalLoad(MAIN_FRAME, NORMAL_PAGE);
159 FailProvisionalLoad(MAIN_FRAME, DNS_ERROR);
160 EXPECT_EQ(1, probe_count());
161 EXPECT_EQ(1, sent_count());
162 EXPECT_EQ(chrome_common_net::DNS_PROBE_STARTED, sent_status());
163
164 StartProvisionalLoad(MAIN_FRAME, ERROR_PAGE);
165
166 FinishProbe(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN);
167 EXPECT_EQ(0, probe_count());
168 EXPECT_EQ(2, sent_count());
169 EXPECT_EQ(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN, sent_status());
170
171 CommitProvisionalLoad(MAIN_FRAME);
172 EXPECT_EQ(3, sent_count());
173 EXPECT_EQ(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN, sent_status());
174 }
175
176 TEST_F(NetErrorTabHelperTest, ProbeResponseAfterCommit) {
177 StartProvisionalLoad(MAIN_FRAME, NORMAL_PAGE);
178 FailProvisionalLoad(MAIN_FRAME, DNS_ERROR);
179 EXPECT_EQ(1, probe_count());
180 EXPECT_EQ(1, sent_count());
181 EXPECT_EQ(chrome_common_net::DNS_PROBE_STARTED, sent_status());
182
183 StartProvisionalLoad(MAIN_FRAME, ERROR_PAGE);
184 CommitProvisionalLoad(MAIN_FRAME);
185 EXPECT_EQ(2, sent_count());
186 EXPECT_EQ(chrome_common_net::DNS_PROBE_STARTED, sent_status());
187
188 FinishProbe(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN);
189 EXPECT_EQ(0, probe_count());
190 EXPECT_EQ(3, sent_count());
191 EXPECT_EQ(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN, sent_status());
192 }
193
194 // Send result even if we've started a new page load; the error page is still
195 // visible, and the user might cancel the load.
196 TEST_F(NetErrorTabHelperTest, ProbeResponseAfterNewStart) {
197 StartProvisionalLoad(MAIN_FRAME, NORMAL_PAGE);
198 FailProvisionalLoad(MAIN_FRAME, DNS_ERROR);
199 EXPECT_EQ(1, probe_count());
200 EXPECT_EQ(1, sent_count());
201 EXPECT_EQ(chrome_common_net::DNS_PROBE_STARTED, sent_status());
202
203 StartProvisionalLoad(MAIN_FRAME, ERROR_PAGE);
204 CommitProvisionalLoad(MAIN_FRAME);
205 EXPECT_EQ(2, sent_count());
206 EXPECT_EQ(chrome_common_net::DNS_PROBE_STARTED, sent_status());
207
208 StartProvisionalLoad(MAIN_FRAME, NORMAL_PAGE);
209
210 FinishProbe(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN);
211 EXPECT_EQ(0, probe_count());
212 EXPECT_EQ(3, sent_count());
213 EXPECT_EQ(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN, sent_status());
214 }
215
216 // Don't send result if we've committed a new page load; the result would go
217 // to the wrong page, and the error page is gone anyway.
218 TEST_F(NetErrorTabHelperTest, ProbeResponseAfterNewCommit) {
219 StartProvisionalLoad(MAIN_FRAME, NORMAL_PAGE);
220 FailProvisionalLoad(MAIN_FRAME, DNS_ERROR);
221 EXPECT_EQ(1, probe_count());
222 EXPECT_EQ(1, sent_count());
223 EXPECT_EQ(chrome_common_net::DNS_PROBE_STARTED, sent_status());
224
225 StartProvisionalLoad(MAIN_FRAME, ERROR_PAGE);
226 CommitProvisionalLoad(MAIN_FRAME);
227 EXPECT_EQ(2, sent_count());
228 EXPECT_EQ(chrome_common_net::DNS_PROBE_STARTED, sent_status());
229
230 StartProvisionalLoad(MAIN_FRAME, NORMAL_PAGE);
231 CommitProvisionalLoad(MAIN_FRAME);
232
233 FinishProbe(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN);
234 EXPECT_EQ(0, probe_count());
235 EXPECT_EQ(2, sent_count());
236 }
237
238 TEST_F(NetErrorTabHelperTest, MultipleProbesWithoutErrorPage) {
239 StartProvisionalLoad(MAIN_FRAME, NORMAL_PAGE);
240 FailProvisionalLoad(MAIN_FRAME, DNS_ERROR);
241 EXPECT_EQ(1, probe_count());
242 EXPECT_EQ(1, sent_count());
243 EXPECT_EQ(chrome_common_net::DNS_PROBE_STARTED, sent_status());
244
245 FinishProbe(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN);
246 EXPECT_EQ(0, probe_count());
247 EXPECT_EQ(2, sent_count());
248 EXPECT_EQ(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN, sent_status());
249
250 StartProvisionalLoad(MAIN_FRAME, NORMAL_PAGE);
251 FailProvisionalLoad(MAIN_FRAME, DNS_ERROR);
252 EXPECT_EQ(1, probe_count());
253 EXPECT_EQ(3, sent_count());
254 EXPECT_EQ(chrome_common_net::DNS_PROBE_STARTED, sent_status());
255
256 FinishProbe(chrome_common_net::DNS_PROBE_FINISHED_NO_INTERNET);
257 EXPECT_EQ(0, probe_count());
258 EXPECT_EQ(4, sent_count());
259 EXPECT_EQ(chrome_common_net::DNS_PROBE_FINISHED_NO_INTERNET, sent_status());
260 }
261
262 TEST_F(NetErrorTabHelperTest, MultipleProbesWithErrorPage) {
263 StartProvisionalLoad(MAIN_FRAME, NORMAL_PAGE);
264 FailProvisionalLoad(MAIN_FRAME, DNS_ERROR);
265 EXPECT_EQ(1, probe_count());
266 EXPECT_EQ(1, sent_count());
267 EXPECT_EQ(chrome_common_net::DNS_PROBE_STARTED, sent_status());
268
269 StartProvisionalLoad(MAIN_FRAME, ERROR_PAGE);
270 CommitProvisionalLoad(MAIN_FRAME);
271 EXPECT_EQ(2, sent_count());
272 EXPECT_EQ(chrome_common_net::DNS_PROBE_STARTED, sent_status());
273
274 FinishProbe(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN);
275 EXPECT_EQ(0, probe_count());
276 EXPECT_EQ(3, sent_count());
277 EXPECT_EQ(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN, sent_status());
278
279 StartProvisionalLoad(MAIN_FRAME, NORMAL_PAGE);
280 FailProvisionalLoad(MAIN_FRAME, DNS_ERROR);
281 EXPECT_EQ(1, probe_count());
282 EXPECT_EQ(4, sent_count());
283 EXPECT_EQ(chrome_common_net::DNS_PROBE_STARTED, sent_status());
284
285 StartProvisionalLoad(MAIN_FRAME, ERROR_PAGE);
286 CommitProvisionalLoad(MAIN_FRAME);
287 EXPECT_EQ(5, sent_count());
288 EXPECT_EQ(chrome_common_net::DNS_PROBE_STARTED, sent_status());
289
290 FinishProbe(chrome_common_net::DNS_PROBE_FINISHED_NO_INTERNET);
291 EXPECT_EQ(0, probe_count());
292 EXPECT_EQ(6, sent_count());
293 EXPECT_EQ(chrome_common_net::DNS_PROBE_FINISHED_NO_INTERNET, sent_status());
294 }
295
296 // If we see multiple errors in a row before a probe result, send STARTED for
297 // each error, but don't start multiple probes.
298 TEST_F(NetErrorTabHelperTest, CoalesceFailures) {
299 StartProvisionalLoad(MAIN_FRAME, NORMAL_PAGE);
300 FailProvisionalLoad(MAIN_FRAME, DNS_ERROR);
301 EXPECT_EQ(1, probe_count());
302 EXPECT_EQ(1, sent_count());
303 EXPECT_EQ(chrome_common_net::DNS_PROBE_STARTED, sent_status());
304
305 StartProvisionalLoad(MAIN_FRAME, NORMAL_PAGE);
306 FailProvisionalLoad(MAIN_FRAME, DNS_ERROR);
307 EXPECT_EQ(1, probe_count());
308 EXPECT_EQ(2, sent_count());
309 EXPECT_EQ(chrome_common_net::DNS_PROBE_STARTED, sent_status());
310
311 StartProvisionalLoad(MAIN_FRAME, NORMAL_PAGE);
312 FailProvisionalLoad(MAIN_FRAME, DNS_ERROR);
313 EXPECT_EQ(1, probe_count());
314 EXPECT_EQ(3, sent_count());
315 EXPECT_EQ(chrome_common_net::DNS_PROBE_STARTED, sent_status());
316
317 StartProvisionalLoad(MAIN_FRAME, ERROR_PAGE);
318 CommitProvisionalLoad(MAIN_FRAME);
319 EXPECT_EQ(4, sent_count());
320 EXPECT_EQ(chrome_common_net::DNS_PROBE_STARTED, sent_status());
321
322 FinishProbe(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN);
323 EXPECT_EQ(0, probe_count());
324 EXPECT_EQ(5, sent_count());
325 EXPECT_EQ(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN, sent_status());
326 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698