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

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

Issue 2345913002: Fix NetErrorTabHelper with PlzNavigate. (Closed)
Patch Set: fix NavigationHandle::IsErrorPage for reloads of error pages Created 4 years, 3 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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 "chrome/browser/net/net_error_tab_helper.h" 5 #include "chrome/browser/net/net_error_tab_helper.h"
6 6
7 #include "chrome/common/render_messages.h" 7 #include "chrome/common/render_messages.h"
8 #include "chrome/test/base/chrome_render_view_host_test_harness.h" 8 #include "chrome/test/base/chrome_render_view_host_test_harness.h"
9 #include "components/error_page/common/net_error_info.h" 9 #include "components/error_page/common/net_error_info.h"
10 #include "content/public/browser/browser_thread.h" 10 #include "content/public/browser/browser_thread.h"
11 #include "content/public/browser/navigation_handle.h"
11 #include "content/public/test/test_renderer_host.h" 12 #include "content/public/test/test_renderer_host.h"
12 #include "net/base/net_errors.h" 13 #include "net/base/net_errors.h"
13 #include "testing/gtest/include/gtest/gtest.h" 14 #include "testing/gtest/include/gtest/gtest.h"
14 #include "ui/base/page_transition_types.h" 15 #include "ui/base/page_transition_types.h"
15 16
17 #undef NO_ERROR
Julia Tuttle 2016/09/19 16:23:19 Comment where you're undefining this from?
18
16 using chrome_browser_net::NetErrorTabHelper; 19 using chrome_browser_net::NetErrorTabHelper;
17 using error_page::DnsProbeStatus; 20 using error_page::DnsProbeStatus;
18 21
19 class TestNetErrorTabHelper : public NetErrorTabHelper { 22 class TestNetErrorTabHelper : public NetErrorTabHelper {
20 public: 23 public:
21 explicit TestNetErrorTabHelper(content::WebContents* web_contents) 24 explicit TestNetErrorTabHelper(content::WebContents* web_contents)
22 : NetErrorTabHelper(web_contents), 25 : NetErrorTabHelper(web_contents),
23 mock_probe_running_(false), 26 mock_probe_running_(false),
24 last_status_sent_(error_page::DNS_PROBE_MAX), 27 last_status_sent_(error_page::DNS_PROBE_MAX),
25 mock_sent_count_(0), 28 mock_sent_count_(0),
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
64 bool mock_probe_running_; 67 bool mock_probe_running_;
65 DnsProbeStatus last_status_sent_; 68 DnsProbeStatus last_status_sent_;
66 int mock_sent_count_; 69 int mock_sent_count_;
67 std::string network_diagnostics_url_; 70 std::string network_diagnostics_url_;
68 int times_diagnostics_dialog_invoked_; 71 int times_diagnostics_dialog_invoked_;
69 }; 72 };
70 73
71 class NetErrorTabHelperTest : public ChromeRenderViewHostTestHarness { 74 class NetErrorTabHelperTest : public ChromeRenderViewHostTestHarness {
72 protected: 75 protected:
73 enum MainFrame { SUB_FRAME, MAIN_FRAME }; 76 enum MainFrame { SUB_FRAME, MAIN_FRAME };
74 enum ErrorPage { NORMAL_PAGE, ERROR_PAGE }; 77 enum ErrorType { DNS_ERROR, OTHER_ERROR, NO_ERROR };
75 enum ErrorType { DNS_ERROR, OTHER_ERROR };
76 78
77 void SetUp() override { 79 void SetUp() override {
78 ChromeRenderViewHostTestHarness::SetUp(); 80 ChromeRenderViewHostTestHarness::SetUp();
79 81
80 // This will simulate the initialization of the RenderFrame in the renderer 82 // This will simulate the initialization of the RenderFrame in the renderer
81 // process. This is needed because WebContents does not initialize a 83 // process. This is needed because WebContents does not initialize a
82 // RenderFrame on construction, and the tests expect one to exist. 84 // RenderFrame on construction, and the tests expect one to exist.
83 content::RenderFrameHostTester::For(main_rfh()) 85 content::RenderFrameHostTester::For(main_rfh())
84 ->InitializeRenderFrameIfNeeded(); 86 ->InitializeRenderFrameIfNeeded();
85 87
86 subframe_ = content::RenderFrameHostTester::For(main_rfh()) 88 subframe_ = content::RenderFrameHostTester::For(main_rfh())
87 ->AppendChild("subframe"); 89 ->AppendChild("subframe");
88 90
89 tab_helper_.reset(new TestNetErrorTabHelper(web_contents())); 91 tab_helper_.reset(new TestNetErrorTabHelper(web_contents()));
90 NetErrorTabHelper::set_state_for_testing( 92 NetErrorTabHelper::set_state_for_testing(
91 NetErrorTabHelper::TESTING_FORCE_ENABLED); 93 NetErrorTabHelper::TESTING_FORCE_ENABLED);
92 } 94 }
93 95
94 void TearDown() override { 96 void TearDown() override {
95 // Have to shut down the helper before the profile. 97 // Have to shut down the helper before the profile.
96 tab_helper_.reset(); 98 tab_helper_.reset();
97 ChromeRenderViewHostTestHarness::TearDown(); 99 ChromeRenderViewHostTestHarness::TearDown();
98 } 100 }
99 101
100 void StartProvisionalLoad(MainFrame main_frame, ErrorPage error_page) { 102 void DidFinishNavigation(MainFrame main_frame,
101 tab_helper_->DidStartProvisionalLoadForFrame( 103 ErrorType error_type) {
102 (main_frame == MAIN_FRAME) ? main_rfh() : subframe_, 104 net::Error net_error = net::OK;
103 bogus_url_, // validated_url
104 (error_page == ERROR_PAGE),
105 false); // is_iframe_srcdoc
106 }
107
108 void CommitProvisionalLoad(MainFrame main_frame) {
109 tab_helper_->DidCommitProvisionalLoadForFrame(
110 (main_frame == MAIN_FRAME) ? main_rfh() : subframe_,
111 bogus_url_, // url
112 ui::PAGE_TRANSITION_TYPED);
113 }
114
115 void FailProvisionalLoad(MainFrame main_frame, ErrorType error_type) {
116 int net_error;
117
118 if (error_type == DNS_ERROR) 105 if (error_type == DNS_ERROR)
119 net_error = net::ERR_NAME_NOT_RESOLVED; 106 net_error = net::ERR_NAME_NOT_RESOLVED;
120 else 107 else
121 net_error = net::ERR_TIMED_OUT; 108 net_error = net::ERR_TIMED_OUT;
122 109 std::unique_ptr<content::NavigationHandle> navigation_handle(
123 tab_helper_->DidFailProvisionalLoad( 110 content::NavigationHandle::CreateNavigationHandleForTesting(
124 (main_frame == MAIN_FRAME) ? main_rfh() : subframe_, 111 bogus_url_,
125 bogus_url_, // validated_url 112 (main_frame == MAIN_FRAME) ? main_rfh() : subframe_,
126 net_error, 113 true,
127 base::string16(), 114 net_error));
128 false); 115 // The destructor will call tab_helper_->DidFinishNavigation.
129 } 116 }
130 117
131 void FinishProbe(DnsProbeStatus status) { tab_helper_->FinishProbe(status); } 118 void FinishProbe(DnsProbeStatus status) { tab_helper_->FinishProbe(status); }
132 119
133 bool probe_running() { return tab_helper_->mock_probe_running(); } 120 bool probe_running() { return tab_helper_->mock_probe_running(); }
134 DnsProbeStatus last_status_sent() { return tab_helper_->last_status_sent(); } 121 DnsProbeStatus last_status_sent() { return tab_helper_->last_status_sent(); }
135 int sent_count() { return tab_helper_->mock_sent_count(); } 122 int sent_count() { return tab_helper_->mock_sent_count(); }
136 123
137 TestNetErrorTabHelper* tab_helper() { return tab_helper_.get(); } 124 TestNetErrorTabHelper* tab_helper() { return tab_helper_.get(); }
138 125
139 private: 126 private:
140 content::RenderFrameHost* subframe_; 127 content::RenderFrameHost* subframe_;
141 std::unique_ptr<TestNetErrorTabHelper> tab_helper_; 128 std::unique_ptr<TestNetErrorTabHelper> tab_helper_;
142 GURL bogus_url_; 129 GURL bogus_url_;
143 }; 130 };
144 131
145 TEST_F(NetErrorTabHelperTest, Null) { 132 TEST_F(NetErrorTabHelperTest, Null) {
146 EXPECT_FALSE(probe_running()); 133 EXPECT_FALSE(probe_running());
147 } 134 }
148 135
149 TEST_F(NetErrorTabHelperTest, MainFrameNonDnsError) { 136 TEST_F(NetErrorTabHelperTest, MainFrameNonDnsError) {
150 StartProvisionalLoad(MAIN_FRAME, NORMAL_PAGE); 137 DidFinishNavigation(MAIN_FRAME, OTHER_ERROR);
151 FailProvisionalLoad(MAIN_FRAME, OTHER_ERROR);
152 EXPECT_FALSE(probe_running()); 138 EXPECT_FALSE(probe_running());
153 EXPECT_EQ(0, sent_count()); 139 EXPECT_EQ(0, sent_count());
154 } 140 }
155 141
156 TEST_F(NetErrorTabHelperTest, NonMainFrameDnsError) { 142 TEST_F(NetErrorTabHelperTest, NonMainFrameDnsError) {
157 StartProvisionalLoad(SUB_FRAME, NORMAL_PAGE); 143 DidFinishNavigation(SUB_FRAME, DNS_ERROR);
158 FailProvisionalLoad(SUB_FRAME, DNS_ERROR);
159 EXPECT_FALSE(probe_running()); 144 EXPECT_FALSE(probe_running());
160 EXPECT_EQ(0, sent_count()); 145 EXPECT_EQ(0, sent_count());
161 } 146 }
162 147
163 // Test complete DNS error page loads. Note that the helper can see two error 148 // Test complete DNS error page loads. Note that the helper can see two error
164 // page loads: Link Doctor loads an empty HTML page so the user knows something 149 // page loads: Link Doctor loads an empty HTML page so the user knows something
165 // is going on, then fails over to the normal error page if and when Link 150 // is going on, then fails over to the normal error page if and when Link
166 // Doctor fails to load or declines to provide a page. 151 // Doctor fails to load or declines to provide a page.
167 152
168 TEST_F(NetErrorTabHelperTest, ProbeResponseBeforeFirstCommit) { 153 TEST_F(NetErrorTabHelperTest, ProbeResponse) {
169 StartProvisionalLoad(MAIN_FRAME, NORMAL_PAGE); 154 DidFinishNavigation(MAIN_FRAME, DNS_ERROR);
170 FailProvisionalLoad(MAIN_FRAME, DNS_ERROR);
171 EXPECT_TRUE(probe_running());
172 EXPECT_EQ(0, sent_count());
173
174 StartProvisionalLoad(MAIN_FRAME, ERROR_PAGE);
175 EXPECT_TRUE(probe_running());
176 EXPECT_EQ(0, sent_count());
177
178 FinishProbe(error_page::DNS_PROBE_FINISHED_NXDOMAIN);
179 EXPECT_FALSE(probe_running());
180 EXPECT_EQ(0, sent_count());
181
182 CommitProvisionalLoad(MAIN_FRAME);
183 EXPECT_FALSE(probe_running());
184 EXPECT_EQ(1, sent_count());
185 EXPECT_EQ(error_page::DNS_PROBE_FINISHED_NXDOMAIN, last_status_sent());
186
187 StartProvisionalLoad(MAIN_FRAME, ERROR_PAGE);
188 EXPECT_FALSE(probe_running());
189 EXPECT_EQ(1, sent_count());
190
191 CommitProvisionalLoad(MAIN_FRAME);
192 EXPECT_FALSE(probe_running());
193 EXPECT_EQ(2, sent_count());
194 EXPECT_EQ(error_page::DNS_PROBE_FINISHED_NXDOMAIN, last_status_sent());
195 }
196
197 TEST_F(NetErrorTabHelperTest, ProbeResponseBetweenFirstAndSecondCommit) {
198 StartProvisionalLoad(MAIN_FRAME, NORMAL_PAGE);
199 FailProvisionalLoad(MAIN_FRAME, DNS_ERROR);
200 EXPECT_TRUE(probe_running());
201 EXPECT_EQ(0, sent_count());
202
203 StartProvisionalLoad(MAIN_FRAME, ERROR_PAGE);
204 EXPECT_TRUE(probe_running());
205 EXPECT_EQ(0, sent_count());
206
207 CommitProvisionalLoad(MAIN_FRAME);
208 EXPECT_TRUE(probe_running()); 155 EXPECT_TRUE(probe_running());
209 EXPECT_EQ(1, sent_count()); 156 EXPECT_EQ(1, sent_count());
210 EXPECT_EQ(error_page::DNS_PROBE_STARTED, last_status_sent());
211 157
212 FinishProbe(error_page::DNS_PROBE_FINISHED_NXDOMAIN); 158 FinishProbe(error_page::DNS_PROBE_FINISHED_NXDOMAIN);
213 EXPECT_FALSE(probe_running()); 159 EXPECT_FALSE(probe_running());
214 EXPECT_EQ(2, sent_count()); 160 EXPECT_EQ(2, sent_count());
215 EXPECT_EQ(error_page::DNS_PROBE_FINISHED_NXDOMAIN, last_status_sent());
216 161
217 StartProvisionalLoad(MAIN_FRAME, ERROR_PAGE); 162 DidFinishNavigation(MAIN_FRAME, NO_ERROR);
218 EXPECT_FALSE(probe_running());
219 EXPECT_EQ(2, sent_count());
220
221 CommitProvisionalLoad(MAIN_FRAME);
222 EXPECT_FALSE(probe_running()); 163 EXPECT_FALSE(probe_running());
223 EXPECT_EQ(3, sent_count()); 164 EXPECT_EQ(3, sent_count());
224 EXPECT_EQ(error_page::DNS_PROBE_FINISHED_NXDOMAIN, last_status_sent()); 165 EXPECT_EQ(error_page::DNS_PROBE_FINISHED_NXDOMAIN, last_status_sent());
225 }
226
227 TEST_F(NetErrorTabHelperTest, ProbeResponseAfterSecondCommit) {
228 StartProvisionalLoad(MAIN_FRAME, NORMAL_PAGE);
229 FailProvisionalLoad(MAIN_FRAME, DNS_ERROR);
230 EXPECT_TRUE(probe_running());
231 EXPECT_EQ(0, sent_count());
232
233 StartProvisionalLoad(MAIN_FRAME, ERROR_PAGE);
234 EXPECT_TRUE(probe_running());
235 EXPECT_EQ(0, sent_count());
236
237 CommitProvisionalLoad(MAIN_FRAME);
238 EXPECT_TRUE(probe_running());
239 EXPECT_EQ(1, sent_count());
240 EXPECT_EQ(error_page::DNS_PROBE_STARTED, last_status_sent());
241
242 StartProvisionalLoad(MAIN_FRAME, ERROR_PAGE);
243 EXPECT_TRUE(probe_running());
244 EXPECT_EQ(1, sent_count());
245
246 CommitProvisionalLoad(MAIN_FRAME);
247 EXPECT_TRUE(probe_running());
248 EXPECT_EQ(2, sent_count());
249 EXPECT_EQ(error_page::DNS_PROBE_STARTED, last_status_sent());
250
251 FinishProbe(error_page::DNS_PROBE_FINISHED_NXDOMAIN);
252 EXPECT_FALSE(probe_running());
253 EXPECT_EQ(3, sent_count());
254 EXPECT_EQ(error_page::DNS_PROBE_FINISHED_NXDOMAIN, last_status_sent());
255 } 166 }
256 167
257 // Send result even if a new page load has started; the error page is still 168 // Send result even if a new page load has started; the error page is still
258 // visible, and the user might cancel the load. 169 // visible, and the user might cancel the load.
259 TEST_F(NetErrorTabHelperTest, ProbeResponseAfterNewStart) { 170 TEST_F(NetErrorTabHelperTest, ProbeResponseAfterNewStart) {
260 StartProvisionalLoad(MAIN_FRAME, NORMAL_PAGE); 171 DidFinishNavigation(MAIN_FRAME, DNS_ERROR);
261 FailProvisionalLoad(MAIN_FRAME, DNS_ERROR);
262 EXPECT_TRUE(probe_running());
263 EXPECT_EQ(0, sent_count());
264
265 StartProvisionalLoad(MAIN_FRAME, ERROR_PAGE);
266 EXPECT_TRUE(probe_running());
267 EXPECT_EQ(0, sent_count());
268
269 CommitProvisionalLoad(MAIN_FRAME);
270 EXPECT_TRUE(probe_running()); 172 EXPECT_TRUE(probe_running());
271 EXPECT_EQ(1, sent_count()); 173 EXPECT_EQ(1, sent_count());
272 EXPECT_EQ(error_page::DNS_PROBE_STARTED, last_status_sent()); 174 EXPECT_EQ(error_page::DNS_PROBE_STARTED, last_status_sent());
273 175
274 StartProvisionalLoad(MAIN_FRAME, ERROR_PAGE); 176 DidFinishNavigation(MAIN_FRAME, DNS_ERROR);
275 EXPECT_TRUE(probe_running());
276 EXPECT_EQ(1, sent_count());
277
278 CommitProvisionalLoad(MAIN_FRAME);
279 EXPECT_TRUE(probe_running()); 177 EXPECT_TRUE(probe_running());
280 EXPECT_EQ(2, sent_count()); 178 EXPECT_EQ(2, sent_count());
281 EXPECT_EQ(error_page::DNS_PROBE_STARTED, last_status_sent()); 179 EXPECT_EQ(error_page::DNS_PROBE_STARTED, last_status_sent());
282 180
283 StartProvisionalLoad(MAIN_FRAME, NORMAL_PAGE); 181 DidFinishNavigation(MAIN_FRAME, NO_ERROR);
182 EXPECT_TRUE(probe_running());
183 EXPECT_EQ(3, sent_count());
184
185 FinishProbe(error_page::DNS_PROBE_FINISHED_NXDOMAIN);
186 EXPECT_FALSE(probe_running());
187 EXPECT_EQ(4, sent_count());
188 EXPECT_EQ(error_page::DNS_PROBE_FINISHED_NXDOMAIN, last_status_sent());
189 }
190
191 // Don't send result if a new page has committed; the result would go to the
192 // wrong page, and the error page is gone anyway.
193 TEST_F(NetErrorTabHelperTest, ProbeResponseAfterNewCommit) {
194 DidFinishNavigation(MAIN_FRAME, DNS_ERROR);
195 EXPECT_TRUE(probe_running());
196 EXPECT_EQ(1, sent_count());
197
198 DidFinishNavigation(MAIN_FRAME, NO_ERROR);
284 EXPECT_TRUE(probe_running()); 199 EXPECT_TRUE(probe_running());
285 EXPECT_EQ(2, sent_count()); 200 EXPECT_EQ(2, sent_count());
286 201
287 FinishProbe(error_page::DNS_PROBE_FINISHED_NXDOMAIN); 202 FinishProbe(error_page::DNS_PROBE_FINISHED_NXDOMAIN);
288 EXPECT_FALSE(probe_running()); 203 EXPECT_FALSE(probe_running());
289 EXPECT_EQ(3, sent_count()); 204 EXPECT_EQ(3, sent_count());
290 EXPECT_EQ(error_page::DNS_PROBE_FINISHED_NXDOMAIN, last_status_sent());
291 } 205 }
292 206
293 // Don't send result if a new page has committed; the result would go to the 207 TEST_F(NetErrorTabHelperTest, MultipleDnsErrorsWithProbesWithoutErrorPages) {
294 // wrong page, and the error page is gone anyway. 208 DidFinishNavigation(MAIN_FRAME, DNS_ERROR);
295 TEST_F(NetErrorTabHelperTest, ProbeResponseAfterNewCommit) {
296 StartProvisionalLoad(MAIN_FRAME, NORMAL_PAGE);
297 FailProvisionalLoad(MAIN_FRAME, DNS_ERROR);
298 EXPECT_TRUE(probe_running());
299 EXPECT_EQ(0, sent_count());
300
301 StartProvisionalLoad(MAIN_FRAME, ERROR_PAGE);
302 EXPECT_TRUE(probe_running());
303 EXPECT_EQ(0, sent_count());
304
305 CommitProvisionalLoad(MAIN_FRAME);
306 EXPECT_TRUE(probe_running());
307 EXPECT_EQ(1, sent_count());
308 EXPECT_EQ(error_page::DNS_PROBE_STARTED, last_status_sent());
309
310 StartProvisionalLoad(MAIN_FRAME, ERROR_PAGE);
311 EXPECT_TRUE(probe_running()); 209 EXPECT_TRUE(probe_running());
312 EXPECT_EQ(1, sent_count()); 210 EXPECT_EQ(1, sent_count());
313 211
314 CommitProvisionalLoad(MAIN_FRAME); 212 FinishProbe(error_page::DNS_PROBE_FINISHED_NXDOMAIN);
213 EXPECT_FALSE(probe_running());
214 EXPECT_EQ(2, sent_count());
215
216 DidFinishNavigation(MAIN_FRAME, DNS_ERROR);
217 EXPECT_TRUE(probe_running());
218 EXPECT_EQ(3, sent_count());
219
220 FinishProbe(error_page::DNS_PROBE_FINISHED_NO_INTERNET);
221 EXPECT_FALSE(probe_running());
222 EXPECT_EQ(4, sent_count());
223 }
224
225 TEST_F(NetErrorTabHelperTest, MultipleDnsErrorsWithProbesAndErrorPages) {
226 DidFinishNavigation(MAIN_FRAME, DNS_ERROR);
227 EXPECT_TRUE(probe_running());
228 EXPECT_EQ(1, sent_count());
229
230 DidFinishNavigation(MAIN_FRAME, DNS_ERROR);
315 EXPECT_TRUE(probe_running()); 231 EXPECT_TRUE(probe_running());
316 EXPECT_EQ(2, sent_count()); 232 EXPECT_EQ(2, sent_count());
317 EXPECT_EQ(error_page::DNS_PROBE_STARTED, last_status_sent()); 233 EXPECT_EQ(error_page::DNS_PROBE_STARTED, last_status_sent());
318 234
319 StartProvisionalLoad(MAIN_FRAME, NORMAL_PAGE);
320 EXPECT_TRUE(probe_running());
321 EXPECT_EQ(2, sent_count());
322
323 CommitProvisionalLoad(MAIN_FRAME);
324 EXPECT_TRUE(probe_running());
325 EXPECT_EQ(2, sent_count());
326
327 FinishProbe(error_page::DNS_PROBE_FINISHED_NXDOMAIN); 235 FinishProbe(error_page::DNS_PROBE_FINISHED_NXDOMAIN);
328 EXPECT_FALSE(probe_running()); 236 EXPECT_FALSE(probe_running());
329 EXPECT_EQ(2, sent_count()); 237 EXPECT_EQ(3, sent_count());
330 }
331
332 TEST_F(NetErrorTabHelperTest, MultipleDnsErrorsWithProbesWithoutErrorPages) {
333 StartProvisionalLoad(MAIN_FRAME, NORMAL_PAGE);
334 FailProvisionalLoad(MAIN_FRAME, DNS_ERROR);
335 EXPECT_TRUE(probe_running());
336 EXPECT_EQ(0, sent_count());
337
338 FinishProbe(error_page::DNS_PROBE_FINISHED_NXDOMAIN);
339 EXPECT_FALSE(probe_running());
340 EXPECT_EQ(0, sent_count());
341
342 StartProvisionalLoad(MAIN_FRAME, NORMAL_PAGE);
343 FailProvisionalLoad(MAIN_FRAME, DNS_ERROR);
344 EXPECT_TRUE(probe_running());
345 EXPECT_EQ(0, sent_count());
346
347 FinishProbe(error_page::DNS_PROBE_FINISHED_NO_INTERNET);
348 EXPECT_FALSE(probe_running());
349 EXPECT_EQ(0, sent_count());
350 }
351
352 TEST_F(NetErrorTabHelperTest, MultipleDnsErrorsWithProbesAndErrorPages) {
353 StartProvisionalLoad(MAIN_FRAME, NORMAL_PAGE);
354 FailProvisionalLoad(MAIN_FRAME, DNS_ERROR);
355 EXPECT_TRUE(probe_running());
356 EXPECT_EQ(0, sent_count());
357
358 StartProvisionalLoad(MAIN_FRAME, ERROR_PAGE);
359 CommitProvisionalLoad(MAIN_FRAME);
360 EXPECT_TRUE(probe_running());
361 EXPECT_EQ(1, sent_count());
362 EXPECT_EQ(error_page::DNS_PROBE_STARTED, last_status_sent());
363
364 FinishProbe(error_page::DNS_PROBE_FINISHED_NXDOMAIN);
365 EXPECT_FALSE(probe_running());
366 EXPECT_EQ(2, sent_count());
367 EXPECT_EQ(error_page::DNS_PROBE_FINISHED_NXDOMAIN, last_status_sent()); 238 EXPECT_EQ(error_page::DNS_PROBE_FINISHED_NXDOMAIN, last_status_sent());
368 239
369 StartProvisionalLoad(MAIN_FRAME, NORMAL_PAGE); 240 DidFinishNavigation(MAIN_FRAME, DNS_ERROR);
370 FailProvisionalLoad(MAIN_FRAME, DNS_ERROR);
371 EXPECT_TRUE(probe_running()); 241 EXPECT_TRUE(probe_running());
372 EXPECT_EQ(2, sent_count()); 242 EXPECT_EQ(4, sent_count());
373 243
374 StartProvisionalLoad(MAIN_FRAME, ERROR_PAGE); 244 DidFinishNavigation(MAIN_FRAME, DNS_ERROR);
375 CommitProvisionalLoad(MAIN_FRAME);
376 EXPECT_TRUE(probe_running()); 245 EXPECT_TRUE(probe_running());
377 EXPECT_EQ(3, sent_count()); 246 EXPECT_EQ(5, sent_count());
378 EXPECT_EQ(error_page::DNS_PROBE_STARTED, last_status_sent()); 247 EXPECT_EQ(error_page::DNS_PROBE_STARTED, last_status_sent());
379 248
380 FinishProbe(error_page::DNS_PROBE_FINISHED_NO_INTERNET); 249 FinishProbe(error_page::DNS_PROBE_FINISHED_NO_INTERNET);
381 EXPECT_FALSE(probe_running()); 250 EXPECT_FALSE(probe_running());
382 EXPECT_EQ(4, sent_count()); 251 EXPECT_EQ(6, sent_count());
383 EXPECT_EQ(error_page::DNS_PROBE_FINISHED_NO_INTERNET, 252 EXPECT_EQ(error_page::DNS_PROBE_FINISHED_NO_INTERNET,
384 last_status_sent()); 253 last_status_sent());
385 } 254 }
386 255
387 // If multiple DNS errors occur in a row before a probe result, don't start 256 // If multiple DNS errors occur in a row before a probe result, don't start
388 // multiple probes. 257 // multiple probes.
389 TEST_F(NetErrorTabHelperTest, CoalesceFailures) { 258 TEST_F(NetErrorTabHelperTest, CoalesceFailures) {
390 StartProvisionalLoad(MAIN_FRAME, NORMAL_PAGE); 259 DidFinishNavigation(MAIN_FRAME, DNS_ERROR);
391 FailProvisionalLoad(MAIN_FRAME, DNS_ERROR); 260 DidFinishNavigation(MAIN_FRAME, DNS_ERROR);
392 StartProvisionalLoad(MAIN_FRAME, ERROR_PAGE);
393 CommitProvisionalLoad(MAIN_FRAME);
394 EXPECT_TRUE(probe_running());
395 EXPECT_EQ(1, sent_count());
396 EXPECT_EQ(error_page::DNS_PROBE_STARTED, last_status_sent());
397
398 StartProvisionalLoad(MAIN_FRAME, NORMAL_PAGE);
399 FailProvisionalLoad(MAIN_FRAME, DNS_ERROR);
400 StartProvisionalLoad(MAIN_FRAME, ERROR_PAGE);
401 CommitProvisionalLoad(MAIN_FRAME);
402 EXPECT_TRUE(probe_running()); 261 EXPECT_TRUE(probe_running());
403 EXPECT_EQ(2, sent_count()); 262 EXPECT_EQ(2, sent_count());
404 EXPECT_EQ(error_page::DNS_PROBE_STARTED, last_status_sent()); 263 EXPECT_EQ(error_page::DNS_PROBE_STARTED, last_status_sent());
405 264
406 StartProvisionalLoad(MAIN_FRAME, NORMAL_PAGE); 265 DidFinishNavigation(MAIN_FRAME, DNS_ERROR);
407 FailProvisionalLoad(MAIN_FRAME, DNS_ERROR);
408 StartProvisionalLoad(MAIN_FRAME, ERROR_PAGE);
409 CommitProvisionalLoad(MAIN_FRAME);
410 EXPECT_TRUE(probe_running()); 266 EXPECT_TRUE(probe_running());
411 EXPECT_EQ(3, sent_count()); 267 EXPECT_EQ(3, sent_count());
412 EXPECT_EQ(error_page::DNS_PROBE_STARTED, last_status_sent()); 268 EXPECT_EQ(error_page::DNS_PROBE_STARTED, last_status_sent());
413 269
270 DidFinishNavigation(MAIN_FRAME, DNS_ERROR);
271 EXPECT_TRUE(probe_running());
272 EXPECT_EQ(4, sent_count());
273 EXPECT_EQ(error_page::DNS_PROBE_STARTED, last_status_sent());
274
414 FinishProbe(error_page::DNS_PROBE_FINISHED_NXDOMAIN); 275 FinishProbe(error_page::DNS_PROBE_FINISHED_NXDOMAIN);
415 EXPECT_FALSE(probe_running()); 276 EXPECT_FALSE(probe_running());
416 EXPECT_EQ(4, sent_count()); 277 EXPECT_EQ(5, sent_count());
417 EXPECT_EQ(error_page::DNS_PROBE_FINISHED_NXDOMAIN, last_status_sent()); 278 EXPECT_EQ(error_page::DNS_PROBE_FINISHED_NXDOMAIN, last_status_sent());
418 } 279 }
419 280
420 // Makes sure that URLs are sanitized before running the platform network 281 // Makes sure that URLs are sanitized before running the platform network
421 // diagnostics tool. 282 // diagnostics tool.
422 TEST_F(NetErrorTabHelperTest, SanitizeDiagnosticsUrl) { 283 TEST_F(NetErrorTabHelperTest, SanitizeDiagnosticsUrl) {
423 content::RenderFrameHost* rfh = web_contents()->GetMainFrame(); 284 content::RenderFrameHost* rfh = web_contents()->GetMainFrame();
424 rfh->OnMessageReceived(ChromeViewHostMsg_RunNetworkDiagnostics( 285 rfh->OnMessageReceived(ChromeViewHostMsg_RunNetworkDiagnostics(
425 rfh->GetRoutingID(), 286 rfh->GetRoutingID(),
426 GURL("http://foo:bar@somewhere:123/hats?for#goats"))); 287 GURL("http://foo:bar@somewhere:123/hats?for#goats")));
(...skipping 14 matching lines...) Expand all
441 "file://foo/bar", 302 "file://foo/bar",
442 }; 303 };
443 304
444 for (const char* url : kUrls) { 305 for (const char* url : kUrls) {
445 content::RenderFrameHost* rfh = web_contents()->GetMainFrame(); 306 content::RenderFrameHost* rfh = web_contents()->GetMainFrame();
446 rfh->OnMessageReceived(ChromeViewHostMsg_RunNetworkDiagnostics( 307 rfh->OnMessageReceived(ChromeViewHostMsg_RunNetworkDiagnostics(
447 rfh->GetRoutingID(), GURL(url))); 308 rfh->GetRoutingID(), GURL(url)));
448 EXPECT_EQ(0, tab_helper()->times_diagnostics_dialog_invoked()); 309 EXPECT_EQ(0, tab_helper()->times_diagnostics_dialog_invoked());
449 } 310 }
450 } 311 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698