Index: chrome/browser/alternate_nav_url_fetcher.cc |
diff --git a/chrome/browser/alternate_nav_url_fetcher.cc b/chrome/browser/alternate_nav_url_fetcher.cc |
deleted file mode 100644 |
index 4915f9ed514bd4ea614742c6cdd0e187af1bff84..0000000000000000000000000000000000000000 |
--- a/chrome/browser/alternate_nav_url_fetcher.cc |
+++ /dev/null |
@@ -1,152 +0,0 @@ |
-// Copyright (c) 2012 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/browser/alternate_nav_url_fetcher.h" |
- |
-#include "chrome/browser/api/infobars/infobar_service.h" |
-#include "chrome/browser/infobars/alternate_nav_infobar_delegate.h" |
-#include "chrome/browser/intranet_redirect_detector.h" |
-#include "chrome/browser/profiles/profile.h" |
-#include "chrome/common/chrome_notification_types.h" |
-#include "content/public/browser/navigation_controller.h" |
-#include "content/public/browser/notification_service.h" |
-#include "content/public/browser/render_process_host.h" |
-#include "content/public/browser/render_view_host.h" |
-#include "content/public/browser/web_contents.h" |
-#include "net/base/load_flags.h" |
-#include "net/base/registry_controlled_domains/registry_controlled_domain.h" |
-#include "net/url_request/url_fetcher.h" |
-#include "net/url_request/url_request.h" |
- |
-using content::NavigationController; |
- |
-AlternateNavURLFetcher::AlternateNavURLFetcher( |
- const GURL& alternate_nav_url) |
- : alternate_nav_url_(alternate_nav_url), |
- controller_(NULL), |
- state_(NOT_STARTED), |
- navigated_to_entry_(false) { |
- registrar_.Add(this, content::NOTIFICATION_NAV_ENTRY_PENDING, |
- content::NotificationService::AllSources()); |
- registrar_.Add(this, chrome::NOTIFICATION_INSTANT_COMMITTED, |
- content::NotificationService::AllSources()); |
-} |
- |
-AlternateNavURLFetcher::~AlternateNavURLFetcher() { |
-} |
- |
-void AlternateNavURLFetcher::Observe( |
- int type, |
- const content::NotificationSource& source, |
- const content::NotificationDetails& details) { |
- switch (type) { |
- case content::NOTIFICATION_NAV_ENTRY_PENDING: { |
- // If we've already received a notification for the same controller, we |
- // should delete ourselves as that indicates that the page is being |
- // re-loaded so this instance is now stale. |
- NavigationController* controller = |
- content::Source<NavigationController>(source).ptr(); |
- if (controller_ == controller) { |
- delete this; |
- } else if (!controller_) { |
- // Start listening for the commit notification. |
- DCHECK(controller->GetPendingEntry()); |
- registrar_.Add(this, content::NOTIFICATION_NAV_ENTRY_COMMITTED, |
- content::Source<NavigationController>( |
- controller)); |
- StartFetch(controller); |
- } |
- break; |
- } |
- |
- case chrome::NOTIFICATION_INSTANT_COMMITTED: { |
- // See above. |
- NavigationController* controller = |
- &content::Source<content::WebContents>(source)->GetController(); |
- if (controller_ == controller) { |
- delete this; |
- } else if (!controller_) { |
- navigated_to_entry_ = true; |
- StartFetch(controller); |
- } |
- break; |
- } |
- |
- case content::NOTIFICATION_NAV_ENTRY_COMMITTED: |
- // The page was navigated, we can show the infobar now if necessary. |
- registrar_.Remove(this, content::NOTIFICATION_NAV_ENTRY_COMMITTED, |
- content::Source<NavigationController>(controller_)); |
- navigated_to_entry_ = true; |
- ShowInfobarIfPossible(); |
- // WARNING: |this| may be deleted! |
- break; |
- |
- case content::NOTIFICATION_WEB_CONTENTS_DESTROYED: |
- // We have been closed. In order to prevent the URLFetcher from trying to |
- // access the controller that will be invalid, we delete ourselves. |
- // This deletes the URLFetcher and insures its callback won't be called. |
- delete this; |
- break; |
- |
- default: |
- NOTREACHED(); |
- } |
-} |
- |
-void AlternateNavURLFetcher::OnURLFetchComplete( |
- const net::URLFetcher* source) { |
- DCHECK_EQ(fetcher_.get(), source); |
- SetStatusFromURLFetch( |
- source->GetURL(), source->GetStatus(), source->GetResponseCode()); |
- ShowInfobarIfPossible(); |
- // WARNING: |this| may be deleted! |
-} |
- |
-void AlternateNavURLFetcher::StartFetch(NavigationController* controller) { |
- controller_ = controller; |
- content::WebContents* web_contents = controller_->GetWebContents(); |
- registrar_.Add(this, content::NOTIFICATION_WEB_CONTENTS_DESTROYED, |
- content::Source<content::WebContents>(web_contents)); |
- |
- DCHECK_EQ(NOT_STARTED, state_); |
- state_ = IN_PROGRESS; |
- fetcher_.reset(net::URLFetcher::Create(GURL(alternate_nav_url_), |
- net::URLFetcher::HEAD, this)); |
- fetcher_->SetLoadFlags(net::LOAD_DO_NOT_SAVE_COOKIES); |
- fetcher_->SetRequestContext( |
- controller_->GetBrowserContext()->GetRequestContext()); |
- fetcher_->SetStopOnRedirect(true); |
- fetcher_->Start(); |
-} |
- |
-void AlternateNavURLFetcher::SetStatusFromURLFetch( |
- const GURL& url, |
- const net::URLRequestStatus& status, |
- int response_code) { |
- if (status.is_success()) { |
- // HTTP 2xx, 401, and 407 all indicate that the target address exists. |
- state_ = (((response_code / 100) == 2) || (response_code == 401) || |
- (response_code == 407)) ? SUCCEEDED : FAILED; |
- } else { |
- // If we got HTTP 3xx, we'll have auto-canceled; treat this as evidence the |
- // target address exists as long as we're not redirected to a common |
- // location every time, lest we annoy the user with infobars on everything |
- // they type. See comments on IntranetRedirectDetector. |
- state_ = ((status.status() == net::URLRequestStatus::CANCELED) && |
- ((response_code / 100) == 3) && |
- !net::RegistryControlledDomainService::SameDomainOrHost(url, |
- IntranetRedirectDetector::RedirectOrigin())) ? SUCCEEDED : FAILED; |
- } |
-} |
- |
-void AlternateNavURLFetcher::ShowInfobarIfPossible() { |
- if (navigated_to_entry_ && (state_ == SUCCEEDED)) { |
- AlternateNavInfoBarDelegate::Create( |
- InfoBarService::FromWebContents(controller_->GetWebContents()), |
- alternate_nav_url_); |
- } else if (state_ != FAILED) { |
- return; |
- } |
- delete this; |
-} |