Index: chrome/renderer/net/net_error_helper_core_unittest.cc |
diff --git a/chrome/renderer/net/net_error_helper_core_unittest.cc b/chrome/renderer/net/net_error_helper_core_unittest.cc |
deleted file mode 100644 |
index 4ab23493ee959824298941e9548e23211e944845..0000000000000000000000000000000000000000 |
--- a/chrome/renderer/net/net_error_helper_core_unittest.cc |
+++ /dev/null |
@@ -1,2433 +0,0 @@ |
-// Copyright 2013 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "chrome/renderer/net/net_error_helper_core.h" |
- |
-#include <map> |
-#include <string> |
-#include <vector> |
- |
-#include "base/json/json_reader.h" |
-#include "base/json/json_writer.h" |
-#include "base/logging.h" |
-#include "base/metrics/statistics_recorder.h" |
-#include "base/strings/stringprintf.h" |
-#include "base/test/histogram_tester.h" |
-#include "base/timer/mock_timer.h" |
-#include "base/timer/timer.h" |
-#include "base/values.h" |
-#include "chrome/common/net/net_error_info.h" |
-#include "content/public/common/url_constants.h" |
-#include "net/base/net_errors.h" |
-#include "testing/gtest/include/gtest/gtest.h" |
-#include "third_party/WebKit/public/platform/WebURLError.h" |
-#include "url/gurl.h" |
- |
-namespace { |
- |
-using blink::WebURLError; |
-using chrome_common_net::DnsProbeStatus; |
-using chrome_common_net::DnsProbeStatusToString; |
- |
-const char kFailedUrl[] = "http://failed/"; |
-const char kFailedHttpsUrl[] = "https://failed/"; |
- |
-const char kNavigationCorrectionUrl[] = "http://navigation.corrections/"; |
-const char kLanguage[] = "en"; |
-const char kCountry[] = "us"; |
-const char kApiKey[] = "api_key"; |
-const char kSearchUrl[] = "http://www.google.com/search"; |
- |
-const char kSuggestedSearchTerms[] = "Happy Goats"; |
-const char kNavigationCorrectionEventId[] = "#007"; |
-const char kNavigationCorrectionFingerprint[] = "RandumStuff"; |
- |
-struct NavigationCorrection { |
- const char* correction_type; |
- const char* url_correction; |
- const char* click_type; |
- const char* click_data; |
- bool is_porn; |
- bool is_soft_porn; |
- |
- base::Value* ToValue() const { |
- base::DictionaryValue* dict = new base::DictionaryValue(); |
- dict->SetString("correctionType", correction_type); |
- dict->SetString("urlCorrection", url_correction); |
- dict->SetString("clickType", click_type); |
- dict->SetString("clickData", click_data); |
- dict->SetBoolean("isPorn", is_porn); |
- dict->SetBoolean("isSoftPorn", is_soft_porn); |
- return dict; |
- } |
-}; |
- |
-const NavigationCorrection kDefaultCorrections[] = { |
- {"reloadPage", kFailedUrl, "rld", "data1", false, false}, |
- {"urlCorrection", "http://somewhere_else/", "btn", "data2", false, false}, |
- {"contentOverlap", "http://pony_island/", "btn", "data3", false, false}, |
- |
- // Porn should be ignored. |
- {"emphasizedUrlCorrection", "http://porn/", "btn", "data4", true, false}, |
- {"sitemap", "http://more_porn/", "btn", "data5", false, true}, |
- |
- {"webSearchQuery", kSuggestedSearchTerms, "frm", "data6", false, false}, |
-}; |
- |
-std::string SuggestionsToResponse(const NavigationCorrection* corrections, |
- int num_corrections) { |
- base::ListValue* url_corrections = new base::ListValue(); |
- for (int i = 0; i < num_corrections; ++i) |
- url_corrections->Append(corrections[i].ToValue()); |
- |
- scoped_ptr<base::DictionaryValue> response(new base::DictionaryValue()); |
- response->Set("result.UrlCorrections", url_corrections); |
- response->SetString("result.eventId", kNavigationCorrectionEventId); |
- response->SetString("result.fingerprint", kNavigationCorrectionFingerprint); |
- |
- std::string json; |
- base::JSONWriter::Write(response.get(), &json); |
- return json; |
-} |
- |
-testing::AssertionResult StringValueEquals( |
- const base::DictionaryValue& dict, |
- const std::string& key, |
- const std::string& expected_value) { |
- std::string actual_value; |
- if (!dict.GetString(key, &actual_value)) |
- return testing::AssertionFailure() << key << " not found."; |
- if (actual_value != expected_value) { |
- return testing::AssertionFailure() |
- << "actual: " << actual_value << "\n expected: " << expected_value; |
- } |
- return testing::AssertionSuccess(); |
-} |
- |
-// Creates a string from an error that is used as a mock locally generated |
-// error page for that error. |
-std::string ErrorToString(const WebURLError& error, bool is_failed_post) { |
- return base::StringPrintf("(%s, %s, %i, %s)", |
- error.unreachableURL.string().utf8().c_str(), |
- error.domain.utf8().c_str(), error.reason, |
- is_failed_post ? "POST" : "NOT POST"); |
-} |
- |
-WebURLError ProbeError(DnsProbeStatus status) { |
- WebURLError error; |
- error.unreachableURL = GURL(kFailedUrl); |
- error.domain = blink::WebString::fromUTF8( |
- chrome_common_net::kDnsProbeErrorDomain); |
- error.reason = status; |
- return error; |
-} |
- |
-WebURLError NetError(net::Error net_error) { |
- WebURLError error; |
- error.unreachableURL = GURL(kFailedUrl); |
- error.domain = blink::WebString::fromUTF8(net::kErrorDomain); |
- error.reason = net_error; |
- return error; |
-} |
- |
-// Convenience functions that create an error string for a non-POST request. |
- |
-std::string ProbeErrorString(DnsProbeStatus status) { |
- return ErrorToString(ProbeError(status), false); |
-} |
- |
-std::string NetErrorString(net::Error net_error) { |
- return ErrorToString(NetError(net_error), false); |
-} |
- |
-class NetErrorHelperCoreTest : public testing::Test, |
- public NetErrorHelperCore::Delegate { |
- public: |
- NetErrorHelperCoreTest() : timer_(NULL), |
- update_count_(0), |
- error_html_update_count_(0), |
- reload_count_(0), |
- load_stale_count_(0), |
- enable_page_helper_functions_count_(0), |
- default_url_(GURL(kFailedUrl)), |
- error_url_(GURL(content::kUnreachableWebDataURL)), |
- tracking_request_count_(0) { |
- SetUpCore(false, false, true); |
- } |
- |
- virtual ~NetErrorHelperCoreTest() { |
- // No test finishes while an error page is being fetched. |
- EXPECT_FALSE(is_url_being_fetched()); |
- } |
- |
- virtual void SetUp() override { |
- base::StatisticsRecorder::Initialize(); |
- } |
- |
- void SetUpCore(bool auto_reload_enabled, |
- bool auto_reload_visible_only, |
- bool visible) { |
- // The old value of timer_, if any, will be freed by the old core_ being |
- // destructed, since core_ takes ownership of the timer. |
- timer_ = new base::MockTimer(false, false); |
- core_.reset(new NetErrorHelperCore(this, |
- auto_reload_enabled, |
- auto_reload_visible_only, |
- visible)); |
- core_->set_timer_for_testing(scoped_ptr<base::Timer>(timer_)); |
- } |
- |
- NetErrorHelperCore* core() { return core_.get(); } |
- |
- const GURL& url_being_fetched() const { return url_being_fetched_; } |
- bool is_url_being_fetched() const { return !url_being_fetched_.is_empty(); } |
- |
- int reload_count() const { |
- return reload_count_; |
- } |
- |
- int load_stale_count() const { |
- return load_stale_count_; |
- } |
- |
- const GURL& load_stale_url() const { |
- return load_stale_url_; |
- } |
- |
- const GURL& default_url() const { |
- return default_url_; |
- } |
- |
- const GURL& error_url() const { |
- return error_url_; |
- } |
- |
- int enable_page_helper_functions_count() const { |
- return enable_page_helper_functions_count_; |
- } |
- |
- const std::string& last_update_string() const { return last_update_string_; } |
- int update_count() const { return update_count_; } |
- |
- const std::string& last_error_html() const { return last_error_html_; } |
- int error_html_update_count() const { return error_html_update_count_; } |
- |
- const LocalizedError::ErrorPageParams* last_error_page_params() const { |
- return last_error_page_params_.get(); |
- } |
- |
- const GURL& last_tracking_url() const { return last_tracking_url_; } |
- const std::string& last_tracking_request_body() const { |
- return last_tracking_request_body_; |
- } |
- int tracking_request_count() const { return tracking_request_count_; } |
- |
- base::MockTimer* timer() { return timer_; } |
- |
- void NavigationCorrectionsLoadSuccess( |
- const NavigationCorrection* corrections, int num_corrections) { |
- NavigationCorrectionsLoadFinished( |
- SuggestionsToResponse(corrections, num_corrections)); |
- } |
- |
- void NavigationCorrectionsLoadFailure() { |
- NavigationCorrectionsLoadFinished(""); |
- } |
- |
- void NavigationCorrectionsLoadFinished(const std::string& result) { |
- url_being_fetched_ = GURL(); |
- core()->OnNavigationCorrectionsFetched(result, "en", false); |
- } |
- |
- void DoErrorLoad(net::Error error) { |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::NON_ERROR_PAGE); |
- std::string html; |
- core()->GetErrorHTML(NetErrorHelperCore::MAIN_FRAME, |
- NetError(error), false, &html); |
- EXPECT_FALSE(html.empty()); |
- EXPECT_EQ(NetErrorString(error), html); |
- |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::ERROR_PAGE); |
- core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, |
- error_url()); |
- core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); |
- } |
- |
- void DoSuccessLoad() { |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::NON_ERROR_PAGE); |
- core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, default_url()); |
- core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); |
- } |
- |
- void DoDnsProbe(chrome_common_net::DnsProbeStatus final_status) { |
- core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_STARTED); |
- core()->OnNetErrorInfo(final_status); |
- } |
- |
- void EnableNavigationCorrections() { |
- SetNavigationCorrectionURL(GURL(kNavigationCorrectionUrl)); |
- } |
- |
- void DisableNavigationCorrections() { |
- SetNavigationCorrectionURL(GURL()); |
- } |
- |
- void ExpectDefaultNavigationCorrections() const { |
- // Checks that the last error page params correspond to kDefaultSuggestions. |
- ASSERT_TRUE(last_error_page_params()); |
- EXPECT_TRUE(last_error_page_params()->suggest_reload); |
- EXPECT_EQ(2u, last_error_page_params()->override_suggestions->GetSize()); |
- EXPECT_EQ(GURL(kSearchUrl), last_error_page_params()->search_url); |
- EXPECT_EQ(kSuggestedSearchTerms, last_error_page_params()->search_terms); |
- } |
- |
- private: |
- void SetNavigationCorrectionURL(const GURL& navigation_correction_url) { |
- core()->OnSetNavigationCorrectionInfo(navigation_correction_url, |
- kLanguage, kCountry, kApiKey, |
- GURL(kSearchUrl)); |
- } |
- |
- // NetErrorHelperCore::Delegate implementation: |
- virtual void GenerateLocalizedErrorPage( |
- const WebURLError& error, |
- bool is_failed_post, |
- scoped_ptr<LocalizedError::ErrorPageParams> params, |
- bool* reload_button_shown, |
- bool* load_stale_button_shown, |
- std::string* html) const override { |
- last_error_page_params_.reset(params.release()); |
- *reload_button_shown = false; |
- *load_stale_button_shown = false; |
- *html = ErrorToString(error, is_failed_post); |
- } |
- |
- virtual void LoadErrorPageInMainFrame(const std::string& html, |
- const GURL& failed_url) override { |
- error_html_update_count_++; |
- last_error_html_ = html; |
- } |
- |
- virtual void EnablePageHelperFunctions() override { |
- enable_page_helper_functions_count_++; |
- } |
- |
- virtual void UpdateErrorPage(const WebURLError& error, |
- bool is_failed_post) override { |
- update_count_++; |
- last_error_page_params_.reset(NULL); |
- last_error_html_ = ErrorToString(error, is_failed_post); |
- } |
- |
- virtual void FetchNavigationCorrections( |
- const GURL& navigation_correction_url, |
- const std::string& navigation_correction_request_body) override { |
- EXPECT_TRUE(url_being_fetched_.is_empty()); |
- EXPECT_TRUE(request_body_.empty()); |
- EXPECT_EQ(GURL(kNavigationCorrectionUrl), navigation_correction_url); |
- |
- url_being_fetched_ = navigation_correction_url; |
- request_body_ = navigation_correction_request_body; |
- |
- // Check the body of the request. |
- |
- base::JSONReader reader; |
- scoped_ptr<base::Value> parsed_body(reader.Read( |
- navigation_correction_request_body)); |
- ASSERT_TRUE(parsed_body); |
- base::DictionaryValue* dict = NULL; |
- ASSERT_TRUE(parsed_body->GetAsDictionary(&dict)); |
- |
- EXPECT_TRUE(StringValueEquals(*dict, "params.urlQuery", kFailedUrl)); |
- EXPECT_TRUE(StringValueEquals(*dict, "params.language", kLanguage)); |
- EXPECT_TRUE(StringValueEquals(*dict, "params.originCountry", kCountry)); |
- EXPECT_TRUE(StringValueEquals(*dict, "params.key", kApiKey)); |
- } |
- |
- virtual void CancelFetchNavigationCorrections() override { |
- url_being_fetched_ = GURL(); |
- request_body_.clear(); |
- } |
- |
- virtual void ReloadPage() override { |
- reload_count_++; |
- } |
- |
- virtual void LoadPageFromCache(const GURL& error_url) override { |
- load_stale_count_++; |
- load_stale_url_ = error_url; |
- } |
- |
- virtual void SendTrackingRequest( |
- const GURL& tracking_url, |
- const std::string& tracking_request_body) override { |
- last_tracking_url_ = tracking_url; |
- last_tracking_request_body_ = tracking_request_body; |
- tracking_request_count_++; |
- |
- // Check the body of the request. |
- |
- base::JSONReader reader; |
- scoped_ptr<base::Value> parsed_body(reader.Read(tracking_request_body)); |
- ASSERT_TRUE(parsed_body); |
- base::DictionaryValue* dict = NULL; |
- ASSERT_TRUE(parsed_body->GetAsDictionary(&dict)); |
- |
- EXPECT_TRUE(StringValueEquals(*dict, "params.originalUrlQuery", |
- kFailedUrl)); |
- EXPECT_TRUE(StringValueEquals(*dict, "params.language", kLanguage)); |
- EXPECT_TRUE(StringValueEquals(*dict, "params.originCountry", kCountry)); |
- EXPECT_TRUE(StringValueEquals(*dict, "params.key", kApiKey)); |
- } |
- |
- base::MockTimer* timer_; |
- |
- scoped_ptr<NetErrorHelperCore> core_; |
- |
- GURL url_being_fetched_; |
- std::string request_body_; |
- |
- // Contains the information passed to the last call to UpdateErrorPage, as a |
- // string. |
- std::string last_update_string_; |
- // Number of times |last_update_string_| has been changed. |
- int update_count_; |
- |
- // Contains the HTML set by the last call to LoadErrorPageInMainFrame. |
- std::string last_error_html_; |
- // Number of times |last_error_html_| has been changed. |
- int error_html_update_count_; |
- |
- // Mutable because GenerateLocalizedErrorPage is const. |
- mutable scoped_ptr<LocalizedError::ErrorPageParams> last_error_page_params_; |
- |
- int reload_count_; |
- int load_stale_count_; |
- GURL load_stale_url_; |
- |
- int enable_page_helper_functions_count_; |
- |
- const GURL default_url_; |
- const GURL error_url_; |
- |
- GURL last_tracking_url_; |
- std::string last_tracking_request_body_; |
- int tracking_request_count_; |
-}; |
- |
-//------------------------------------------------------------------------------ |
-// Basic tests that don't update the error page for probes or load navigation |
-// corrections. |
-//------------------------------------------------------------------------------ |
- |
-TEST_F(NetErrorHelperCoreTest, Null) { |
-} |
- |
-TEST_F(NetErrorHelperCoreTest, SuccessfulPageLoad) { |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::NON_ERROR_PAGE); |
- core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, default_url()); |
- core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); |
- EXPECT_EQ(0, update_count()); |
- EXPECT_EQ(0, error_html_update_count()); |
-} |
- |
-TEST_F(NetErrorHelperCoreTest, SuccessfulPageLoadWithNavigationCorrections) { |
- EnableNavigationCorrections(); |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::NON_ERROR_PAGE); |
- core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, default_url()); |
- core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); |
- EXPECT_EQ(0, update_count()); |
- EXPECT_EQ(0, error_html_update_count()); |
-} |
- |
-TEST_F(NetErrorHelperCoreTest, MainFrameNonDnsError) { |
- // Original page starts loading. |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::NON_ERROR_PAGE); |
- |
- // It fails, and an error page is requested. |
- std::string html; |
- core()->GetErrorHTML(NetErrorHelperCore::MAIN_FRAME, |
- NetError(net::ERR_CONNECTION_RESET), false, &html); |
- // Should have returned a local error page. |
- EXPECT_FALSE(html.empty()); |
- EXPECT_EQ(NetErrorString(net::ERR_CONNECTION_RESET), html); |
- |
- // Error page loads. |
- EXPECT_EQ(0, enable_page_helper_functions_count()); |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::ERROR_PAGE); |
- core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); |
- core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); |
- EXPECT_EQ(0, update_count()); |
- EXPECT_EQ(0, error_html_update_count()); |
- EXPECT_EQ(1, enable_page_helper_functions_count()); |
-} |
- |
-TEST_F(NetErrorHelperCoreTest, MainFrameNonDnsErrorWithCorrections) { |
- EnableNavigationCorrections(); |
- |
- // Original page starts loading. |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::NON_ERROR_PAGE); |
- |
- // It fails, and an error page is requested. |
- std::string html; |
- core()->GetErrorHTML(NetErrorHelperCore::MAIN_FRAME, |
- NetError(net::ERR_CONNECTION_RESET), false, &html); |
- // Should have returned a local error page. |
- EXPECT_FALSE(html.empty()); |
- EXPECT_EQ(NetErrorString(net::ERR_CONNECTION_RESET), html); |
- |
- // Error page loads. |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::ERROR_PAGE); |
- core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); |
- core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); |
- EXPECT_EQ(0, update_count()); |
- EXPECT_EQ(0, error_html_update_count()); |
-} |
- |
-// Much like above tests, but with a bunch of spurious DNS status messages that |
-// should have no effect. |
-TEST_F(NetErrorHelperCoreTest, MainFrameNonDnsErrorSpuriousStatus) { |
- // Original page starts loading. |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::NON_ERROR_PAGE); |
- core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN); |
- |
- // It fails, and an error page is requested. |
- std::string html; |
- core()->GetErrorHTML(NetErrorHelperCore::MAIN_FRAME, |
- NetError(net::ERR_CONNECTION_RESET), |
- false, &html); |
- core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN); |
- |
- // Should have returned a local error page. |
- EXPECT_FALSE(html.empty()); |
- EXPECT_EQ(NetErrorString(net::ERR_CONNECTION_RESET), html); |
- |
- // Error page loads. |
- |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::ERROR_PAGE); |
- core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN); |
- |
- core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); |
- core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN); |
- |
- core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); |
- core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN); |
- |
- EXPECT_EQ(0, update_count()); |
- EXPECT_EQ(0, error_html_update_count()); |
-} |
- |
-TEST_F(NetErrorHelperCoreTest, SubFrameDnsError) { |
- // Original page starts loading. |
- core()->OnStartLoad(NetErrorHelperCore::SUB_FRAME, |
- NetErrorHelperCore::NON_ERROR_PAGE); |
- |
- // It fails, and an error page is requested. |
- std::string html; |
- core()->GetErrorHTML(NetErrorHelperCore::SUB_FRAME, |
- NetError(net::ERR_NAME_NOT_RESOLVED), |
- false, &html); |
- // Should have returned a local error page. |
- EXPECT_EQ(NetErrorString(net::ERR_NAME_NOT_RESOLVED), html); |
- |
- // Error page loads. |
- core()->OnStartLoad(NetErrorHelperCore::SUB_FRAME, |
- NetErrorHelperCore::ERROR_PAGE); |
- core()->OnCommitLoad(NetErrorHelperCore::SUB_FRAME, error_url()); |
- core()->OnFinishLoad(NetErrorHelperCore::SUB_FRAME); |
- EXPECT_EQ(0, update_count()); |
- EXPECT_EQ(0, error_html_update_count()); |
-} |
- |
-TEST_F(NetErrorHelperCoreTest, SubFrameDnsErrorWithCorrections) { |
- EnableNavigationCorrections(); |
- |
- // Original page starts loading. |
- core()->OnStartLoad(NetErrorHelperCore::SUB_FRAME, |
- NetErrorHelperCore::NON_ERROR_PAGE); |
- |
- // It fails, and an error page is requested. |
- std::string html; |
- core()->GetErrorHTML(NetErrorHelperCore::SUB_FRAME, |
- NetError(net::ERR_NAME_NOT_RESOLVED), |
- false, &html); |
- // Should have returned a local error page. |
- EXPECT_EQ(NetErrorString(net::ERR_NAME_NOT_RESOLVED), html); |
- |
- // Error page loads. |
- core()->OnStartLoad(NetErrorHelperCore::SUB_FRAME, |
- NetErrorHelperCore::ERROR_PAGE); |
- core()->OnCommitLoad(NetErrorHelperCore::SUB_FRAME, error_url()); |
- core()->OnFinishLoad(NetErrorHelperCore::SUB_FRAME); |
- EXPECT_EQ(0, update_count()); |
- EXPECT_EQ(0, error_html_update_count()); |
-} |
- |
-// Much like above tests, but with a bunch of spurious DNS status messages that |
-// should have no effect. |
-TEST_F(NetErrorHelperCoreTest, SubFrameDnsErrorSpuriousStatus) { |
- // Original page starts loading. |
- core()->OnStartLoad(NetErrorHelperCore::SUB_FRAME, |
- NetErrorHelperCore::NON_ERROR_PAGE); |
- core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN); |
- |
- // It fails, and an error page is requested. |
- std::string html; |
- core()->GetErrorHTML(NetErrorHelperCore::SUB_FRAME, |
- NetError(net::ERR_NAME_NOT_RESOLVED), |
- false, &html); |
- core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN); |
- |
- // Should have returned a local error page. |
- EXPECT_EQ(NetErrorString(net::ERR_NAME_NOT_RESOLVED), html); |
- |
- // Error page loads. |
- |
- core()->OnStartLoad(NetErrorHelperCore::SUB_FRAME, |
- NetErrorHelperCore::ERROR_PAGE); |
- core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN); |
- |
- core()->OnCommitLoad(NetErrorHelperCore::SUB_FRAME, error_url()); |
- core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN); |
- |
- core()->OnFinishLoad(NetErrorHelperCore::SUB_FRAME); |
- core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN); |
- |
- EXPECT_EQ(0, update_count()); |
- EXPECT_EQ(0, error_html_update_count()); |
-} |
- |
-//------------------------------------------------------------------------------ |
-// Tests for updating the error page in response to DNS probe results. None |
-// of these have navigation corrections enabled. |
-//------------------------------------------------------------------------------ |
- |
-// Test case where the error page finishes loading before receiving any DNS |
-// probe messages. |
-TEST_F(NetErrorHelperCoreTest, FinishedBeforeProbe) { |
- // Original page starts loading. |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::NON_ERROR_PAGE); |
- |
- // It fails, and an error page is requested. |
- std::string html; |
- core()->GetErrorHTML(NetErrorHelperCore::MAIN_FRAME, |
- NetError(net::ERR_NAME_NOT_RESOLVED), |
- false, &html); |
- // Should have returned a local error page indicating a probe may run. |
- EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_POSSIBLE), html); |
- |
- // Error page loads. |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::ERROR_PAGE); |
- core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); |
- core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); |
- EXPECT_EQ(0, update_count()); |
- |
- core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_STARTED); |
- EXPECT_EQ(1, update_count()); |
- EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_STARTED), |
- last_error_html()); |
- |
- core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN); |
- EXPECT_EQ(2, update_count()); |
- EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN), |
- last_error_html()); |
- |
- // Any other probe updates should be ignored. |
- core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_STARTED); |
- core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN); |
- EXPECT_EQ(2, update_count()); |
- EXPECT_EQ(0, error_html_update_count()); |
-} |
- |
-// Same as above, but the probe is not run. |
-TEST_F(NetErrorHelperCoreTest, FinishedBeforeProbeNotRun) { |
- // Original page starts loading. |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::NON_ERROR_PAGE); |
- |
- // It fails, and an error page is requested. |
- std::string html; |
- core()->GetErrorHTML(NetErrorHelperCore::MAIN_FRAME, |
- NetError(net::ERR_NAME_NOT_RESOLVED), |
- false, &html); |
- // Should have returned a local error page indicating a probe may run. |
- EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_POSSIBLE), html); |
- |
- // Error page loads. |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::ERROR_PAGE); |
- core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); |
- core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); |
- EXPECT_EQ(0, update_count()); |
- |
- // When the not run status arrives, the page should revert to the normal dns |
- // error page. |
- core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_NOT_RUN); |
- EXPECT_EQ(1, update_count()); |
- EXPECT_EQ(NetErrorString(net::ERR_NAME_NOT_RESOLVED), last_error_html()); |
- |
- // Any other probe updates should be ignored. |
- core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_STARTED); |
- core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN); |
- EXPECT_EQ(1, update_count()); |
- EXPECT_EQ(0, error_html_update_count()); |
-} |
- |
-// Same as above, but the probe result is inconclusive. |
-TEST_F(NetErrorHelperCoreTest, FinishedBeforeProbeInconclusive) { |
- // Original page starts loading. |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::NON_ERROR_PAGE); |
- |
- // It fails, and an error page is requested. |
- std::string html; |
- core()->GetErrorHTML(NetErrorHelperCore::MAIN_FRAME, |
- NetError(net::ERR_NAME_NOT_RESOLVED), |
- false, &html); |
- // Should have returned a local error page indicating a probe may run. |
- EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_POSSIBLE), html); |
- |
- // Error page loads. |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::ERROR_PAGE); |
- core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); |
- core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); |
- EXPECT_EQ(0, update_count()); |
- |
- core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_STARTED); |
- EXPECT_EQ(1, update_count()); |
- EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_STARTED), |
- last_error_html()); |
- |
- // When the inconclusive status arrives, the page should revert to the normal |
- // dns error page. |
- core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_INCONCLUSIVE); |
- EXPECT_EQ(2, update_count()); |
- EXPECT_EQ(NetErrorString(net::ERR_NAME_NOT_RESOLVED), last_error_html()); |
- |
- // Any other probe updates should be ignored. |
- core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_INCONCLUSIVE); |
- EXPECT_EQ(2, update_count()); |
- EXPECT_EQ(0, error_html_update_count()); |
-} |
- |
-// Same as above, but the probe result is no internet. |
-TEST_F(NetErrorHelperCoreTest, FinishedBeforeProbeNoInternet) { |
- // Original page starts loading. |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::NON_ERROR_PAGE); |
- |
- // It fails, and an error page is requested. |
- std::string html; |
- core()->GetErrorHTML(NetErrorHelperCore::MAIN_FRAME, |
- NetError(net::ERR_NAME_NOT_RESOLVED), |
- false, &html); |
- // Should have returned a local error page indicating a probe may run. |
- EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_POSSIBLE), html); |
- |
- // Error page loads. |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::ERROR_PAGE); |
- core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); |
- core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); |
- EXPECT_EQ(0, update_count()); |
- |
- core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_STARTED); |
- EXPECT_EQ(1, update_count()); |
- EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_STARTED), |
- last_error_html()); |
- |
- // When the inconclusive status arrives, the page should revert to the normal |
- // dns error page. |
- core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NO_INTERNET); |
- EXPECT_EQ(2, update_count()); |
- EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_FINISHED_NO_INTERNET), |
- last_error_html()); |
- |
- // Any other probe updates should be ignored. |
- core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NO_INTERNET); |
- EXPECT_EQ(2, update_count()); |
- EXPECT_EQ(0, error_html_update_count()); |
-} |
- |
-// Same as above, but the probe result is bad config. |
-TEST_F(NetErrorHelperCoreTest, FinishedBeforeProbeBadConfig) { |
- // Original page starts loading. |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::NON_ERROR_PAGE); |
- |
- // It fails, and an error page is requested. |
- std::string html; |
- core()->GetErrorHTML(NetErrorHelperCore::MAIN_FRAME, |
- NetError(net::ERR_NAME_NOT_RESOLVED), |
- false, &html); |
- // Should have returned a local error page indicating a probe may run. |
- EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_POSSIBLE), html); |
- |
- // Error page loads. |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::ERROR_PAGE); |
- core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); |
- core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); |
- EXPECT_EQ(0, update_count()); |
- |
- core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_STARTED); |
- EXPECT_EQ(1, update_count()); |
- EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_STARTED), |
- last_error_html()); |
- |
- // When the inconclusive status arrives, the page should revert to the normal |
- // dns error page. |
- core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_BAD_CONFIG); |
- EXPECT_EQ(2, update_count()); |
- EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_FINISHED_BAD_CONFIG), |
- last_error_html()); |
- |
- // Any other probe updates should be ignored. |
- core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_BAD_CONFIG); |
- EXPECT_EQ(2, update_count()); |
- EXPECT_EQ(0, error_html_update_count()); |
-} |
- |
-// Test case where the error page finishes loading after receiving the start |
-// DNS probe message. |
-TEST_F(NetErrorHelperCoreTest, FinishedAfterStartProbe) { |
- // Original page starts loading. |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::NON_ERROR_PAGE); |
- |
- // It fails, and an error page is requested. |
- std::string html; |
- core()->GetErrorHTML(NetErrorHelperCore::MAIN_FRAME, |
- NetError(net::ERR_NAME_NOT_RESOLVED), |
- false, &html); |
- // Should have returned a local error page indicating a probe may run. |
- EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_POSSIBLE), html); |
- |
- // Error page loads. |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::ERROR_PAGE); |
- core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); |
- |
- // Nothing should be done when a probe status comes in before loading |
- // finishes. |
- core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_STARTED); |
- EXPECT_EQ(0, update_count()); |
- |
- // When loading finishes, however, the buffered probe status should be sent |
- // to the page. |
- core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); |
- EXPECT_EQ(1, update_count()); |
- EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_STARTED), |
- last_error_html()); |
- |
- // Should update the page again when the probe result comes in. |
- core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN); |
- EXPECT_EQ(2, update_count()); |
- EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN), |
- last_error_html()); |
- |
- // Any other probe updates should be ignored. |
- core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_NOT_RUN); |
- EXPECT_EQ(2, update_count()); |
-} |
- |
-// Test case where the error page finishes loading before receiving any DNS |
-// probe messages and the request is a POST. |
-TEST_F(NetErrorHelperCoreTest, FinishedBeforeProbePost) { |
- // Original page starts loading. |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::NON_ERROR_PAGE); |
- |
- // It fails, and an error page is requested. |
- std::string html; |
- core()->GetErrorHTML(NetErrorHelperCore::MAIN_FRAME, |
- NetError(net::ERR_NAME_NOT_RESOLVED), |
- true, &html); |
- // Should have returned a local error page indicating a probe may run. |
- EXPECT_EQ(ErrorToString( |
- ProbeError(chrome_common_net::DNS_PROBE_POSSIBLE), |
- true), |
- html); |
- |
- // Error page loads. |
- EXPECT_EQ(0, enable_page_helper_functions_count()); |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::ERROR_PAGE); |
- core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); |
- core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); |
- EXPECT_EQ(0, update_count()); |
- EXPECT_EQ(1, enable_page_helper_functions_count()); |
- |
- core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_STARTED); |
- EXPECT_EQ(1, update_count()); |
- EXPECT_EQ(ErrorToString( |
- ProbeError(chrome_common_net::DNS_PROBE_STARTED), true), |
- last_error_html()); |
- |
- core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN); |
- EXPECT_EQ(2, update_count()); |
- EXPECT_EQ(ErrorToString( |
- ProbeError(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN), |
- true), |
- last_error_html()); |
- EXPECT_EQ(0, error_html_update_count()); |
-} |
- |
-// Test case where the probe finishes before the page is committed. |
-TEST_F(NetErrorHelperCoreTest, ProbeFinishesEarly) { |
- // Original page starts loading. |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::NON_ERROR_PAGE); |
- |
- // It fails, and an error page is requested. |
- std::string html; |
- core()->GetErrorHTML(NetErrorHelperCore::MAIN_FRAME, |
- NetError(net::ERR_NAME_NOT_RESOLVED), |
- false, &html); |
- // Should have returned a local error page indicating a probe may run. |
- EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_POSSIBLE), html); |
- |
- // Error page starts loading. |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::ERROR_PAGE); |
- |
- // Nothing should be done when the probe statuses come in before loading |
- // finishes. |
- core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_STARTED); |
- core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN); |
- EXPECT_EQ(0, update_count()); |
- |
- core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); |
- EXPECT_EQ(0, update_count()); |
- |
- // When loading finishes, however, the buffered probe status should be sent |
- // to the page. |
- core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); |
- EXPECT_EQ(1, update_count()); |
- EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN), |
- last_error_html()); |
- |
- // Any other probe updates should be ignored. |
- core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_STARTED); |
- core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN); |
- EXPECT_EQ(1, update_count()); |
-} |
- |
-// Test case where one error page loads completely before a new navigation |
-// results in another error page. Probes are run for both pages. |
-TEST_F(NetErrorHelperCoreTest, TwoErrorsWithProbes) { |
- // Original page starts loading. |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::NON_ERROR_PAGE); |
- |
- // It fails, and an error page is requested. |
- std::string html; |
- core()->GetErrorHTML(NetErrorHelperCore::MAIN_FRAME, |
- NetError(net::ERR_NAME_NOT_RESOLVED), |
- false, &html); |
- // Should have returned a local error page indicating a probe may run. |
- EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_POSSIBLE), html); |
- |
- // Error page loads. |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::ERROR_PAGE); |
- core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); |
- core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); |
- |
- // Probe results come in. |
- core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_STARTED); |
- core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN); |
- EXPECT_EQ(2, update_count()); |
- EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN), |
- last_error_html()); |
- |
- // The process starts again. |
- |
- // Normal page starts loading. |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::NON_ERROR_PAGE); |
- |
- // It fails, and an error page is requested. |
- core()->GetErrorHTML(NetErrorHelperCore::MAIN_FRAME, |
- NetError(net::ERR_NAME_NOT_RESOLVED), |
- false, &html); |
- // Should have returned a local error page indicating a probe may run. |
- EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_POSSIBLE), html); |
- |
- // Error page loads. |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::ERROR_PAGE); |
- core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); |
- core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); |
- EXPECT_EQ(2, update_count()); |
- |
- core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_STARTED); |
- EXPECT_EQ(3, update_count()); |
- EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_STARTED), |
- last_error_html()); |
- |
- // The probe returns a different result this time. |
- core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NO_INTERNET); |
- EXPECT_EQ(4, update_count()); |
- EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_FINISHED_NO_INTERNET), |
- last_error_html()); |
- EXPECT_EQ(0, error_html_update_count()); |
-} |
- |
-// Test case where one error page loads completely before a new navigation |
-// results in another error page. Probe results for the first probe are only |
-// received after the second load starts, but before it commits. |
-TEST_F(NetErrorHelperCoreTest, TwoErrorsWithProbesAfterSecondStarts) { |
- // Original page starts loading. |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::NON_ERROR_PAGE); |
- |
- // It fails, and an error page is requested. |
- std::string html; |
- core()->GetErrorHTML(NetErrorHelperCore::MAIN_FRAME, |
- NetError(net::ERR_NAME_NOT_RESOLVED), |
- false, &html); |
- // Should have returned a local error page indicating a probe may run. |
- EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_POSSIBLE), html); |
- |
- // Error page loads. |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::ERROR_PAGE); |
- core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); |
- core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); |
- |
- // The process starts again. |
- |
- // Normal page starts loading. |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::NON_ERROR_PAGE); |
- |
- // It fails, and an error page is requested. |
- core()->GetErrorHTML(NetErrorHelperCore::MAIN_FRAME, |
- NetError(net::ERR_NAME_NOT_RESOLVED), |
- false, &html); |
- // Should have returned a local error page indicating a probe may run. |
- EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_POSSIBLE), html); |
- |
- // Error page starts to load. |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::ERROR_PAGE); |
- |
- // Probe results come in, and the first page is updated. |
- core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_STARTED); |
- core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN); |
- EXPECT_EQ(2, update_count()); |
- EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN), |
- last_error_html()); |
- |
- // Second page finishes loading, and is updated using the same probe result. |
- core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); |
- core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); |
- EXPECT_EQ(3, update_count()); |
- EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN), |
- last_error_html()); |
- |
- // Other probe results should be ignored. |
- core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NO_INTERNET); |
- EXPECT_EQ(3, update_count()); |
- EXPECT_EQ(0, error_html_update_count()); |
-} |
- |
-// Same as above, but a new page is loaded before the error page commits. |
-TEST_F(NetErrorHelperCoreTest, ErrorPageLoadInterrupted) { |
- // Original page starts loading. |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::NON_ERROR_PAGE); |
- |
- // It fails, and an error page is requested. |
- std::string html; |
- core()->GetErrorHTML(NetErrorHelperCore::MAIN_FRAME, |
- NetError(net::ERR_NAME_NOT_RESOLVED), |
- false, &html); |
- // Should have returned a local error page indicating a probe may run. |
- EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_POSSIBLE), html); |
- |
- // Error page starts loading. |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::ERROR_PAGE); |
- // Probe statuses come in, but should be ignored. |
- core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_STARTED); |
- core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN); |
- EXPECT_EQ(0, update_count()); |
- |
- // A new navigation begins while the error page is loading. |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::NON_ERROR_PAGE); |
- |
- // And fails. |
- core()->GetErrorHTML(NetErrorHelperCore::MAIN_FRAME, |
- NetError(net::ERR_NAME_NOT_RESOLVED), |
- false, &html); |
- // Should have returned a local error page indicating a probe may run. |
- EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_POSSIBLE), html); |
- |
- // Error page finishes loading. |
- core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); |
- core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); |
- |
- // Probe results come in. |
- core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_STARTED); |
- EXPECT_EQ(1, update_count()); |
- EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_STARTED), |
- last_error_html()); |
- |
- core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NO_INTERNET); |
- EXPECT_EQ(2, update_count()); |
- EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_FINISHED_NO_INTERNET), |
- last_error_html()); |
- EXPECT_EQ(0, error_html_update_count()); |
-} |
- |
-//------------------------------------------------------------------------------ |
-// Navigation correction tests. |
-//------------------------------------------------------------------------------ |
- |
-// Check that corrections are not used for HTTPS URLs. |
-TEST_F(NetErrorHelperCoreTest, NoCorrectionsForHttps) { |
- // Original page starts loading. |
- EnableNavigationCorrections(); |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::NON_ERROR_PAGE); |
- |
- // The HTTPS page fails to load. |
- std::string html; |
- blink::WebURLError error = NetError(net::ERR_NAME_NOT_RESOLVED); |
- error.unreachableURL = GURL(kFailedHttpsUrl); |
- core()->GetErrorHTML(NetErrorHelperCore::MAIN_FRAME, error, false, &html); |
- |
- blink::WebURLError probe_error = |
- ProbeError(chrome_common_net::DNS_PROBE_POSSIBLE); |
- probe_error.unreachableURL = GURL(kFailedHttpsUrl); |
- EXPECT_EQ(ErrorToString(probe_error, false), html); |
- EXPECT_FALSE(is_url_being_fetched()); |
- EXPECT_FALSE(last_error_page_params()); |
- |
- // The blank page loads, no error page is loaded. |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::ERROR_PAGE); |
- core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); |
- core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); |
- EXPECT_FALSE(is_url_being_fetched()); |
- EXPECT_FALSE(last_error_page_params()); |
- |
- // Page is updated in response to DNS probes as normal. |
- EXPECT_EQ(0, update_count()); |
- core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_STARTED); |
- core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN); |
- EXPECT_EQ(2, update_count()); |
- EXPECT_FALSE(last_error_page_params()); |
- blink::WebURLError final_probe_error = |
- ProbeError(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN); |
- final_probe_error.unreachableURL = GURL(kFailedHttpsUrl); |
- EXPECT_EQ(ErrorToString(final_probe_error, false), last_error_html()); |
-} |
- |
-// The blank page loads, then the navigation corrections request succeeds and is |
-// loaded. Then the probe results come in. |
-TEST_F(NetErrorHelperCoreTest, CorrectionsReceivedBeforeProbe) { |
- // Original page starts loading. |
- EnableNavigationCorrections(); |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::NON_ERROR_PAGE); |
- |
- // It fails. |
- std::string html; |
- core()->GetErrorHTML(NetErrorHelperCore::MAIN_FRAME, |
- NetError(net::ERR_NAME_NOT_RESOLVED), |
- false, &html); |
- EXPECT_TRUE(html.empty()); |
- EXPECT_FALSE(is_url_being_fetched()); |
- EXPECT_FALSE(last_error_page_params()); |
- |
- // The blank page loads. |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::ERROR_PAGE); |
- core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); |
- |
- // Corrections retrieval starts when the error page finishes loading. |
- EXPECT_FALSE(is_url_being_fetched()); |
- EXPECT_FALSE(last_error_page_params()); |
- core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); |
- EXPECT_TRUE(is_url_being_fetched()); |
- EXPECT_FALSE(last_error_page_params()); |
- |
- // Corrections are retrieved. |
- NavigationCorrectionsLoadSuccess(kDefaultCorrections, |
- arraysize(kDefaultCorrections)); |
- EXPECT_EQ(1, error_html_update_count()); |
- EXPECT_EQ(NetErrorString(net::ERR_NAME_NOT_RESOLVED), last_error_html()); |
- ExpectDefaultNavigationCorrections(); |
- EXPECT_FALSE(is_url_being_fetched()); |
- |
- // Corrections load. |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::ERROR_PAGE); |
- core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); |
- core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); |
- |
- // Any probe statuses should be ignored. |
- core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_STARTED); |
- core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN); |
- |
- EXPECT_EQ(0, update_count()); |
- EXPECT_EQ(1, error_html_update_count()); |
-} |
- |
-// The blank page finishes loading, then probe results come in, and then |
-// the navigation corrections request succeeds. |
-TEST_F(NetErrorHelperCoreTest, CorrectionsRetrievedAfterProbes) { |
- // Original page starts loading. |
- EnableNavigationCorrections(); |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::NON_ERROR_PAGE); |
- |
- // It fails, and corrections are requested. |
- std::string html; |
- core()->GetErrorHTML(NetErrorHelperCore::MAIN_FRAME, |
- NetError(net::ERR_NAME_NOT_RESOLVED), |
- false, &html); |
- EXPECT_TRUE(html.empty()); |
- |
- // The blank page loads. |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::ERROR_PAGE); |
- core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); |
- core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); |
- EXPECT_TRUE(is_url_being_fetched()); |
- EXPECT_FALSE(last_error_page_params()); |
- |
- // Probe statuses should be ignored. |
- core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_STARTED); |
- core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN); |
- EXPECT_EQ(0, update_count()); |
- EXPECT_EQ(0, error_html_update_count()); |
- EXPECT_FALSE(last_error_page_params()); |
- |
- // Corrections are retrieved. |
- EXPECT_TRUE(is_url_being_fetched()); |
- NavigationCorrectionsLoadSuccess(kDefaultCorrections, |
- arraysize(kDefaultCorrections)); |
- EXPECT_EQ(1, error_html_update_count()); |
- EXPECT_EQ(NetErrorString(net::ERR_NAME_NOT_RESOLVED), last_error_html()); |
- ExpectDefaultNavigationCorrections(); |
- EXPECT_FALSE(is_url_being_fetched()); |
- |
- // Corrections load. |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::ERROR_PAGE); |
- core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); |
- core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); |
- EXPECT_EQ(1, error_html_update_count()); |
- EXPECT_EQ(0, update_count()); |
-} |
- |
-// The corrections request fails and then the error page loads for an error that |
-// does not trigger DNS probes. |
-TEST_F(NetErrorHelperCoreTest, CorrectionsFailLoadNoProbes) { |
- // Original page starts loading. |
- EnableNavigationCorrections(); |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::NON_ERROR_PAGE); |
- |
- // It fails, and corrections are requested. |
- std::string html; |
- core()->GetErrorHTML(NetErrorHelperCore::MAIN_FRAME, |
- NetError(net::ERR_CONNECTION_FAILED), |
- false, &html); |
- EXPECT_TRUE(html.empty()); |
- |
- // The blank page loads. |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::ERROR_PAGE); |
- core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); |
- core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); |
- |
- // Corrections request fails, final error page is shown. |
- EXPECT_TRUE(is_url_being_fetched()); |
- NavigationCorrectionsLoadFailure(); |
- EXPECT_EQ(1, error_html_update_count()); |
- EXPECT_EQ(last_error_html(), NetErrorString(net::ERR_CONNECTION_FAILED)); |
- EXPECT_FALSE(is_url_being_fetched()); |
- EXPECT_EQ(0, update_count()); |
- EXPECT_FALSE(last_error_page_params()); |
- |
- // Error page loads. |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::ERROR_PAGE); |
- core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); |
- core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); |
- |
- // If probe statuses come in last from another page load, they should be |
- // ignored. |
- core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_STARTED); |
- core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN); |
- EXPECT_EQ(0, update_count()); |
- EXPECT_EQ(1, error_html_update_count()); |
-} |
- |
-// The corrections request fails and then the error page loads before probe |
-// results are received. |
-TEST_F(NetErrorHelperCoreTest, CorrectionsFailLoadBeforeProbe) { |
- // Original page starts loading. |
- EnableNavigationCorrections(); |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::NON_ERROR_PAGE); |
- |
- // It fails, and corrections are requested. |
- std::string html; |
- core()->GetErrorHTML(NetErrorHelperCore::MAIN_FRAME, |
- NetError(net::ERR_NAME_NOT_RESOLVED), |
- false, &html); |
- EXPECT_TRUE(html.empty()); |
- |
- // The blank page loads. |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::ERROR_PAGE); |
- core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); |
- core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); |
- |
- // Corrections request fails, probe pending page shown. |
- EXPECT_TRUE(is_url_being_fetched()); |
- NavigationCorrectionsLoadFailure(); |
- EXPECT_EQ(1, error_html_update_count()); |
- EXPECT_EQ(last_error_html(), |
- ProbeErrorString(chrome_common_net::DNS_PROBE_POSSIBLE)); |
- EXPECT_FALSE(is_url_being_fetched()); |
- EXPECT_EQ(0, update_count()); |
- |
- // Probe page loads. |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::ERROR_PAGE); |
- core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); |
- core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); |
- |
- // Probe statuses comes in, and page is updated. |
- core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_STARTED); |
- EXPECT_EQ(1, update_count()); |
- EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_STARTED), |
- last_error_html()); |
- |
- core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN); |
- EXPECT_EQ(2, update_count()); |
- EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN), |
- last_error_html()); |
- |
- // The commit results in sending a second probe status, which is ignored. |
- core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN); |
- EXPECT_EQ(2, update_count()); |
- EXPECT_EQ(1, error_html_update_count()); |
-} |
- |
-// The corrections request fails after receiving probe results. |
-TEST_F(NetErrorHelperCoreTest, CorrectionsFailAfterProbe) { |
- // Original page starts loading. |
- EnableNavigationCorrections(); |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::NON_ERROR_PAGE); |
- |
- // It fails, and corrections are requested. |
- std::string html; |
- core()->GetErrorHTML(NetErrorHelperCore::MAIN_FRAME, |
- NetError(net::ERR_NAME_NOT_RESOLVED), |
- false, &html); |
- EXPECT_TRUE(html.empty()); |
- |
- // The blank page loads. |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::ERROR_PAGE); |
- core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); |
- core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); |
- |
- // Results come in, but end up being ignored. |
- core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_STARTED); |
- core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN); |
- EXPECT_EQ(0, update_count()); |
- |
- // Corrections request fails, probe pending page shown. |
- EXPECT_TRUE(is_url_being_fetched()); |
- NavigationCorrectionsLoadFailure(); |
- EXPECT_EQ(1, error_html_update_count()); |
- EXPECT_EQ(last_error_html(), |
- ProbeErrorString(chrome_common_net::DNS_PROBE_POSSIBLE)); |
- EXPECT_FALSE(is_url_being_fetched()); |
- EXPECT_EQ(0, update_count()); |
- |
- // Probe page loads. |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::ERROR_PAGE); |
- core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); |
- core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); |
- |
- // Probe statuses comes in, and page is updated. |
- core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN); |
- EXPECT_EQ(1, update_count()); |
- EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN), |
- last_error_html()); |
- EXPECT_EQ(1, error_html_update_count()); |
-} |
- |
-// An error page load that would normally load correction is interrupted |
-// by a new navigation before the blank page commits. |
-TEST_F(NetErrorHelperCoreTest, CorrectionsInterruptedBeforeCommit) { |
- // Original page starts loading. |
- EnableNavigationCorrections(); |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::NON_ERROR_PAGE); |
- |
- // It fails, and corrections are requested. |
- std::string html; |
- core()->GetErrorHTML(NetErrorHelperCore::MAIN_FRAME, |
- NetError(net::ERR_NAME_NOT_RESOLVED), |
- false, &html); |
- EXPECT_TRUE(html.empty()); |
- |
- // The blank page starts loading. |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::ERROR_PAGE); |
- |
- // A new page load starts. |
- EXPECT_FALSE(is_url_being_fetched()); |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::NON_ERROR_PAGE); |
- |
- // A new page load interrupts the original load. |
- EXPECT_FALSE(is_url_being_fetched()); |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::NON_ERROR_PAGE); |
- EXPECT_FALSE(is_url_being_fetched()); |
- core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, default_url()); |
- EXPECT_FALSE(is_url_being_fetched()); |
- core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); |
- |
- EXPECT_FALSE(is_url_being_fetched()); |
- EXPECT_EQ(0, update_count()); |
- EXPECT_EQ(0, error_html_update_count()); |
-} |
- |
-// An error page load that would normally load corrections is interrupted |
-// by a new navigation before the blank page finishes loading. |
-TEST_F(NetErrorHelperCoreTest, CorrectionsInterruptedBeforeLoad) { |
- // Original page starts loading. |
- EnableNavigationCorrections(); |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::NON_ERROR_PAGE); |
- |
- // It fails, and corrections are requested. |
- std::string html; |
- core()->GetErrorHTML(NetErrorHelperCore::MAIN_FRAME, |
- NetError(net::ERR_NAME_NOT_RESOLVED), |
- false, &html); |
- EXPECT_TRUE(html.empty()); |
- |
- // The blank page starts loading and is committed. |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::ERROR_PAGE); |
- core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); |
- |
- // A new page load interrupts the original load. |
- EXPECT_FALSE(is_url_being_fetched()); |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::NON_ERROR_PAGE); |
- EXPECT_FALSE(is_url_being_fetched()); |
- core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, default_url()); |
- EXPECT_FALSE(is_url_being_fetched()); |
- core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); |
- |
- EXPECT_FALSE(is_url_being_fetched()); |
- EXPECT_EQ(0, update_count()); |
- EXPECT_EQ(0, error_html_update_count()); |
-} |
- |
-// The corrections request is cancelled due to a new navigation. The new |
-// navigation fails and then loads corrections successfully. |
-TEST_F(NetErrorHelperCoreTest, CorrectionsInterrupted) { |
- // Original page starts loading. |
- EnableNavigationCorrections(); |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::NON_ERROR_PAGE); |
- |
- // It fails, and corrections are requested. |
- std::string html; |
- core()->GetErrorHTML(NetErrorHelperCore::MAIN_FRAME, |
- NetError(net::ERR_NAME_NOT_RESOLVED), |
- false, &html); |
- EXPECT_TRUE(html.empty()); |
- |
- // The blank page loads. |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::ERROR_PAGE); |
- core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); |
- core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); |
- EXPECT_TRUE(is_url_being_fetched()); |
- |
- // Results come in, but end up being ignored. |
- core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_STARTED); |
- core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN); |
- EXPECT_EQ(0, update_count()); |
- |
- // A new load appears! |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::NON_ERROR_PAGE); |
- EXPECT_FALSE(is_url_being_fetched()); |
- |
- // It fails, and corrections are requested again once a blank page is loaded. |
- core()->GetErrorHTML(NetErrorHelperCore::MAIN_FRAME, |
- NetError(net::ERR_NAME_NOT_RESOLVED), |
- false, &html); |
- EXPECT_TRUE(html.empty()); |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::ERROR_PAGE); |
- core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); |
- EXPECT_FALSE(is_url_being_fetched()); |
- core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); |
- EXPECT_TRUE(is_url_being_fetched()); |
- |
- // Corrections request succeeds. |
- NavigationCorrectionsLoadSuccess(kDefaultCorrections, |
- arraysize(kDefaultCorrections)); |
- EXPECT_EQ(1, error_html_update_count()); |
- EXPECT_EQ(NetErrorString(net::ERR_NAME_NOT_RESOLVED), last_error_html()); |
- ExpectDefaultNavigationCorrections(); |
- EXPECT_FALSE(is_url_being_fetched()); |
- |
- // Probe statuses come in, and are ignored. |
- core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_STARTED); |
- core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN); |
- EXPECT_EQ(0, update_count()); |
-} |
- |
-// The corrections request is cancelled due to call to Stop(). The cross |
-// process navigation is cancelled, and then a new load fails and tries to load |
-// corrections again, unsuccessfully. |
-TEST_F(NetErrorHelperCoreTest, CorrectionsStopped) { |
- // Original page starts loading. |
- EnableNavigationCorrections(); |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::NON_ERROR_PAGE); |
- |
- // It fails, and corrections are requested. |
- std::string html; |
- core()->GetErrorHTML(NetErrorHelperCore::MAIN_FRAME, |
- NetError(net::ERR_NAME_NOT_RESOLVED), |
- false, &html); |
- EXPECT_TRUE(html.empty()); |
- |
- // The blank page loads. |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::ERROR_PAGE); |
- core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); |
- core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); |
- |
- EXPECT_TRUE(is_url_being_fetched()); |
- core()->OnStop(); |
- EXPECT_FALSE(is_url_being_fetched()); |
- |
- // Results come in, but end up being ignored. |
- core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_STARTED); |
- core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN); |
- EXPECT_EQ(0, update_count()); |
- |
- // Cross process navigation must have been cancelled, and a new load appears! |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::NON_ERROR_PAGE); |
- |
- // It fails, and corrections are requested again. |
- core()->GetErrorHTML(NetErrorHelperCore::MAIN_FRAME, |
- NetError(net::ERR_NAME_NOT_RESOLVED), |
- false, &html); |
- EXPECT_TRUE(html.empty()); |
- |
- // The blank page loads again. |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::ERROR_PAGE); |
- core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); |
- core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); |
- EXPECT_TRUE(is_url_being_fetched()); |
- |
- // Corrections request fails, probe pending page shown. |
- NavigationCorrectionsLoadFailure(); |
- EXPECT_EQ(1, error_html_update_count()); |
- EXPECT_EQ(last_error_html(), |
- ProbeErrorString(chrome_common_net::DNS_PROBE_POSSIBLE)); |
- EXPECT_FALSE(is_url_being_fetched()); |
- |
- // Probe page loads. |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::ERROR_PAGE); |
- core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); |
- core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); |
- |
- // Probe statuses comes in, and page is updated. |
- core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_STARTED); |
- EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_STARTED), |
- last_error_html()); |
- EXPECT_EQ(1, update_count()); |
- |
- core()->OnNetErrorInfo(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN); |
- EXPECT_EQ(2, update_count()); |
- EXPECT_EQ(ProbeErrorString(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN), |
- last_error_html()); |
- EXPECT_EQ(1, error_html_update_count()); |
-} |
- |
-// Check the case corrections are disabled while the blank page (Loaded |
-// before the corrections page) is being loaded. |
-TEST_F(NetErrorHelperCoreTest, CorrectionsDisabledBeforeFetch) { |
- // Original page starts loading. |
- EnableNavigationCorrections(); |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::NON_ERROR_PAGE); |
- |
- // It fails, and corrections are requested. |
- std::string html; |
- core()->GetErrorHTML(NetErrorHelperCore::MAIN_FRAME, |
- NetError(net::ERR_NAME_NOT_RESOLVED), |
- false, &html); |
- EXPECT_TRUE(html.empty()); |
- |
- // The blank page loads. |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::ERROR_PAGE); |
- // Corrections is disabled. |
- DisableNavigationCorrections(); |
- core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); |
- core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); |
- EXPECT_TRUE(is_url_being_fetched()); |
- EXPECT_FALSE(last_error_page_params()); |
- |
- // Corrections are retrieved. |
- NavigationCorrectionsLoadSuccess(kDefaultCorrections, |
- arraysize(kDefaultCorrections)); |
- EXPECT_EQ(1, error_html_update_count()); |
- EXPECT_EQ(NetErrorString(net::ERR_NAME_NOT_RESOLVED), last_error_html()); |
- EXPECT_FALSE(is_url_being_fetched()); |
- ExpectDefaultNavigationCorrections(); |
- |
- // Corrections load. |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::ERROR_PAGE); |
- core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); |
- core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); |
- EXPECT_EQ(1, error_html_update_count()); |
- EXPECT_EQ(0, update_count()); |
-} |
- |
-// Check the case corrections is disabled while fetching the corrections for |
-// a failed page load. |
-TEST_F(NetErrorHelperCoreTest, CorrectionsDisabledDuringFetch) { |
- // Original page starts loading. |
- EnableNavigationCorrections(); |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::NON_ERROR_PAGE); |
- |
- // It fails, and corrections are requested. |
- std::string html; |
- core()->GetErrorHTML(NetErrorHelperCore::MAIN_FRAME, |
- NetError(net::ERR_NAME_NOT_RESOLVED), |
- false, &html); |
- EXPECT_TRUE(html.empty()); |
- |
- // The blank page loads. |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::ERROR_PAGE); |
- core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); |
- core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); |
- EXPECT_TRUE(is_url_being_fetched()); |
- EXPECT_FALSE(last_error_page_params()); |
- |
- // Corrections are disabled. |
- DisableNavigationCorrections(); |
- |
- // Corrections are retrieved. |
- NavigationCorrectionsLoadSuccess(kDefaultCorrections, |
- arraysize(kDefaultCorrections)); |
- EXPECT_EQ(1, error_html_update_count()); |
- EXPECT_EQ(NetErrorString(net::ERR_NAME_NOT_RESOLVED), last_error_html()); |
- EXPECT_FALSE(is_url_being_fetched()); |
- ExpectDefaultNavigationCorrections(); |
- |
- // Corrections load. |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::ERROR_PAGE); |
- core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); |
- core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); |
- EXPECT_EQ(1, error_html_update_count()); |
- EXPECT_EQ(0, update_count()); |
-} |
- |
-// Checks corrections are is used when there are no search suggestions. |
-TEST_F(NetErrorHelperCoreTest, CorrectionsWithoutSearch) { |
- const NavigationCorrection kCorrections[] = { |
- {"urlCorrection", "http://somewhere_else/", "btn", "data", false, false}, |
- }; |
- |
- // Original page starts loading. |
- EnableNavigationCorrections(); |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::NON_ERROR_PAGE); |
- |
- // It fails, and corrections are requested. |
- std::string html; |
- core()->GetErrorHTML(NetErrorHelperCore::MAIN_FRAME, |
- NetError(net::ERR_NAME_NOT_RESOLVED), |
- false, &html); |
- EXPECT_TRUE(html.empty()); |
- |
- // The blank page loads. |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::ERROR_PAGE); |
- core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); |
- core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); |
- EXPECT_TRUE(is_url_being_fetched()); |
- EXPECT_FALSE(last_error_page_params()); |
- |
- // Corrections are retrieved. |
- NavigationCorrectionsLoadSuccess(kCorrections, arraysize(kCorrections)); |
- EXPECT_EQ(1, error_html_update_count()); |
- EXPECT_EQ(NetErrorString(net::ERR_NAME_NOT_RESOLVED), last_error_html()); |
- EXPECT_FALSE(is_url_being_fetched()); |
- |
- // Check params. |
- ASSERT_TRUE(last_error_page_params()); |
- EXPECT_FALSE(last_error_page_params()->suggest_reload); |
- EXPECT_EQ(1u, last_error_page_params()->override_suggestions->GetSize()); |
- EXPECT_FALSE(last_error_page_params()->search_url.is_valid()); |
- EXPECT_EQ("", last_error_page_params()->search_terms); |
- |
- // Corrections load. |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::ERROR_PAGE); |
- core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); |
- core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); |
- EXPECT_EQ(1, error_html_update_count()); |
- EXPECT_EQ(0, update_count()); |
-} |
- |
-// Checks corrections are used when there are only search suggestions. |
-TEST_F(NetErrorHelperCoreTest, CorrectionsOnlySearchSuggestion) { |
- const NavigationCorrection kCorrections[] = { |
- {"webSearchQuery", kSuggestedSearchTerms, "frm", "data", false, false}, |
- }; |
- |
- // Original page starts loading. |
- EnableNavigationCorrections(); |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::NON_ERROR_PAGE); |
- |
- // It fails, and corrections are requested. |
- std::string html; |
- core()->GetErrorHTML(NetErrorHelperCore::MAIN_FRAME, |
- NetError(net::ERR_NAME_NOT_RESOLVED), |
- false, &html); |
- EXPECT_TRUE(html.empty()); |
- |
- // The blank page loads. |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::ERROR_PAGE); |
- core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); |
- core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); |
- EXPECT_TRUE(is_url_being_fetched()); |
- EXPECT_FALSE(last_error_page_params()); |
- |
- // Corrections are retrieved. |
- NavigationCorrectionsLoadSuccess(kCorrections, arraysize(kCorrections)); |
- EXPECT_EQ(1, error_html_update_count()); |
- EXPECT_EQ(NetErrorString(net::ERR_NAME_NOT_RESOLVED), last_error_html()); |
- EXPECT_FALSE(is_url_being_fetched()); |
- |
- // Check params. |
- ASSERT_TRUE(last_error_page_params()); |
- EXPECT_FALSE(last_error_page_params()->suggest_reload); |
- EXPECT_EQ(0u, last_error_page_params()->override_suggestions->GetSize()); |
- EXPECT_EQ(GURL(kSearchUrl), last_error_page_params()->search_url); |
- EXPECT_EQ(kSuggestedSearchTerms, last_error_page_params()->search_terms); |
- |
- // Corrections load. |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::ERROR_PAGE); |
- core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); |
- core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); |
- EXPECT_EQ(1, error_html_update_count()); |
- EXPECT_EQ(0, update_count()); |
-} |
- |
-// The correction service returns a non-JSON result. |
-TEST_F(NetErrorHelperCoreTest, CorrectionServiceReturnsNonJsonResult) { |
- // Original page starts loading. |
- EnableNavigationCorrections(); |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::NON_ERROR_PAGE); |
- |
- // It fails, and corrections are requested. |
- std::string html; |
- core()->GetErrorHTML(NetErrorHelperCore::MAIN_FRAME, |
- NetError(net::ERR_CONNECTION_FAILED), |
- false, &html); |
- EXPECT_TRUE(html.empty()); |
- |
- // The blank page loads. |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::ERROR_PAGE); |
- core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); |
- core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); |
- |
- // Corrections request fails, final error page is shown. |
- EXPECT_TRUE(is_url_being_fetched()); |
- NavigationCorrectionsLoadFinished("Weird Response"); |
- EXPECT_EQ(1, error_html_update_count()); |
- EXPECT_EQ(last_error_html(), NetErrorString(net::ERR_CONNECTION_FAILED)); |
- EXPECT_FALSE(is_url_being_fetched()); |
- EXPECT_EQ(0, update_count()); |
- EXPECT_FALSE(last_error_page_params()); |
- |
- // Error page loads. |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::ERROR_PAGE); |
- core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); |
- core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); |
-} |
- |
-// The correction service returns a JSON result that isn't a valid list of |
-// corrections. |
-TEST_F(NetErrorHelperCoreTest, CorrectionServiceReturnsInvalidJsonResult) { |
- // Original page starts loading. |
- EnableNavigationCorrections(); |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::NON_ERROR_PAGE); |
- |
- // It fails, and corrections are requested. |
- std::string html; |
- core()->GetErrorHTML(NetErrorHelperCore::MAIN_FRAME, |
- NetError(net::ERR_CONNECTION_FAILED), |
- false, &html); |
- EXPECT_TRUE(html.empty()); |
- |
- // The blank page loads. |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::ERROR_PAGE); |
- core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); |
- core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); |
- |
- // Corrections request fails, final error page is shown. |
- EXPECT_TRUE(is_url_being_fetched()); |
- NavigationCorrectionsLoadFinished("{\"result\": 42}"); |
- EXPECT_EQ(1, error_html_update_count()); |
- EXPECT_EQ(last_error_html(), NetErrorString(net::ERR_CONNECTION_FAILED)); |
- EXPECT_FALSE(is_url_being_fetched()); |
- EXPECT_EQ(0, update_count()); |
- EXPECT_FALSE(last_error_page_params()); |
- |
- // Error page loads. |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::ERROR_PAGE); |
- core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); |
- core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); |
-} |
- |
-TEST_F(NetErrorHelperCoreTest, CorrectionClickTracking) { |
- // Go through the standard navigation correction steps. |
- |
- // Original page starts loading. |
- EnableNavigationCorrections(); |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::NON_ERROR_PAGE); |
- |
- // It fails. |
- std::string html; |
- core()->GetErrorHTML(NetErrorHelperCore::MAIN_FRAME, |
- NetError(net::ERR_NAME_NOT_RESOLVED), |
- false, &html); |
- EXPECT_TRUE(html.empty()); |
- EXPECT_FALSE(is_url_being_fetched()); |
- EXPECT_FALSE(last_error_page_params()); |
- |
- // The blank page loads. |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::ERROR_PAGE); |
- core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); |
- |
- // Corrections retrieval starts when the error page finishes loading. |
- EXPECT_FALSE(is_url_being_fetched()); |
- EXPECT_FALSE(last_error_page_params()); |
- core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); |
- EXPECT_TRUE(is_url_being_fetched()); |
- EXPECT_FALSE(last_error_page_params()); |
- |
- // Corrections are retrieved. |
- NavigationCorrectionsLoadSuccess(kDefaultCorrections, |
- arraysize(kDefaultCorrections)); |
- EXPECT_EQ(1, error_html_update_count()); |
- EXPECT_EQ(NetErrorString(net::ERR_NAME_NOT_RESOLVED), last_error_html()); |
- ExpectDefaultNavigationCorrections(); |
- EXPECT_FALSE(is_url_being_fetched()); |
- |
- // Corrections load. |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::ERROR_PAGE); |
- core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); |
- core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); |
- |
- EXPECT_EQ(0, tracking_request_count()); |
- |
- // Invalid clicks should be ignored. |
- core()->TrackClick(-1); |
- core()->TrackClick(arraysize(kDefaultCorrections)); |
- EXPECT_EQ(0, tracking_request_count()); |
- |
- for (size_t i = 0; i < arraysize(kDefaultCorrections); ++i) { |
- // Skip links that do not appear in the page. |
- if (kDefaultCorrections[i].is_porn || kDefaultCorrections[i].is_soft_porn) |
- continue; |
- |
- int old_tracking_request_count = tracking_request_count(); |
- core()->TrackClick(i); |
- EXPECT_EQ(old_tracking_request_count + 1, tracking_request_count()); |
- EXPECT_EQ(GURL(kNavigationCorrectionUrl), last_tracking_url()); |
- |
- // Make sure all expected strings appear in output. |
- EXPECT_TRUE(last_tracking_request_body().find( |
- kDefaultCorrections[i].url_correction)); |
- EXPECT_TRUE(last_tracking_request_body().find( |
- kDefaultCorrections[i].click_data)); |
- EXPECT_TRUE(last_tracking_request_body().find( |
- kDefaultCorrections[i].click_type)); |
- EXPECT_TRUE(last_tracking_request_body().find( |
- kNavigationCorrectionEventId)); |
- EXPECT_TRUE(last_tracking_request_body().find( |
- kNavigationCorrectionFingerprint)); |
- } |
- |
- // Make sure duplicate tracking requests are ignored. |
- for (size_t i = 0; i < arraysize(kDefaultCorrections); ++i) { |
- // Skip links that do not appear in the page. |
- if (kDefaultCorrections[i].is_porn || kDefaultCorrections[i].is_soft_porn) |
- continue; |
- |
- int old_tracking_request_count = tracking_request_count(); |
- core()->TrackClick(i); |
- EXPECT_EQ(old_tracking_request_count, tracking_request_count()); |
- } |
- |
- EXPECT_EQ(0, update_count()); |
- EXPECT_EQ(1, error_html_update_count()); |
-} |
- |
-TEST_F(NetErrorHelperCoreTest, AutoReloadDisabled) { |
- DoErrorLoad(net::ERR_CONNECTION_RESET); |
- |
- EXPECT_FALSE(timer()->IsRunning()); |
- EXPECT_EQ(0, reload_count()); |
-} |
- |
-class NetErrorHelperCoreAutoReloadTest : public NetErrorHelperCoreTest { |
- public: |
- virtual void SetUp() { |
- NetErrorHelperCoreTest::SetUp(); |
- SetUpCore(true, false, true); |
- } |
-}; |
- |
-TEST_F(NetErrorHelperCoreAutoReloadTest, Succeeds) { |
- DoErrorLoad(net::ERR_CONNECTION_RESET); |
- |
- EXPECT_TRUE(timer()->IsRunning()); |
- EXPECT_EQ(0, reload_count()); |
- |
- timer()->Fire(); |
- EXPECT_FALSE(timer()->IsRunning()); |
- EXPECT_EQ(1, reload_count()); |
- |
- DoSuccessLoad(); |
- |
- EXPECT_FALSE(timer()->IsRunning()); |
-} |
- |
-TEST_F(NetErrorHelperCoreAutoReloadTest, Retries) { |
- DoErrorLoad(net::ERR_CONNECTION_RESET); |
- |
- EXPECT_TRUE(timer()->IsRunning()); |
- base::TimeDelta first_delay = timer()->GetCurrentDelay(); |
- EXPECT_EQ(0, reload_count()); |
- |
- timer()->Fire(); |
- EXPECT_FALSE(timer()->IsRunning()); |
- EXPECT_EQ(1, reload_count()); |
- |
- DoErrorLoad(net::ERR_CONNECTION_RESET); |
- |
- EXPECT_TRUE(timer()->IsRunning()); |
- EXPECT_GT(timer()->GetCurrentDelay(), first_delay); |
-} |
- |
-TEST_F(NetErrorHelperCoreAutoReloadTest, StopsTimerOnStop) { |
- DoErrorLoad(net::ERR_CONNECTION_RESET); |
- EXPECT_TRUE(timer()->IsRunning()); |
- core()->OnStop(); |
- EXPECT_FALSE(timer()->IsRunning()); |
-} |
- |
-TEST_F(NetErrorHelperCoreAutoReloadTest, StopsLoadingOnStop) { |
- DoErrorLoad(net::ERR_CONNECTION_RESET); |
- EXPECT_EQ(0, core()->auto_reload_count()); |
- timer()->Fire(); |
- EXPECT_EQ(1, core()->auto_reload_count()); |
- EXPECT_EQ(1, reload_count()); |
- core()->OnStop(); |
- EXPECT_FALSE(timer()->IsRunning()); |
- EXPECT_EQ(0, core()->auto_reload_count()); |
-} |
- |
-TEST_F(NetErrorHelperCoreAutoReloadTest, StopsOnOtherLoadStart) { |
- DoErrorLoad(net::ERR_CONNECTION_RESET); |
- EXPECT_TRUE(timer()->IsRunning()); |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::NON_ERROR_PAGE); |
- EXPECT_FALSE(timer()->IsRunning()); |
- EXPECT_EQ(0, core()->auto_reload_count()); |
-} |
- |
-TEST_F(NetErrorHelperCoreAutoReloadTest, ResetsCountOnSuccess) { |
- DoErrorLoad(net::ERR_CONNECTION_RESET); |
- base::TimeDelta delay = timer()->GetCurrentDelay(); |
- EXPECT_EQ(0, core()->auto_reload_count()); |
- timer()->Fire(); |
- EXPECT_EQ(1, core()->auto_reload_count()); |
- EXPECT_EQ(1, reload_count()); |
- DoSuccessLoad(); |
- DoErrorLoad(net::ERR_CONNECTION_RESET); |
- EXPECT_EQ(0, core()->auto_reload_count()); |
- EXPECT_EQ(timer()->GetCurrentDelay(), delay); |
- timer()->Fire(); |
- EXPECT_EQ(1, core()->auto_reload_count()); |
- EXPECT_EQ(2, reload_count()); |
- DoSuccessLoad(); |
- EXPECT_EQ(0, core()->auto_reload_count()); |
-} |
- |
-TEST_F(NetErrorHelperCoreAutoReloadTest, RestartsOnOnline) { |
- DoErrorLoad(net::ERR_CONNECTION_RESET); |
- base::TimeDelta delay = timer()->GetCurrentDelay(); |
- timer()->Fire(); |
- DoErrorLoad(net::ERR_CONNECTION_RESET); |
- EXPECT_TRUE(timer()->IsRunning()); |
- EXPECT_NE(delay, timer()->GetCurrentDelay()); |
- core()->NetworkStateChanged(false); |
- EXPECT_FALSE(timer()->IsRunning()); |
- core()->NetworkStateChanged(true); |
- EXPECT_TRUE(timer()->IsRunning()); |
- EXPECT_EQ(delay, timer()->GetCurrentDelay()); |
-} |
- |
-TEST_F(NetErrorHelperCoreAutoReloadTest, DoesNotStartOnOnline) { |
- DoErrorLoad(net::ERR_CONNECTION_RESET); |
- timer()->Fire(); |
- DoSuccessLoad(); |
- EXPECT_FALSE(timer()->IsRunning()); |
- core()->NetworkStateChanged(true); |
- EXPECT_FALSE(timer()->IsRunning()); |
-} |
- |
-TEST_F(NetErrorHelperCoreAutoReloadTest, DoesNotStartOffline) { |
- core()->NetworkStateChanged(false); |
- DoErrorLoad(net::ERR_CONNECTION_RESET); |
- EXPECT_FALSE(timer()->IsRunning()); |
- core()->NetworkStateChanged(true); |
- EXPECT_TRUE(timer()->IsRunning()); |
-} |
- |
-TEST_F(NetErrorHelperCoreAutoReloadTest, DoesNotRestartOnOnlineAfterStop) { |
- DoErrorLoad(net::ERR_CONNECTION_RESET); |
- timer()->Fire(); |
- core()->OnStop(); |
- core()->NetworkStateChanged(true); |
- EXPECT_FALSE(timer()->IsRunning()); |
-} |
- |
-TEST_F(NetErrorHelperCoreAutoReloadTest, WithDnsProbes) { |
- DoErrorLoad(net::ERR_CONNECTION_RESET); |
- DoDnsProbe(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN); |
- timer()->Fire(); |
- EXPECT_EQ(1, reload_count()); |
-} |
- |
-TEST_F(NetErrorHelperCoreAutoReloadTest, ExponentialBackoffLevelsOff) { |
- base::TimeDelta previous = base::TimeDelta::FromMilliseconds(0); |
- const int kMaxTries = 50; |
- int tries = 0; |
- for (tries = 0; tries < kMaxTries; tries++) { |
- DoErrorLoad(net::ERR_CONNECTION_RESET); |
- EXPECT_TRUE(timer()->IsRunning()); |
- if (previous == timer()->GetCurrentDelay()) |
- break; |
- previous = timer()->GetCurrentDelay(); |
- timer()->Fire(); |
- } |
- |
- EXPECT_LT(tries, kMaxTries); |
-} |
- |
-TEST_F(NetErrorHelperCoreAutoReloadTest, SlowError) { |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::NON_ERROR_PAGE); |
- std::string html; |
- core()->GetErrorHTML(NetErrorHelperCore::MAIN_FRAME, |
- NetError(net::ERR_CONNECTION_RESET), false, &html); |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::ERROR_PAGE); |
- core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); |
- EXPECT_FALSE(timer()->IsRunning()); |
- // Start a new non-error page load. |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::NON_ERROR_PAGE); |
- EXPECT_FALSE(timer()->IsRunning()); |
- // Finish the error page load. |
- core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); |
- EXPECT_FALSE(timer()->IsRunning()); |
- core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); |
- core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); |
- EXPECT_FALSE(timer()->IsRunning()); |
-} |
- |
-TEST_F(NetErrorHelperCoreAutoReloadTest, OnlineSlowError) { |
- core()->NetworkStateChanged(false); |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::NON_ERROR_PAGE); |
- std::string html; |
- core()->GetErrorHTML(NetErrorHelperCore::MAIN_FRAME, |
- NetError(net::ERR_CONNECTION_RESET), false, &html); |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::ERROR_PAGE); |
- core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); |
- EXPECT_FALSE(timer()->IsRunning()); |
- core()->NetworkStateChanged(true); |
- EXPECT_FALSE(timer()->IsRunning()); |
- core()->NetworkStateChanged(false); |
- core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); |
- EXPECT_FALSE(timer()->IsRunning()); |
- core()->NetworkStateChanged(true); |
- EXPECT_TRUE(timer()->IsRunning()); |
-} |
- |
-TEST_F(NetErrorHelperCoreAutoReloadTest, OnlinePendingError) { |
- core()->NetworkStateChanged(false); |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::NON_ERROR_PAGE); |
- std::string html; |
- core()->GetErrorHTML(NetErrorHelperCore::MAIN_FRAME, |
- NetError(net::ERR_CONNECTION_RESET), false, &html); |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::ERROR_PAGE); |
- EXPECT_FALSE(timer()->IsRunning()); |
- core()->NetworkStateChanged(true); |
- EXPECT_FALSE(timer()->IsRunning()); |
- core()->NetworkStateChanged(false); |
- core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); |
- core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); |
- EXPECT_FALSE(timer()->IsRunning()); |
- core()->NetworkStateChanged(true); |
- EXPECT_TRUE(timer()->IsRunning()); |
-} |
- |
-TEST_F(NetErrorHelperCoreAutoReloadTest, OnlinePartialErrorReplacement) { |
- core()->NetworkStateChanged(false); |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::NON_ERROR_PAGE); |
- std::string html; |
- core()->GetErrorHTML(NetErrorHelperCore::MAIN_FRAME, |
- NetError(net::ERR_CONNECTION_RESET), false, &html); |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::ERROR_PAGE); |
- core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); |
- core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::NON_ERROR_PAGE); |
- core()->GetErrorHTML(NetErrorHelperCore::MAIN_FRAME, |
- NetError(net::ERR_CONNECTION_RESET), false, &html); |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::ERROR_PAGE); |
- EXPECT_FALSE(timer()->IsRunning()); |
- core()->NetworkStateChanged(true); |
- EXPECT_FALSE(timer()->IsRunning()); |
-} |
- |
-TEST_F(NetErrorHelperCoreAutoReloadTest, ShouldSuppressNonReloadableErrorPage) { |
- DoErrorLoad(net::ERR_ABORTED); |
- EXPECT_FALSE(core()->ShouldSuppressErrorPage(NetErrorHelperCore::MAIN_FRAME, |
- GURL(kFailedUrl))); |
-} |
- |
-TEST_F(NetErrorHelperCoreAutoReloadTest, ShouldSuppressErrorPage) { |
- // Set up the environment to test ShouldSuppressErrorPage: auto-reload is |
- // enabled, an error page is loaded, and the auto-reload callback is running. |
- DoErrorLoad(net::ERR_CONNECTION_RESET); |
- timer()->Fire(); |
- |
- EXPECT_FALSE(core()->ShouldSuppressErrorPage(NetErrorHelperCore::SUB_FRAME, |
- GURL(kFailedUrl))); |
- EXPECT_FALSE(core()->ShouldSuppressErrorPage(NetErrorHelperCore::MAIN_FRAME, |
- GURL("http://some.other.url"))); |
- EXPECT_TRUE(core()->ShouldSuppressErrorPage(NetErrorHelperCore::MAIN_FRAME, |
- GURL(kFailedUrl))); |
-} |
- |
-TEST_F(NetErrorHelperCoreAutoReloadTest, HiddenAndShown) { |
- SetUpCore(true, true, true); |
- DoErrorLoad(net::ERR_CONNECTION_RESET); |
- EXPECT_TRUE(timer()->IsRunning()); |
- core()->OnWasHidden(); |
- EXPECT_FALSE(timer()->IsRunning()); |
- core()->OnWasShown(); |
- EXPECT_TRUE(timer()->IsRunning()); |
-} |
- |
-TEST_F(NetErrorHelperCoreAutoReloadTest, HiddenWhileOnline) { |
- SetUpCore(true, true, true); |
- core()->NetworkStateChanged(false); |
- DoErrorLoad(net::ERR_CONNECTION_RESET); |
- EXPECT_FALSE(timer()->IsRunning()); |
- core()->OnWasHidden(); |
- core()->NetworkStateChanged(true); |
- EXPECT_FALSE(timer()->IsRunning()); |
- core()->NetworkStateChanged(false); |
- core()->OnWasShown(); |
- EXPECT_FALSE(timer()->IsRunning()); |
- core()->NetworkStateChanged(true); |
- EXPECT_TRUE(timer()->IsRunning()); |
- core()->NetworkStateChanged(false); |
- core()->OnWasHidden(); |
- EXPECT_FALSE(timer()->IsRunning()); |
- core()->NetworkStateChanged(true); |
- EXPECT_FALSE(timer()->IsRunning()); |
- core()->OnWasShown(); |
- EXPECT_TRUE(timer()->IsRunning()); |
-} |
- |
-TEST_F(NetErrorHelperCoreAutoReloadTest, ShownWhileNotReloading) { |
- SetUpCore(true, true, false); |
- DoErrorLoad(net::ERR_CONNECTION_RESET); |
- EXPECT_FALSE(timer()->IsRunning()); |
- core()->OnWasShown(); |
- EXPECT_TRUE(timer()->IsRunning()); |
-} |
- |
-class NetErrorHelperCoreHistogramTest |
- : public NetErrorHelperCoreAutoReloadTest { |
- public: |
- virtual void SetUp() override { |
- NetErrorHelperCoreAutoReloadTest::SetUp(); |
- } |
- |
- static const char kCountAtStop[]; |
- static const char kErrorAtStop[]; |
- static const char kCountAtSuccess[]; |
- static const char kErrorAtSuccess[]; |
- static const char kErrorAtFirstSuccess[]; |
- |
- protected: |
- base::HistogramTester histogram_tester_; |
-}; |
- |
-const char NetErrorHelperCoreHistogramTest::kCountAtStop[] = |
- "Net.AutoReload.CountAtStop"; |
-const char NetErrorHelperCoreHistogramTest::kErrorAtStop[] = |
- "Net.AutoReload.ErrorAtStop"; |
-const char NetErrorHelperCoreHistogramTest::kCountAtSuccess[] = |
- "Net.AutoReload.CountAtSuccess"; |
-const char NetErrorHelperCoreHistogramTest::kErrorAtSuccess[] = |
- "Net.AutoReload.ErrorAtSuccess"; |
-const char NetErrorHelperCoreHistogramTest::kErrorAtFirstSuccess[] = |
- "Net.AutoReload.ErrorAtFirstSuccess"; |
- |
-// Test that the success histograms are updated when auto-reload succeeds at the |
-// first attempt, and that the failure histograms are not updated. |
-TEST_F(NetErrorHelperCoreHistogramTest, SuccessAtFirstAttempt) { |
- DoErrorLoad(net::ERR_CONNECTION_RESET); |
- timer()->Fire(); |
- DoSuccessLoad(); |
- |
- // All of CountAtSuccess, ErrorAtSuccess, and ErrorAtFirstSuccess should |
- // reflect this successful load. The failure histograms should be unchanged. |
- histogram_tester_.ExpectTotalCount(kCountAtSuccess, 1); |
- histogram_tester_.ExpectTotalCount(kErrorAtSuccess, 1); |
- histogram_tester_.ExpectTotalCount(kErrorAtFirstSuccess, 1); |
- histogram_tester_.ExpectTotalCount(kCountAtStop, 0); |
- histogram_tester_.ExpectTotalCount(kErrorAtStop, 0); |
-} |
- |
-// Test that the success histograms are updated when auto-reload succeeds but |
-// not on the first attempt, and that the first-success histogram is not |
-// updated. |
-TEST_F(NetErrorHelperCoreHistogramTest, SuccessAtSecondAttempt) { |
- DoErrorLoad(net::ERR_CONNECTION_RESET); |
- timer()->Fire(); |
- EXPECT_TRUE(core()->ShouldSuppressErrorPage(NetErrorHelperCore::MAIN_FRAME, |
- default_url())); |
-// DoErrorLoad(net::ERR_CONNECTION_RESET); |
- timer()->Fire(); |
- DoSuccessLoad(); |
- |
- // CountAtSuccess and ErrorAtSuccess should reflect this successful load, but |
- // not ErrorAtFirstSuccess since it wasn't a first success. |
- histogram_tester_.ExpectTotalCount(kCountAtSuccess, 1); |
- histogram_tester_.ExpectTotalCount(kErrorAtSuccess, 1); |
- histogram_tester_.ExpectTotalCount(kErrorAtFirstSuccess, 0); |
- histogram_tester_.ExpectTotalCount(kCountAtStop, 0); |
- histogram_tester_.ExpectTotalCount(kErrorAtStop, 0); |
-} |
- |
-// Test that a user stop (caused by the user pressing the 'Stop' button) |
-// registers as an auto-reload failure if an auto-reload attempt is in flight. |
-// Note that "user stop" is also caused by a cross-process navigation, for which |
-// the browser process will send an OnStop to the old process. |
-TEST_F(NetErrorHelperCoreHistogramTest, UserStop) { |
- DoErrorLoad(net::ERR_CONNECTION_RESET); |
- timer()->Fire(); |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::NON_ERROR_PAGE); |
- core()->OnStop(); |
- |
- // CountAtStop and ErrorAtStop should reflect the failure. |
- histogram_tester_.ExpectTotalCount(kCountAtSuccess, 0); |
- histogram_tester_.ExpectTotalCount(kErrorAtSuccess, 0); |
- histogram_tester_.ExpectTotalCount(kErrorAtFirstSuccess, 0); |
- histogram_tester_.ExpectTotalCount(kCountAtStop, 1); |
- histogram_tester_.ExpectTotalCount(kErrorAtStop, 1); |
-} |
- |
-// Test that a user stop (caused by the user pressing the 'Stop' button) |
-// registers as an auto-reload failure even if an auto-reload attempt has not |
-// been launched yet (i.e., if the timer is running, but no reload is in |
-// flight), because this means auto-reload didn't successfully replace the error |
-// page. |
-TEST_F(NetErrorHelperCoreHistogramTest, OtherPageLoaded) { |
- DoErrorLoad(net::ERR_CONNECTION_RESET); |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::NON_ERROR_PAGE); |
- core()->OnStop(); |
- |
- histogram_tester_.ExpectTotalCount(kCountAtSuccess, 0); |
- histogram_tester_.ExpectTotalCount(kErrorAtSuccess, 0); |
- histogram_tester_.ExpectTotalCount(kErrorAtFirstSuccess, 0); |
- histogram_tester_.ExpectTotalCount(kCountAtStop, 1); |
- histogram_tester_.ExpectTotalCount(kErrorAtStop, 1); |
-} |
- |
-// Test that a commit of a different URL (caused by the user navigating to a |
-// different page) with an auto-reload attempt in flight registers as an |
-// auto-reload failure. |
-TEST_F(NetErrorHelperCoreHistogramTest, OtherPageLoadedAfterTimerFires) { |
- const GURL kTestUrl("https://anotherurl"); |
- DoErrorLoad(net::ERR_CONNECTION_RESET); |
- timer()->Fire(); |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::NON_ERROR_PAGE); |
- core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, |
- kTestUrl); |
- core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); |
- |
- histogram_tester_.ExpectTotalCount(kCountAtSuccess, 0); |
- histogram_tester_.ExpectTotalCount(kErrorAtSuccess, 0); |
- histogram_tester_.ExpectTotalCount(kErrorAtFirstSuccess, 0); |
- histogram_tester_.ExpectTotalCount(kCountAtStop, 1); |
- histogram_tester_.ExpectTotalCount(kErrorAtStop, 1); |
-} |
- |
-// Test that a commit of the same URL with an auto-reload attempt in flight |
-// registers as an auto-reload success. |
-TEST_F(NetErrorHelperCoreHistogramTest, SamePageLoadedAfterTimerFires) { |
- DoErrorLoad(net::ERR_CONNECTION_RESET); |
- timer()->Fire(); |
- DoSuccessLoad(); |
- |
- histogram_tester_.ExpectTotalCount(kCountAtSuccess, 1); |
- histogram_tester_.ExpectTotalCount(kErrorAtSuccess, 1); |
- histogram_tester_.ExpectTotalCount(kErrorAtFirstSuccess, 1); |
- histogram_tester_.ExpectTotalCount(kCountAtStop, 0); |
- histogram_tester_.ExpectTotalCount(kErrorAtStop, 0); |
-} |
- |
-TEST_F(NetErrorHelperCoreHistogramTest, SamePageLoadedAfterLoadStarts) { |
- DoErrorLoad(net::ERR_CONNECTION_RESET); |
- timer()->Fire(); |
- // Autoreload attempt starts |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::NON_ERROR_PAGE); |
- // User does a manual reload |
- DoSuccessLoad(); |
- |
- histogram_tester_.ExpectTotalCount(kCountAtSuccess, 1); |
- histogram_tester_.ExpectTotalCount(kErrorAtSuccess, 1); |
- histogram_tester_.ExpectTotalCount(kErrorAtFirstSuccess, 1); |
- histogram_tester_.ExpectTotalCount(kCountAtStop, 0); |
- histogram_tester_.ExpectTotalCount(kErrorAtStop, 0); |
-} |
- |
-// In this test case, the user presses the reload button manually after an |
-// auto-reload fails and the error page is suppressed. |
-TEST_F(NetErrorHelperCoreHistogramTest, ErrorPageLoadedAfterTimerFires) { |
- DoErrorLoad(net::ERR_CONNECTION_RESET); |
- timer()->Fire(); |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::NON_ERROR_PAGE); |
- EXPECT_TRUE(core()->ShouldSuppressErrorPage(NetErrorHelperCore::MAIN_FRAME, |
- default_url())); |
- DoErrorLoad(net::ERR_CONNECTION_RESET); |
- |
- histogram_tester_.ExpectTotalCount(kCountAtSuccess, 0); |
- histogram_tester_.ExpectTotalCount(kErrorAtSuccess, 0); |
- histogram_tester_.ExpectTotalCount(kErrorAtFirstSuccess, 0); |
- histogram_tester_.ExpectTotalCount(kCountAtStop, 0); |
- histogram_tester_.ExpectTotalCount(kErrorAtStop, 0); |
-} |
- |
-TEST_F(NetErrorHelperCoreHistogramTest, SuccessPageLoadedBeforeTimerFires) { |
- DoErrorLoad(net::ERR_CONNECTION_RESET); |
- core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, |
- NetErrorHelperCore::NON_ERROR_PAGE); |
- core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, |
- GURL(kFailedHttpsUrl)); |
- |
- histogram_tester_.ExpectTotalCount(kCountAtSuccess, 0); |
- histogram_tester_.ExpectTotalCount(kErrorAtSuccess, 0); |
- histogram_tester_.ExpectTotalCount(kErrorAtFirstSuccess, 0); |
- histogram_tester_.ExpectTotalCount(kCountAtStop, 1); |
- histogram_tester_.ExpectTotalCount(kErrorAtStop, 1); |
-} |
- |
- |
-TEST_F(NetErrorHelperCoreTest, ExplicitReloadSucceeds) { |
- DoErrorLoad(net::ERR_CONNECTION_RESET); |
- EXPECT_EQ(0, reload_count()); |
- core()->ExecuteButtonPress(NetErrorHelperCore::RELOAD_BUTTON); |
- EXPECT_EQ(1, reload_count()); |
-} |
- |
-TEST_F(NetErrorHelperCoreTest, ExplicitLoadStaleSucceeds) { |
- DoErrorLoad(net::ERR_CONNECTION_RESET); |
- EXPECT_EQ(0, load_stale_count()); |
- core()->ExecuteButtonPress(NetErrorHelperCore::LOAD_STALE_BUTTON); |
- EXPECT_EQ(1, load_stale_count()); |
- EXPECT_EQ(GURL(kFailedUrl), load_stale_url()); |
-} |
- |
-} // namespace |