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
3 // found in the LICENSE file.
5 #include "chrome/renderer/net/net_error_helper_core.h"
7 #include "base/logging.h"
8 #include "base/strings/stringprintf.h"
9 #include "base/timer/mock_timer.h"
10 #include "base/timer/timer.h"
11 #include "chrome/common/net/net_error_info.h"
12 #include "net/base/net_errors.h"
13 #include "testing/gtest/include/gtest/gtest.h"
14 #include "third_party/WebKit/public/platform/WebURLError.h"
16 using blink::WebURLError;
17 using chrome_common_net::DnsProbeStatus;
18 using chrome_common_net::DnsProbeStatusToString;
20 const char kFailedUrl[] = "http://failed/";
21 const char kFailedHttpsUrl[] = "https://failed/";
22 const char kLinkDoctorUrl[] = "http://link.doctor/";
23 const char kLinkDoctorBody[] = "Link Doctor Body";
25 // Creates a string from an error that is used as a mock locally generated
26 // error page for that error.
27 std::string ErrorToString(const WebURLError& error, bool is_failed_post) {
28 return base::StringPrintf("(%s, %s, %i, %s)",
29 error.unreachableURL.string().utf8().c_str(),
30 error.domain.utf8().c_str(), error.reason,
31 is_failed_post ? "POST" : "NOT POST");
34 WebURLError ProbeError(DnsProbeStatus status) {
36 error.unreachableURL = GURL(kFailedUrl);
37 error.domain = blink::WebString::fromUTF8(
38 chrome_common_net::kDnsProbeErrorDomain);
39 error.reason = status;
43 WebURLError NetError(net::Error net_error) {
45 error.unreachableURL = GURL(kFailedUrl);
46 error.domain = blink::WebString::fromUTF8(net::kErrorDomain);
47 error.reason = net_error;
51 WebURLError HttpError(int status_code) {
53 error.unreachableURL = GURL(kFailedUrl);
54 error.domain = blink::WebString::fromUTF8("http");
55 error.reason = status_code;
59 // Convenience functions that create an error string for a non-POST request.
61 std::string ProbeErrorString(DnsProbeStatus status) {
62 return ErrorToString(ProbeError(status), false);
65 std::string NetErrorString(net::Error net_error) {
66 return ErrorToString(NetError(net_error), false);
69 class NetErrorHelperCoreTest : public testing::Test,
70 public NetErrorHelperCore::Delegate {
72 NetErrorHelperCoreTest() : timer_(new base::MockTimer(false, false)),
75 error_html_update_count_(0),
77 enable_stale_load_bindings_count_(0) {
78 core_.set_auto_reload_enabled(false);
79 core_.set_timer_for_testing(scoped_ptr<base::Timer>(timer_));
82 virtual ~NetErrorHelperCoreTest() {
83 // No test finishes while an error page is being fetched.
84 EXPECT_FALSE(is_url_being_fetched());
87 NetErrorHelperCore& core() { return core_; }
89 const GURL& url_being_fetched() const { return url_being_fetched_; }
90 bool is_url_being_fetched() const { return !url_being_fetched_.is_empty(); }
92 int reload_count() const {
96 int enable_stale_load_bindings_count() const {
97 return enable_stale_load_bindings_count_;
100 const std::string& last_update_string() const { return last_update_string_; }
101 int update_count() const { return update_count_; }
103 const std::string& last_error_html() const { return last_error_html_; }
104 int error_html_update_count() const { return error_html_update_count_; }
106 void LinkDoctorLoadSuccess() {
107 LinkDoctorLoadFinished(kLinkDoctorBody);
110 void LinkDoctorLoadFailure() {
111 LinkDoctorLoadFinished("");
114 base::MockTimer* timer() { return timer_; }
116 void DoErrorLoad(net::Error error) {
117 core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
118 NetErrorHelperCore::NON_ERROR_PAGE);
120 core().GetErrorHTML(NetErrorHelperCore::MAIN_FRAME,
121 NetError(error), false, &html);
122 EXPECT_FALSE(html.empty());
123 EXPECT_EQ(NetErrorString(error), html);
125 core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
126 NetErrorHelperCore::ERROR_PAGE);
127 core().OnCommitLoad(NetErrorHelperCore::MAIN_FRAME);
128 core().OnFinishLoad(NetErrorHelperCore::MAIN_FRAME);
131 void DoSuccessLoad() {
132 core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
133 NetErrorHelperCore::NON_ERROR_PAGE);
134 core().OnCommitLoad(NetErrorHelperCore::MAIN_FRAME);
135 core().OnFinishLoad(NetErrorHelperCore::MAIN_FRAME);
138 void DoDnsProbe(chrome_common_net::DnsProbeStatus final_status) {
139 core().OnNetErrorInfo(chrome_common_net::DNS_PROBE_STARTED);
140 core().OnNetErrorInfo(final_status);
144 void LinkDoctorLoadFinished(const std::string& result) {
145 url_being_fetched_ = GURL();
146 core().OnAlternateErrorPageFetched(result);
149 // NetErrorHelperCore::Delegate implementation:
150 virtual void GenerateLocalizedErrorPage(const WebURLError& error,
152 std::string* html) const OVERRIDE {
153 *html = ErrorToString(error, is_failed_post);
156 virtual void LoadErrorPageInMainFrame(const std::string& html,
157 const GURL& failed_url) OVERRIDE {
158 error_html_update_count_++;
159 last_error_html_ = html;
162 virtual void EnableStaleLoadBindings(const GURL& page_url) OVERRIDE {
163 enable_stale_load_bindings_count_++;
166 virtual void UpdateErrorPage(const WebURLError& error,
167 bool is_failed_post) OVERRIDE {
169 last_error_html_ = ErrorToString(error, is_failed_post);
172 virtual void FetchErrorPage(const GURL& url) OVERRIDE {
173 EXPECT_TRUE(url_being_fetched_.is_empty());
174 EXPECT_TRUE(url.is_valid());
175 EXPECT_NE(std::string::npos, url.spec().find(kLinkDoctorUrl));
177 url_being_fetched_ = url;
180 virtual void CancelFetchErrorPage() OVERRIDE {
181 url_being_fetched_ = GURL();
184 virtual void ReloadPage() OVERRIDE {
188 base::MockTimer* timer_;
190 NetErrorHelperCore core_;
192 GURL url_being_fetched_;
194 // Contains the information passed to the last call to UpdateErrorPage, as a
196 std::string last_update_string_;
197 // Number of times |last_update_string_| has been changed.
200 // Contains the HTML set by the last call to LoadErrorPageInMainFrame.
201 std::string last_error_html_;
202 // Number of times |last_error_html_| has been changed.
203 int error_html_update_count_;
207 int enable_stale_load_bindings_count_;
210 //------------------------------------------------------------------------------
211 // Basic tests that don't update the error page for probes or load the Link
213 //------------------------------------------------------------------------------
215 TEST_F(NetErrorHelperCoreTest, Null) {
218 TEST_F(NetErrorHelperCoreTest, SuccessfulPageLoad) {
219 core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
220 NetErrorHelperCore::NON_ERROR_PAGE);
221 core().OnCommitLoad(NetErrorHelperCore::MAIN_FRAME);
222 core().OnFinishLoad(NetErrorHelperCore::MAIN_FRAME);
223 EXPECT_EQ(0, update_count());
224 EXPECT_EQ(0, error_html_update_count());
227 TEST_F(NetErrorHelperCoreTest, SuccessfulPageLoadWithLinkDoctor) {
228 core().set_alt_error_page_url(GURL(kLinkDoctorUrl));
229 core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
230 NetErrorHelperCore::NON_ERROR_PAGE);
231 core().OnCommitLoad(NetErrorHelperCore::MAIN_FRAME);
232 core().OnFinishLoad(NetErrorHelperCore::MAIN_FRAME);
233 EXPECT_EQ(0, update_count());
234 EXPECT_EQ(0, error_html_update_count());
237 TEST_F(NetErrorHelperCoreTest, MainFrameNonDnsError) {
238 // Original page starts loading.
239 core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
240 NetErrorHelperCore::NON_ERROR_PAGE);
242 // It fails, and an error page is requested.
244 core().GetErrorHTML(NetErrorHelperCore::MAIN_FRAME,
245 NetError(net::ERR_CONNECTION_RESET), false, &html);
246 // Should have returned a local error page.
247 EXPECT_FALSE(html.empty());
248 EXPECT_EQ(NetErrorString(net::ERR_CONNECTION_RESET), html);
251 EXPECT_EQ(0, enable_stale_load_bindings_count());
252 core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
253 NetErrorHelperCore::ERROR_PAGE);
254 core().OnCommitLoad(NetErrorHelperCore::MAIN_FRAME);
255 core().OnFinishLoad(NetErrorHelperCore::MAIN_FRAME);
256 EXPECT_EQ(0, update_count());
257 EXPECT_EQ(0, error_html_update_count());
258 EXPECT_EQ(1, enable_stale_load_bindings_count());
261 TEST_F(NetErrorHelperCoreTest, MainFrameNonDnsErrorWithLinkDoctor) {
262 core().set_alt_error_page_url(GURL(kLinkDoctorUrl));
264 // Original page starts loading.
265 core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
266 NetErrorHelperCore::NON_ERROR_PAGE);
268 // It fails, and an error page is requested.
270 core().GetErrorHTML(NetErrorHelperCore::MAIN_FRAME,
271 NetError(net::ERR_CONNECTION_RESET), false, &html);
272 // Should have returned a local error page.
273 EXPECT_FALSE(html.empty());
274 EXPECT_EQ(NetErrorString(net::ERR_CONNECTION_RESET), html);
277 core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
278 NetErrorHelperCore::ERROR_PAGE);
279 core().OnCommitLoad(NetErrorHelperCore::MAIN_FRAME);
280 core().OnFinishLoad(NetErrorHelperCore::MAIN_FRAME);
281 EXPECT_EQ(0, update_count());
282 EXPECT_EQ(0, error_html_update_count());
285 // Much like above tests, but with a bunch of spurious DNS status messages that
286 // should have no effect.
287 TEST_F(NetErrorHelperCoreTest, MainFrameNonDnsErrorSpuriousStatus) {
288 // Original page starts loading.
289 core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
290 NetErrorHelperCore::NON_ERROR_PAGE);
291 core().OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN);
293 // It fails, and an error page is requested.
295 core().GetErrorHTML(NetErrorHelperCore::MAIN_FRAME,
296 NetError(net::ERR_CONNECTION_RESET),
298 core().OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN);
300 // Should have returned a local error page.
301 EXPECT_FALSE(html.empty());
302 EXPECT_EQ(NetErrorString(net::ERR_CONNECTION_RESET), html);
306 core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
307 NetErrorHelperCore::ERROR_PAGE);
308 core().OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN);
310 core().OnCommitLoad(NetErrorHelperCore::MAIN_FRAME);
311 core().OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN);
313 core().OnFinishLoad(NetErrorHelperCore::MAIN_FRAME);
314 core().OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN);
316 EXPECT_EQ(0, update_count());
317 EXPECT_EQ(0, error_html_update_count());
320 TEST_F(NetErrorHelperCoreTest, SubFrameDnsError) {
321 // Original page starts loading.
322 core().OnStartLoad(NetErrorHelperCore::SUB_FRAME,
323 NetErrorHelperCore::NON_ERROR_PAGE);
325 // It fails, and an error page is requested.
327 core().GetErrorHTML(NetErrorHelperCore::SUB_FRAME,
328 NetError(net::ERR_NAME_NOT_RESOLVED),
330 // Should have returned a local error page.
331 EXPECT_EQ(NetErrorString(net::ERR_NAME_NOT_RESOLVED), html);
334 core().OnStartLoad(NetErrorHelperCore::SUB_FRAME,
335 NetErrorHelperCore::ERROR_PAGE);
336 core().OnCommitLoad(NetErrorHelperCore::SUB_FRAME);
337 core().OnFinishLoad(NetErrorHelperCore::SUB_FRAME);
338 EXPECT_EQ(0, update_count());
339 EXPECT_EQ(0, error_html_update_count());
342 TEST_F(NetErrorHelperCoreTest, SubFrameDnsErrorWithLinkDoctor) {
343 core().set_alt_error_page_url(GURL(kLinkDoctorUrl));
345 // Original page starts loading.
346 core().OnStartLoad(NetErrorHelperCore::SUB_FRAME,
347 NetErrorHelperCore::NON_ERROR_PAGE);
349 // It fails, and an error page is requested.
351 core().GetErrorHTML(NetErrorHelperCore::SUB_FRAME,
352 NetError(net::ERR_NAME_NOT_RESOLVED),
354 // Should have returned a local error page.
355 EXPECT_EQ(NetErrorString(net::ERR_NAME_NOT_RESOLVED), html);
358 core().OnStartLoad(NetErrorHelperCore::SUB_FRAME,
359 NetErrorHelperCore::ERROR_PAGE);
360 core().OnCommitLoad(NetErrorHelperCore::SUB_FRAME);
361 core().OnFinishLoad(NetErrorHelperCore::SUB_FRAME);
362 EXPECT_EQ(0, update_count());
363 EXPECT_EQ(0, error_html_update_count());
366 // Much like above tests, but with a bunch of spurious DNS status messages that
367 // should have no effect.
368 TEST_F(NetErrorHelperCoreTest, SubFrameDnsErrorSpuriousStatus) {
369 // Original page starts loading.
370 core().OnStartLoad(NetErrorHelperCore::SUB_FRAME,
371 NetErrorHelperCore::NON_ERROR_PAGE);
372 core().OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN);
374 // It fails, and an error page is requested.
376 core().GetErrorHTML(NetErrorHelperCore::SUB_FRAME,
377 NetError(net::ERR_NAME_NOT_RESOLVED),
379 core().OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN);
381 // Should have returned a local error page.
382 EXPECT_EQ(NetErrorString(net::ERR_NAME_NOT_RESOLVED), html);
386 core().OnStartLoad(NetErrorHelperCore::SUB_FRAME,
387 NetErrorHelperCore::ERROR_PAGE);
388 core().OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN);
390 core().OnCommitLoad(NetErrorHelperCore::SUB_FRAME);
391 core().OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN);
393 core().OnFinishLoad(NetErrorHelperCore::SUB_FRAME);
394 core().OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN);
396 EXPECT_EQ(0, update_count());
397 EXPECT_EQ(0, error_html_update_count());
400 //------------------------------------------------------------------------------
401 // Tests for updating the error page in response to DNS probe results. None
402 // of these have the Link Doctor enabled.
403 //------------------------------------------------------------------------------
405 // Test case where the error page finishes loading before receiving any DNS
407 TEST_F(NetErrorHelperCoreTest, FinishedBeforeProbe) {
408 // Original page starts loading.
409 core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
410 NetErrorHelperCore::NON_ERROR_PAGE);
412 // It fails, and an error page is requested.
414 core().GetErrorHTML(NetErrorHelperCore::MAIN_FRAME,
415 NetError(net::ERR_NAME_NOT_RESOLVED),
417 // Should have returned a local error page indicating a probe may run.
418 EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_POSSIBLE), html);
421 core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
422 NetErrorHelperCore::ERROR_PAGE);
423 core().OnCommitLoad(NetErrorHelperCore::MAIN_FRAME);
424 core().OnFinishLoad(NetErrorHelperCore::MAIN_FRAME);
425 EXPECT_EQ(0, update_count());
427 core().OnNetErrorInfo(chrome_common_net::DNS_PROBE_STARTED);
428 EXPECT_EQ(1, update_count());
429 EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_STARTED),
432 core().OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN);
433 EXPECT_EQ(2, update_count());
434 EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN),
437 // Any other probe updates should be ignored.
438 core().OnNetErrorInfo(chrome_common_net::DNS_PROBE_STARTED);
439 core().OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN);
440 EXPECT_EQ(2, update_count());
441 EXPECT_EQ(0, error_html_update_count());
444 // Same as above, but the probe is not run.
445 TEST_F(NetErrorHelperCoreTest, FinishedBeforeProbeNotRun) {
446 // Original page starts loading.
447 core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
448 NetErrorHelperCore::NON_ERROR_PAGE);
450 // It fails, and an error page is requested.
452 core().GetErrorHTML(NetErrorHelperCore::MAIN_FRAME,
453 NetError(net::ERR_NAME_NOT_RESOLVED),
455 // Should have returned a local error page indicating a probe may run.
456 EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_POSSIBLE), html);
459 core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
460 NetErrorHelperCore::ERROR_PAGE);
461 core().OnCommitLoad(NetErrorHelperCore::MAIN_FRAME);
462 core().OnFinishLoad(NetErrorHelperCore::MAIN_FRAME);
463 EXPECT_EQ(0, update_count());
465 // When the not run status arrives, the page should revert to the normal dns
467 core().OnNetErrorInfo(chrome_common_net::DNS_PROBE_NOT_RUN);
468 EXPECT_EQ(1, update_count());
469 EXPECT_EQ(NetErrorString(net::ERR_NAME_NOT_RESOLVED), last_error_html());
471 // Any other probe updates should be ignored.
472 core().OnNetErrorInfo(chrome_common_net::DNS_PROBE_STARTED);
473 core().OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN);
474 EXPECT_EQ(1, update_count());
475 EXPECT_EQ(0, error_html_update_count());
478 // Same as above, but the probe result is inconclusive.
479 TEST_F(NetErrorHelperCoreTest, FinishedBeforeProbeInconclusive) {
480 // Original page starts loading.
481 core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
482 NetErrorHelperCore::NON_ERROR_PAGE);
484 // It fails, and an error page is requested.
486 core().GetErrorHTML(NetErrorHelperCore::MAIN_FRAME,
487 NetError(net::ERR_NAME_NOT_RESOLVED),
489 // Should have returned a local error page indicating a probe may run.
490 EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_POSSIBLE), html);
493 core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
494 NetErrorHelperCore::ERROR_PAGE);
495 core().OnCommitLoad(NetErrorHelperCore::MAIN_FRAME);
496 core().OnFinishLoad(NetErrorHelperCore::MAIN_FRAME);
497 EXPECT_EQ(0, update_count());
499 core().OnNetErrorInfo(chrome_common_net::DNS_PROBE_STARTED);
500 EXPECT_EQ(1, update_count());
501 EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_STARTED),
504 // When the inconclusive status arrives, the page should revert to the normal
506 core().OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_INCONCLUSIVE);
507 EXPECT_EQ(2, update_count());
508 EXPECT_EQ(NetErrorString(net::ERR_NAME_NOT_RESOLVED), last_error_html());
510 // Any other probe updates should be ignored.
511 core().OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_INCONCLUSIVE);
512 EXPECT_EQ(2, update_count());
513 EXPECT_EQ(0, error_html_update_count());
516 // Same as above, but the probe result is no internet.
517 TEST_F(NetErrorHelperCoreTest, FinishedBeforeProbeNoInternet) {
518 // Original page starts loading.
519 core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
520 NetErrorHelperCore::NON_ERROR_PAGE);
522 // It fails, and an error page is requested.
524 core().GetErrorHTML(NetErrorHelperCore::MAIN_FRAME,
525 NetError(net::ERR_NAME_NOT_RESOLVED),
527 // Should have returned a local error page indicating a probe may run.
528 EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_POSSIBLE), html);
531 core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
532 NetErrorHelperCore::ERROR_PAGE);
533 core().OnCommitLoad(NetErrorHelperCore::MAIN_FRAME);
534 core().OnFinishLoad(NetErrorHelperCore::MAIN_FRAME);
535 EXPECT_EQ(0, update_count());
537 core().OnNetErrorInfo(chrome_common_net::DNS_PROBE_STARTED);
538 EXPECT_EQ(1, update_count());
539 EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_STARTED),
542 // When the inconclusive status arrives, the page should revert to the normal
544 core().OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NO_INTERNET);
545 EXPECT_EQ(2, update_count());
546 EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_FINISHED_NO_INTERNET),
549 // Any other probe updates should be ignored.
550 core().OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NO_INTERNET);
551 EXPECT_EQ(2, update_count());
552 EXPECT_EQ(0, error_html_update_count());
555 // Same as above, but the probe result is bad config.
556 TEST_F(NetErrorHelperCoreTest, FinishedBeforeProbeBadConfig) {
557 // Original page starts loading.
558 core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
559 NetErrorHelperCore::NON_ERROR_PAGE);
561 // It fails, and an error page is requested.
563 core().GetErrorHTML(NetErrorHelperCore::MAIN_FRAME,
564 NetError(net::ERR_NAME_NOT_RESOLVED),
566 // Should have returned a local error page indicating a probe may run.
567 EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_POSSIBLE), html);
570 core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
571 NetErrorHelperCore::ERROR_PAGE);
572 core().OnCommitLoad(NetErrorHelperCore::MAIN_FRAME);
573 core().OnFinishLoad(NetErrorHelperCore::MAIN_FRAME);
574 EXPECT_EQ(0, update_count());
576 core().OnNetErrorInfo(chrome_common_net::DNS_PROBE_STARTED);
577 EXPECT_EQ(1, update_count());
578 EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_STARTED),
581 // When the inconclusive status arrives, the page should revert to the normal
583 core().OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_BAD_CONFIG);
584 EXPECT_EQ(2, update_count());
585 EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_FINISHED_BAD_CONFIG),
588 // Any other probe updates should be ignored.
589 core().OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_BAD_CONFIG);
590 EXPECT_EQ(2, update_count());
591 EXPECT_EQ(0, error_html_update_count());
594 // Test case where the error page finishes loading after receiving the start
595 // DNS probe message.
596 TEST_F(NetErrorHelperCoreTest, FinishedAfterStartProbe) {
597 // Original page starts loading.
598 core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
599 NetErrorHelperCore::NON_ERROR_PAGE);
601 // It fails, and an error page is requested.
603 core().GetErrorHTML(NetErrorHelperCore::MAIN_FRAME,
604 NetError(net::ERR_NAME_NOT_RESOLVED),
606 // Should have returned a local error page indicating a probe may run.
607 EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_POSSIBLE), html);
610 core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
611 NetErrorHelperCore::ERROR_PAGE);
612 core().OnCommitLoad(NetErrorHelperCore::MAIN_FRAME);
614 // Nothing should be done when a probe status comes in before loading
616 core().OnNetErrorInfo(chrome_common_net::DNS_PROBE_STARTED);
617 EXPECT_EQ(0, update_count());
619 // When loading finishes, however, the buffered probe status should be sent
621 core().OnFinishLoad(NetErrorHelperCore::MAIN_FRAME);
622 EXPECT_EQ(1, update_count());
623 EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_STARTED),
626 // Should update the page again when the probe result comes in.
627 core().OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN);
628 EXPECT_EQ(2, update_count());
629 EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN),
632 // Any other probe updates should be ignored.
633 core().OnNetErrorInfo(chrome_common_net::DNS_PROBE_NOT_RUN);
634 EXPECT_EQ(2, update_count());
637 // Test case where the error page finishes loading before receiving any DNS
638 // probe messages and the request is a POST.
639 TEST_F(NetErrorHelperCoreTest, FinishedBeforeProbePost) {
640 // Original page starts loading.
641 core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
642 NetErrorHelperCore::NON_ERROR_PAGE);
644 // It fails, and an error page is requested.
646 core().GetErrorHTML(NetErrorHelperCore::MAIN_FRAME,
647 NetError(net::ERR_NAME_NOT_RESOLVED),
649 // Should have returned a local error page indicating a probe may run.
650 EXPECT_EQ(ErrorToString(
651 ProbeError(chrome_common_net::DNS_PROBE_POSSIBLE),
656 EXPECT_EQ(0, enable_stale_load_bindings_count());
657 core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
658 NetErrorHelperCore::ERROR_PAGE);
659 core().OnCommitLoad(NetErrorHelperCore::MAIN_FRAME);
660 core().OnFinishLoad(NetErrorHelperCore::MAIN_FRAME);
661 EXPECT_EQ(0, update_count());
662 EXPECT_EQ(0, enable_stale_load_bindings_count());
664 core().OnNetErrorInfo(chrome_common_net::DNS_PROBE_STARTED);
665 EXPECT_EQ(1, update_count());
666 EXPECT_EQ(ErrorToString(
667 ProbeError(chrome_common_net::DNS_PROBE_STARTED), true),
670 core().OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN);
671 EXPECT_EQ(2, update_count());
672 EXPECT_EQ(ErrorToString(
673 ProbeError(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN),
676 EXPECT_EQ(0, error_html_update_count());
679 // Test case where the probe finishes before the page is committed.
680 TEST_F(NetErrorHelperCoreTest, ProbeFinishesEarly) {
681 // Original page starts loading.
682 core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
683 NetErrorHelperCore::NON_ERROR_PAGE);
685 // It fails, and an error page is requested.
687 core().GetErrorHTML(NetErrorHelperCore::MAIN_FRAME,
688 NetError(net::ERR_NAME_NOT_RESOLVED),
690 // Should have returned a local error page indicating a probe may run.
691 EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_POSSIBLE), html);
693 // Error page starts loading.
694 core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
695 NetErrorHelperCore::ERROR_PAGE);
697 // Nothing should be done when the probe statuses come in before loading
699 core().OnNetErrorInfo(chrome_common_net::DNS_PROBE_STARTED);
700 core().OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN);
701 EXPECT_EQ(0, update_count());
703 core().OnCommitLoad(NetErrorHelperCore::MAIN_FRAME);
704 EXPECT_EQ(0, update_count());
706 // When loading finishes, however, the buffered probe status should be sent
708 core().OnFinishLoad(NetErrorHelperCore::MAIN_FRAME);
709 EXPECT_EQ(1, update_count());
710 EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN),
713 // Any other probe updates should be ignored.
714 core().OnNetErrorInfo(chrome_common_net::DNS_PROBE_STARTED);
715 core().OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN);
716 EXPECT_EQ(1, update_count());
719 // Test case where one error page loads completely before a new navigation
720 // results in another error page. Probes are run for both pages.
721 TEST_F(NetErrorHelperCoreTest, TwoErrorsWithProbes) {
722 // Original page starts loading.
723 core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
724 NetErrorHelperCore::NON_ERROR_PAGE);
726 // It fails, and an error page is requested.
728 core().GetErrorHTML(NetErrorHelperCore::MAIN_FRAME,
729 NetError(net::ERR_NAME_NOT_RESOLVED),
731 // Should have returned a local error page indicating a probe may run.
732 EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_POSSIBLE), html);
735 core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
736 NetErrorHelperCore::ERROR_PAGE);
737 core().OnCommitLoad(NetErrorHelperCore::MAIN_FRAME);
738 core().OnFinishLoad(NetErrorHelperCore::MAIN_FRAME);
740 // Probe results come in.
741 core().OnNetErrorInfo(chrome_common_net::DNS_PROBE_STARTED);
742 core().OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN);
743 EXPECT_EQ(2, update_count());
744 EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN),
747 // The process starts again.
749 // Normal page starts loading.
750 core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
751 NetErrorHelperCore::NON_ERROR_PAGE);
753 // It fails, and an error page is requested.
754 core().GetErrorHTML(NetErrorHelperCore::MAIN_FRAME,
755 NetError(net::ERR_NAME_NOT_RESOLVED),
757 // Should have returned a local error page indicating a probe may run.
758 EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_POSSIBLE), html);
761 core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
762 NetErrorHelperCore::ERROR_PAGE);
763 core().OnCommitLoad(NetErrorHelperCore::MAIN_FRAME);
764 core().OnFinishLoad(NetErrorHelperCore::MAIN_FRAME);
765 EXPECT_EQ(2, update_count());
767 core().OnNetErrorInfo(chrome_common_net::DNS_PROBE_STARTED);
768 EXPECT_EQ(3, update_count());
769 EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_STARTED),
772 // The probe returns a different result this time.
773 core().OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NO_INTERNET);
774 EXPECT_EQ(4, update_count());
775 EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_FINISHED_NO_INTERNET),
777 EXPECT_EQ(0, error_html_update_count());
780 // Test case where one error page loads completely before a new navigation
781 // results in another error page. Probe results for the first probe are only
782 // received after the second load starts, but before it commits.
783 TEST_F(NetErrorHelperCoreTest, TwoErrorsWithProbesAfterSecondStarts) {
784 // Original page starts loading.
785 core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
786 NetErrorHelperCore::NON_ERROR_PAGE);
788 // It fails, and an error page is requested.
790 core().GetErrorHTML(NetErrorHelperCore::MAIN_FRAME,
791 NetError(net::ERR_NAME_NOT_RESOLVED),
793 // Should have returned a local error page indicating a probe may run.
794 EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_POSSIBLE), html);
797 core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
798 NetErrorHelperCore::ERROR_PAGE);
799 core().OnCommitLoad(NetErrorHelperCore::MAIN_FRAME);
800 core().OnFinishLoad(NetErrorHelperCore::MAIN_FRAME);
802 // The process starts again.
804 // Normal page starts loading.
805 core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
806 NetErrorHelperCore::NON_ERROR_PAGE);
808 // It fails, and an error page is requested.
809 core().GetErrorHTML(NetErrorHelperCore::MAIN_FRAME,
810 NetError(net::ERR_NAME_NOT_RESOLVED),
812 // Should have returned a local error page indicating a probe may run.
813 EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_POSSIBLE), html);
815 // Error page starts to load.
816 core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
817 NetErrorHelperCore::ERROR_PAGE);
819 // Probe results come in, and the first page is updated.
820 core().OnNetErrorInfo(chrome_common_net::DNS_PROBE_STARTED);
821 core().OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN);
822 EXPECT_EQ(2, update_count());
823 EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN),
826 // Second page finishes loading, and is updated using the same probe result.
827 core().OnCommitLoad(NetErrorHelperCore::MAIN_FRAME);
828 core().OnFinishLoad(NetErrorHelperCore::MAIN_FRAME);
829 EXPECT_EQ(3, update_count());
830 EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN),
833 // Other probe results should be ignored.
834 core().OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NO_INTERNET);
835 EXPECT_EQ(3, update_count());
836 EXPECT_EQ(0, error_html_update_count());
839 // Same as above, but a new page is loaded before the error page commits.
840 TEST_F(NetErrorHelperCoreTest, ErrorPageLoadInterrupted) {
841 // Original page starts loading.
842 core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
843 NetErrorHelperCore::NON_ERROR_PAGE);
845 // It fails, and an error page is requested.
847 core().GetErrorHTML(NetErrorHelperCore::MAIN_FRAME,
848 NetError(net::ERR_NAME_NOT_RESOLVED),
850 // Should have returned a local error page indicating a probe may run.
851 EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_POSSIBLE), html);
853 // Error page starts loading.
854 core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
855 NetErrorHelperCore::ERROR_PAGE);
856 // Probe statuses come in, but should be ignored.
857 core().OnNetErrorInfo(chrome_common_net::DNS_PROBE_STARTED);
858 core().OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN);
859 EXPECT_EQ(0, update_count());
861 // A new navigation begins while the error page is loading.
862 core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
863 NetErrorHelperCore::NON_ERROR_PAGE);
866 core().GetErrorHTML(NetErrorHelperCore::MAIN_FRAME,
867 NetError(net::ERR_NAME_NOT_RESOLVED),
869 // Should have returned a local error page indicating a probe may run.
870 EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_POSSIBLE), html);
872 // Error page finishes loading.
873 core().OnCommitLoad(NetErrorHelperCore::MAIN_FRAME);
874 core().OnFinishLoad(NetErrorHelperCore::MAIN_FRAME);
876 // Probe results come in.
877 core().OnNetErrorInfo(chrome_common_net::DNS_PROBE_STARTED);
878 EXPECT_EQ(1, update_count());
879 EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_STARTED),
882 core().OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NO_INTERNET);
883 EXPECT_EQ(2, update_count());
884 EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_FINISHED_NO_INTERNET),
886 EXPECT_EQ(0, error_html_update_count());
889 //------------------------------------------------------------------------------
890 // Link Doctor tests.
891 //------------------------------------------------------------------------------
893 // Check that the Link Doctor is not used for HTTPS URLs.
894 TEST_F(NetErrorHelperCoreTest, NoLinkDoctorForHttps) {
895 // Original page starts loading.
896 core().set_alt_error_page_url(GURL(kLinkDoctorUrl));
897 core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
898 NetErrorHelperCore::NON_ERROR_PAGE);
900 // The HTTPS page fails to load.
902 blink::WebURLError error = NetError(net::ERR_NAME_NOT_RESOLVED);
903 error.unreachableURL = GURL(kFailedHttpsUrl);
904 core().GetErrorHTML(NetErrorHelperCore::MAIN_FRAME, error, false, &html);
906 blink::WebURLError probe_error =
907 ProbeError(chrome_common_net::DNS_PROBE_POSSIBLE);
908 probe_error.unreachableURL = GURL(kFailedHttpsUrl);
909 EXPECT_EQ(ErrorToString(probe_error, false), html);
910 EXPECT_FALSE(is_url_being_fetched());
912 // The blank page loads, no error page is loaded.
913 core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
914 NetErrorHelperCore::ERROR_PAGE);
915 core().OnCommitLoad(NetErrorHelperCore::MAIN_FRAME);
916 core().OnFinishLoad(NetErrorHelperCore::MAIN_FRAME);
917 EXPECT_FALSE(is_url_being_fetched());
919 // Page is updated in response to DNS probes as normal.
920 EXPECT_EQ(0, update_count());
921 core().OnNetErrorInfo(chrome_common_net::DNS_PROBE_STARTED);
922 core().OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN);
923 EXPECT_EQ(2, update_count());
924 blink::WebURLError final_probe_error =
925 ProbeError(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN);
926 final_probe_error.unreachableURL = GURL(kFailedHttpsUrl);
927 EXPECT_EQ(ErrorToString(final_probe_error, false), last_error_html());
930 // The blank page loads, then the Link Doctor request succeeds and is loaded.
931 // Then the probe results come in.
932 TEST_F(NetErrorHelperCoreTest, LinkDoctorSucceedsBeforeProbe) {
933 // Original page starts loading.
934 core().set_alt_error_page_url(GURL(kLinkDoctorUrl));
935 core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
936 NetErrorHelperCore::NON_ERROR_PAGE);
940 core().GetErrorHTML(NetErrorHelperCore::MAIN_FRAME,
941 NetError(net::ERR_NAME_NOT_RESOLVED),
943 EXPECT_TRUE(html.empty());
944 EXPECT_FALSE(is_url_being_fetched());
946 // The blank page loads.
947 core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
948 NetErrorHelperCore::ERROR_PAGE);
949 core().OnCommitLoad(NetErrorHelperCore::MAIN_FRAME);
951 // Link doctor retrieval starts when the error page finishes loading.
952 EXPECT_FALSE(is_url_being_fetched());
953 core().OnFinishLoad(NetErrorHelperCore::MAIN_FRAME);
954 EXPECT_TRUE(is_url_being_fetched());
956 // Link Doctor is retrieved.
957 LinkDoctorLoadSuccess();
958 EXPECT_EQ(1, error_html_update_count());
959 EXPECT_EQ(kLinkDoctorBody, last_error_html());
960 EXPECT_FALSE(is_url_being_fetched());
962 // Link Doctor page loads.
963 core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
964 NetErrorHelperCore::ERROR_PAGE);
965 core().OnCommitLoad(NetErrorHelperCore::MAIN_FRAME);
966 core().OnFinishLoad(NetErrorHelperCore::MAIN_FRAME);
968 // Any probe statuses should be ignored.
969 core().OnNetErrorInfo(chrome_common_net::DNS_PROBE_STARTED);
970 core().OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN);
972 EXPECT_EQ(0, update_count());
973 EXPECT_EQ(1, error_html_update_count());
976 // The blank page finishes loading, then probe results come in, and then
977 // the Link Doctor request succeeds.
978 TEST_F(NetErrorHelperCoreTest, LinkDoctorSucceedsAfterProbes) {
979 // Original page starts loading.
980 core().set_alt_error_page_url(GURL(kLinkDoctorUrl));
981 core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
982 NetErrorHelperCore::NON_ERROR_PAGE);
984 // It fails, and a Link Doctor page is requested.
986 core().GetErrorHTML(NetErrorHelperCore::MAIN_FRAME,
987 NetError(net::ERR_NAME_NOT_RESOLVED),
989 EXPECT_TRUE(html.empty());
991 // The blank page loads.
992 core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
993 NetErrorHelperCore::ERROR_PAGE);
994 core().OnCommitLoad(NetErrorHelperCore::MAIN_FRAME);
995 core().OnFinishLoad(NetErrorHelperCore::MAIN_FRAME);
996 EXPECT_TRUE(is_url_being_fetched());
999 // Probe statuses should be ignored.
1000 core().OnNetErrorInfo(chrome_common_net::DNS_PROBE_STARTED);
1001 core().OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN);
1002 EXPECT_EQ(0, update_count());
1003 EXPECT_EQ(0, error_html_update_count());
1005 // Link Doctor is retrieved.
1006 EXPECT_TRUE(is_url_being_fetched());
1007 LinkDoctorLoadSuccess();
1008 EXPECT_EQ(1, error_html_update_count());
1009 EXPECT_EQ(kLinkDoctorBody, last_error_html());
1010 EXPECT_FALSE(is_url_being_fetched());
1012 // Link Doctor page loads.
1013 core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
1014 NetErrorHelperCore::ERROR_PAGE);
1015 core().OnCommitLoad(NetErrorHelperCore::MAIN_FRAME);
1016 core().OnFinishLoad(NetErrorHelperCore::MAIN_FRAME);
1017 EXPECT_EQ(1, error_html_update_count());
1018 EXPECT_EQ(0, update_count());
1021 // The Link Doctor request fails and then the error page loads for an error that
1022 // does not trigger DNS probes.
1023 TEST_F(NetErrorHelperCoreTest, LinkDoctorFailsLoadNoProbes) {
1024 // Original page starts loading.
1025 core().set_alt_error_page_url(GURL(kLinkDoctorUrl));
1026 core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
1027 NetErrorHelperCore::NON_ERROR_PAGE);
1029 // It fails, and a Link Doctor page is requested.
1031 core().GetErrorHTML(NetErrorHelperCore::MAIN_FRAME,
1032 NetError(net::ERR_CONNECTION_FAILED),
1034 EXPECT_TRUE(html.empty());
1036 // The blank page loads.
1037 core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
1038 NetErrorHelperCore::ERROR_PAGE);
1039 core().OnCommitLoad(NetErrorHelperCore::MAIN_FRAME);
1040 core().OnFinishLoad(NetErrorHelperCore::MAIN_FRAME);
1042 // Link Doctor load fails, final error page is shown.
1043 EXPECT_TRUE(is_url_being_fetched());
1044 LinkDoctorLoadFailure();
1045 EXPECT_EQ(1, error_html_update_count());
1046 EXPECT_EQ(last_error_html(), NetErrorString(net::ERR_CONNECTION_FAILED));
1047 EXPECT_FALSE(is_url_being_fetched());
1048 EXPECT_EQ(0, update_count());
1050 // Error page loads.
1051 core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
1052 NetErrorHelperCore::ERROR_PAGE);
1053 core().OnCommitLoad(NetErrorHelperCore::MAIN_FRAME);
1054 core().OnFinishLoad(NetErrorHelperCore::MAIN_FRAME);
1056 // If probe statuses come in last from another page load, they should be
1058 core().OnNetErrorInfo(chrome_common_net::DNS_PROBE_STARTED);
1059 core().OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN);
1060 EXPECT_EQ(0, update_count());
1061 EXPECT_EQ(1, error_html_update_count());
1064 // The Link Doctor request fails and then the error page loads before probe
1065 // results are received.
1066 TEST_F(NetErrorHelperCoreTest, LinkDoctorFailsLoadBeforeProbe) {
1067 // Original page starts loading.
1068 core().set_alt_error_page_url(GURL(kLinkDoctorUrl));
1069 core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
1070 NetErrorHelperCore::NON_ERROR_PAGE);
1072 // It fails, and a Link Doctor page is requested.
1074 core().GetErrorHTML(NetErrorHelperCore::MAIN_FRAME,
1075 NetError(net::ERR_NAME_NOT_RESOLVED),
1077 EXPECT_TRUE(html.empty());
1079 // The blank page loads.
1080 core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
1081 NetErrorHelperCore::ERROR_PAGE);
1082 core().OnCommitLoad(NetErrorHelperCore::MAIN_FRAME);
1083 core().OnFinishLoad(NetErrorHelperCore::MAIN_FRAME);
1085 // Link Doctor load fails, probe pending page shown.
1086 EXPECT_TRUE(is_url_being_fetched());
1087 LinkDoctorLoadFailure();
1088 EXPECT_EQ(1, error_html_update_count());
1089 EXPECT_EQ(last_error_html(),
1090 ProbeErrorString(chrome_common_net::DNS_PROBE_POSSIBLE));
1091 EXPECT_FALSE(is_url_being_fetched());
1092 EXPECT_EQ(0, update_count());
1094 // Probe page loads.
1095 core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
1096 NetErrorHelperCore::ERROR_PAGE);
1097 core().OnCommitLoad(NetErrorHelperCore::MAIN_FRAME);
1098 core().OnFinishLoad(NetErrorHelperCore::MAIN_FRAME);
1100 // Probe statuses comes in, and page is updated.
1101 core().OnNetErrorInfo(chrome_common_net::DNS_PROBE_STARTED);
1102 EXPECT_EQ(1, update_count());
1103 EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_STARTED),
1106 core().OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN);
1107 EXPECT_EQ(2, update_count());
1108 EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN),
1111 // The commit results in sending a second probe status, which is ignored.
1112 core().OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN);
1113 EXPECT_EQ(2, update_count());
1114 EXPECT_EQ(1, error_html_update_count());
1117 // The Link Doctor request fails after receiving probe results.
1118 TEST_F(NetErrorHelperCoreTest, LinkDoctorFailsAfterProbe) {
1119 // Original page starts loading.
1120 core().set_alt_error_page_url(GURL(kLinkDoctorUrl));
1121 core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
1122 NetErrorHelperCore::NON_ERROR_PAGE);
1124 // It fails, and a Link Doctor page is requested.
1126 core().GetErrorHTML(NetErrorHelperCore::MAIN_FRAME,
1127 NetError(net::ERR_NAME_NOT_RESOLVED),
1129 EXPECT_TRUE(html.empty());
1131 // The blank page loads.
1132 core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
1133 NetErrorHelperCore::ERROR_PAGE);
1134 core().OnCommitLoad(NetErrorHelperCore::MAIN_FRAME);
1135 core().OnFinishLoad(NetErrorHelperCore::MAIN_FRAME);
1137 // Results come in, but end up being ignored.
1138 core().OnNetErrorInfo(chrome_common_net::DNS_PROBE_STARTED);
1139 core().OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN);
1140 EXPECT_EQ(0, update_count());
1142 // Link Doctor load fails, probe pending page shown.
1143 EXPECT_TRUE(is_url_being_fetched());
1144 LinkDoctorLoadFailure();
1145 EXPECT_EQ(1, error_html_update_count());
1146 EXPECT_EQ(last_error_html(),
1147 ProbeErrorString(chrome_common_net::DNS_PROBE_POSSIBLE));
1148 EXPECT_FALSE(is_url_being_fetched());
1149 EXPECT_EQ(0, update_count());
1151 // Probe page loads.
1152 core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
1153 NetErrorHelperCore::ERROR_PAGE);
1154 core().OnCommitLoad(NetErrorHelperCore::MAIN_FRAME);
1155 core().OnFinishLoad(NetErrorHelperCore::MAIN_FRAME);
1157 // Probe statuses comes in, and page is updated.
1158 core().OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN);
1159 EXPECT_EQ(1, update_count());
1160 EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN),
1162 EXPECT_EQ(1, error_html_update_count());
1165 // An error page load that would normally load the Link Doctor is interrupted
1166 // by a new navigation before the blank page commits.
1167 TEST_F(NetErrorHelperCoreTest, LinkDoctorInterruptedBeforeCommit) {
1168 // Original page starts loading.
1169 core().set_alt_error_page_url(GURL(kLinkDoctorUrl));
1170 core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
1171 NetErrorHelperCore::NON_ERROR_PAGE);
1173 // It fails, and a Link Doctor page is requested.
1175 core().GetErrorHTML(NetErrorHelperCore::MAIN_FRAME,
1176 NetError(net::ERR_NAME_NOT_RESOLVED),
1178 EXPECT_TRUE(html.empty());
1180 // The blank page starts loading.
1181 core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
1182 NetErrorHelperCore::ERROR_PAGE);
1184 // A new page load starts.
1185 EXPECT_FALSE(is_url_being_fetched());
1186 core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
1187 NetErrorHelperCore::NON_ERROR_PAGE);
1189 // A new page load interrupts the original load.
1190 EXPECT_FALSE(is_url_being_fetched());
1191 core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
1192 NetErrorHelperCore::NON_ERROR_PAGE);
1193 EXPECT_FALSE(is_url_being_fetched());
1194 core().OnCommitLoad(NetErrorHelperCore::MAIN_FRAME);
1195 EXPECT_FALSE(is_url_being_fetched());
1196 core().OnFinishLoad(NetErrorHelperCore::MAIN_FRAME);
1198 EXPECT_FALSE(is_url_being_fetched());
1199 EXPECT_EQ(0, update_count());
1200 EXPECT_EQ(0, error_html_update_count());
1203 // An error page load that would normally load the Link Doctor is interrupted
1204 // by a new navigation before the blank page finishes loading.
1205 TEST_F(NetErrorHelperCoreTest, LinkDoctorInterruptedBeforeLoad) {
1206 // Original page starts loading.
1207 core().set_alt_error_page_url(GURL(kLinkDoctorUrl));
1208 core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
1209 NetErrorHelperCore::NON_ERROR_PAGE);
1211 // It fails, and a Link Doctor page is requested.
1213 core().GetErrorHTML(NetErrorHelperCore::MAIN_FRAME,
1214 NetError(net::ERR_NAME_NOT_RESOLVED),
1216 EXPECT_TRUE(html.empty());
1218 // The blank page starts loading and is committed.
1219 core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
1220 NetErrorHelperCore::ERROR_PAGE);
1221 core().OnCommitLoad(NetErrorHelperCore::MAIN_FRAME);
1223 // A new page load interrupts the original load.
1224 EXPECT_FALSE(is_url_being_fetched());
1225 core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
1226 NetErrorHelperCore::NON_ERROR_PAGE);
1227 EXPECT_FALSE(is_url_being_fetched());
1228 core().OnCommitLoad(NetErrorHelperCore::MAIN_FRAME);
1229 EXPECT_FALSE(is_url_being_fetched());
1230 core().OnFinishLoad(NetErrorHelperCore::MAIN_FRAME);
1232 EXPECT_FALSE(is_url_being_fetched());
1233 EXPECT_EQ(0, update_count());
1234 EXPECT_EQ(0, error_html_update_count());
1237 // The Link Doctor request is cancelled due to a new navigation. The new
1238 // navigation fails and then loads the link doctor page again (Successfully).
1239 TEST_F(NetErrorHelperCoreTest, LinkDoctorInterrupted) {
1240 // Original page starts loading.
1241 core().set_alt_error_page_url(GURL(kLinkDoctorUrl));
1242 core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
1243 NetErrorHelperCore::NON_ERROR_PAGE);
1245 // It fails, and a Link Doctor page is requested.
1247 core().GetErrorHTML(NetErrorHelperCore::MAIN_FRAME,
1248 NetError(net::ERR_NAME_NOT_RESOLVED),
1250 EXPECT_TRUE(html.empty());
1252 // The blank page loads.
1253 core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
1254 NetErrorHelperCore::ERROR_PAGE);
1255 core().OnCommitLoad(NetErrorHelperCore::MAIN_FRAME);
1256 core().OnFinishLoad(NetErrorHelperCore::MAIN_FRAME);
1257 EXPECT_TRUE(is_url_being_fetched());
1259 // Results come in, but end up being ignored.
1260 core().OnNetErrorInfo(chrome_common_net::DNS_PROBE_STARTED);
1261 core().OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN);
1262 EXPECT_EQ(0, update_count());
1264 // A new load appears!
1265 core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
1266 NetErrorHelperCore::NON_ERROR_PAGE);
1267 EXPECT_FALSE(is_url_being_fetched());
1269 // It fails, and a Link Doctor page is requested again once a blank page is
1271 core().GetErrorHTML(NetErrorHelperCore::MAIN_FRAME,
1272 NetError(net::ERR_NAME_NOT_RESOLVED),
1274 EXPECT_TRUE(html.empty());
1275 core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
1276 NetErrorHelperCore::ERROR_PAGE);
1277 core().OnCommitLoad(NetErrorHelperCore::MAIN_FRAME);
1278 EXPECT_FALSE(is_url_being_fetched());
1279 core().OnFinishLoad(NetErrorHelperCore::MAIN_FRAME);
1280 EXPECT_TRUE(is_url_being_fetched());
1282 // Link Doctor load succeeds.
1283 LinkDoctorLoadSuccess();
1284 EXPECT_EQ(1, error_html_update_count());
1285 EXPECT_EQ(kLinkDoctorBody, last_error_html());
1286 EXPECT_FALSE(is_url_being_fetched());
1288 // Probe statuses come in, and are ignored.
1289 core().OnNetErrorInfo(chrome_common_net::DNS_PROBE_STARTED);
1290 core().OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN);
1291 EXPECT_EQ(0, update_count());
1294 // The Link Doctor request is cancelled due to call to Stop(). The cross
1295 // process navigation is cancelled, and then a new load fails and tries to load
1296 // the link doctor page again (Which fails).
1297 TEST_F(NetErrorHelperCoreTest, LinkDoctorStopped) {
1298 // Original page starts loading.
1299 core().set_alt_error_page_url(GURL(kLinkDoctorUrl));
1300 core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
1301 NetErrorHelperCore::NON_ERROR_PAGE);
1303 // It fails, and a Link Doctor page is requested.
1305 core().GetErrorHTML(NetErrorHelperCore::MAIN_FRAME,
1306 NetError(net::ERR_NAME_NOT_RESOLVED),
1308 EXPECT_TRUE(html.empty());
1310 // The blank page loads.
1311 core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
1312 NetErrorHelperCore::ERROR_PAGE);
1313 core().OnCommitLoad(NetErrorHelperCore::MAIN_FRAME);
1314 core().OnFinishLoad(NetErrorHelperCore::MAIN_FRAME);
1316 EXPECT_TRUE(is_url_being_fetched());
1318 EXPECT_FALSE(is_url_being_fetched());
1320 // Results come in, but end up being ignored.
1321 core().OnNetErrorInfo(chrome_common_net::DNS_PROBE_STARTED);
1322 core().OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN);
1323 EXPECT_EQ(0, update_count());
1325 // Cross process navigation must have been cancelled, and a new load appears!
1326 core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
1327 NetErrorHelperCore::NON_ERROR_PAGE);
1329 // It fails, and a Link Doctor page is requested again.
1330 core().GetErrorHTML(NetErrorHelperCore::MAIN_FRAME,
1331 NetError(net::ERR_NAME_NOT_RESOLVED),
1333 EXPECT_TRUE(html.empty());
1335 // The blank page loads again.
1336 core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
1337 NetErrorHelperCore::ERROR_PAGE);
1338 core().OnCommitLoad(NetErrorHelperCore::MAIN_FRAME);
1339 core().OnFinishLoad(NetErrorHelperCore::MAIN_FRAME);
1340 EXPECT_TRUE(is_url_being_fetched());
1342 // Link Doctor load fails, probe pending page shown.
1343 LinkDoctorLoadFailure();
1344 EXPECT_EQ(1, error_html_update_count());
1345 EXPECT_EQ(last_error_html(),
1346 ProbeErrorString(chrome_common_net::DNS_PROBE_POSSIBLE));
1347 EXPECT_FALSE(is_url_being_fetched());
1349 // Probe page loads.
1350 core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
1351 NetErrorHelperCore::ERROR_PAGE);
1352 core().OnCommitLoad(NetErrorHelperCore::MAIN_FRAME);
1353 core().OnFinishLoad(NetErrorHelperCore::MAIN_FRAME);
1355 // Probe statuses comes in, and page is updated.
1356 core().OnNetErrorInfo(chrome_common_net::DNS_PROBE_STARTED);
1357 EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_STARTED),
1359 EXPECT_EQ(1, update_count());
1361 core().OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN);
1362 EXPECT_EQ(2, update_count());
1363 EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN),
1365 EXPECT_EQ(1, error_html_update_count());
1368 TEST_F(NetErrorHelperCoreTest, AutoReloadDisabled) {
1369 DoErrorLoad(net::ERR_CONNECTION_RESET);
1371 EXPECT_FALSE(timer()->IsRunning());
1372 EXPECT_EQ(0, reload_count());
1375 TEST_F(NetErrorHelperCoreTest, AutoReloadSucceeds) {
1376 core().set_auto_reload_enabled(true);
1377 DoErrorLoad(net::ERR_CONNECTION_RESET);
1379 EXPECT_TRUE(timer()->IsRunning());
1380 EXPECT_EQ(0, reload_count());
1383 EXPECT_FALSE(timer()->IsRunning());
1384 EXPECT_EQ(1, reload_count());
1388 EXPECT_FALSE(timer()->IsRunning());
1391 TEST_F(NetErrorHelperCoreTest, AutoReloadRetries) {
1392 core().set_auto_reload_enabled(true);
1393 DoErrorLoad(net::ERR_CONNECTION_RESET);
1395 EXPECT_TRUE(timer()->IsRunning());
1396 base::TimeDelta first_delay = timer()->GetCurrentDelay();
1397 EXPECT_EQ(0, reload_count());
1400 EXPECT_FALSE(timer()->IsRunning());
1401 EXPECT_EQ(1, reload_count());
1403 DoErrorLoad(net::ERR_CONNECTION_RESET);
1405 EXPECT_TRUE(timer()->IsRunning());
1406 EXPECT_GT(timer()->GetCurrentDelay(), first_delay);
1409 TEST_F(NetErrorHelperCoreTest, AutoReloadStopsTimerOnStop) {
1410 core().set_auto_reload_enabled(true);
1411 DoErrorLoad(net::ERR_CONNECTION_RESET);
1412 EXPECT_TRUE(timer()->IsRunning());
1414 EXPECT_FALSE(timer()->IsRunning());
1417 TEST_F(NetErrorHelperCoreTest, AutoReloadStopsLoadingOnStop) {
1418 core().set_auto_reload_enabled(true);
1419 DoErrorLoad(net::ERR_CONNECTION_RESET);
1420 EXPECT_EQ(1, core().auto_reload_count());
1422 EXPECT_EQ(1, reload_count());
1424 EXPECT_FALSE(timer()->IsRunning());
1425 EXPECT_EQ(0, core().auto_reload_count());
1428 TEST_F(NetErrorHelperCoreTest, AutoReloadStopsOnOtherLoadStart) {
1429 core().set_auto_reload_enabled(true);
1430 DoErrorLoad(net::ERR_CONNECTION_RESET);
1431 EXPECT_TRUE(timer()->IsRunning());
1432 core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
1433 NetErrorHelperCore::NON_ERROR_PAGE);
1434 EXPECT_FALSE(timer()->IsRunning());
1435 EXPECT_EQ(1, core().auto_reload_count());
1438 TEST_F(NetErrorHelperCoreTest, AutoReloadResetsCountOnSuccess) {
1439 core().set_auto_reload_enabled(true);
1440 DoErrorLoad(net::ERR_CONNECTION_RESET);
1441 base::TimeDelta delay = timer()->GetCurrentDelay();
1442 EXPECT_EQ(1, core().auto_reload_count());
1444 EXPECT_EQ(1, reload_count());
1446 DoErrorLoad(net::ERR_CONNECTION_RESET);
1447 EXPECT_EQ(1, core().auto_reload_count());
1448 EXPECT_EQ(timer()->GetCurrentDelay(), delay);
1450 EXPECT_EQ(2, reload_count());
1452 EXPECT_EQ(0, core().auto_reload_count());
1455 TEST_F(NetErrorHelperCoreTest, AutoReloadRestartsOnOnline) {
1456 core().set_auto_reload_enabled(true);
1457 DoErrorLoad(net::ERR_CONNECTION_RESET);
1458 base::TimeDelta delay = timer()->GetCurrentDelay();
1460 DoErrorLoad(net::ERR_CONNECTION_RESET);
1461 EXPECT_TRUE(timer()->IsRunning());
1462 EXPECT_NE(delay, timer()->GetCurrentDelay());
1463 core().NetworkStateChanged(true);
1464 EXPECT_TRUE(timer()->IsRunning());
1465 EXPECT_EQ(delay, timer()->GetCurrentDelay());
1468 TEST_F(NetErrorHelperCoreTest, AutoReloadDoesNotStartOnOnline) {
1469 core().set_auto_reload_enabled(true);
1470 DoErrorLoad(net::ERR_CONNECTION_RESET);
1473 EXPECT_FALSE(timer()->IsRunning());
1474 core().NetworkStateChanged(true);
1475 EXPECT_FALSE(timer()->IsRunning());
1478 TEST_F(NetErrorHelperCoreTest, AutoReloadStopsOnOffline) {
1479 core().set_auto_reload_enabled(true);
1480 DoErrorLoad(net::ERR_CONNECTION_RESET);
1481 EXPECT_TRUE(timer()->IsRunning());
1482 core().NetworkStateChanged(false);
1483 EXPECT_FALSE(timer()->IsRunning());
1484 EXPECT_EQ(0, core().auto_reload_count());
1487 TEST_F(NetErrorHelperCoreTest, AutoReloadStopsOnOfflineThenRestartsOnOnline) {
1488 core().set_auto_reload_enabled(true);
1489 DoErrorLoad(net::ERR_CONNECTION_RESET);
1490 EXPECT_TRUE(timer()->IsRunning());
1491 core().NetworkStateChanged(false);
1492 EXPECT_FALSE(timer()->IsRunning());
1493 core().NetworkStateChanged(true);
1494 EXPECT_TRUE(timer()->IsRunning());
1495 EXPECT_EQ(1, core().auto_reload_count());
1498 TEST_F(NetErrorHelperCoreTest, AutoReloadDoesNotRestartOnOnlineAfterStop) {
1499 core().set_auto_reload_enabled(true);
1500 DoErrorLoad(net::ERR_CONNECTION_RESET);
1503 core().NetworkStateChanged(true);
1504 EXPECT_FALSE(timer()->IsRunning());
1507 TEST_F(NetErrorHelperCoreTest, AutoReloadWithDnsProbes) {
1508 core().set_auto_reload_enabled(true);
1509 DoErrorLoad(net::ERR_CONNECTION_RESET);
1510 DoDnsProbe(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN);
1512 EXPECT_EQ(1, reload_count());
1515 TEST_F(NetErrorHelperCoreTest, AutoReloadExponentialBackoffLevelsOff) {
1516 core().set_auto_reload_enabled(true);
1517 base::TimeDelta previous = base::TimeDelta::FromMilliseconds(0);
1518 const int kMaxTries = 50;
1520 for (tries = 0; tries < kMaxTries; tries++) {
1521 DoErrorLoad(net::ERR_CONNECTION_RESET);
1522 EXPECT_TRUE(timer()->IsRunning());
1523 if (previous == timer()->GetCurrentDelay())
1525 previous = timer()->GetCurrentDelay();
1529 EXPECT_LT(tries, kMaxTries);
1532 TEST_F(NetErrorHelperCoreTest, AutoReloadSlowError) {
1533 core().set_auto_reload_enabled(true);
1534 core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
1535 NetErrorHelperCore::NON_ERROR_PAGE);
1537 core().GetErrorHTML(NetErrorHelperCore::MAIN_FRAME,
1538 NetError(net::ERR_CONNECTION_RESET), false, &html);
1539 core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
1540 NetErrorHelperCore::ERROR_PAGE);
1541 core().OnCommitLoad(NetErrorHelperCore::MAIN_FRAME);
1542 EXPECT_FALSE(timer()->IsRunning());
1543 // Start a new non-error page load.
1544 core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
1545 NetErrorHelperCore::NON_ERROR_PAGE);
1546 EXPECT_FALSE(timer()->IsRunning());
1547 // Finish the error page load.
1548 core().OnFinishLoad(NetErrorHelperCore::MAIN_FRAME);
1549 EXPECT_FALSE(timer()->IsRunning());
1550 core().OnCommitLoad(NetErrorHelperCore::MAIN_FRAME);
1551 core().OnFinishLoad(NetErrorHelperCore::MAIN_FRAME);
1552 EXPECT_FALSE(timer()->IsRunning());
1555 TEST_F(NetErrorHelperCoreTest, AutoReloadOnlineSlowError) {
1556 core().set_auto_reload_enabled(true);
1557 core().NetworkStateChanged(false);
1558 core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
1559 NetErrorHelperCore::NON_ERROR_PAGE);
1561 core().GetErrorHTML(NetErrorHelperCore::MAIN_FRAME,
1562 NetError(net::ERR_CONNECTION_RESET), false, &html);
1563 core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
1564 NetErrorHelperCore::ERROR_PAGE);
1565 core().OnCommitLoad(NetErrorHelperCore::MAIN_FRAME);
1566 EXPECT_FALSE(timer()->IsRunning());
1567 core().NetworkStateChanged(true);
1568 EXPECT_FALSE(timer()->IsRunning());
1569 core().NetworkStateChanged(false);
1570 core().OnFinishLoad(NetErrorHelperCore::MAIN_FRAME);
1571 EXPECT_FALSE(timer()->IsRunning());
1572 core().NetworkStateChanged(true);
1573 EXPECT_TRUE(timer()->IsRunning());
1576 TEST_F(NetErrorHelperCoreTest, AutoReloadOnlinePendingError) {
1577 core().set_auto_reload_enabled(true);
1578 core().NetworkStateChanged(false);
1579 core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
1580 NetErrorHelperCore::NON_ERROR_PAGE);
1582 core().GetErrorHTML(NetErrorHelperCore::MAIN_FRAME,
1583 NetError(net::ERR_CONNECTION_RESET), false, &html);
1584 core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
1585 NetErrorHelperCore::ERROR_PAGE);
1586 EXPECT_FALSE(timer()->IsRunning());
1587 core().NetworkStateChanged(true);
1588 EXPECT_FALSE(timer()->IsRunning());
1589 core().NetworkStateChanged(false);
1590 core().OnCommitLoad(NetErrorHelperCore::MAIN_FRAME);
1591 core().OnFinishLoad(NetErrorHelperCore::MAIN_FRAME);
1592 EXPECT_FALSE(timer()->IsRunning());
1593 core().NetworkStateChanged(true);
1594 EXPECT_TRUE(timer()->IsRunning());
1597 TEST_F(NetErrorHelperCoreTest, AutoReloadOnlinePartialErrorReplacement) {
1598 core().set_auto_reload_enabled(true);
1599 core().NetworkStateChanged(false);
1600 core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
1601 NetErrorHelperCore::NON_ERROR_PAGE);
1603 core().GetErrorHTML(NetErrorHelperCore::MAIN_FRAME,
1604 NetError(net::ERR_CONNECTION_RESET), false, &html);
1605 core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
1606 NetErrorHelperCore::ERROR_PAGE);
1607 core().OnCommitLoad(NetErrorHelperCore::MAIN_FRAME);
1608 core().OnFinishLoad(NetErrorHelperCore::MAIN_FRAME);
1609 core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
1610 NetErrorHelperCore::NON_ERROR_PAGE);
1611 core().GetErrorHTML(NetErrorHelperCore::MAIN_FRAME,
1612 NetError(net::ERR_CONNECTION_RESET), false, &html);
1613 core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
1614 NetErrorHelperCore::ERROR_PAGE);
1615 EXPECT_FALSE(timer()->IsRunning());
1616 core().NetworkStateChanged(true);
1617 EXPECT_FALSE(timer()->IsRunning());
1620 TEST_F(NetErrorHelperCoreTest, ShouldSuppressErrorPage) {
1621 // Set up the environment to test ShouldSuppressErrorPage: auto-reload is
1622 // enabled, an error page is loaded, and the auto-reload callback is running.
1623 core().set_auto_reload_enabled(true);
1624 DoErrorLoad(net::ERR_CONNECTION_RESET);
1627 EXPECT_FALSE(core().ShouldSuppressErrorPage(NetErrorHelperCore::SUB_FRAME,
1629 EXPECT_FALSE(core().ShouldSuppressErrorPage(NetErrorHelperCore::MAIN_FRAME,
1630 GURL("http://some.other.url")));
1631 EXPECT_TRUE(core().ShouldSuppressErrorPage(NetErrorHelperCore::MAIN_FRAME,