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

Unified Diff: chrome/renderer/net/net_error_helper_core_unittest.cc

Issue 137623011: Switch to using the new Link Doctor API. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Really fix ChromeOS Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/renderer/net/net_error_helper_core_unittest.cc
===================================================================
--- chrome/renderer/net/net_error_helper_core_unittest.cc (revision 248295)
+++ chrome/renderer/net/net_error_helper_core_unittest.cc (working copy)
@@ -4,8 +4,10 @@
#include "chrome/renderer/net/net_error_helper_core.h"
+#include "base/json/json_writer.h"
#include "base/logging.h"
#include "base/strings/stringprintf.h"
+#include "base/values.h"
#include "chrome/common/net/net_error_info.h"
#include "net/base/net_errors.h"
#include "testing/gtest/include/gtest/gtest.h"
@@ -18,8 +20,51 @@
const char kFailedUrl[] = "http://failed/";
const char kFailedHttpsUrl[] = "https://failed/";
const char kLinkDoctorUrl[] = "http://link.doctor/";
-const char kLinkDoctorBody[] = "Link Doctor Body";
+const char kSearchUrl[] = "http://www.google.com/search";
+const char kSuggestedSearchTerms[] = "Happy Goats";
+struct LinkDoctorSuggestion {
+ const char* correction_type;
+ const char* url_correction;
+ 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->SetBoolean("isPorn", is_porn);
+ dict->SetBoolean("isSoftPorn", is_soft_porn);
+ return dict;
+ }
+};
+
+const LinkDoctorSuggestion kDefaultSuggestions[] = {
+ {"reloadPage", kFailedUrl, false, false},
+ {"urlCorrection", "http://somewhere_else/", false, false},
+ {"contentOverlap", "http://somewhere_else_entirely/", false, false},
+
+ // Porn should be ignored.
+ {"emphasizedUrlCorrection", "http://porn/", true, false},
+ {"sitemap", "http://more_porn/", false, true},
+
+ {"webSearchQuery", kSuggestedSearchTerms, false, false},
+};
+
+std::string SuggestionsToResponse(const LinkDoctorSuggestion* suggestions,
+ int num_suggestions) {
+ base::ListValue* url_corrections = new base::ListValue();
+ for (int i = 0; i < num_suggestions; ++i)
+ url_corrections->Append(suggestions[i].ToValue());
+
+ scoped_ptr<base::DictionaryValue> response(new base::DictionaryValue());
+ response->Set("result.UrlCorrections", url_corrections);
+
+ std::string json;
+ base::JSONWriter::Write(response.get(), &json);
+ return json;
+}
+
// 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) {
@@ -88,24 +133,54 @@
const std::string& last_error_html() const { return last_error_html_; }
int error_html_update_count() const { return error_html_update_count_; }
- void LinkDoctorLoadSuccess() {
- LinkDoctorLoadFinished(kLinkDoctorBody);
+ const LocalizedError::ErrorPageParams* last_error_page_params() const {
+ return last_error_page_params_.get();
}
+ void LinkDoctorLoadSuccess(const LinkDoctorSuggestion* suggestions,
+ int num_suggestions) {
+ LinkDoctorLoadFinished(SuggestionsToResponse(suggestions, num_suggestions));
+ }
+
void LinkDoctorLoadFailure() {
LinkDoctorLoadFinished("");
}
- private:
void LinkDoctorLoadFinished(const std::string& result) {
url_being_fetched_ = GURL();
- core().OnAlternateErrorPageFetched(result);
+ core().OnAlternateErrorPageFetched(result, "en", false);
}
+ void EnableLinkDoctor() {
+ SetLinkDoctorURL(GURL(kLinkDoctorUrl));
+ }
+
+ void DisableLinkDoctor() {
+ SetLinkDoctorURL(GURL());
+ }
+
+ void ExpectDefaultLinkDoctorSuggestions() 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 SetLinkDoctorURL(const GURL& link_doctor_url) {
+ core().OnSetLinkDoctorInfo(link_doctor_url, "en", "us", "api_key",
+ GURL(kSearchUrl));
+ }
+
// NetErrorHelperCore::Delegate implementation:
- virtual void GenerateLocalizedErrorPage(const WebURLError& error,
- bool is_failed_post,
- std::string* html) const OVERRIDE {
+ virtual void GenerateLocalizedErrorPage(
+ const WebURLError& error,
+ bool is_failed_post,
+ scoped_ptr<LocalizedError::ErrorPageParams> params,
+ std::string* html) const OVERRIDE {
+ last_error_page_params_.reset(params.release());
*html = ErrorToString(error, is_failed_post);
}
@@ -118,24 +193,30 @@
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 FetchErrorPage(const GURL& url) OVERRIDE {
+ virtual void FetchErrorPage(
+ const GURL& fix_url,
+ const std::string& fix_url_request_body) OVERRIDE {
EXPECT_TRUE(url_being_fetched_.is_empty());
- EXPECT_TRUE(url.is_valid());
- EXPECT_NE(std::string::npos, url.spec().find(kLinkDoctorUrl));
+ EXPECT_TRUE(request_body_.empty());
+ EXPECT_EQ(GURL(kLinkDoctorUrl), fix_url);
- url_being_fetched_ = url;
+ url_being_fetched_ = fix_url;
+ request_body_ = fix_url_request_body;
}
virtual void CancelFetchErrorPage() OVERRIDE {
url_being_fetched_ = GURL();
+ request_body_.clear();
}
NetErrorHelperCore core_;
GURL url_being_fetched_;
+ std::string request_body_;
// Contains the information passed to the last call to UpdateErrorPage, as a
// string.
@@ -147,6 +228,9 @@
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_;
};
//------------------------------------------------------------------------------
@@ -167,7 +251,7 @@
}
TEST_F(NetErrorHelperCoreTest, SuccessfulPageLoadWithLinkDoctor) {
- core().set_alt_error_page_url(GURL(kLinkDoctorUrl));
+ EnableLinkDoctor();
core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
NetErrorHelperCore::NON_ERROR_PAGE);
core().OnCommitLoad(NetErrorHelperCore::MAIN_FRAME);
@@ -199,7 +283,7 @@
}
TEST_F(NetErrorHelperCoreTest, MainFrameNonDnsErrorWithLinkDoctor) {
- core().set_alt_error_page_url(GURL(kLinkDoctorUrl));
+ EnableLinkDoctor();
// Original page starts loading.
core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
@@ -280,7 +364,7 @@
}
TEST_F(NetErrorHelperCoreTest, SubFrameDnsErrorWithLinkDoctor) {
- core().set_alt_error_page_url(GURL(kLinkDoctorUrl));
+ EnableLinkDoctor();
// Original page starts loading.
core().OnStartLoad(NetErrorHelperCore::SUB_FRAME,
@@ -831,7 +915,7 @@
// Check that the Link Doctor is not used for HTTPS URLs.
TEST_F(NetErrorHelperCoreTest, NoLinkDoctorForHttps) {
// Original page starts loading.
- core().set_alt_error_page_url(GURL(kLinkDoctorUrl));
+ EnableLinkDoctor();
core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
NetErrorHelperCore::NON_ERROR_PAGE);
@@ -846,6 +930,7 @@
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,
@@ -853,12 +938,14 @@
core().OnCommitLoad(NetErrorHelperCore::MAIN_FRAME);
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);
@@ -869,7 +956,7 @@
// Then the probe results come in.
TEST_F(NetErrorHelperCoreTest, LinkDoctorSucceedsBeforeProbe) {
// Original page starts loading.
- core().set_alt_error_page_url(GURL(kLinkDoctorUrl));
+ EnableLinkDoctor();
core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
NetErrorHelperCore::NON_ERROR_PAGE);
@@ -880,26 +967,30 @@
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);
+ NetErrorHelperCore::ERROR_PAGE);
core().OnCommitLoad(NetErrorHelperCore::MAIN_FRAME);
// Link doctor 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());
// Link Doctor is retrieved.
- LinkDoctorLoadSuccess();
+ LinkDoctorLoadSuccess(kDefaultSuggestions, arraysize(kDefaultSuggestions));
EXPECT_EQ(1, error_html_update_count());
- EXPECT_EQ(kLinkDoctorBody, last_error_html());
+ EXPECT_EQ(NetErrorString(net::ERR_NAME_NOT_RESOLVED), last_error_html());
+ ExpectDefaultLinkDoctorSuggestions();
EXPECT_FALSE(is_url_being_fetched());
// Link Doctor page loads.
core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
- NetErrorHelperCore::ERROR_PAGE);
+ NetErrorHelperCore::ERROR_PAGE);
core().OnCommitLoad(NetErrorHelperCore::MAIN_FRAME);
core().OnFinishLoad(NetErrorHelperCore::MAIN_FRAME);
@@ -915,7 +1006,7 @@
// the Link Doctor request succeeds.
TEST_F(NetErrorHelperCoreTest, LinkDoctorSucceedsAfterProbes) {
// Original page starts loading.
- core().set_alt_error_page_url(GURL(kLinkDoctorUrl));
+ EnableLinkDoctor();
core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
NetErrorHelperCore::NON_ERROR_PAGE);
@@ -932,19 +1023,21 @@
core().OnCommitLoad(NetErrorHelperCore::MAIN_FRAME);
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());
// Link Doctor is retrieved.
EXPECT_TRUE(is_url_being_fetched());
- LinkDoctorLoadSuccess();
+ LinkDoctorLoadSuccess(kDefaultSuggestions, arraysize(kDefaultSuggestions));
EXPECT_EQ(1, error_html_update_count());
- EXPECT_EQ(kLinkDoctorBody, last_error_html());
+ EXPECT_EQ(NetErrorString(net::ERR_NAME_NOT_RESOLVED), last_error_html());
+ ExpectDefaultLinkDoctorSuggestions();
EXPECT_FALSE(is_url_being_fetched());
// Link Doctor page loads.
@@ -960,7 +1053,7 @@
// does not trigger DNS probes.
TEST_F(NetErrorHelperCoreTest, LinkDoctorFailsLoadNoProbes) {
// Original page starts loading.
- core().set_alt_error_page_url(GURL(kLinkDoctorUrl));
+ EnableLinkDoctor();
core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
NetErrorHelperCore::NON_ERROR_PAGE);
@@ -984,6 +1077,7 @@
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,
@@ -1003,7 +1097,7 @@
// results are received.
TEST_F(NetErrorHelperCoreTest, LinkDoctorFailsLoadBeforeProbe) {
// Original page starts loading.
- core().set_alt_error_page_url(GURL(kLinkDoctorUrl));
+ EnableLinkDoctor();
core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
NetErrorHelperCore::NON_ERROR_PAGE);
@@ -1055,7 +1149,7 @@
// The Link Doctor request fails after receiving probe results.
TEST_F(NetErrorHelperCoreTest, LinkDoctorFailsAfterProbe) {
// Original page starts loading.
- core().set_alt_error_page_url(GURL(kLinkDoctorUrl));
+ EnableLinkDoctor();
core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
NetErrorHelperCore::NON_ERROR_PAGE);
@@ -1104,7 +1198,7 @@
// by a new navigation before the blank page commits.
TEST_F(NetErrorHelperCoreTest, LinkDoctorInterruptedBeforeCommit) {
// Original page starts loading.
- core().set_alt_error_page_url(GURL(kLinkDoctorUrl));
+ EnableLinkDoctor();
core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
NetErrorHelperCore::NON_ERROR_PAGE);
@@ -1142,7 +1236,7 @@
// by a new navigation before the blank page finishes loading.
TEST_F(NetErrorHelperCoreTest, LinkDoctorInterruptedBeforeLoad) {
// Original page starts loading.
- core().set_alt_error_page_url(GURL(kLinkDoctorUrl));
+ EnableLinkDoctor();
core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
NetErrorHelperCore::NON_ERROR_PAGE);
@@ -1176,7 +1270,7 @@
// navigation fails and then loads the link doctor page again (Successfully).
TEST_F(NetErrorHelperCoreTest, LinkDoctorInterrupted) {
// Original page starts loading.
- core().set_alt_error_page_url(GURL(kLinkDoctorUrl));
+ EnableLinkDoctor();
core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
NetErrorHelperCore::NON_ERROR_PAGE);
@@ -1218,9 +1312,10 @@
EXPECT_TRUE(is_url_being_fetched());
// Link Doctor load succeeds.
- LinkDoctorLoadSuccess();
+ LinkDoctorLoadSuccess(kDefaultSuggestions, arraysize(kDefaultSuggestions));
EXPECT_EQ(1, error_html_update_count());
- EXPECT_EQ(kLinkDoctorBody, last_error_html());
+ EXPECT_EQ(NetErrorString(net::ERR_NAME_NOT_RESOLVED), last_error_html());
+ ExpectDefaultLinkDoctorSuggestions();
EXPECT_FALSE(is_url_being_fetched());
// Probe statuses come in, and are ignored.
@@ -1234,7 +1329,7 @@
// the link doctor page again (Which fails).
TEST_F(NetErrorHelperCoreTest, LinkDoctorStopped) {
// Original page starts loading.
- core().set_alt_error_page_url(GURL(kLinkDoctorUrl));
+ EnableLinkDoctor();
core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
NetErrorHelperCore::NON_ERROR_PAGE);
@@ -1302,3 +1397,253 @@
last_error_html());
EXPECT_EQ(1, error_html_update_count());
}
+
+// Check the case the Link Doctor is disabled while the blank page (Loaded
+// before the Link Doctor) is being loaded.
+TEST_F(NetErrorHelperCoreTest, LinkDoctorDisabledBeforeFetch) {
+ // Original page starts loading.
+ EnableLinkDoctor();
+ core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
+ NetErrorHelperCore::NON_ERROR_PAGE);
+
+ // It fails, and a Link Doctor page is 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);
+ // Link Doctor is disabled.
+ DisableLinkDoctor();
+ core().OnCommitLoad(NetErrorHelperCore::MAIN_FRAME);
+ core().OnFinishLoad(NetErrorHelperCore::MAIN_FRAME);
+ EXPECT_TRUE(is_url_being_fetched());
+ EXPECT_FALSE(last_error_page_params());
+
+ // Link Doctor is retrieved.
+ LinkDoctorLoadSuccess(kDefaultSuggestions, arraysize(kDefaultSuggestions));
+ EXPECT_EQ(1, error_html_update_count());
+ EXPECT_EQ(NetErrorString(net::ERR_NAME_NOT_RESOLVED), last_error_html());
+ EXPECT_FALSE(is_url_being_fetched());
+ ExpectDefaultLinkDoctorSuggestions();
+
+ // Link Doctor page loads.
+ core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
+ NetErrorHelperCore::ERROR_PAGE);
+ core().OnCommitLoad(NetErrorHelperCore::MAIN_FRAME);
+ core().OnFinishLoad(NetErrorHelperCore::MAIN_FRAME);
+ EXPECT_EQ(1, error_html_update_count());
+ EXPECT_EQ(0, update_count());
+}
+
+// Check the case the Link Doctor is disabled while fetching the Link Doctor.
+TEST_F(NetErrorHelperCoreTest, LinkDoctorDisabledDuringFetch) {
+ // Original page starts loading.
+ EnableLinkDoctor();
+ core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
+ NetErrorHelperCore::NON_ERROR_PAGE);
+
+ // It fails, and a Link Doctor page is 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);
+ core().OnFinishLoad(NetErrorHelperCore::MAIN_FRAME);
+ EXPECT_TRUE(is_url_being_fetched());
+ EXPECT_FALSE(last_error_page_params());
+
+ // Link Doctor is disabled.
+ DisableLinkDoctor();
+
+ // Link Doctor is retrieved.
+ LinkDoctorLoadSuccess(kDefaultSuggestions, arraysize(kDefaultSuggestions));
+ EXPECT_EQ(1, error_html_update_count());
+ EXPECT_EQ(NetErrorString(net::ERR_NAME_NOT_RESOLVED), last_error_html());
+ EXPECT_FALSE(is_url_being_fetched());
+ ExpectDefaultLinkDoctorSuggestions();
+
+ // Link Doctor page loads.
+ core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
+ NetErrorHelperCore::ERROR_PAGE);
+ core().OnCommitLoad(NetErrorHelperCore::MAIN_FRAME);
+ core().OnFinishLoad(NetErrorHelperCore::MAIN_FRAME);
+ EXPECT_EQ(1, error_html_update_count());
+ EXPECT_EQ(0, update_count());
+}
+
+// Checks the Link Doctor is used when there are no search suggestions.
+TEST_F(NetErrorHelperCoreTest, LinkDoctorWithoutSearchSuggestion) {
+ const LinkDoctorSuggestion kSuggestions[] = {
+ {"urlCorrection", "http://somewhere_else/", false, false},
+ };
+
+ // Original page starts loading.
+ EnableLinkDoctor();
+ core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
+ NetErrorHelperCore::NON_ERROR_PAGE);
+
+ // It fails, and a Link Doctor page is 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);
+ core().OnFinishLoad(NetErrorHelperCore::MAIN_FRAME);
+ EXPECT_TRUE(is_url_being_fetched());
+ EXPECT_FALSE(last_error_page_params());
+
+ // Link Doctor is retrieved.
+ LinkDoctorLoadSuccess(kSuggestions, arraysize(kSuggestions));
+ 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);
+
+ // Link Doctor page loads.
+ core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
+ NetErrorHelperCore::ERROR_PAGE);
+ core().OnCommitLoad(NetErrorHelperCore::MAIN_FRAME);
+ core().OnFinishLoad(NetErrorHelperCore::MAIN_FRAME);
+ EXPECT_EQ(1, error_html_update_count());
+ EXPECT_EQ(0, update_count());
+}
+
+// Checks the Link Doctor is used when there are only search suggestions.
+TEST_F(NetErrorHelperCoreTest, LinkDoctorOnlySearchSuggestion) {
+ const LinkDoctorSuggestion kSuggestions[] = {
+ {"webSearchQuery", kSuggestedSearchTerms, false, false},
+ };
+
+ // Original page starts loading.
+ EnableLinkDoctor();
+ core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
+ NetErrorHelperCore::NON_ERROR_PAGE);
+
+ // It fails, and a Link Doctor page is 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);
+ core().OnFinishLoad(NetErrorHelperCore::MAIN_FRAME);
+ EXPECT_TRUE(is_url_being_fetched());
+ EXPECT_FALSE(last_error_page_params());
+
+ // Link Doctor is retrieved.
+ LinkDoctorLoadSuccess(kSuggestions, arraysize(kSuggestions));
+ 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);
+
+ // Link Doctor page loads.
+ core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
+ NetErrorHelperCore::ERROR_PAGE);
+ core().OnCommitLoad(NetErrorHelperCore::MAIN_FRAME);
+ core().OnFinishLoad(NetErrorHelperCore::MAIN_FRAME);
+ EXPECT_EQ(1, error_html_update_count());
+ EXPECT_EQ(0, update_count());
+}
+
+// The Link Doctor returns a non-JSON result.
+TEST_F(NetErrorHelperCoreTest, LinkDoctorReturnsNonJsonResult) {
+ // Original page starts loading.
+ EnableLinkDoctor();
+ core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
+ NetErrorHelperCore::NON_ERROR_PAGE);
+
+ // It fails, and a Link Doctor page is 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);
+ core().OnFinishLoad(NetErrorHelperCore::MAIN_FRAME);
+
+ // Link Doctor load fails, final error page is shown.
+ EXPECT_TRUE(is_url_being_fetched());
+ LinkDoctorLoadFinished("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);
+ core().OnFinishLoad(NetErrorHelperCore::MAIN_FRAME);
+}
+
+// The Link Doctor returns a JSON result that isn't a valid response.
+TEST_F(NetErrorHelperCoreTest, LinkDoctorReturnsInvalidJsonResult) {
+ // Original page starts loading.
+ EnableLinkDoctor();
+ core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
+ NetErrorHelperCore::NON_ERROR_PAGE);
+
+ // It fails, and a Link Doctor page is 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);
+ core().OnFinishLoad(NetErrorHelperCore::MAIN_FRAME);
+
+ // Link Doctor load fails, final error page is shown.
+ EXPECT_TRUE(is_url_being_fetched());
+ LinkDoctorLoadFinished("{\"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);
+ core().OnFinishLoad(NetErrorHelperCore::MAIN_FRAME);
+}

Powered by Google App Engine
This is Rietveld 408576698