15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 25d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// found in the LICENSE file. 45d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/renderer/net/net_error_helper_core.h" 65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 7cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include <map> 8cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include <string> 9cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include <vector> 10cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 11010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "base/json/json_reader.h" 12a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#include "base/json/json_writer.h" 135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/logging.h" 14cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "base/metrics/statistics_recorder.h" 155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/strings/stringprintf.h" 1603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "base/test/histogram_tester.h" 17a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "base/timer/mock_timer.h" 18a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "base/timer/timer.h" 19a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#include "base/values.h" 205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/common/net/net_error_info.h" 21cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "content/public/common/url_constants.h" 225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "net/base/net_errors.h" 235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "third_party/WebKit/public/platform/WebURLError.h" 25cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "url/gurl.h" 26cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 27cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)namespace { 285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)using blink::WebURLError; 305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)using chrome_common_net::DnsProbeStatus; 315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)using chrome_common_net::DnsProbeStatusToString; 325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)const char kFailedUrl[] = "http://failed/"; 345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)const char kFailedHttpsUrl[] = "https://failed/"; 35010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 36a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochconst char kNavigationCorrectionUrl[] = "http://navigation.corrections/"; 37010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)const char kLanguage[] = "en"; 38010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)const char kCountry[] = "us"; 39010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)const char kApiKey[] = "api_key"; 40a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochconst char kSearchUrl[] = "http://www.google.com/search"; 41010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 42a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochconst char kSuggestedSearchTerms[] = "Happy Goats"; 43010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)const char kNavigationCorrectionEventId[] = "#007"; 44010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)const char kNavigationCorrectionFingerprint[] = "RandumStuff"; 45a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 46a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochstruct NavigationCorrection { 47a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch const char* correction_type; 48a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch const char* url_correction; 49010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const char* click_type; 50010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const char* click_data; 51a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch bool is_porn; 52a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch bool is_soft_porn; 53a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 54a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch base::Value* ToValue() const { 55a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch base::DictionaryValue* dict = new base::DictionaryValue(); 56a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch dict->SetString("correctionType", correction_type); 57a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch dict->SetString("urlCorrection", url_correction); 58010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) dict->SetString("clickType", click_type); 59010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) dict->SetString("clickData", click_data); 60a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch dict->SetBoolean("isPorn", is_porn); 61a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch dict->SetBoolean("isSoftPorn", is_soft_porn); 62a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch return dict; 63a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch } 64a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch}; 65a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 66a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochconst NavigationCorrection kDefaultCorrections[] = { 67010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) {"reloadPage", kFailedUrl, "rld", "data1", false, false}, 68010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) {"urlCorrection", "http://somewhere_else/", "btn", "data2", false, false}, 69010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) {"contentOverlap", "http://pony_island/", "btn", "data3", false, false}, 70a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 71a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // Porn should be ignored. 72010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) {"emphasizedUrlCorrection", "http://porn/", "btn", "data4", true, false}, 73010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) {"sitemap", "http://more_porn/", "btn", "data5", false, true}, 74a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 75010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) {"webSearchQuery", kSuggestedSearchTerms, "frm", "data6", false, false}, 76a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch}; 77a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 78a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochstd::string SuggestionsToResponse(const NavigationCorrection* corrections, 79a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch int num_corrections) { 80a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch base::ListValue* url_corrections = new base::ListValue(); 81a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch for (int i = 0; i < num_corrections; ++i) 82a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch url_corrections->Append(corrections[i].ToValue()); 83a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 84a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch scoped_ptr<base::DictionaryValue> response(new base::DictionaryValue()); 85a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch response->Set("result.UrlCorrections", url_corrections); 86010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) response->SetString("result.eventId", kNavigationCorrectionEventId); 87010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) response->SetString("result.fingerprint", kNavigationCorrectionFingerprint); 88a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 89a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch std::string json; 90a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch base::JSONWriter::Write(response.get(), &json); 91a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch return json; 92a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch} 935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 94010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)testing::AssertionResult StringValueEquals( 95010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const base::DictionaryValue& dict, 96010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const std::string& key, 97010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const std::string& expected_value) { 98010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) std::string actual_value; 99010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) if (!dict.GetString(key, &actual_value)) 100010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) return testing::AssertionFailure() << key << " not found."; 101010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) if (actual_value != expected_value) { 102010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) return testing::AssertionFailure() 103010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) << "actual: " << actual_value << "\n expected: " << expected_value; 104010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } 105010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) return testing::AssertionSuccess(); 106010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 107010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 1085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Creates a string from an error that is used as a mock locally generated 1095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// error page for that error. 1105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)std::string ErrorToString(const WebURLError& error, bool is_failed_post) { 1115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return base::StringPrintf("(%s, %s, %i, %s)", 1125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) error.unreachableURL.string().utf8().c_str(), 1135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) error.domain.utf8().c_str(), error.reason, 1145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) is_failed_post ? "POST" : "NOT POST"); 1155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 1165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)WebURLError ProbeError(DnsProbeStatus status) { 1185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) WebURLError error; 1195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) error.unreachableURL = GURL(kFailedUrl); 1205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) error.domain = blink::WebString::fromUTF8( 1215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) chrome_common_net::kDnsProbeErrorDomain); 1225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) error.reason = status; 1235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return error; 1245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 1255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)WebURLError NetError(net::Error net_error) { 1275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) WebURLError error; 1285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) error.unreachableURL = GURL(kFailedUrl); 1295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) error.domain = blink::WebString::fromUTF8(net::kErrorDomain); 1305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) error.reason = net_error; 1315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return error; 1325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 1335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Convenience functions that create an error string for a non-POST request. 1355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)std::string ProbeErrorString(DnsProbeStatus status) { 1375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return ErrorToString(ProbeError(status), false); 1385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 1395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)std::string NetErrorString(net::Error net_error) { 1415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return ErrorToString(NetError(net_error), false); 1425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 1435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class NetErrorHelperCoreTest : public testing::Test, 1455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) public NetErrorHelperCore::Delegate { 1465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) public: 14746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) NetErrorHelperCoreTest() : timer_(NULL), 148cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) update_count_(0), 149cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) error_html_update_count_(0), 150cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) reload_count_(0), 151cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) load_stale_count_(0), 152cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) enable_page_helper_functions_count_(0), 153cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) default_url_(GURL(kFailedUrl)), 154cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) error_url_(GURL(content::kUnreachableWebDataURL)), 155cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) tracking_request_count_(0) { 15646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) SetUpCore(false, false, true); 1575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 1585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual ~NetErrorHelperCoreTest() { 1605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // No test finishes while an error page is being fetched. 1615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FALSE(is_url_being_fetched()); 1625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 1635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 164cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual void SetUp() OVERRIDE { 165cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::StatisticsRecorder::Initialize(); 166cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 167cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 16846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) void SetUpCore(bool auto_reload_enabled, 16946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) bool auto_reload_visible_only, 17046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) bool visible) { 17146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // The old value of timer_, if any, will be freed by the old core_ being 17246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // destructed, since core_ takes ownership of the timer. 17346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) timer_ = new base::MockTimer(false, false); 17446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core_.reset(new NetErrorHelperCore(this, 17546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) auto_reload_enabled, 17646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) auto_reload_visible_only, 17746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) visible)); 17846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core_->set_timer_for_testing(scoped_ptr<base::Timer>(timer_)); 17946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 18046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 18146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) NetErrorHelperCore* core() { return core_.get(); } 1825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const GURL& url_being_fetched() const { return url_being_fetched_; } 1845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool is_url_being_fetched() const { return !url_being_fetched_.is_empty(); } 1855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 186a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) int reload_count() const { 187a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return reload_count_; 188a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 189a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 1900529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch int load_stale_count() const { 1910529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch return load_stale_count_; 1920529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch } 1930529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 1940529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch const GURL& load_stale_url() const { 1950529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch return load_stale_url_; 1960529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch } 1970529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 198cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const GURL& default_url() const { 199cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return default_url_; 200cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 201cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 202cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const GURL& error_url() const { 203cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return error_url_; 204cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 205cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 2060529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch int enable_page_helper_functions_count() const { 2070529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch return enable_page_helper_functions_count_; 208effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 209effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 2105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::string& last_update_string() const { return last_update_string_; } 2115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int update_count() const { return update_count_; } 2125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::string& last_error_html() const { return last_error_html_; } 2145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int error_html_update_count() const { return error_html_update_count_; } 2155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 216a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch const LocalizedError::ErrorPageParams* last_error_page_params() const { 217a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch return last_error_page_params_.get(); 2185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 2195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 220010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const GURL& last_tracking_url() const { return last_tracking_url_; } 221010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const std::string& last_tracking_request_body() const { 222010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) return last_tracking_request_body_; 223010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } 224010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) int tracking_request_count() const { return tracking_request_count_; } 225010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 226a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch base::MockTimer* timer() { return timer_; } 227a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 228a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch void NavigationCorrectionsLoadSuccess( 229a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch const NavigationCorrection* corrections, int num_corrections) { 230a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch NavigationCorrectionsLoadFinished( 231a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch SuggestionsToResponse(corrections, num_corrections)); 232a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 233a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 234a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch void NavigationCorrectionsLoadFailure() { 235a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch NavigationCorrectionsLoadFinished(""); 236a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch } 237a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 238a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch void NavigationCorrectionsLoadFinished(const std::string& result) { 239a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch url_being_fetched_ = GURL(); 24046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnNavigationCorrectionsFetched(result, "en", false); 241a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch } 242a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 243a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) void DoErrorLoad(net::Error error) { 24446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 245a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) NetErrorHelperCore::NON_ERROR_PAGE); 246a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) std::string html; 24746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->GetErrorHTML(NetErrorHelperCore::MAIN_FRAME, 248a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) NetError(error), false, &html); 249a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_FALSE(html.empty()); 250a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(NetErrorString(error), html); 251a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 25246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 253a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) NetErrorHelperCore::ERROR_PAGE); 25446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, 255cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) error_url()); 25646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); 257a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 258a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 259a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) void DoSuccessLoad() { 26046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 261a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) NetErrorHelperCore::NON_ERROR_PAGE); 26246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, default_url()); 26346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); 264a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 265a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 266a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) void DoDnsProbe(chrome_common_net::DnsProbeStatus final_status) { 26746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_STARTED); 26846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnNetErrorInfo(final_status); 269a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 270a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 271a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch void EnableNavigationCorrections() { 272a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch SetNavigationCorrectionURL(GURL(kNavigationCorrectionUrl)); 273a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch } 274a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 275a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch void DisableNavigationCorrections() { 276a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch SetNavigationCorrectionURL(GURL()); 277a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch } 278a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 279a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch void ExpectDefaultNavigationCorrections() const { 280a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // Checks that the last error page params correspond to kDefaultSuggestions. 281a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch ASSERT_TRUE(last_error_page_params()); 282a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_TRUE(last_error_page_params()->suggest_reload); 283a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_EQ(2u, last_error_page_params()->override_suggestions->GetSize()); 284a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_EQ(GURL(kSearchUrl), last_error_page_params()->search_url); 285a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_EQ(kSuggestedSearchTerms, last_error_page_params()->search_terms); 286a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch } 287a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 288a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) private: 289a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch void SetNavigationCorrectionURL(const GURL& navigation_correction_url) { 29046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnSetNavigationCorrectionInfo(navigation_correction_url, 291010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) kLanguage, kCountry, kApiKey, 292a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch GURL(kSearchUrl)); 2935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 2945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // NetErrorHelperCore::Delegate implementation: 296a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch virtual void GenerateLocalizedErrorPage( 297a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch const WebURLError& error, 298a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch bool is_failed_post, 299a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch scoped_ptr<LocalizedError::ErrorPageParams> params, 3000529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch bool* reload_button_shown, 3010529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch bool* load_stale_button_shown, 302a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch std::string* html) const OVERRIDE { 303a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch last_error_page_params_.reset(params.release()); 3040529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch *reload_button_shown = false; 3050529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch *load_stale_button_shown = false; 3065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) *html = ErrorToString(error, is_failed_post); 3075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 3085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void LoadErrorPageInMainFrame(const std::string& html, 3105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const GURL& failed_url) OVERRIDE { 3115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) error_html_update_count_++; 3125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) last_error_html_ = html; 3135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 3145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3150529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch virtual void EnablePageHelperFunctions() OVERRIDE { 3160529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch enable_page_helper_functions_count_++; 317effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 318effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 3195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void UpdateErrorPage(const WebURLError& error, 3205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool is_failed_post) OVERRIDE { 3215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) update_count_++; 322a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch last_error_page_params_.reset(NULL); 3235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) last_error_html_ = ErrorToString(error, is_failed_post); 3245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 3255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 326a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch virtual void FetchNavigationCorrections( 327a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch const GURL& navigation_correction_url, 328a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch const std::string& navigation_correction_request_body) OVERRIDE { 3295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(url_being_fetched_.is_empty()); 330a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_TRUE(request_body_.empty()); 331a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_EQ(GURL(kNavigationCorrectionUrl), navigation_correction_url); 3325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 333a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch url_being_fetched_ = navigation_correction_url; 334a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch request_body_ = navigation_correction_request_body; 335010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 336010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // Check the body of the request. 337010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 338010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) base::JSONReader reader; 339010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) scoped_ptr<base::Value> parsed_body(reader.Read( 340010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) navigation_correction_request_body)); 341010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ASSERT_TRUE(parsed_body); 342010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) base::DictionaryValue* dict = NULL; 343010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ASSERT_TRUE(parsed_body->GetAsDictionary(&dict)); 344010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 345010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_TRUE(StringValueEquals(*dict, "params.urlQuery", kFailedUrl)); 346010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_TRUE(StringValueEquals(*dict, "params.language", kLanguage)); 347010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_TRUE(StringValueEquals(*dict, "params.originCountry", kCountry)); 348010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_TRUE(StringValueEquals(*dict, "params.key", kApiKey)); 3495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 3505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 351a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch virtual void CancelFetchNavigationCorrections() OVERRIDE { 3525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) url_being_fetched_ = GURL(); 353a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch request_body_.clear(); 3545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 3555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 356a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual void ReloadPage() OVERRIDE { 357a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) reload_count_++; 358a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 359a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 3600529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch virtual void LoadPageFromCache(const GURL& error_url) OVERRIDE { 3610529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch load_stale_count_++; 3620529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch load_stale_url_ = error_url; 3630529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch } 3640529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 365010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) virtual void SendTrackingRequest( 366010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const GURL& tracking_url, 367010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const std::string& tracking_request_body) OVERRIDE { 368010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) last_tracking_url_ = tracking_url; 369010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) last_tracking_request_body_ = tracking_request_body; 370010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) tracking_request_count_++; 371010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 372010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // Check the body of the request. 373010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 374010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) base::JSONReader reader; 375010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) scoped_ptr<base::Value> parsed_body(reader.Read(tracking_request_body)); 376010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ASSERT_TRUE(parsed_body); 377010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) base::DictionaryValue* dict = NULL; 378010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ASSERT_TRUE(parsed_body->GetAsDictionary(&dict)); 379010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 380010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_TRUE(StringValueEquals(*dict, "params.originalUrlQuery", 381010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) kFailedUrl)); 382010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_TRUE(StringValueEquals(*dict, "params.language", kLanguage)); 383010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_TRUE(StringValueEquals(*dict, "params.originCountry", kCountry)); 384010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_TRUE(StringValueEquals(*dict, "params.key", kApiKey)); 385010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } 386010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 387a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::MockTimer* timer_; 388a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 38946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) scoped_ptr<NetErrorHelperCore> core_; 3905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GURL url_being_fetched_; 392a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch std::string request_body_; 3935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Contains the information passed to the last call to UpdateErrorPage, as a 3955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // string. 3965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::string last_update_string_; 3975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Number of times |last_update_string_| has been changed. 3985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int update_count_; 3995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 4005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Contains the HTML set by the last call to LoadErrorPageInMainFrame. 4015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::string last_error_html_; 4025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Number of times |last_error_html_| has been changed. 4035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int error_html_update_count_; 404a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 405a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // Mutable because GenerateLocalizedErrorPage is const. 406a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch mutable scoped_ptr<LocalizedError::ErrorPageParams> last_error_page_params_; 407a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 408a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) int reload_count_; 4090529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch int load_stale_count_; 4100529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch GURL load_stale_url_; 411effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 4120529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch int enable_page_helper_functions_count_; 413010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 414cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const GURL default_url_; 415cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const GURL error_url_; 416cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 417010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) GURL last_tracking_url_; 418010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) std::string last_tracking_request_body_; 419010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) int tracking_request_count_; 4205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}; 4215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 4225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)//------------------------------------------------------------------------------ 423a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// Basic tests that don't update the error page for probes or load navigation 424a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// corrections. 4255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)//------------------------------------------------------------------------------ 4265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 4275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)TEST_F(NetErrorHelperCoreTest, Null) { 4285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 4295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 4305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)TEST_F(NetErrorHelperCoreTest, SuccessfulPageLoad) { 43146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 4325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetErrorHelperCore::NON_ERROR_PAGE); 43346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, default_url()); 43446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); 4355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(0, update_count()); 4365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(0, error_html_update_count()); 4375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 4385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 439a02191e04bc25c4935f804f2c080ae28663d096dBen MurdochTEST_F(NetErrorHelperCoreTest, SuccessfulPageLoadWithNavigationCorrections) { 440a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EnableNavigationCorrections(); 44146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 4425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetErrorHelperCore::NON_ERROR_PAGE); 44346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, default_url()); 44446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); 4455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(0, update_count()); 4465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(0, error_html_update_count()); 4475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 4485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 4495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)TEST_F(NetErrorHelperCoreTest, MainFrameNonDnsError) { 4505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Original page starts loading. 45146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 4525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetErrorHelperCore::NON_ERROR_PAGE); 4535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 4545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // It fails, and an error page is requested. 4555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::string html; 45646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->GetErrorHTML(NetErrorHelperCore::MAIN_FRAME, 4575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetError(net::ERR_CONNECTION_RESET), false, &html); 4585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Should have returned a local error page. 4595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FALSE(html.empty()); 4605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(NetErrorString(net::ERR_CONNECTION_RESET), html); 4615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 4625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Error page loads. 4630529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch EXPECT_EQ(0, enable_page_helper_functions_count()); 46446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 4655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetErrorHelperCore::ERROR_PAGE); 46646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); 46746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); 4685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(0, update_count()); 4695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(0, error_html_update_count()); 4700529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch EXPECT_EQ(1, enable_page_helper_functions_count()); 4715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 4725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 473a02191e04bc25c4935f804f2c080ae28663d096dBen MurdochTEST_F(NetErrorHelperCoreTest, MainFrameNonDnsErrorWithCorrections) { 474a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EnableNavigationCorrections(); 4755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 4765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Original page starts loading. 47746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 4785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetErrorHelperCore::NON_ERROR_PAGE); 4795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 4805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // It fails, and an error page is requested. 4815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::string html; 48246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->GetErrorHTML(NetErrorHelperCore::MAIN_FRAME, 4835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetError(net::ERR_CONNECTION_RESET), false, &html); 4845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Should have returned a local error page. 4855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FALSE(html.empty()); 4865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(NetErrorString(net::ERR_CONNECTION_RESET), html); 4875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 4885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Error page loads. 48946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 4905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetErrorHelperCore::ERROR_PAGE); 49146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); 49246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); 4935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(0, update_count()); 4945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(0, error_html_update_count()); 4955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 4965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 4975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Much like above tests, but with a bunch of spurious DNS status messages that 4985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// should have no effect. 4995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)TEST_F(NetErrorHelperCoreTest, MainFrameNonDnsErrorSpuriousStatus) { 5005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Original page starts loading. 50146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 5025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetErrorHelperCore::NON_ERROR_PAGE); 50346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN); 5045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 5055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // It fails, and an error page is requested. 5065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::string html; 50746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->GetErrorHTML(NetErrorHelperCore::MAIN_FRAME, 5085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetError(net::ERR_CONNECTION_RESET), 5095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) false, &html); 51046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN); 5115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 5125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Should have returned a local error page. 5135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FALSE(html.empty()); 5145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(NetErrorString(net::ERR_CONNECTION_RESET), html); 5155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 5165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Error page loads. 5175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 51846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 5195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetErrorHelperCore::ERROR_PAGE); 52046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN); 5215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 52246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); 52346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN); 5245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 52546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); 52646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN); 5275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 5285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(0, update_count()); 5295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(0, error_html_update_count()); 5305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 5315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 5325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)TEST_F(NetErrorHelperCoreTest, SubFrameDnsError) { 5335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Original page starts loading. 53446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::SUB_FRAME, 5355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetErrorHelperCore::NON_ERROR_PAGE); 5365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 5375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // It fails, and an error page is requested. 5385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::string html; 53946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->GetErrorHTML(NetErrorHelperCore::SUB_FRAME, 5405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetError(net::ERR_NAME_NOT_RESOLVED), 5415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) false, &html); 5425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Should have returned a local error page. 5435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(NetErrorString(net::ERR_NAME_NOT_RESOLVED), html); 5445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 5455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Error page loads. 54646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::SUB_FRAME, 5475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetErrorHelperCore::ERROR_PAGE); 54846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnCommitLoad(NetErrorHelperCore::SUB_FRAME, error_url()); 54946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnFinishLoad(NetErrorHelperCore::SUB_FRAME); 5505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(0, update_count()); 5515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(0, error_html_update_count()); 5525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 5535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 554a02191e04bc25c4935f804f2c080ae28663d096dBen MurdochTEST_F(NetErrorHelperCoreTest, SubFrameDnsErrorWithCorrections) { 555a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EnableNavigationCorrections(); 5565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 5575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Original page starts loading. 55846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::SUB_FRAME, 5595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetErrorHelperCore::NON_ERROR_PAGE); 5605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 5615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // It fails, and an error page is requested. 5625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::string html; 56346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->GetErrorHTML(NetErrorHelperCore::SUB_FRAME, 5645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetError(net::ERR_NAME_NOT_RESOLVED), 5655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) false, &html); 5665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Should have returned a local error page. 5675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(NetErrorString(net::ERR_NAME_NOT_RESOLVED), html); 5685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 5695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Error page loads. 57046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::SUB_FRAME, 5715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetErrorHelperCore::ERROR_PAGE); 57246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnCommitLoad(NetErrorHelperCore::SUB_FRAME, error_url()); 57346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnFinishLoad(NetErrorHelperCore::SUB_FRAME); 5745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(0, update_count()); 5755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(0, error_html_update_count()); 5765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 5775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 5785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Much like above tests, but with a bunch of spurious DNS status messages that 5795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// should have no effect. 5805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)TEST_F(NetErrorHelperCoreTest, SubFrameDnsErrorSpuriousStatus) { 5815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Original page starts loading. 58246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::SUB_FRAME, 5835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetErrorHelperCore::NON_ERROR_PAGE); 58446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN); 5855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 5865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // It fails, and an error page is requested. 5875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::string html; 58846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->GetErrorHTML(NetErrorHelperCore::SUB_FRAME, 5895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetError(net::ERR_NAME_NOT_RESOLVED), 5905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) false, &html); 59146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN); 5925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 5935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Should have returned a local error page. 5945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(NetErrorString(net::ERR_NAME_NOT_RESOLVED), html); 5955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 5965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Error page loads. 5975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 59846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::SUB_FRAME, 5995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetErrorHelperCore::ERROR_PAGE); 60046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN); 6015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 60246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnCommitLoad(NetErrorHelperCore::SUB_FRAME, error_url()); 60346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN); 6045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 60546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnFinishLoad(NetErrorHelperCore::SUB_FRAME); 60646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN); 6075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 6085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(0, update_count()); 6095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(0, error_html_update_count()); 6105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 6115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 6125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)//------------------------------------------------------------------------------ 6135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Tests for updating the error page in response to DNS probe results. None 614a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// of these have navigation corrections enabled. 6155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)//------------------------------------------------------------------------------ 6165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 6175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Test case where the error page finishes loading before receiving any DNS 6185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// probe messages. 6195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)TEST_F(NetErrorHelperCoreTest, FinishedBeforeProbe) { 6205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Original page starts loading. 62146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 6225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetErrorHelperCore::NON_ERROR_PAGE); 6235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 6245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // It fails, and an error page is requested. 6255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::string html; 62646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->GetErrorHTML(NetErrorHelperCore::MAIN_FRAME, 6275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetError(net::ERR_NAME_NOT_RESOLVED), 6285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) false, &html); 6295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Should have returned a local error page indicating a probe may run. 6305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_POSSIBLE), html); 6315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 6325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Error page loads. 63346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 6345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetErrorHelperCore::ERROR_PAGE); 63546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); 63646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); 6375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(0, update_count()); 6385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 63946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_STARTED); 6405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(1, update_count()); 6415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_STARTED), 6425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) last_error_html()); 6435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 64446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN); 6455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(2, update_count()); 6465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN), 6475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) last_error_html()); 6485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 6495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Any other probe updates should be ignored. 65046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_STARTED); 65146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN); 6525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(2, update_count()); 6535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(0, error_html_update_count()); 6545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 6555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 6565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Same as above, but the probe is not run. 6575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)TEST_F(NetErrorHelperCoreTest, FinishedBeforeProbeNotRun) { 6585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Original page starts loading. 65946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 6605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetErrorHelperCore::NON_ERROR_PAGE); 6615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 6625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // It fails, and an error page is requested. 6635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::string html; 66446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->GetErrorHTML(NetErrorHelperCore::MAIN_FRAME, 6655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetError(net::ERR_NAME_NOT_RESOLVED), 6665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) false, &html); 6675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Should have returned a local error page indicating a probe may run. 6685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_POSSIBLE), html); 6695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 6705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Error page loads. 67146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 6725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetErrorHelperCore::ERROR_PAGE); 67346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); 67446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); 6755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(0, update_count()); 6765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 6775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // When the not run status arrives, the page should revert to the normal dns 6785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // error page. 67946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_NOT_RUN); 6805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(1, update_count()); 6815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(NetErrorString(net::ERR_NAME_NOT_RESOLVED), last_error_html()); 6825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 6835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Any other probe updates should be ignored. 68446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_STARTED); 68546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN); 6865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(1, update_count()); 6875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(0, error_html_update_count()); 6885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 6895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 6905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Same as above, but the probe result is inconclusive. 6915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)TEST_F(NetErrorHelperCoreTest, FinishedBeforeProbeInconclusive) { 6925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Original page starts loading. 69346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 6945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetErrorHelperCore::NON_ERROR_PAGE); 6955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 6965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // It fails, and an error page is requested. 6975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::string html; 69846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->GetErrorHTML(NetErrorHelperCore::MAIN_FRAME, 6995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetError(net::ERR_NAME_NOT_RESOLVED), 7005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) false, &html); 7015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Should have returned a local error page indicating a probe may run. 7025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_POSSIBLE), html); 7035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 7045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Error page loads. 70546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 7065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetErrorHelperCore::ERROR_PAGE); 70746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); 70846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); 7095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(0, update_count()); 7105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 71146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_STARTED); 7125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(1, update_count()); 7135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_STARTED), 7145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) last_error_html()); 7155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 7165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // When the inconclusive status arrives, the page should revert to the normal 7175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // dns error page. 71846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_INCONCLUSIVE); 7195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(2, update_count()); 7205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(NetErrorString(net::ERR_NAME_NOT_RESOLVED), last_error_html()); 7215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 7225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Any other probe updates should be ignored. 72346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_INCONCLUSIVE); 7245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(2, update_count()); 7255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(0, error_html_update_count()); 7265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 7275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 7285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Same as above, but the probe result is no internet. 7295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)TEST_F(NetErrorHelperCoreTest, FinishedBeforeProbeNoInternet) { 7305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Original page starts loading. 73146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 7325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetErrorHelperCore::NON_ERROR_PAGE); 7335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 7345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // It fails, and an error page is requested. 7355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::string html; 73646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->GetErrorHTML(NetErrorHelperCore::MAIN_FRAME, 7375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetError(net::ERR_NAME_NOT_RESOLVED), 7385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) false, &html); 7395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Should have returned a local error page indicating a probe may run. 7405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_POSSIBLE), html); 7415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 7425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Error page loads. 74346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 7445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetErrorHelperCore::ERROR_PAGE); 74546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); 74646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); 7475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(0, update_count()); 7485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 74946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_STARTED); 7505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(1, update_count()); 7515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_STARTED), 7525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) last_error_html()); 7535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 7545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // When the inconclusive status arrives, the page should revert to the normal 7555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // dns error page. 75646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NO_INTERNET); 7575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(2, update_count()); 7585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_FINISHED_NO_INTERNET), 7595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) last_error_html()); 7605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 7615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Any other probe updates should be ignored. 76246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NO_INTERNET); 7635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(2, update_count()); 7645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(0, error_html_update_count()); 7655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 7665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 7675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Same as above, but the probe result is bad config. 7685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)TEST_F(NetErrorHelperCoreTest, FinishedBeforeProbeBadConfig) { 7695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Original page starts loading. 77046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 7715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetErrorHelperCore::NON_ERROR_PAGE); 7725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 7735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // It fails, and an error page is requested. 7745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::string html; 77546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->GetErrorHTML(NetErrorHelperCore::MAIN_FRAME, 7765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetError(net::ERR_NAME_NOT_RESOLVED), 7775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) false, &html); 7785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Should have returned a local error page indicating a probe may run. 7795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_POSSIBLE), html); 7805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 7815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Error page loads. 78246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 7835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetErrorHelperCore::ERROR_PAGE); 78446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); 78546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); 7865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(0, update_count()); 7875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 78846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_STARTED); 7895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(1, update_count()); 7905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_STARTED), 7915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) last_error_html()); 7925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 7935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // When the inconclusive status arrives, the page should revert to the normal 7945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // dns error page. 79546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_BAD_CONFIG); 7965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(2, update_count()); 7975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_FINISHED_BAD_CONFIG), 7985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) last_error_html()); 7995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 8005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Any other probe updates should be ignored. 80146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_BAD_CONFIG); 8025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(2, update_count()); 8035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(0, error_html_update_count()); 8045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 8055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 8065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Test case where the error page finishes loading after receiving the start 8075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// DNS probe message. 8085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)TEST_F(NetErrorHelperCoreTest, FinishedAfterStartProbe) { 8095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Original page starts loading. 81046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 8115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetErrorHelperCore::NON_ERROR_PAGE); 8125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 8135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // It fails, and an error page is requested. 8145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::string html; 81546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->GetErrorHTML(NetErrorHelperCore::MAIN_FRAME, 8165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetError(net::ERR_NAME_NOT_RESOLVED), 8175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) false, &html); 8185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Should have returned a local error page indicating a probe may run. 8195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_POSSIBLE), html); 8205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 8215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Error page loads. 82246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 8235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetErrorHelperCore::ERROR_PAGE); 82446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); 8255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 8265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Nothing should be done when a probe status comes in before loading 8275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // finishes. 82846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_STARTED); 8295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(0, update_count()); 8305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 8315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // When loading finishes, however, the buffered probe status should be sent 8325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // to the page. 83346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); 8345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(1, update_count()); 8355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_STARTED), 8365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) last_error_html()); 8375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 8385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Should update the page again when the probe result comes in. 83946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN); 8405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(2, update_count()); 8415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN), 8425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) last_error_html()); 8435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 8445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Any other probe updates should be ignored. 84546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_NOT_RUN); 8465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(2, update_count()); 8475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 8485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 8495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Test case where the error page finishes loading before receiving any DNS 8505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// probe messages and the request is a POST. 8515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)TEST_F(NetErrorHelperCoreTest, FinishedBeforeProbePost) { 8525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Original page starts loading. 85346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 8545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetErrorHelperCore::NON_ERROR_PAGE); 8555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 8565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // It fails, and an error page is requested. 8575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::string html; 85846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->GetErrorHTML(NetErrorHelperCore::MAIN_FRAME, 8595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetError(net::ERR_NAME_NOT_RESOLVED), 8605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) true, &html); 8615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Should have returned a local error page indicating a probe may run. 8625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(ErrorToString( 8635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ProbeError(chrome_common_net::DNS_PROBE_POSSIBLE), 8645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) true), 8655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) html); 8665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 8675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Error page loads. 8680529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch EXPECT_EQ(0, enable_page_helper_functions_count()); 86946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 8705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetErrorHelperCore::ERROR_PAGE); 87146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); 87246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); 8735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(0, update_count()); 8740529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch EXPECT_EQ(1, enable_page_helper_functions_count()); 8755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 87646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_STARTED); 8775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(1, update_count()); 8785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(ErrorToString( 8795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ProbeError(chrome_common_net::DNS_PROBE_STARTED), true), 8805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) last_error_html()); 8815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 88246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN); 8835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(2, update_count()); 8845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(ErrorToString( 8855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ProbeError(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN), 8865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) true), 8875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) last_error_html()); 8885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(0, error_html_update_count()); 8895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 8905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 8915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Test case where the probe finishes before the page is committed. 8925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)TEST_F(NetErrorHelperCoreTest, ProbeFinishesEarly) { 8935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Original page starts loading. 89446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 8955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetErrorHelperCore::NON_ERROR_PAGE); 8965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 8975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // It fails, and an error page is requested. 8985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::string html; 89946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->GetErrorHTML(NetErrorHelperCore::MAIN_FRAME, 9005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetError(net::ERR_NAME_NOT_RESOLVED), 9015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) false, &html); 9025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Should have returned a local error page indicating a probe may run. 9035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_POSSIBLE), html); 9045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 9055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Error page starts loading. 90646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 9075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetErrorHelperCore::ERROR_PAGE); 9085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 9095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Nothing should be done when the probe statuses come in before loading 9105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // finishes. 91146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_STARTED); 91246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN); 9135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(0, update_count()); 9145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 91546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); 9165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(0, update_count()); 9175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 9185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // When loading finishes, however, the buffered probe status should be sent 9195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // to the page. 92046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); 9215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(1, update_count()); 9225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN), 9235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) last_error_html()); 9245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 9255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Any other probe updates should be ignored. 92646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_STARTED); 92746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN); 9285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(1, update_count()); 9295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 9305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 9315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Test case where one error page loads completely before a new navigation 9325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// results in another error page. Probes are run for both pages. 9335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)TEST_F(NetErrorHelperCoreTest, TwoErrorsWithProbes) { 9345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Original page starts loading. 93546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 9365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetErrorHelperCore::NON_ERROR_PAGE); 9375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 9385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // It fails, and an error page is requested. 9395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::string html; 94046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->GetErrorHTML(NetErrorHelperCore::MAIN_FRAME, 9415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetError(net::ERR_NAME_NOT_RESOLVED), 9425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) false, &html); 9435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Should have returned a local error page indicating a probe may run. 9445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_POSSIBLE), html); 9455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 9465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Error page loads. 94746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 9485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetErrorHelperCore::ERROR_PAGE); 94946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); 95046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); 9515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 9525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Probe results come in. 95346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_STARTED); 95446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN); 9555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(2, update_count()); 9565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN), 9575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) last_error_html()); 9585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 9595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // The process starts again. 9605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 9615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Normal page starts loading. 96246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 9635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetErrorHelperCore::NON_ERROR_PAGE); 9645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 9655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // It fails, and an error page is requested. 96646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->GetErrorHTML(NetErrorHelperCore::MAIN_FRAME, 9675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetError(net::ERR_NAME_NOT_RESOLVED), 9685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) false, &html); 9695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Should have returned a local error page indicating a probe may run. 9705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_POSSIBLE), html); 9715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 9725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Error page loads. 97346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 9745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetErrorHelperCore::ERROR_PAGE); 97546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); 97646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); 9775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(2, update_count()); 9785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 97946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_STARTED); 9805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(3, update_count()); 9815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_STARTED), 9825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) last_error_html()); 9835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 9845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // The probe returns a different result this time. 98546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NO_INTERNET); 9865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(4, update_count()); 9875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_FINISHED_NO_INTERNET), 9885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) last_error_html()); 9895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(0, error_html_update_count()); 9905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 9915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 9925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Test case where one error page loads completely before a new navigation 9935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// results in another error page. Probe results for the first probe are only 9945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// received after the second load starts, but before it commits. 9955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)TEST_F(NetErrorHelperCoreTest, TwoErrorsWithProbesAfterSecondStarts) { 9965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Original page starts loading. 99746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 9985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetErrorHelperCore::NON_ERROR_PAGE); 9995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 10005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // It fails, and an error page is requested. 10015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::string html; 100246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->GetErrorHTML(NetErrorHelperCore::MAIN_FRAME, 10035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetError(net::ERR_NAME_NOT_RESOLVED), 10045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) false, &html); 10055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Should have returned a local error page indicating a probe may run. 10065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_POSSIBLE), html); 10075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 10085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Error page loads. 100946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 10105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetErrorHelperCore::ERROR_PAGE); 101146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); 101246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); 10135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 10145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // The process starts again. 10155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 10165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Normal page starts loading. 101746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 10185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetErrorHelperCore::NON_ERROR_PAGE); 10195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 10205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // It fails, and an error page is requested. 102146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->GetErrorHTML(NetErrorHelperCore::MAIN_FRAME, 10225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetError(net::ERR_NAME_NOT_RESOLVED), 10235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) false, &html); 10245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Should have returned a local error page indicating a probe may run. 10255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_POSSIBLE), html); 10265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 10275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Error page starts to load. 102846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 10295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetErrorHelperCore::ERROR_PAGE); 10305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 10315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Probe results come in, and the first page is updated. 103246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_STARTED); 103346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN); 10345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(2, update_count()); 10355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN), 10365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) last_error_html()); 10375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 10385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Second page finishes loading, and is updated using the same probe result. 103946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); 104046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); 10415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(3, update_count()); 10425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN), 10435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) last_error_html()); 10445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 10455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Other probe results should be ignored. 104646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NO_INTERNET); 10475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(3, update_count()); 10485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(0, error_html_update_count()); 10495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 10505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 10515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Same as above, but a new page is loaded before the error page commits. 10525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)TEST_F(NetErrorHelperCoreTest, ErrorPageLoadInterrupted) { 10535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Original page starts loading. 105446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 10555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetErrorHelperCore::NON_ERROR_PAGE); 10565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 10575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // It fails, and an error page is requested. 10585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::string html; 105946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->GetErrorHTML(NetErrorHelperCore::MAIN_FRAME, 10605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetError(net::ERR_NAME_NOT_RESOLVED), 10615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) false, &html); 10625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Should have returned a local error page indicating a probe may run. 10635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_POSSIBLE), html); 10645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 10655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Error page starts loading. 106646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 10675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetErrorHelperCore::ERROR_PAGE); 10685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Probe statuses come in, but should be ignored. 106946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_STARTED); 107046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN); 10715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(0, update_count()); 10725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 10735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // A new navigation begins while the error page is loading. 107446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 10755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetErrorHelperCore::NON_ERROR_PAGE); 10765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 10775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // And fails. 107846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->GetErrorHTML(NetErrorHelperCore::MAIN_FRAME, 10795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetError(net::ERR_NAME_NOT_RESOLVED), 10805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) false, &html); 10815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Should have returned a local error page indicating a probe may run. 10825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_POSSIBLE), html); 10835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 10845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Error page finishes loading. 108546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); 108646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); 10875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 10885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Probe results come in. 108946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_STARTED); 10905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(1, update_count()); 10915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_STARTED), 10925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) last_error_html()); 10935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 109446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NO_INTERNET); 10955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(2, update_count()); 10965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_FINISHED_NO_INTERNET), 10975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) last_error_html()); 10985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(0, error_html_update_count()); 10995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 11005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 11015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)//------------------------------------------------------------------------------ 1102a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// Navigation correction tests. 11035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)//------------------------------------------------------------------------------ 11045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1105a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// Check that corrections are not used for HTTPS URLs. 1106a02191e04bc25c4935f804f2c080ae28663d096dBen MurdochTEST_F(NetErrorHelperCoreTest, NoCorrectionsForHttps) { 11075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Original page starts loading. 1108a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EnableNavigationCorrections(); 110946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 11105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetErrorHelperCore::NON_ERROR_PAGE); 11115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 11125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // The HTTPS page fails to load. 11135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::string html; 11145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) blink::WebURLError error = NetError(net::ERR_NAME_NOT_RESOLVED); 11155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) error.unreachableURL = GURL(kFailedHttpsUrl); 111646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->GetErrorHTML(NetErrorHelperCore::MAIN_FRAME, error, false, &html); 11175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 11185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) blink::WebURLError probe_error = 11195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ProbeError(chrome_common_net::DNS_PROBE_POSSIBLE); 11205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) probe_error.unreachableURL = GURL(kFailedHttpsUrl); 11215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(ErrorToString(probe_error, false), html); 11225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FALSE(is_url_being_fetched()); 1123a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_FALSE(last_error_page_params()); 11245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 11255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // The blank page loads, no error page is loaded. 112646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 11275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetErrorHelperCore::ERROR_PAGE); 112846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); 112946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); 11305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FALSE(is_url_being_fetched()); 1131a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_FALSE(last_error_page_params()); 11325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 11335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Page is updated in response to DNS probes as normal. 11345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(0, update_count()); 113546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_STARTED); 113646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN); 11375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(2, update_count()); 1138a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_FALSE(last_error_page_params()); 11395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) blink::WebURLError final_probe_error = 11405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ProbeError(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN); 11415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) final_probe_error.unreachableURL = GURL(kFailedHttpsUrl); 11425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(ErrorToString(final_probe_error, false), last_error_html()); 11435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 11445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1145a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// The blank page loads, then the navigation corrections request succeeds and is 1146a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// loaded. Then the probe results come in. 1147a02191e04bc25c4935f804f2c080ae28663d096dBen MurdochTEST_F(NetErrorHelperCoreTest, CorrectionsReceivedBeforeProbe) { 11485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Original page starts loading. 1149a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EnableNavigationCorrections(); 115046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 11515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetErrorHelperCore::NON_ERROR_PAGE); 11525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 11535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // It fails. 11545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::string html; 115546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->GetErrorHTML(NetErrorHelperCore::MAIN_FRAME, 11565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetError(net::ERR_NAME_NOT_RESOLVED), 11575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) false, &html); 11585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(html.empty()); 11595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FALSE(is_url_being_fetched()); 1160a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_FALSE(last_error_page_params()); 11615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 11625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // The blank page loads. 116346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 1164a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch NetErrorHelperCore::ERROR_PAGE); 116546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); 11665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1167a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // Corrections retrieval starts when the error page finishes loading. 11685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FALSE(is_url_being_fetched()); 1169a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_FALSE(last_error_page_params()); 117046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); 11715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(is_url_being_fetched()); 1172a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_FALSE(last_error_page_params()); 11735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1174a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // Corrections are retrieved. 1175a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch NavigationCorrectionsLoadSuccess(kDefaultCorrections, 1176a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch arraysize(kDefaultCorrections)); 11775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(1, error_html_update_count()); 1178a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_EQ(NetErrorString(net::ERR_NAME_NOT_RESOLVED), last_error_html()); 1179a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch ExpectDefaultNavigationCorrections(); 11805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FALSE(is_url_being_fetched()); 11815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1182a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // Corrections load. 118346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 1184a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch NetErrorHelperCore::ERROR_PAGE); 118546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); 118646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); 11875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 11885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Any probe statuses should be ignored. 118946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_STARTED); 119046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN); 11915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 11925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(0, update_count()); 11935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(1, error_html_update_count()); 11945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 11955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 11965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// The blank page finishes loading, then probe results come in, and then 1197a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// the navigation corrections request succeeds. 1198a02191e04bc25c4935f804f2c080ae28663d096dBen MurdochTEST_F(NetErrorHelperCoreTest, CorrectionsRetrievedAfterProbes) { 11995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Original page starts loading. 1200a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EnableNavigationCorrections(); 120146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 12025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetErrorHelperCore::NON_ERROR_PAGE); 12035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1204a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // It fails, and corrections are requested. 12055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::string html; 120646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->GetErrorHTML(NetErrorHelperCore::MAIN_FRAME, 12075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetError(net::ERR_NAME_NOT_RESOLVED), 12085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) false, &html); 12095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(html.empty()); 12105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 12115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // The blank page loads. 121246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 12135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetErrorHelperCore::ERROR_PAGE); 121446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); 121546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); 12165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(is_url_being_fetched()); 1217a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_FALSE(last_error_page_params()); 12185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 12195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Probe statuses should be ignored. 122046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_STARTED); 122146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN); 12225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(0, update_count()); 12235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(0, error_html_update_count()); 1224a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_FALSE(last_error_page_params()); 12255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1226a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // Corrections are retrieved. 12275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(is_url_being_fetched()); 1228a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch NavigationCorrectionsLoadSuccess(kDefaultCorrections, 1229a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch arraysize(kDefaultCorrections)); 12305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(1, error_html_update_count()); 1231a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_EQ(NetErrorString(net::ERR_NAME_NOT_RESOLVED), last_error_html()); 1232a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch ExpectDefaultNavigationCorrections(); 12335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FALSE(is_url_being_fetched()); 12345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1235a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // Corrections load. 123646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 12375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetErrorHelperCore::ERROR_PAGE); 123846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); 123946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); 12405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(1, error_html_update_count()); 12415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(0, update_count()); 12425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 12435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1244a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// The corrections request fails and then the error page loads for an error that 12455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// does not trigger DNS probes. 1246a02191e04bc25c4935f804f2c080ae28663d096dBen MurdochTEST_F(NetErrorHelperCoreTest, CorrectionsFailLoadNoProbes) { 12475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Original page starts loading. 1248a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EnableNavigationCorrections(); 124946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 12505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetErrorHelperCore::NON_ERROR_PAGE); 12515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1252a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // It fails, and corrections are requested. 12535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::string html; 125446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->GetErrorHTML(NetErrorHelperCore::MAIN_FRAME, 12555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetError(net::ERR_CONNECTION_FAILED), 12565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) false, &html); 12575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(html.empty()); 12585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 12595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // The blank page loads. 126046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 12615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetErrorHelperCore::ERROR_PAGE); 126246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); 126346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); 12645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1265a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // Corrections request fails, final error page is shown. 12665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(is_url_being_fetched()); 1267a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch NavigationCorrectionsLoadFailure(); 12685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(1, error_html_update_count()); 12695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(last_error_html(), NetErrorString(net::ERR_CONNECTION_FAILED)); 12705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FALSE(is_url_being_fetched()); 12715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(0, update_count()); 1272a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_FALSE(last_error_page_params()); 12735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 12745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Error page loads. 127546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 12765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetErrorHelperCore::ERROR_PAGE); 127746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); 127846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); 12795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 12805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // If probe statuses come in last from another page load, they should be 12815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // ignored. 128246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_STARTED); 128346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN); 12845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(0, update_count()); 12855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(1, error_html_update_count()); 12865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 12875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1288a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// The corrections request fails and then the error page loads before probe 12895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// results are received. 1290a02191e04bc25c4935f804f2c080ae28663d096dBen MurdochTEST_F(NetErrorHelperCoreTest, CorrectionsFailLoadBeforeProbe) { 12915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Original page starts loading. 1292a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EnableNavigationCorrections(); 129346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 12945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetErrorHelperCore::NON_ERROR_PAGE); 12955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1296a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // It fails, and corrections are requested. 12975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::string html; 129846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->GetErrorHTML(NetErrorHelperCore::MAIN_FRAME, 12995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetError(net::ERR_NAME_NOT_RESOLVED), 13005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) false, &html); 13015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(html.empty()); 13025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 13035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // The blank page loads. 130446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 13055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetErrorHelperCore::ERROR_PAGE); 130646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); 130746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); 13085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1309a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // Corrections request fails, probe pending page shown. 13105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(is_url_being_fetched()); 1311a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch NavigationCorrectionsLoadFailure(); 13125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(1, error_html_update_count()); 13135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(last_error_html(), 13145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ProbeErrorString(chrome_common_net::DNS_PROBE_POSSIBLE)); 13155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FALSE(is_url_being_fetched()); 13165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(0, update_count()); 13175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 13185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Probe page loads. 131946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 13205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetErrorHelperCore::ERROR_PAGE); 132146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); 132246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); 13235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 13245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Probe statuses comes in, and page is updated. 132546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_STARTED); 13265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(1, update_count()); 13275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_STARTED), 13285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) last_error_html()); 13295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 133046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN); 13315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(2, update_count()); 13325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN), 13335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) last_error_html()); 13345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 13355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // The commit results in sending a second probe status, which is ignored. 133646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN); 13375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(2, update_count()); 13385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(1, error_html_update_count()); 13395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 13405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1341a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// The corrections request fails after receiving probe results. 1342a02191e04bc25c4935f804f2c080ae28663d096dBen MurdochTEST_F(NetErrorHelperCoreTest, CorrectionsFailAfterProbe) { 13435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Original page starts loading. 1344a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EnableNavigationCorrections(); 134546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 13465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetErrorHelperCore::NON_ERROR_PAGE); 13475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1348a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // It fails, and corrections are requested. 13495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::string html; 135046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->GetErrorHTML(NetErrorHelperCore::MAIN_FRAME, 13515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetError(net::ERR_NAME_NOT_RESOLVED), 13525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) false, &html); 13535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(html.empty()); 13545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 13555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // The blank page loads. 135646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 13575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetErrorHelperCore::ERROR_PAGE); 135846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); 135946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); 13605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 13615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Results come in, but end up being ignored. 136246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_STARTED); 136346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN); 13645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(0, update_count()); 13655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1366a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // Corrections request fails, probe pending page shown. 13675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(is_url_being_fetched()); 1368a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch NavigationCorrectionsLoadFailure(); 13695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(1, error_html_update_count()); 13705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(last_error_html(), 13715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ProbeErrorString(chrome_common_net::DNS_PROBE_POSSIBLE)); 13725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FALSE(is_url_being_fetched()); 13735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(0, update_count()); 13745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 13755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Probe page loads. 137646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 13775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetErrorHelperCore::ERROR_PAGE); 137846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); 137946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); 13805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 13815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Probe statuses comes in, and page is updated. 138246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN); 13835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(1, update_count()); 13845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN), 13855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) last_error_html()); 13865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(1, error_html_update_count()); 13875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 13885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1389a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// An error page load that would normally load correction is interrupted 13905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// by a new navigation before the blank page commits. 1391a02191e04bc25c4935f804f2c080ae28663d096dBen MurdochTEST_F(NetErrorHelperCoreTest, CorrectionsInterruptedBeforeCommit) { 13925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Original page starts loading. 1393a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EnableNavigationCorrections(); 139446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 13955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetErrorHelperCore::NON_ERROR_PAGE); 13965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1397a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // It fails, and corrections are requested. 13985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::string html; 139946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->GetErrorHTML(NetErrorHelperCore::MAIN_FRAME, 14005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetError(net::ERR_NAME_NOT_RESOLVED), 14015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) false, &html); 14025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(html.empty()); 14035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 14045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // The blank page starts loading. 140546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 14065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetErrorHelperCore::ERROR_PAGE); 14075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 14085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // A new page load starts. 14095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FALSE(is_url_being_fetched()); 141046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 14115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetErrorHelperCore::NON_ERROR_PAGE); 14125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 14135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // A new page load interrupts the original load. 14145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FALSE(is_url_being_fetched()); 141546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 14165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetErrorHelperCore::NON_ERROR_PAGE); 14175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FALSE(is_url_being_fetched()); 141846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, default_url()); 14195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FALSE(is_url_being_fetched()); 142046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); 14215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 14225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FALSE(is_url_being_fetched()); 14235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(0, update_count()); 14245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(0, error_html_update_count()); 14255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 14265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1427a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// An error page load that would normally load corrections is interrupted 14285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// by a new navigation before the blank page finishes loading. 1429a02191e04bc25c4935f804f2c080ae28663d096dBen MurdochTEST_F(NetErrorHelperCoreTest, CorrectionsInterruptedBeforeLoad) { 14305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Original page starts loading. 1431a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EnableNavigationCorrections(); 143246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 14335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetErrorHelperCore::NON_ERROR_PAGE); 14345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1435a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // It fails, and corrections are requested. 14365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::string html; 143746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->GetErrorHTML(NetErrorHelperCore::MAIN_FRAME, 14385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetError(net::ERR_NAME_NOT_RESOLVED), 14395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) false, &html); 14405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(html.empty()); 14415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 14425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // The blank page starts loading and is committed. 144346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 14445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetErrorHelperCore::ERROR_PAGE); 144546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); 14465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 14475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // A new page load interrupts the original load. 14485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FALSE(is_url_being_fetched()); 144946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 14505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetErrorHelperCore::NON_ERROR_PAGE); 14515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FALSE(is_url_being_fetched()); 145246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, default_url()); 14535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FALSE(is_url_being_fetched()); 145446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); 14555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 14565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FALSE(is_url_being_fetched()); 14575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(0, update_count()); 14585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(0, error_html_update_count()); 14595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 14605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1461a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// The corrections request is cancelled due to a new navigation. The new 1462a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// navigation fails and then loads corrections successfully. 1463a02191e04bc25c4935f804f2c080ae28663d096dBen MurdochTEST_F(NetErrorHelperCoreTest, CorrectionsInterrupted) { 14645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Original page starts loading. 1465a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EnableNavigationCorrections(); 146646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 14675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetErrorHelperCore::NON_ERROR_PAGE); 14685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1469a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // It fails, and corrections are requested. 14705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::string html; 147146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->GetErrorHTML(NetErrorHelperCore::MAIN_FRAME, 14725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetError(net::ERR_NAME_NOT_RESOLVED), 14735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) false, &html); 14745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(html.empty()); 14755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 14765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // The blank page loads. 147746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 14785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetErrorHelperCore::ERROR_PAGE); 147946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); 148046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); 14815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(is_url_being_fetched()); 14825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 14835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Results come in, but end up being ignored. 148446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_STARTED); 148546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN); 14865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(0, update_count()); 14875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 14885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // A new load appears! 148946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 14905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetErrorHelperCore::NON_ERROR_PAGE); 14915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FALSE(is_url_being_fetched()); 14925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1493a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // It fails, and corrections are requested again once a blank page is loaded. 149446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->GetErrorHTML(NetErrorHelperCore::MAIN_FRAME, 14955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetError(net::ERR_NAME_NOT_RESOLVED), 14965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) false, &html); 14975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(html.empty()); 149846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 14995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetErrorHelperCore::ERROR_PAGE); 150046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); 15015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FALSE(is_url_being_fetched()); 150246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); 15035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(is_url_being_fetched()); 15045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1505a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // Corrections request succeeds. 1506a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch NavigationCorrectionsLoadSuccess(kDefaultCorrections, 1507a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch arraysize(kDefaultCorrections)); 15085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(1, error_html_update_count()); 1509a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_EQ(NetErrorString(net::ERR_NAME_NOT_RESOLVED), last_error_html()); 1510a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch ExpectDefaultNavigationCorrections(); 15115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FALSE(is_url_being_fetched()); 15125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 15135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Probe statuses come in, and are ignored. 151446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_STARTED); 151546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN); 15165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(0, update_count()); 15175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 15185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1519a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// The corrections request is cancelled due to call to Stop(). The cross 15205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// process navigation is cancelled, and then a new load fails and tries to load 1521a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// corrections again, unsuccessfully. 1522a02191e04bc25c4935f804f2c080ae28663d096dBen MurdochTEST_F(NetErrorHelperCoreTest, CorrectionsStopped) { 15235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Original page starts loading. 1524a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EnableNavigationCorrections(); 152546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 15265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetErrorHelperCore::NON_ERROR_PAGE); 15275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1528a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // It fails, and corrections are requested. 15295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::string html; 153046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->GetErrorHTML(NetErrorHelperCore::MAIN_FRAME, 15315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetError(net::ERR_NAME_NOT_RESOLVED), 15325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) false, &html); 15335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(html.empty()); 15345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 15355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // The blank page loads. 153646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 15375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetErrorHelperCore::ERROR_PAGE); 153846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); 153946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); 15405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 15415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(is_url_being_fetched()); 154246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStop(); 15435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FALSE(is_url_being_fetched()); 15445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 15455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Results come in, but end up being ignored. 154646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_STARTED); 154746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN); 15485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(0, update_count()); 15495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 15505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Cross process navigation must have been cancelled, and a new load appears! 155146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 15525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetErrorHelperCore::NON_ERROR_PAGE); 15535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1554a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // It fails, and corrections are requested again. 155546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->GetErrorHTML(NetErrorHelperCore::MAIN_FRAME, 15565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetError(net::ERR_NAME_NOT_RESOLVED), 15575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) false, &html); 15585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(html.empty()); 15595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 15605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // The blank page loads again. 156146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 15625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetErrorHelperCore::ERROR_PAGE); 156346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); 156446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); 15655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(is_url_being_fetched()); 15665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1567a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // Corrections request fails, probe pending page shown. 1568a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch NavigationCorrectionsLoadFailure(); 15695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(1, error_html_update_count()); 15705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(last_error_html(), 15715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ProbeErrorString(chrome_common_net::DNS_PROBE_POSSIBLE)); 15725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FALSE(is_url_being_fetched()); 15735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 15745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Probe page loads. 157546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 15765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NetErrorHelperCore::ERROR_PAGE); 157746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); 157846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); 15795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 15805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Probe statuses comes in, and page is updated. 158146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_STARTED); 15825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_STARTED), 15835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) last_error_html()); 15845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(1, update_count()); 15855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 158646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN); 15875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(2, update_count()); 15885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN), 15895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) last_error_html()); 15905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(1, error_html_update_count()); 15915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 1592a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 1593a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// Check the case corrections are disabled while the blank page (Loaded 1594a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// before the corrections page) is being loaded. 1595a02191e04bc25c4935f804f2c080ae28663d096dBen MurdochTEST_F(NetErrorHelperCoreTest, CorrectionsDisabledBeforeFetch) { 1596a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // Original page starts loading. 1597a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EnableNavigationCorrections(); 159846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 1599a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch NetErrorHelperCore::NON_ERROR_PAGE); 1600a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 1601a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // It fails, and corrections are requested. 1602a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch std::string html; 160346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->GetErrorHTML(NetErrorHelperCore::MAIN_FRAME, 1604a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch NetError(net::ERR_NAME_NOT_RESOLVED), 1605a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch false, &html); 1606a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_TRUE(html.empty()); 1607a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 1608a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // The blank page loads. 160946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 1610a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch NetErrorHelperCore::ERROR_PAGE); 1611a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // Corrections is disabled. 1612a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch DisableNavigationCorrections(); 161346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); 161446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); 1615a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_TRUE(is_url_being_fetched()); 1616a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_FALSE(last_error_page_params()); 1617a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 1618a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // Corrections are retrieved. 1619a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch NavigationCorrectionsLoadSuccess(kDefaultCorrections, 1620a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch arraysize(kDefaultCorrections)); 1621a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_EQ(1, error_html_update_count()); 1622a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_EQ(NetErrorString(net::ERR_NAME_NOT_RESOLVED), last_error_html()); 1623a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_FALSE(is_url_being_fetched()); 1624a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch ExpectDefaultNavigationCorrections(); 1625a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 1626a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // Corrections load. 162746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 1628a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch NetErrorHelperCore::ERROR_PAGE); 162946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); 163046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); 1631a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_EQ(1, error_html_update_count()); 1632a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_EQ(0, update_count()); 1633a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch} 1634a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 1635a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// Check the case corrections is disabled while fetching the corrections for 1636a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// a failed page load. 1637a02191e04bc25c4935f804f2c080ae28663d096dBen MurdochTEST_F(NetErrorHelperCoreTest, CorrectionsDisabledDuringFetch) { 1638a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // Original page starts loading. 1639a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EnableNavigationCorrections(); 164046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 1641a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch NetErrorHelperCore::NON_ERROR_PAGE); 1642a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 1643a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // It fails, and corrections are requested. 1644a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch std::string html; 164546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->GetErrorHTML(NetErrorHelperCore::MAIN_FRAME, 1646a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch NetError(net::ERR_NAME_NOT_RESOLVED), 1647a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch false, &html); 1648a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_TRUE(html.empty()); 1649a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 1650a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // The blank page loads. 165146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 1652a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch NetErrorHelperCore::ERROR_PAGE); 165346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); 165446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); 1655a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_TRUE(is_url_being_fetched()); 1656a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_FALSE(last_error_page_params()); 1657a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 1658a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // Corrections are disabled. 1659a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch DisableNavigationCorrections(); 1660a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 1661a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // Corrections are retrieved. 1662a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch NavigationCorrectionsLoadSuccess(kDefaultCorrections, 1663a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch arraysize(kDefaultCorrections)); 1664a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_EQ(1, error_html_update_count()); 1665a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_EQ(NetErrorString(net::ERR_NAME_NOT_RESOLVED), last_error_html()); 1666a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_FALSE(is_url_being_fetched()); 1667a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch ExpectDefaultNavigationCorrections(); 1668a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 1669a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // Corrections load. 167046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 1671a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch NetErrorHelperCore::ERROR_PAGE); 167246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); 167346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); 1674a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_EQ(1, error_html_update_count()); 1675a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_EQ(0, update_count()); 1676a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch} 1677a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 1678a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// Checks corrections are is used when there are no search suggestions. 1679a02191e04bc25c4935f804f2c080ae28663d096dBen MurdochTEST_F(NetErrorHelperCoreTest, CorrectionsWithoutSearch) { 1680a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch const NavigationCorrection kCorrections[] = { 1681010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) {"urlCorrection", "http://somewhere_else/", "btn", "data", false, false}, 1682a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch }; 1683a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 1684a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // Original page starts loading. 1685a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EnableNavigationCorrections(); 168646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 1687a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch NetErrorHelperCore::NON_ERROR_PAGE); 1688a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 1689a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // It fails, and corrections are requested. 1690a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch std::string html; 169146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->GetErrorHTML(NetErrorHelperCore::MAIN_FRAME, 1692a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch NetError(net::ERR_NAME_NOT_RESOLVED), 1693a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch false, &html); 1694a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_TRUE(html.empty()); 1695a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 1696a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // The blank page loads. 169746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 1698a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch NetErrorHelperCore::ERROR_PAGE); 169946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); 170046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); 1701a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_TRUE(is_url_being_fetched()); 1702a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_FALSE(last_error_page_params()); 1703a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 1704a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // Corrections are retrieved. 1705a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch NavigationCorrectionsLoadSuccess(kCorrections, arraysize(kCorrections)); 1706a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_EQ(1, error_html_update_count()); 1707a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_EQ(NetErrorString(net::ERR_NAME_NOT_RESOLVED), last_error_html()); 1708a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_FALSE(is_url_being_fetched()); 1709a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 1710a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // Check params. 1711a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch ASSERT_TRUE(last_error_page_params()); 1712a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_FALSE(last_error_page_params()->suggest_reload); 1713a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_EQ(1u, last_error_page_params()->override_suggestions->GetSize()); 1714a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_FALSE(last_error_page_params()->search_url.is_valid()); 1715a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_EQ("", last_error_page_params()->search_terms); 1716a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 1717a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // Corrections load. 171846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 1719a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch NetErrorHelperCore::ERROR_PAGE); 172046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); 172146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); 1722a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_EQ(1, error_html_update_count()); 1723a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_EQ(0, update_count()); 1724a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch} 1725a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 1726a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// Checks corrections are used when there are only search suggestions. 1727a02191e04bc25c4935f804f2c080ae28663d096dBen MurdochTEST_F(NetErrorHelperCoreTest, CorrectionsOnlySearchSuggestion) { 1728a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch const NavigationCorrection kCorrections[] = { 1729010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) {"webSearchQuery", kSuggestedSearchTerms, "frm", "data", false, false}, 1730a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch }; 1731a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 1732a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // Original page starts loading. 1733a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EnableNavigationCorrections(); 173446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 1735a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch NetErrorHelperCore::NON_ERROR_PAGE); 1736a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 1737a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // It fails, and corrections are requested. 1738a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch std::string html; 173946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->GetErrorHTML(NetErrorHelperCore::MAIN_FRAME, 1740a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch NetError(net::ERR_NAME_NOT_RESOLVED), 1741a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch false, &html); 1742a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_TRUE(html.empty()); 1743a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 1744a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // The blank page loads. 174546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 1746a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch NetErrorHelperCore::ERROR_PAGE); 174746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); 174846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); 1749a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_TRUE(is_url_being_fetched()); 1750a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_FALSE(last_error_page_params()); 1751a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 1752a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // Corrections are retrieved. 1753a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch NavigationCorrectionsLoadSuccess(kCorrections, arraysize(kCorrections)); 1754a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_EQ(1, error_html_update_count()); 1755a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_EQ(NetErrorString(net::ERR_NAME_NOT_RESOLVED), last_error_html()); 1756a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_FALSE(is_url_being_fetched()); 1757a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 1758a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // Check params. 1759a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch ASSERT_TRUE(last_error_page_params()); 1760a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_FALSE(last_error_page_params()->suggest_reload); 1761a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_EQ(0u, last_error_page_params()->override_suggestions->GetSize()); 1762a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_EQ(GURL(kSearchUrl), last_error_page_params()->search_url); 1763a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_EQ(kSuggestedSearchTerms, last_error_page_params()->search_terms); 1764a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 1765a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // Corrections load. 176646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 1767a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch NetErrorHelperCore::ERROR_PAGE); 176846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); 176946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); 1770a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_EQ(1, error_html_update_count()); 1771a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_EQ(0, update_count()); 1772a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch} 1773a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 1774a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// The correction service returns a non-JSON result. 1775a02191e04bc25c4935f804f2c080ae28663d096dBen MurdochTEST_F(NetErrorHelperCoreTest, CorrectionServiceReturnsNonJsonResult) { 1776a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // Original page starts loading. 1777a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EnableNavigationCorrections(); 177846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 1779a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch NetErrorHelperCore::NON_ERROR_PAGE); 1780a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 1781a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // It fails, and corrections are requested. 1782a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch std::string html; 178346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->GetErrorHTML(NetErrorHelperCore::MAIN_FRAME, 1784a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch NetError(net::ERR_CONNECTION_FAILED), 1785a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch false, &html); 1786a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_TRUE(html.empty()); 1787a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 1788a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // The blank page loads. 178946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 1790a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch NetErrorHelperCore::ERROR_PAGE); 179146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); 179246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); 1793a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 1794a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // Corrections request fails, final error page is shown. 1795a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_TRUE(is_url_being_fetched()); 1796a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch NavigationCorrectionsLoadFinished("Weird Response"); 1797a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_EQ(1, error_html_update_count()); 1798a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_EQ(last_error_html(), NetErrorString(net::ERR_CONNECTION_FAILED)); 1799a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_FALSE(is_url_being_fetched()); 1800a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_EQ(0, update_count()); 1801a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_FALSE(last_error_page_params()); 1802a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 1803a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // Error page loads. 180446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 1805a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch NetErrorHelperCore::ERROR_PAGE); 180646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); 180746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); 1808a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch} 1809a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 1810a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// The correction service returns a JSON result that isn't a valid list of 1811a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// corrections. 1812a02191e04bc25c4935f804f2c080ae28663d096dBen MurdochTEST_F(NetErrorHelperCoreTest, CorrectionServiceReturnsInvalidJsonResult) { 1813a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // Original page starts loading. 1814a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EnableNavigationCorrections(); 181546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 1816a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch NetErrorHelperCore::NON_ERROR_PAGE); 1817a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 1818a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // It fails, and corrections are requested. 1819a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch std::string html; 182046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->GetErrorHTML(NetErrorHelperCore::MAIN_FRAME, 1821a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch NetError(net::ERR_CONNECTION_FAILED), 1822a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch false, &html); 1823a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_TRUE(html.empty()); 1824a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 1825a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // The blank page loads. 182646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 1827a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch NetErrorHelperCore::ERROR_PAGE); 182846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); 182946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); 1830a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 1831a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // Corrections request fails, final error page is shown. 1832a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_TRUE(is_url_being_fetched()); 1833a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch NavigationCorrectionsLoadFinished("{\"result\": 42}"); 1834a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_EQ(1, error_html_update_count()); 1835a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_EQ(last_error_html(), NetErrorString(net::ERR_CONNECTION_FAILED)); 1836a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_FALSE(is_url_being_fetched()); 1837a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_EQ(0, update_count()); 1838a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_FALSE(last_error_page_params()); 1839a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 1840a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // Error page loads. 184146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 1842a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch NetErrorHelperCore::ERROR_PAGE); 184346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); 184446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); 1845a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch} 1846a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 1847010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_F(NetErrorHelperCoreTest, CorrectionClickTracking) { 1848010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // Go through the standard navigation correction steps. 1849010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 1850010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // Original page starts loading. 1851010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EnableNavigationCorrections(); 185246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 1853010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) NetErrorHelperCore::NON_ERROR_PAGE); 1854010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 1855010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // It fails. 1856010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) std::string html; 185746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->GetErrorHTML(NetErrorHelperCore::MAIN_FRAME, 1858010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) NetError(net::ERR_NAME_NOT_RESOLVED), 1859010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) false, &html); 1860010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_TRUE(html.empty()); 1861010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_FALSE(is_url_being_fetched()); 1862010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_FALSE(last_error_page_params()); 1863010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 1864010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // The blank page loads. 186546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 1866010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) NetErrorHelperCore::ERROR_PAGE); 186746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); 1868010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 1869010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // Corrections retrieval starts when the error page finishes loading. 1870010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_FALSE(is_url_being_fetched()); 1871010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_FALSE(last_error_page_params()); 187246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); 1873010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_TRUE(is_url_being_fetched()); 1874010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_FALSE(last_error_page_params()); 1875010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 1876010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // Corrections are retrieved. 1877010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) NavigationCorrectionsLoadSuccess(kDefaultCorrections, 1878010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) arraysize(kDefaultCorrections)); 1879010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_EQ(1, error_html_update_count()); 1880010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_EQ(NetErrorString(net::ERR_NAME_NOT_RESOLVED), last_error_html()); 1881010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ExpectDefaultNavigationCorrections(); 1882010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_FALSE(is_url_being_fetched()); 1883010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 1884010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // Corrections load. 188546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 1886010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) NetErrorHelperCore::ERROR_PAGE); 188746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); 188846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); 1889010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 1890010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_EQ(0, tracking_request_count()); 1891010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 1892010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // Invalid clicks should be ignored. 189346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->TrackClick(-1); 189446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->TrackClick(arraysize(kDefaultCorrections)); 1895010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_EQ(0, tracking_request_count()); 1896010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 1897010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) for (size_t i = 0; i < arraysize(kDefaultCorrections); ++i) { 1898010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // Skip links that do not appear in the page. 1899010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) if (kDefaultCorrections[i].is_porn || kDefaultCorrections[i].is_soft_porn) 1900010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) continue; 1901010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 1902010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) int old_tracking_request_count = tracking_request_count(); 190346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->TrackClick(i); 1904010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_EQ(old_tracking_request_count + 1, tracking_request_count()); 1905010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_EQ(GURL(kNavigationCorrectionUrl), last_tracking_url()); 1906010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 1907010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // Make sure all expected strings appear in output. 1908010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_TRUE(last_tracking_request_body().find( 1909010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) kDefaultCorrections[i].url_correction)); 1910010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_TRUE(last_tracking_request_body().find( 1911010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) kDefaultCorrections[i].click_data)); 1912010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_TRUE(last_tracking_request_body().find( 1913010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) kDefaultCorrections[i].click_type)); 1914010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_TRUE(last_tracking_request_body().find( 1915010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) kNavigationCorrectionEventId)); 1916010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_TRUE(last_tracking_request_body().find( 1917010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) kNavigationCorrectionFingerprint)); 1918010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } 1919010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 1920010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // Make sure duplicate tracking requests are ignored. 1921010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) for (size_t i = 0; i < arraysize(kDefaultCorrections); ++i) { 1922010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // Skip links that do not appear in the page. 1923010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) if (kDefaultCorrections[i].is_porn || kDefaultCorrections[i].is_soft_porn) 1924010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) continue; 1925010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 1926010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) int old_tracking_request_count = tracking_request_count(); 192746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->TrackClick(i); 1928010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_EQ(old_tracking_request_count, tracking_request_count()); 1929010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } 1930010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 1931010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_EQ(0, update_count()); 1932010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_EQ(1, error_html_update_count()); 1933010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 1934010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 1935a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)TEST_F(NetErrorHelperCoreTest, AutoReloadDisabled) { 1936a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) DoErrorLoad(net::ERR_CONNECTION_RESET); 1937a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 1938a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_FALSE(timer()->IsRunning()); 1939a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(0, reload_count()); 1940a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 1941a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 194246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)class NetErrorHelperCoreAutoReloadTest : public NetErrorHelperCoreTest { 194346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) public: 194446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual void SetUp() { 194546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) NetErrorHelperCoreTest::SetUp(); 194646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) SetUpCore(true, false, true); 194746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 194846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)}; 194946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 195046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)TEST_F(NetErrorHelperCoreAutoReloadTest, Succeeds) { 1951a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) DoErrorLoad(net::ERR_CONNECTION_RESET); 1952a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 1953a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(timer()->IsRunning()); 1954a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(0, reload_count()); 1955a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 1956a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) timer()->Fire(); 1957a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_FALSE(timer()->IsRunning()); 1958a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(1, reload_count()); 1959a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 1960a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) DoSuccessLoad(); 1961a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 1962a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_FALSE(timer()->IsRunning()); 1963a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 1964a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 196546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)TEST_F(NetErrorHelperCoreAutoReloadTest, Retries) { 1966a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) DoErrorLoad(net::ERR_CONNECTION_RESET); 1967a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 1968a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(timer()->IsRunning()); 1969a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::TimeDelta first_delay = timer()->GetCurrentDelay(); 1970a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(0, reload_count()); 1971a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 1972a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) timer()->Fire(); 1973a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_FALSE(timer()->IsRunning()); 1974a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(1, reload_count()); 1975a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 1976a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) DoErrorLoad(net::ERR_CONNECTION_RESET); 1977a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 1978a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(timer()->IsRunning()); 1979a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_GT(timer()->GetCurrentDelay(), first_delay); 1980a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 1981a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 198246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)TEST_F(NetErrorHelperCoreAutoReloadTest, StopsTimerOnStop) { 1983a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) DoErrorLoad(net::ERR_CONNECTION_RESET); 1984a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(timer()->IsRunning()); 198546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStop(); 1986a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_FALSE(timer()->IsRunning()); 1987a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 1988a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 198946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)TEST_F(NetErrorHelperCoreAutoReloadTest, StopsLoadingOnStop) { 1990a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) DoErrorLoad(net::ERR_CONNECTION_RESET); 199146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(0, core()->auto_reload_count()); 1992a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) timer()->Fire(); 199346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(1, core()->auto_reload_count()); 1994a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(1, reload_count()); 199546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStop(); 1996a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_FALSE(timer()->IsRunning()); 199746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(0, core()->auto_reload_count()); 1998a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 1999a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 200046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)TEST_F(NetErrorHelperCoreAutoReloadTest, StopsOnOtherLoadStart) { 2001a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) DoErrorLoad(net::ERR_CONNECTION_RESET); 2002a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(timer()->IsRunning()); 200346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 2004a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) NetErrorHelperCore::NON_ERROR_PAGE); 2005a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_FALSE(timer()->IsRunning()); 200646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(0, core()->auto_reload_count()); 2007a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 2008a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 200946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)TEST_F(NetErrorHelperCoreAutoReloadTest, ResetsCountOnSuccess) { 2010a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) DoErrorLoad(net::ERR_CONNECTION_RESET); 2011a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::TimeDelta delay = timer()->GetCurrentDelay(); 201246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(0, core()->auto_reload_count()); 2013a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) timer()->Fire(); 201446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(1, core()->auto_reload_count()); 2015a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(1, reload_count()); 2016a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) DoSuccessLoad(); 2017a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) DoErrorLoad(net::ERR_CONNECTION_RESET); 201846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(0, core()->auto_reload_count()); 2019a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(timer()->GetCurrentDelay(), delay); 2020a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) timer()->Fire(); 202146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(1, core()->auto_reload_count()); 2022a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(2, reload_count()); 2023a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) DoSuccessLoad(); 202446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(0, core()->auto_reload_count()); 2025a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 2026a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 202746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)TEST_F(NetErrorHelperCoreAutoReloadTest, RestartsOnOnline) { 2028a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) DoErrorLoad(net::ERR_CONNECTION_RESET); 2029a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::TimeDelta delay = timer()->GetCurrentDelay(); 2030a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) timer()->Fire(); 2031a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) DoErrorLoad(net::ERR_CONNECTION_RESET); 2032a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(timer()->IsRunning()); 2033a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_NE(delay, timer()->GetCurrentDelay()); 203446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->NetworkStateChanged(false); 2035cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_FALSE(timer()->IsRunning()); 203646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->NetworkStateChanged(true); 2037a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(timer()->IsRunning()); 2038a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(delay, timer()->GetCurrentDelay()); 2039a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 2040a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 204146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)TEST_F(NetErrorHelperCoreAutoReloadTest, DoesNotStartOnOnline) { 2042a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) DoErrorLoad(net::ERR_CONNECTION_RESET); 2043a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) timer()->Fire(); 2044a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) DoSuccessLoad(); 2045a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_FALSE(timer()->IsRunning()); 204646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->NetworkStateChanged(true); 2047a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_FALSE(timer()->IsRunning()); 2048a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 2049a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 205046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)TEST_F(NetErrorHelperCoreAutoReloadTest, DoesNotStartOffline) { 205146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->NetworkStateChanged(false); 2052a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) DoErrorLoad(net::ERR_CONNECTION_RESET); 2053a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_FALSE(timer()->IsRunning()); 205446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->NetworkStateChanged(true); 2055a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(timer()->IsRunning()); 2056a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 2057a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 205846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)TEST_F(NetErrorHelperCoreAutoReloadTest, DoesNotRestartOnOnlineAfterStop) { 2059a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) DoErrorLoad(net::ERR_CONNECTION_RESET); 2060a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) timer()->Fire(); 206146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStop(); 206246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->NetworkStateChanged(true); 2063a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_FALSE(timer()->IsRunning()); 2064a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 2065a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 206646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)TEST_F(NetErrorHelperCoreAutoReloadTest, WithDnsProbes) { 2067a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) DoErrorLoad(net::ERR_CONNECTION_RESET); 2068a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) DoDnsProbe(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN); 2069a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) timer()->Fire(); 2070a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(1, reload_count()); 2071a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 2072a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 207346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)TEST_F(NetErrorHelperCoreAutoReloadTest, ExponentialBackoffLevelsOff) { 2074a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::TimeDelta previous = base::TimeDelta::FromMilliseconds(0); 2075a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const int kMaxTries = 50; 2076a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) int tries = 0; 2077a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) for (tries = 0; tries < kMaxTries; tries++) { 2078a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) DoErrorLoad(net::ERR_CONNECTION_RESET); 2079a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(timer()->IsRunning()); 2080a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (previous == timer()->GetCurrentDelay()) 2081a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) break; 2082a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) previous = timer()->GetCurrentDelay(); 2083a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) timer()->Fire(); 2084a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 2085a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 2086a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_LT(tries, kMaxTries); 2087a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 2088a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 208946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)TEST_F(NetErrorHelperCoreAutoReloadTest, SlowError) { 209046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 2091a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) NetErrorHelperCore::NON_ERROR_PAGE); 2092a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) std::string html; 209346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->GetErrorHTML(NetErrorHelperCore::MAIN_FRAME, 2094a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) NetError(net::ERR_CONNECTION_RESET), false, &html); 209546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 2096a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) NetErrorHelperCore::ERROR_PAGE); 209746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); 2098a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_FALSE(timer()->IsRunning()); 2099a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Start a new non-error page load. 210046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 2101a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) NetErrorHelperCore::NON_ERROR_PAGE); 2102a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_FALSE(timer()->IsRunning()); 2103a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Finish the error page load. 210446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); 2105a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_FALSE(timer()->IsRunning()); 210646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); 210746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); 2108a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_FALSE(timer()->IsRunning()); 2109a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 2110a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 211146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)TEST_F(NetErrorHelperCoreAutoReloadTest, OnlineSlowError) { 211246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->NetworkStateChanged(false); 211346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 2114a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) NetErrorHelperCore::NON_ERROR_PAGE); 2115a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) std::string html; 211646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->GetErrorHTML(NetErrorHelperCore::MAIN_FRAME, 2117a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) NetError(net::ERR_CONNECTION_RESET), false, &html); 211846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 2119a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) NetErrorHelperCore::ERROR_PAGE); 212046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); 2121a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_FALSE(timer()->IsRunning()); 212246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->NetworkStateChanged(true); 2123a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_FALSE(timer()->IsRunning()); 212446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->NetworkStateChanged(false); 212546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); 2126a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_FALSE(timer()->IsRunning()); 212746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->NetworkStateChanged(true); 2128a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(timer()->IsRunning()); 2129a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 2130a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 213146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)TEST_F(NetErrorHelperCoreAutoReloadTest, OnlinePendingError) { 213246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->NetworkStateChanged(false); 213346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 2134a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) NetErrorHelperCore::NON_ERROR_PAGE); 2135a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) std::string html; 213646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->GetErrorHTML(NetErrorHelperCore::MAIN_FRAME, 2137a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) NetError(net::ERR_CONNECTION_RESET), false, &html); 213846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 2139a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) NetErrorHelperCore::ERROR_PAGE); 2140a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_FALSE(timer()->IsRunning()); 214146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->NetworkStateChanged(true); 2142a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_FALSE(timer()->IsRunning()); 214346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->NetworkStateChanged(false); 214446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); 214546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); 2146a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_FALSE(timer()->IsRunning()); 214746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->NetworkStateChanged(true); 2148a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(timer()->IsRunning()); 2149a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 2150a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 215146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)TEST_F(NetErrorHelperCoreAutoReloadTest, OnlinePartialErrorReplacement) { 215246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->NetworkStateChanged(false); 215346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 2154a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) NetErrorHelperCore::NON_ERROR_PAGE); 2155a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) std::string html; 215646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->GetErrorHTML(NetErrorHelperCore::MAIN_FRAME, 2157a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) NetError(net::ERR_CONNECTION_RESET), false, &html); 215846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 2159a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) NetErrorHelperCore::ERROR_PAGE); 216046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); 216146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); 216246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 2163a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) NetErrorHelperCore::NON_ERROR_PAGE); 216446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->GetErrorHTML(NetErrorHelperCore::MAIN_FRAME, 2165a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) NetError(net::ERR_CONNECTION_RESET), false, &html); 216646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 2167a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) NetErrorHelperCore::ERROR_PAGE); 2168a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_FALSE(timer()->IsRunning()); 216946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->NetworkStateChanged(true); 217046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_FALSE(timer()->IsRunning()); 217146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 217246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 217346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)TEST_F(NetErrorHelperCoreAutoReloadTest, ShouldSuppressNonReloadableErrorPage) { 217446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) DoErrorLoad(net::ERR_ABORTED); 217546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_FALSE(core()->ShouldSuppressErrorPage(NetErrorHelperCore::MAIN_FRAME, 217646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) GURL(kFailedUrl))); 217746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 217846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 217946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)TEST_F(NetErrorHelperCoreAutoReloadTest, ShouldSuppressErrorPage) { 218046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // Set up the environment to test ShouldSuppressErrorPage: auto-reload is 218146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // enabled, an error page is loaded, and the auto-reload callback is running. 218246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) DoErrorLoad(net::ERR_CONNECTION_RESET); 218346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) timer()->Fire(); 218446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 218546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_FALSE(core()->ShouldSuppressErrorPage(NetErrorHelperCore::SUB_FRAME, 218646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) GURL(kFailedUrl))); 218746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_FALSE(core()->ShouldSuppressErrorPage(NetErrorHelperCore::MAIN_FRAME, 218846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) GURL("http://some.other.url"))); 218946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_TRUE(core()->ShouldSuppressErrorPage(NetErrorHelperCore::MAIN_FRAME, 219046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) GURL(kFailedUrl))); 219146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 219246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 219346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)TEST_F(NetErrorHelperCoreAutoReloadTest, HiddenAndShown) { 219446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) SetUpCore(true, true, true); 219546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) DoErrorLoad(net::ERR_CONNECTION_RESET); 219646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_TRUE(timer()->IsRunning()); 219746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnWasHidden(); 219846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_FALSE(timer()->IsRunning()); 219946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnWasShown(); 220046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_TRUE(timer()->IsRunning()); 220146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 220246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 220346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)TEST_F(NetErrorHelperCoreAutoReloadTest, HiddenWhileOnline) { 220446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) SetUpCore(true, true, true); 220546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->NetworkStateChanged(false); 220646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) DoErrorLoad(net::ERR_CONNECTION_RESET); 220746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_FALSE(timer()->IsRunning()); 220846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnWasHidden(); 220946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->NetworkStateChanged(true); 221046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_FALSE(timer()->IsRunning()); 221146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->NetworkStateChanged(false); 221246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnWasShown(); 221346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_FALSE(timer()->IsRunning()); 221446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->NetworkStateChanged(true); 221546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_TRUE(timer()->IsRunning()); 221646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->NetworkStateChanged(false); 221746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnWasHidden(); 221846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_FALSE(timer()->IsRunning()); 221946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->NetworkStateChanged(true); 2220a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_FALSE(timer()->IsRunning()); 222146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnWasShown(); 222246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_TRUE(timer()->IsRunning()); 222346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 222446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 222546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)TEST_F(NetErrorHelperCoreAutoReloadTest, ShownWhileNotReloading) { 222646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) SetUpCore(true, true, false); 222746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) DoErrorLoad(net::ERR_CONNECTION_RESET); 222846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_FALSE(timer()->IsRunning()); 222946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnWasShown(); 223046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_TRUE(timer()->IsRunning()); 2231a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 2232a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 223346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)class NetErrorHelperCoreHistogramTest 223446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) : public NetErrorHelperCoreAutoReloadTest { 2235cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) public: 2236cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual void SetUp() OVERRIDE { 223746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) NetErrorHelperCoreAutoReloadTest::SetUp(); 2238cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 2239cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 2240cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) static const char kCountAtStop[]; 2241cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) static const char kErrorAtStop[]; 2242cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) static const char kCountAtSuccess[]; 2243cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) static const char kErrorAtSuccess[]; 2244cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) static const char kErrorAtFirstSuccess[]; 2245cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 224603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) protected: 224703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) base::HistogramTester histogram_tester_; 2248cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}; 2249cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 2250cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)const char NetErrorHelperCoreHistogramTest::kCountAtStop[] = 2251cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) "Net.AutoReload.CountAtStop"; 2252cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)const char NetErrorHelperCoreHistogramTest::kErrorAtStop[] = 2253cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) "Net.AutoReload.ErrorAtStop"; 2254cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)const char NetErrorHelperCoreHistogramTest::kCountAtSuccess[] = 2255cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) "Net.AutoReload.CountAtSuccess"; 2256cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)const char NetErrorHelperCoreHistogramTest::kErrorAtSuccess[] = 2257cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) "Net.AutoReload.ErrorAtSuccess"; 2258cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)const char NetErrorHelperCoreHistogramTest::kErrorAtFirstSuccess[] = 2259cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) "Net.AutoReload.ErrorAtFirstSuccess"; 2260cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 2261cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Test that the success histograms are updated when auto-reload succeeds at the 2262cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// first attempt, and that the failure histograms are not updated. 2263cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)TEST_F(NetErrorHelperCoreHistogramTest, SuccessAtFirstAttempt) { 2264cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DoErrorLoad(net::ERR_CONNECTION_RESET); 2265cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) timer()->Fire(); 2266cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DoSuccessLoad(); 2267cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 2268cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // All of CountAtSuccess, ErrorAtSuccess, and ErrorAtFirstSuccess should 2269cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // reflect this successful load. The failure histograms should be unchanged. 227003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) histogram_tester_.ExpectTotalCount(kCountAtSuccess, 1); 227103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) histogram_tester_.ExpectTotalCount(kErrorAtSuccess, 1); 227203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) histogram_tester_.ExpectTotalCount(kErrorAtFirstSuccess, 1); 227303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) histogram_tester_.ExpectTotalCount(kCountAtStop, 0); 227403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) histogram_tester_.ExpectTotalCount(kErrorAtStop, 0); 2275cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 2276cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 2277cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Test that the success histograms are updated when auto-reload succeeds but 2278cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// not on the first attempt, and that the first-success histogram is not 2279cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// updated. 2280cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)TEST_F(NetErrorHelperCoreHistogramTest, SuccessAtSecondAttempt) { 2281cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DoErrorLoad(net::ERR_CONNECTION_RESET); 2282cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) timer()->Fire(); 228346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_TRUE(core()->ShouldSuppressErrorPage(NetErrorHelperCore::MAIN_FRAME, 2284cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) default_url())); 2285cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// DoErrorLoad(net::ERR_CONNECTION_RESET); 2286cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) timer()->Fire(); 2287cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DoSuccessLoad(); 2288cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 2289cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // CountAtSuccess and ErrorAtSuccess should reflect this successful load, but 2290cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // not ErrorAtFirstSuccess since it wasn't a first success. 229103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) histogram_tester_.ExpectTotalCount(kCountAtSuccess, 1); 229203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) histogram_tester_.ExpectTotalCount(kErrorAtSuccess, 1); 229303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) histogram_tester_.ExpectTotalCount(kErrorAtFirstSuccess, 0); 229403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) histogram_tester_.ExpectTotalCount(kCountAtStop, 0); 229503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) histogram_tester_.ExpectTotalCount(kErrorAtStop, 0); 2296cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 2297cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 2298cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Test that a user stop (caused by the user pressing the 'Stop' button) 2299cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// registers as an auto-reload failure if an auto-reload attempt is in flight. 2300cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Note that "user stop" is also caused by a cross-process navigation, for which 2301cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// the browser process will send an OnStop to the old process. 2302cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)TEST_F(NetErrorHelperCoreHistogramTest, UserStop) { 2303cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DoErrorLoad(net::ERR_CONNECTION_RESET); 2304cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) timer()->Fire(); 230546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 2306cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) NetErrorHelperCore::NON_ERROR_PAGE); 230746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStop(); 2308cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 2309cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // CountAtStop and ErrorAtStop should reflect the failure. 231003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) histogram_tester_.ExpectTotalCount(kCountAtSuccess, 0); 231103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) histogram_tester_.ExpectTotalCount(kErrorAtSuccess, 0); 231203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) histogram_tester_.ExpectTotalCount(kErrorAtFirstSuccess, 0); 231303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) histogram_tester_.ExpectTotalCount(kCountAtStop, 1); 231403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) histogram_tester_.ExpectTotalCount(kErrorAtStop, 1); 2315cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 2316cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 2317cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Test that a user stop (caused by the user pressing the 'Stop' button) 2318cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// registers as an auto-reload failure even if an auto-reload attempt has not 2319cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// been launched yet (i.e., if the timer is running, but no reload is in 2320cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// flight), because this means auto-reload didn't successfully replace the error 2321cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// page. 2322cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)TEST_F(NetErrorHelperCoreHistogramTest, OtherPageLoaded) { 2323cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DoErrorLoad(net::ERR_CONNECTION_RESET); 232446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 2325cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) NetErrorHelperCore::NON_ERROR_PAGE); 232646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStop(); 2327cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 232803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) histogram_tester_.ExpectTotalCount(kCountAtSuccess, 0); 232903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) histogram_tester_.ExpectTotalCount(kErrorAtSuccess, 0); 233003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) histogram_tester_.ExpectTotalCount(kErrorAtFirstSuccess, 0); 233103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) histogram_tester_.ExpectTotalCount(kCountAtStop, 1); 233203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) histogram_tester_.ExpectTotalCount(kErrorAtStop, 1); 2333cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 2334cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 2335cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Test that a commit of a different URL (caused by the user navigating to a 2336cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// different page) with an auto-reload attempt in flight registers as an 2337cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// auto-reload failure. 2338cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)TEST_F(NetErrorHelperCoreHistogramTest, OtherPageLoadedAfterTimerFires) { 2339cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const GURL kTestUrl("https://anotherurl"); 2340cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DoErrorLoad(net::ERR_CONNECTION_RESET); 2341cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) timer()->Fire(); 234246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 2343cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) NetErrorHelperCore::NON_ERROR_PAGE); 234446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, 2345cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) kTestUrl); 234646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); 2347cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 234803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) histogram_tester_.ExpectTotalCount(kCountAtSuccess, 0); 234903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) histogram_tester_.ExpectTotalCount(kErrorAtSuccess, 0); 235003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) histogram_tester_.ExpectTotalCount(kErrorAtFirstSuccess, 0); 235103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) histogram_tester_.ExpectTotalCount(kCountAtStop, 1); 235203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) histogram_tester_.ExpectTotalCount(kErrorAtStop, 1); 2353cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 2354cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 2355cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Test that a commit of the same URL with an auto-reload attempt in flight 2356cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// registers as an auto-reload success. 2357cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)TEST_F(NetErrorHelperCoreHistogramTest, SamePageLoadedAfterTimerFires) { 2358cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DoErrorLoad(net::ERR_CONNECTION_RESET); 2359cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) timer()->Fire(); 2360cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DoSuccessLoad(); 2361cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 236203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) histogram_tester_.ExpectTotalCount(kCountAtSuccess, 1); 236303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) histogram_tester_.ExpectTotalCount(kErrorAtSuccess, 1); 236403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) histogram_tester_.ExpectTotalCount(kErrorAtFirstSuccess, 1); 236503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) histogram_tester_.ExpectTotalCount(kCountAtStop, 0); 236603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) histogram_tester_.ExpectTotalCount(kErrorAtStop, 0); 2367cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 2368cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 2369cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)TEST_F(NetErrorHelperCoreHistogramTest, SamePageLoadedAfterLoadStarts) { 2370cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DoErrorLoad(net::ERR_CONNECTION_RESET); 2371cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) timer()->Fire(); 2372cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Autoreload attempt starts 237346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 2374cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) NetErrorHelperCore::NON_ERROR_PAGE); 2375cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // User does a manual reload 2376cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DoSuccessLoad(); 2377cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 237803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) histogram_tester_.ExpectTotalCount(kCountAtSuccess, 1); 237903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) histogram_tester_.ExpectTotalCount(kErrorAtSuccess, 1); 238003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) histogram_tester_.ExpectTotalCount(kErrorAtFirstSuccess, 1); 238103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) histogram_tester_.ExpectTotalCount(kCountAtStop, 0); 238203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) histogram_tester_.ExpectTotalCount(kErrorAtStop, 0); 2383cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 2384cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 2385cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// In this test case, the user presses the reload button manually after an 2386cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// auto-reload fails and the error page is suppressed. 2387cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)TEST_F(NetErrorHelperCoreHistogramTest, ErrorPageLoadedAfterTimerFires) { 2388cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DoErrorLoad(net::ERR_CONNECTION_RESET); 2389cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) timer()->Fire(); 239046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 2391cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) NetErrorHelperCore::NON_ERROR_PAGE); 239246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_TRUE(core()->ShouldSuppressErrorPage(NetErrorHelperCore::MAIN_FRAME, 2393cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) default_url())); 2394cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DoErrorLoad(net::ERR_CONNECTION_RESET); 2395cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 239603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) histogram_tester_.ExpectTotalCount(kCountAtSuccess, 0); 239703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) histogram_tester_.ExpectTotalCount(kErrorAtSuccess, 0); 239803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) histogram_tester_.ExpectTotalCount(kErrorAtFirstSuccess, 0); 239903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) histogram_tester_.ExpectTotalCount(kCountAtStop, 0); 240003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) histogram_tester_.ExpectTotalCount(kErrorAtStop, 0); 2401cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 2402cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 2403cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)TEST_F(NetErrorHelperCoreHistogramTest, SuccessPageLoadedBeforeTimerFires) { 2404cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DoErrorLoad(net::ERR_CONNECTION_RESET); 240546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, 2406cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) NetErrorHelperCore::NON_ERROR_PAGE); 240746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, 2408cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) GURL(kFailedHttpsUrl)); 2409cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 241003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) histogram_tester_.ExpectTotalCount(kCountAtSuccess, 0); 241103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) histogram_tester_.ExpectTotalCount(kErrorAtSuccess, 0); 241203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) histogram_tester_.ExpectTotalCount(kErrorAtFirstSuccess, 0); 241303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) histogram_tester_.ExpectTotalCount(kCountAtStop, 1); 241403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) histogram_tester_.ExpectTotalCount(kErrorAtStop, 1); 2415cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 2416cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 24170529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 24180529e5d033099cbfc42635f6f6183833b09dff6eBen MurdochTEST_F(NetErrorHelperCoreTest, ExplicitReloadSucceeds) { 24190529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch DoErrorLoad(net::ERR_CONNECTION_RESET); 24200529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch EXPECT_EQ(0, reload_count()); 242146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->ExecuteButtonPress(NetErrorHelperCore::RELOAD_BUTTON); 24220529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch EXPECT_EQ(1, reload_count()); 24230529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch} 24240529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 24250529e5d033099cbfc42635f6f6183833b09dff6eBen MurdochTEST_F(NetErrorHelperCoreTest, ExplicitLoadStaleSucceeds) { 24260529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch DoErrorLoad(net::ERR_CONNECTION_RESET); 24270529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch EXPECT_EQ(0, load_stale_count()); 242846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core()->ExecuteButtonPress(NetErrorHelperCore::LOAD_STALE_BUTTON); 24290529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch EXPECT_EQ(1, load_stale_count()); 24300529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch EXPECT_EQ(GURL(kFailedUrl), load_stale_url()); 24310529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch} 2432cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 2433cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} // namespace 2434