| Index: chrome/browser/alternate_nav_url_fetcher.cc
|
| ===================================================================
|
| --- chrome/browser/alternate_nav_url_fetcher.cc (revision 35740)
|
| +++ chrome/browser/alternate_nav_url_fetcher.cc (working copy)
|
| @@ -1,4 +1,4 @@
|
| -// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
|
| +// Copyright (c) 2010 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.
|
|
|
| @@ -6,6 +6,7 @@
|
|
|
| #include "app/l10n_util.h"
|
| #include "app/resource_bundle.h"
|
| +#include "chrome/browser/intranet_redirect_detector.h"
|
| #include "chrome/browser/profile.h"
|
| #include "chrome/browser/tab_contents/navigation_controller.h"
|
| #include "chrome/browser/tab_contents/navigation_entry.h"
|
| @@ -82,37 +83,7 @@
|
| const ResponseCookies& cookies,
|
| const std::string& data) {
|
| DCHECK(fetcher_.get() == source);
|
| - if (status.is_success() &&
|
| - // HTTP 2xx, 401, and 407 all indicate that the target address exists.
|
| - (((response_code / 100) == 2) ||
|
| - (response_code == 401) || (response_code == 407))) {
|
| - state_ = SUCCEEDED;
|
| -
|
| - // The following TLD+1s are used as destinations by ISPs/DNS providers/etc.
|
| - // who return provider-controlled pages to arbitrary user navigation
|
| - // attempts. Because this can result in infobars on large fractions of user
|
| - // searches, we don't show automatic infobars for these. Note that users
|
| - // can still choose to explicitly navigate to or search for pages in these
|
| - // domains, and can still get infobars for cases that wind up on other
|
| - // domains (e.g. legit intranet sites), we're just trying to avoid
|
| - // erroneously harassing the user with our own UI prompts.
|
| - const char* kBlacklistedSites[] = {
|
| - // NOTE: Use complete URLs, because GURL() doesn't do fixup!
|
| - "http://comcast.com/",
|
| - "http://opendns.com/",
|
| - "http://verizon.net/",
|
| - };
|
| - for (size_t i = 0; i < arraysize(kBlacklistedSites); ++i) {
|
| - if (net::RegistryControlledDomainService::SameDomainOrHost(
|
| - url, GURL(kBlacklistedSites[i]))) {
|
| - state_ = FAILED;
|
| - break;
|
| - }
|
| - }
|
| - } else {
|
| - state_ = FAILED;
|
| - }
|
| -
|
| + SetStatusFromURLFetch(url, status, response_code);
|
| ShowInfobarIfPossible();
|
| }
|
|
|
| @@ -150,6 +121,47 @@
|
| delete this;
|
| }
|
|
|
| +void AlternateNavURLFetcher::SetStatusFromURLFetch(
|
| + const GURL& url,
|
| + const URLRequestStatus& status,
|
| + int response_code) {
|
| + if (!status.is_success() ||
|
| + // HTTP 2xx, 401, and 407 all indicate that the target address exists.
|
| + (((response_code / 100) != 2) &&
|
| + (response_code != 401) && (response_code != 407)) ||
|
| + // Fail if we're redirected to a common location. This is the "automatic
|
| + // heuristic" version of the explicit blacklist below; see comments there.
|
| + net::RegistryControlledDomainService::SameDomainOrHost(url,
|
| + IntranetRedirectDetector::RedirectOrigin())) {
|
| + state_ = FAILED;
|
| + return;
|
| + }
|
| +
|
| + // The following TLD+1s are used as destinations by ISPs/DNS providers/etc.
|
| + // who return provider-controlled pages to arbitrary user navigation attempts.
|
| + // Because this can result in infobars on large fractions of user searches, we
|
| + // don't show automatic infobars for these. Note that users can still choose
|
| + // to explicitly navigate to or search for pages in these domains, and can
|
| + // still get infobars for cases that wind up on other domains (e.g. legit
|
| + // intranet sites), we're just trying to avoid erroneously harassing the user
|
| + // with our own UI prompts.
|
| + const char* kBlacklistedSites[] = {
|
| + // NOTE: Use complete URLs, because GURL() doesn't do fixup!
|
| + "http://comcast.com/",
|
| + "http://opendns.com/",
|
| + "http://verizon.net/",
|
| + };
|
| + for (size_t i = 0; i < arraysize(kBlacklistedSites); ++i) {
|
| + if (net::RegistryControlledDomainService::SameDomainOrHost(url,
|
| + GURL(kBlacklistedSites[i]))) {
|
| + state_ = FAILED;
|
| + return;
|
| + }
|
| + }
|
| +
|
| + state_ = SUCCEEDED;
|
| +}
|
| +
|
| void AlternateNavURLFetcher::ShowInfobarIfPossible() {
|
| if (!navigated_to_entry_ || state_ != SUCCEEDED) {
|
| if (state_ == FAILED)
|
|
|