OLD | NEW |
---|---|
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 Loading... | |
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 Loading... | |
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 } |
OLD | NEW |