Move ExtensionDownloader to //extensions

This is a mechanical move with opportunistic clang_format
applied for cleanup.

This also introduces a dependency on //google_apis within
//extensions/browser.

BUG=398671

Review URL: https://codereview.chromium.org/654363002

Cr-Commit-Position: refs/heads/master@{#299957}
diff --git a/chrome/browser/extensions/api/management/management_browsertest.cc b/chrome/browser/extensions/api/management/management_browsertest.cc
index 4c4628a9..11d591f 100644
--- a/chrome/browser/extensions/api/management/management_browsertest.cc
+++ b/chrome/browser/extensions/api/management/management_browsertest.cc
@@ -12,7 +12,6 @@
 #include "chrome/browser/extensions/extension_browsertest.h"
 #include "chrome/browser/extensions/extension_management.h"
 #include "chrome/browser/extensions/extension_service.h"
-#include "chrome/browser/extensions/updater/extension_downloader.h"
 #include "chrome/browser/extensions/updater/extension_updater.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ui/browser.h"
@@ -31,6 +30,7 @@
 #include "extensions/browser/extension_registry.h"
 #include "extensions/browser/extension_system.h"
 #include "extensions/browser/notification_types.h"
+#include "extensions/browser/updater/extension_downloader.h"
 #include "extensions/test/extension_test_message_listener.h"
 #include "net/url_request/test_url_request_interceptor.h"
 #include "net/url_request/url_fetcher.h"
diff --git a/chrome/browser/extensions/extension_service.cc b/chrome/browser/extensions/extension_service.cc
index 56838a7..7afdf07b 100644
--- a/chrome/browser/extensions/extension_service.cc
+++ b/chrome/browser/extensions/extension_service.cc
@@ -42,7 +42,6 @@
 #include "chrome/browser/extensions/shared_module_service.h"
 #include "chrome/browser/extensions/unpacked_installer.h"
 #include "chrome/browser/extensions/updater/chrome_extension_downloader_factory.h"
-#include "chrome/browser/extensions/updater/extension_downloader.h"
 #include "chrome/browser/extensions/updater/extension_updater.h"
 #include "chrome/browser/google/google_brand.h"
 #include "chrome/browser/profiles/profile.h"
@@ -72,6 +71,7 @@
 #include "extensions/browser/uninstall_reason.h"
 #include "extensions/browser/update_observer.h"
 #include "extensions/browser/updater/extension_cache.h"
+#include "extensions/browser/updater/extension_downloader.h"
 #include "extensions/common/extension_messages.h"
 #include "extensions/common/extension_urls.h"
 #include "extensions/common/feature_switch.h"
diff --git a/chrome/browser/extensions/updater/chrome_extension_downloader_factory.cc b/chrome/browser/extensions/updater/chrome_extension_downloader_factory.cc
index a0a5603..c167c93 100644
--- a/chrome/browser/extensions/updater/chrome_extension_downloader_factory.cc
+++ b/chrome/browser/extensions/updater/chrome_extension_downloader_factory.cc
@@ -4,7 +4,6 @@
 
 #include "chrome/browser/extensions/updater/chrome_extension_downloader_factory.h"
 
-#include "chrome/browser/extensions/updater/extension_downloader.h"
 #include "chrome/browser/google/google_brand.h"
 #include "chrome/browser/metrics/chrome_metrics_service_accessor.h"
 #include "chrome/browser/profiles/profile.h"
@@ -14,6 +13,7 @@
 #include "chrome/browser/ui/webui/signin/login_ui_service_factory.h"
 #include "components/omaha_query_params/omaha_query_params.h"
 #include "components/signin/core/browser/signin_manager.h"
+#include "extensions/browser/updater/extension_downloader.h"
 #include "google_apis/gaia/identity_provider.h"
 
 using extensions::ExtensionDownloader;
diff --git a/chrome/browser/extensions/updater/extension_downloader.cc b/chrome/browser/extensions/updater/extension_downloader.cc
deleted file mode 100644
index ef5c2bd4..0000000
--- a/chrome/browser/extensions/updater/extension_downloader.cc
+++ /dev/null
@@ -1,956 +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/extensions/updater/extension_downloader.h"
-
-#include <utility>
-
-#include "base/bind.h"
-#include "base/command_line.h"
-#include "base/files/file_path.h"
-#include "base/location.h"
-#include "base/logging.h"
-#include "base/metrics/histogram.h"
-#include "base/metrics/sparse_histogram.h"
-#include "base/profiler/scoped_profile.h"
-#include "base/stl_util.h"
-#include "base/strings/string_number_conversions.h"
-#include "base/strings/string_util.h"
-#include "base/strings/stringprintf.h"
-#include "base/time/time.h"
-#include "base/version.h"
-#include "content/public/browser/browser_thread.h"
-#include "content/public/browser/notification_details.h"
-#include "content/public/browser/notification_service.h"
-#include "extensions/browser/extensions_browser_client.h"
-#include "extensions/browser/notification_types.h"
-#include "extensions/browser/updater/extension_cache.h"
-#include "extensions/browser/updater/request_queue_impl.h"
-#include "extensions/browser/updater/safe_manifest_parser.h"
-#include "extensions/common/extension_urls.h"
-#include "extensions/common/manifest_url_handlers.h"
-#include "google_apis/gaia/identity_provider.h"
-#include "net/base/backoff_entry.h"
-#include "net/base/load_flags.h"
-#include "net/base/net_errors.h"
-#include "net/http/http_request_headers.h"
-#include "net/http/http_status_code.h"
-#include "net/url_request/url_fetcher.h"
-#include "net/url_request/url_request_context_getter.h"
-#include "net/url_request/url_request_status.h"
-
-using base::Time;
-using base::TimeDelta;
-using content::BrowserThread;
-
-namespace extensions {
-
-const char ExtensionDownloader::kBlacklistAppID[] = "com.google.crx.blacklist";
-
-namespace {
-
-const net::BackoffEntry::Policy kDefaultBackoffPolicy = {
-  // Number of initial errors (in sequence) to ignore before applying
-  // exponential back-off rules.
-  0,
-
-  // Initial delay for exponential back-off in ms.
-  2000,
-
-  // Factor by which the waiting time will be multiplied.
-  2,
-
-  // Fuzzing percentage. ex: 10% will spread requests randomly
-  // between 90%-100% of the calculated time.
-  0.1,
-
-  // Maximum amount of time we are willing to delay our request in ms.
-  -1,
-
-  // Time to keep an entry from being discarded even when it
-  // has no significant state, -1 to never discard.
-  -1,
-
-  // Don't use initial delay unless the last request was an error.
-  false,
-};
-
-const char kAuthUserQueryKey[] = "authuser";
-
-const int kMaxAuthUserValue = 10;
-const int kMaxOAuth2Attempts = 3;
-
-const char kNotFromWebstoreInstallSource[] = "notfromwebstore";
-const char kDefaultInstallSource[] = "";
-
-const char kGoogleDotCom[] = "google.com";
-const char kTokenServiceConsumerId[] = "extension_downloader";
-const char kWebstoreOAuth2Scope[] =
-    "https://www.googleapis.com/auth/chromewebstore.readonly";
-
-#define RETRY_HISTOGRAM(name, retry_count, url)                           \
-  if ((url).DomainIs(kGoogleDotCom)) {                                    \
-    UMA_HISTOGRAM_CUSTOM_COUNTS("Extensions." name "RetryCountGoogleUrl", \
-                                retry_count,                              \
-                                1,                                        \
-                                kMaxRetries,                              \
-                                kMaxRetries + 1);                         \
-  } else {                                                                \
-    UMA_HISTOGRAM_CUSTOM_COUNTS("Extensions." name "RetryCountOtherUrl",  \
-                                retry_count,                              \
-                                1,                                        \
-                                kMaxRetries,                              \
-                                kMaxRetries + 1);                         \
-  }
-
-bool ShouldRetryRequest(const net::URLRequestStatus& status,
-                        int response_code) {
-  // Retry if the response code is a server error, or the request failed because
-  // of network errors as opposed to file errors.
-  return ((response_code >= 500 && status.is_success()) ||
-          status.status() == net::URLRequestStatus::FAILED);
-}
-
-// This parses and updates a URL query such that the value of the |authuser|
-// query parameter is incremented by 1. If parameter was not present in the URL,
-// it will be added with a value of 1. All other query keys and values are
-// preserved as-is. Returns |false| if the user index exceeds a hard-coded
-// maximum.
-bool IncrementAuthUserIndex(GURL* url) {
-  int user_index = 0;
-  std::string old_query = url->query();
-  std::vector<std::string> new_query_parts;
-  url::Component query(0, old_query.length());
-  url::Component key, value;
-  while (url::ExtractQueryKeyValue(old_query.c_str(), &query, &key, &value)) {
-    std::string key_string = old_query.substr(key.begin, key.len);
-    std::string value_string = old_query.substr(value.begin, value.len);
-    if (key_string == kAuthUserQueryKey) {
-      base::StringToInt(value_string, &user_index);
-    } else {
-      new_query_parts.push_back(base::StringPrintf(
-          "%s=%s", key_string.c_str(), value_string.c_str()));
-    }
-  }
-  if (user_index >= kMaxAuthUserValue)
-    return false;
-  new_query_parts.push_back(
-      base::StringPrintf("%s=%d", kAuthUserQueryKey, user_index + 1));
-  std::string new_query_string = JoinString(new_query_parts, '&');
-  url::Component new_query(0, new_query_string.size());
-  url::Replacements<char> replacements;
-  replacements.SetQuery(new_query_string.c_str(), new_query);
-  *url = url->ReplaceComponents(replacements);
-  return true;
-}
-
-}  // namespace
-
-UpdateDetails::UpdateDetails(const std::string& id, const Version& version)
-    : id(id), version(version) {}
-
-UpdateDetails::~UpdateDetails() {}
-
-ExtensionDownloader::ExtensionFetch::ExtensionFetch()
-    : url(), credentials(CREDENTIALS_NONE) {
-}
-
-ExtensionDownloader::ExtensionFetch::ExtensionFetch(
-    const std::string& id,
-    const GURL& url,
-    const std::string& package_hash,
-    const std::string& version,
-    const std::set<int>& request_ids)
-    : id(id),
-      url(url),
-      package_hash(package_hash),
-      version(version),
-      request_ids(request_ids),
-      credentials(CREDENTIALS_NONE),
-      oauth2_attempt_count(0) {
-}
-
-ExtensionDownloader::ExtensionFetch::~ExtensionFetch() {}
-
-ExtensionDownloader::ExtensionDownloader(
-    ExtensionDownloaderDelegate* delegate,
-    net::URLRequestContextGetter* request_context)
-    : OAuth2TokenService::Consumer(kTokenServiceConsumerId),
-      delegate_(delegate),
-      request_context_(request_context),
-      manifests_queue_(&kDefaultBackoffPolicy,
-                       base::Bind(&ExtensionDownloader::CreateManifestFetcher,
-                                  base::Unretained(this))),
-      extensions_queue_(&kDefaultBackoffPolicy,
-                        base::Bind(&ExtensionDownloader::CreateExtensionFetcher,
-                                   base::Unretained(this))),
-      extension_cache_(NULL),
-      enable_extra_update_metrics_(false),
-      weak_ptr_factory_(this) {
-  DCHECK(delegate_);
-  DCHECK(request_context_.get());
-}
-
-ExtensionDownloader::~ExtensionDownloader() {}
-
-bool ExtensionDownloader::AddExtension(const Extension& extension,
-                                       int request_id) {
-  // Skip extensions with empty update URLs converted from user
-  // scripts.
-  if (extension.converted_from_user_script() &&
-      ManifestURL::GetUpdateURL(&extension).is_empty()) {
-    return false;
-  }
-
-  // If the extension updates itself from the gallery, ignore any update URL
-  // data.  At the moment there is no extra data that an extension can
-  // communicate to the the gallery update servers.
-  std::string update_url_data;
-  if (!ManifestURL::UpdatesFromGallery(&extension))
-    update_url_data = delegate_->GetUpdateUrlData(extension.id());
-
-  std::string install_source;
-  bool force_update = delegate_->ShouldForceUpdate(extension.id(),
-                                                   &install_source);
-  return AddExtensionData(extension.id(),
-                          *extension.version(),
-                          extension.GetType(),
-                          ManifestURL::GetUpdateURL(&extension),
-                          update_url_data,
-                          request_id,
-                          force_update,
-                          install_source);
-}
-
-bool ExtensionDownloader::AddPendingExtension(const std::string& id,
-                                              const GURL& update_url,
-                                              int request_id) {
-  // Use a zero version to ensure that a pending extension will always
-  // be updated, and thus installed (assuming all extensions have
-  // non-zero versions).
-  Version version("0.0.0.0");
-  DCHECK(version.IsValid());
-
-  return AddExtensionData(id,
-                          version,
-                          Manifest::TYPE_UNKNOWN,
-                          update_url,
-                          std::string(),
-                          request_id,
-                          false,
-                          std::string());
-}
-
-void ExtensionDownloader::StartAllPending(ExtensionCache* cache) {
-  if (cache) {
-    extension_cache_ = cache;
-    extension_cache_->Start(base::Bind(
-        &ExtensionDownloader::DoStartAllPending,
-        weak_ptr_factory_.GetWeakPtr()));
-  } else {
-    DoStartAllPending();
-  }
-}
-
-void ExtensionDownloader::DoStartAllPending() {
-  ReportStats();
-  url_stats_ = URLStats();
-
-  for (FetchMap::iterator it = fetches_preparing_.begin();
-       it != fetches_preparing_.end(); ++it) {
-    std::vector<linked_ptr<ManifestFetchData> >& list = it->second;
-    for (size_t i = 0; i < list.size(); ++i) {
-      StartUpdateCheck(scoped_ptr<ManifestFetchData>(list[i].release()));
-    }
-  }
-  fetches_preparing_.clear();
-}
-
-void ExtensionDownloader::StartBlacklistUpdate(
-    const std::string& version,
-    const ManifestFetchData::PingData& ping_data,
-    int request_id) {
-  // Note: it is very important that we use the https version of the update
-  // url here to avoid DNS hijacking of the blacklist, which is not validated
-  // by a public key signature like .crx files are.
-  scoped_ptr<ManifestFetchData> blacklist_fetch(CreateManifestFetchData(
-      extension_urls::GetWebstoreUpdateUrl(), request_id));
-  DCHECK(blacklist_fetch->base_url().SchemeIsSecure());
-  blacklist_fetch->AddExtension(kBlacklistAppID,
-                                version,
-                                &ping_data,
-                                std::string(),
-                                kDefaultInstallSource,
-                                false);
-  StartUpdateCheck(blacklist_fetch.Pass());
-}
-
-void ExtensionDownloader::SetWebstoreIdentityProvider(
-    scoped_ptr<IdentityProvider> identity_provider) {
-  identity_provider_.swap(identity_provider);
-}
-
-bool ExtensionDownloader::AddExtensionData(
-    const std::string& id,
-    const Version& version,
-    Manifest::Type extension_type,
-    const GURL& extension_update_url,
-    const std::string& update_url_data,
-    int request_id,
-    bool force_update,
-    const std::string& install_source_override) {
-  GURL update_url(extension_update_url);
-  // Skip extensions with non-empty invalid update URLs.
-  if (!update_url.is_empty() && !update_url.is_valid()) {
-    LOG(WARNING) << "Extension " << id << " has invalid update url "
-                 << update_url;
-    return false;
-  }
-
-  // Make sure we use SSL for store-hosted extensions.
-  if (extension_urls::IsWebstoreUpdateUrl(update_url) &&
-      !update_url.SchemeIsSecure())
-    update_url = extension_urls::GetWebstoreUpdateUrl();
-
-  // Skip extensions with empty IDs.
-  if (id.empty()) {
-    LOG(WARNING) << "Found extension with empty ID";
-    return false;
-  }
-
-  if (update_url.DomainIs(kGoogleDotCom)) {
-    url_stats_.google_url_count++;
-  } else if (update_url.is_empty()) {
-    url_stats_.no_url_count++;
-    // Fill in default update URL.
-    update_url = extension_urls::GetWebstoreUpdateUrl();
-  } else {
-    url_stats_.other_url_count++;
-  }
-
-  switch (extension_type) {
-    case Manifest::TYPE_THEME:
-      ++url_stats_.theme_count;
-      break;
-    case Manifest::TYPE_EXTENSION:
-    case Manifest::TYPE_USER_SCRIPT:
-      ++url_stats_.extension_count;
-      break;
-    case Manifest::TYPE_HOSTED_APP:
-    case Manifest::TYPE_LEGACY_PACKAGED_APP:
-      ++url_stats_.app_count;
-      break;
-    case Manifest::TYPE_PLATFORM_APP:
-      ++url_stats_.platform_app_count;
-      break;
-    case Manifest::TYPE_UNKNOWN:
-    default:
-      ++url_stats_.pending_count;
-      break;
-  }
-
-  std::vector<GURL> update_urls;
-  update_urls.push_back(update_url);
-  // If metrics are enabled, also add to ManifestFetchData for the
-  // webstore update URL.
-  if (!extension_urls::IsWebstoreUpdateUrl(update_url) &&
-      enable_extra_update_metrics_) {
-    update_urls.push_back(extension_urls::GetWebstoreUpdateUrl());
-  }
-
-  for (size_t i = 0; i < update_urls.size(); ++i) {
-    DCHECK(!update_urls[i].is_empty());
-    DCHECK(update_urls[i].is_valid());
-
-    std::string install_source = i == 0 ?
-        kDefaultInstallSource : kNotFromWebstoreInstallSource;
-    if (!install_source_override.empty()) {
-      install_source = install_source_override;
-    }
-
-    ManifestFetchData::PingData ping_data;
-    ManifestFetchData::PingData* optional_ping_data = NULL;
-    if (delegate_->GetPingDataForExtension(id, &ping_data))
-      optional_ping_data = &ping_data;
-
-    // Find or create a ManifestFetchData to add this extension to.
-    bool added = false;
-    FetchMap::iterator existing_iter = fetches_preparing_.find(
-        std::make_pair(request_id, update_urls[i]));
-    if (existing_iter != fetches_preparing_.end() &&
-        !existing_iter->second.empty()) {
-      // Try to add to the ManifestFetchData at the end of the list.
-      ManifestFetchData* existing_fetch = existing_iter->second.back().get();
-      if (existing_fetch->AddExtension(id, version.GetString(),
-                                       optional_ping_data, update_url_data,
-                                       install_source,
-                                       force_update)) {
-        added = true;
-      }
-    }
-    if (!added) {
-      // Otherwise add a new element to the list, if the list doesn't exist or
-      // if its last element is already full.
-      linked_ptr<ManifestFetchData> fetch(
-          CreateManifestFetchData(update_urls[i], request_id));
-      fetches_preparing_[std::make_pair(request_id, update_urls[i])].
-          push_back(fetch);
-      added = fetch->AddExtension(id, version.GetString(),
-                                  optional_ping_data,
-                                  update_url_data,
-                                  install_source,
-                                  force_update);
-      DCHECK(added);
-    }
-  }
-
-  return true;
-}
-
-void ExtensionDownloader::ReportStats() const {
-  UMA_HISTOGRAM_COUNTS_100("Extensions.UpdateCheckExtension",
-                           url_stats_.extension_count);
-  UMA_HISTOGRAM_COUNTS_100("Extensions.UpdateCheckTheme",
-                           url_stats_.theme_count);
-  UMA_HISTOGRAM_COUNTS_100("Extensions.UpdateCheckApp",
-                           url_stats_.app_count);
-  UMA_HISTOGRAM_COUNTS_100("Extensions.UpdateCheckPackagedApp",
-                           url_stats_.platform_app_count);
-  UMA_HISTOGRAM_COUNTS_100("Extensions.UpdateCheckPending",
-                           url_stats_.pending_count);
-  UMA_HISTOGRAM_COUNTS_100("Extensions.UpdateCheckGoogleUrl",
-                           url_stats_.google_url_count);
-  UMA_HISTOGRAM_COUNTS_100("Extensions.UpdateCheckOtherUrl",
-                           url_stats_.other_url_count);
-  UMA_HISTOGRAM_COUNTS_100("Extensions.UpdateCheckNoUrl",
-                           url_stats_.no_url_count);
-}
-
-void ExtensionDownloader::StartUpdateCheck(
-    scoped_ptr<ManifestFetchData> fetch_data) {
-  const std::set<std::string>& id_set(fetch_data->extension_ids());
-
-  if (!ExtensionsBrowserClient::Get()->IsBackgroundUpdateAllowed()) {
-    NotifyExtensionsDownloadFailed(id_set,
-                                   fetch_data->request_ids(),
-                                   ExtensionDownloaderDelegate::DISABLED);
-  }
-
-  RequestQueue<ManifestFetchData>::iterator i;
-  for (i = manifests_queue_.begin(); i != manifests_queue_.end(); ++i) {
-    if (fetch_data->full_url() == i->full_url()) {
-      // This url is already scheduled to be fetched.
-      i->Merge(*fetch_data);
-      return;
-    }
-  }
-
-  if (manifests_queue_.active_request() &&
-      manifests_queue_.active_request()->full_url() == fetch_data->full_url()) {
-    manifests_queue_.active_request()->Merge(*fetch_data);
-  } else {
-    UMA_HISTOGRAM_COUNTS("Extensions.UpdateCheckUrlLength",
-        fetch_data->full_url().possibly_invalid_spec().length());
-
-    manifests_queue_.ScheduleRequest(fetch_data.Pass());
-  }
-}
-
-void ExtensionDownloader::CreateManifestFetcher() {
-  if (VLOG_IS_ON(2)) {
-    std::vector<std::string> id_vector(
-        manifests_queue_.active_request()->extension_ids().begin(),
-        manifests_queue_.active_request()->extension_ids().end());
-    std::string id_list = JoinString(id_vector, ',');
-    VLOG(2) << "Fetching " << manifests_queue_.active_request()->full_url()
-            << " for " << id_list;
-  }
-
-  manifest_fetcher_.reset(net::URLFetcher::Create(
-      kManifestFetcherId, manifests_queue_.active_request()->full_url(),
-      net::URLFetcher::GET, this));
-  manifest_fetcher_->SetRequestContext(request_context_.get());
-  manifest_fetcher_->SetLoadFlags(net::LOAD_DO_NOT_SEND_COOKIES |
-                                  net::LOAD_DO_NOT_SAVE_COOKIES |
-                                  net::LOAD_DISABLE_CACHE);
-  // Update checks can be interrupted if a network change is detected; this is
-  // common for the retail mode AppPack on ChromeOS. Retrying once should be
-  // enough to recover in those cases; let the fetcher retry up to 3 times
-  // just in case. http://crosbug.com/130602
-  manifest_fetcher_->SetAutomaticallyRetryOnNetworkChanges(3);
-  manifest_fetcher_->Start();
-}
-
-void ExtensionDownloader::OnURLFetchComplete(
-    const net::URLFetcher* source) {
-  // TODO(vadimt): Remove ScopedProfile below once crbug.com/422577 is fixed.
-  tracked_objects::ScopedProfile tracking_profile(
-      FROM_HERE_WITH_EXPLICIT_FUNCTION(
-          "422577 ExtensionDownloader::OnURLFetchComplete"));
-
-  VLOG(2) << source->GetResponseCode() << " " << source->GetURL();
-
-  if (source == manifest_fetcher_.get()) {
-    std::string data;
-    source->GetResponseAsString(&data);
-    OnManifestFetchComplete(source->GetURL(),
-                            source->GetStatus(),
-                            source->GetResponseCode(),
-                            source->GetBackoffDelay(),
-                            data);
-  } else if (source == extension_fetcher_.get()) {
-    OnCRXFetchComplete(source,
-                       source->GetURL(),
-                       source->GetStatus(),
-                       source->GetResponseCode(),
-                       source->GetBackoffDelay());
-  } else {
-    NOTREACHED();
-  }
-}
-
-void ExtensionDownloader::OnManifestFetchComplete(
-    const GURL& url,
-    const net::URLRequestStatus& status,
-    int response_code,
-    const base::TimeDelta& backoff_delay,
-    const std::string& data) {
-  // We want to try parsing the manifest, and if it indicates updates are
-  // available, we want to fire off requests to fetch those updates.
-  if (status.status() == net::URLRequestStatus::SUCCESS &&
-      (response_code == 200 || (url.SchemeIsFile() && data.length() > 0))) {
-    RETRY_HISTOGRAM("ManifestFetchSuccess",
-                    manifests_queue_.active_request_failure_count(), url);
-    VLOG(2) << "beginning manifest parse for " << url;
-    scoped_refptr<SafeManifestParser> safe_parser(
-        new SafeManifestParser(
-            data,
-            manifests_queue_.reset_active_request().release(),
-            base::Bind(&ExtensionDownloader::HandleManifestResults,
-                       weak_ptr_factory_.GetWeakPtr())));
-    safe_parser->Start();
-  } else {
-    VLOG(1) << "Failed to fetch manifest '" << url.possibly_invalid_spec()
-            << "' response code:" << response_code;
-    if (ShouldRetryRequest(status, response_code) &&
-        manifests_queue_.active_request_failure_count() < kMaxRetries) {
-      manifests_queue_.RetryRequest(backoff_delay);
-    } else {
-      RETRY_HISTOGRAM("ManifestFetchFailure",
-                      manifests_queue_.active_request_failure_count(), url);
-      NotifyExtensionsDownloadFailed(
-          manifests_queue_.active_request()->extension_ids(),
-          manifests_queue_.active_request()->request_ids(),
-          ExtensionDownloaderDelegate::MANIFEST_FETCH_FAILED);
-    }
-  }
-  manifest_fetcher_.reset();
-  manifests_queue_.reset_active_request();
-
-  // If we have any pending manifest requests, fire off the next one.
-  manifests_queue_.StartNextRequest();
-}
-
-void ExtensionDownloader::HandleManifestResults(
-    const ManifestFetchData& fetch_data,
-    const UpdateManifest::Results* results) {
-  // Keep a list of extensions that will not be updated, so that the |delegate_|
-  // can be notified once we're done here.
-  std::set<std::string> not_updated(fetch_data.extension_ids());
-
-  if (!results) {
-    NotifyExtensionsDownloadFailed(
-        not_updated,
-        fetch_data.request_ids(),
-        ExtensionDownloaderDelegate::MANIFEST_INVALID);
-    return;
-  }
-
-  // Examine the parsed manifest and kick off fetches of any new crx files.
-  std::vector<int> updates;
-  DetermineUpdates(fetch_data, *results, &updates);
-  for (size_t i = 0; i < updates.size(); i++) {
-    const UpdateManifest::Result* update = &(results->list.at(updates[i]));
-    const std::string& id = update->extension_id;
-    not_updated.erase(id);
-
-    GURL crx_url = update->crx_url;
-    if (id != kBlacklistAppID) {
-      NotifyUpdateFound(update->extension_id, update->version);
-    } else {
-      // The URL of the blacklist file is returned by the server and we need to
-      // be sure that we continue to be able to reliably detect whether a URL
-      // references a blacklist file.
-      DCHECK(extension_urls::IsBlacklistUpdateUrl(crx_url)) << crx_url;
-
-      // Force https (crbug.com/129587).
-      if (!crx_url.SchemeIsSecure()) {
-        url::Replacements<char> replacements;
-        std::string scheme("https");
-        replacements.SetScheme(scheme.c_str(),
-                               url::Component(0, scheme.size()));
-        crx_url = crx_url.ReplaceComponents(replacements);
-      }
-    }
-    scoped_ptr<ExtensionFetch> fetch(new ExtensionFetch(
-        update->extension_id, crx_url, update->package_hash,
-        update->version, fetch_data.request_ids()));
-    FetchUpdatedExtension(fetch.Pass());
-  }
-
-  // If the manifest response included a <daystart> element, we want to save
-  // that value for any extensions which had sent a ping in the request.
-  if (fetch_data.base_url().DomainIs(kGoogleDotCom) &&
-      results->daystart_elapsed_seconds >= 0) {
-    Time day_start =
-        Time::Now() - TimeDelta::FromSeconds(results->daystart_elapsed_seconds);
-
-    const std::set<std::string>& extension_ids = fetch_data.extension_ids();
-    std::set<std::string>::const_iterator i;
-    for (i = extension_ids.begin(); i != extension_ids.end(); i++) {
-      const std::string& id = *i;
-      ExtensionDownloaderDelegate::PingResult& result = ping_results_[id];
-      result.did_ping = fetch_data.DidPing(id, ManifestFetchData::ROLLCALL);
-      result.day_start = day_start;
-    }
-  }
-
-  NotifyExtensionsDownloadFailed(
-      not_updated,
-      fetch_data.request_ids(),
-      ExtensionDownloaderDelegate::NO_UPDATE_AVAILABLE);
-}
-
-void ExtensionDownloader::DetermineUpdates(
-    const ManifestFetchData& fetch_data,
-    const UpdateManifest::Results& possible_updates,
-    std::vector<int>* result) {
-  for (size_t i = 0; i < possible_updates.list.size(); i++) {
-    const UpdateManifest::Result* update = &possible_updates.list[i];
-    const std::string& id = update->extension_id;
-
-    if (!fetch_data.Includes(id)) {
-      VLOG(2) << "Ignoring " << id << " from this manifest";
-      continue;
-    }
-
-    if (VLOG_IS_ON(2)) {
-      if (update->version.empty())
-        VLOG(2) << "manifest indicates " << id << " has no update";
-      else
-        VLOG(2) << "manifest indicates " << id
-                << " latest version is '" << update->version << "'";
-    }
-
-    if (!delegate_->IsExtensionPending(id)) {
-      // If we're not installing pending extension, and the update
-      // version is the same or older than what's already installed,
-      // we don't want it.
-      std::string version;
-      if (!delegate_->GetExtensionExistingVersion(id, &version)) {
-        VLOG(2) << id << " is not installed";
-        continue;
-      }
-
-      VLOG(2) << id << " is at '" << version << "'";
-
-      // We should skip the version check if update was forced.
-      if (!fetch_data.DidForceUpdate(id)) {
-        Version existing_version(version);
-        Version update_version(update->version);
-        if (!update_version.IsValid() ||
-            update_version.CompareTo(existing_version) <= 0) {
-          continue;
-        }
-      }
-    }
-
-    // If the update specifies a browser minimum version, do we qualify?
-    if (update->browser_min_version.length() > 0 &&
-        !ExtensionsBrowserClient::Get()->IsMinBrowserVersionSupported(
-            update->browser_min_version)) {
-      // TODO(asargent) - We may want this to show up in the extensions UI
-      // eventually. (http://crbug.com/12547).
-      LOG(WARNING) << "Updated version of extension " << id
-                   << " available, but requires chrome version "
-                   << update->browser_min_version;
-      continue;
-    }
-    VLOG(2) << "will try to update " << id;
-    result->push_back(i);
-  }
-}
-
-  // Begins (or queues up) download of an updated extension.
-void ExtensionDownloader::FetchUpdatedExtension(
-    scoped_ptr<ExtensionFetch> fetch_data) {
-  if (!fetch_data->url.is_valid()) {
-    // TODO(asargent): This can sometimes be invalid. See crbug.com/130881.
-    LOG(ERROR) << "Invalid URL: '" << fetch_data->url.possibly_invalid_spec()
-               << "' for extension " << fetch_data->id;
-    return;
-  }
-
-  for (RequestQueue<ExtensionFetch>::iterator iter =
-           extensions_queue_.begin();
-       iter != extensions_queue_.end(); ++iter) {
-    if (iter->id == fetch_data->id || iter->url == fetch_data->url) {
-      iter->request_ids.insert(fetch_data->request_ids.begin(),
-                               fetch_data->request_ids.end());
-      return;  // already scheduled
-    }
-  }
-
-  if (extensions_queue_.active_request() &&
-      extensions_queue_.active_request()->url == fetch_data->url) {
-    extensions_queue_.active_request()->request_ids.insert(
-        fetch_data->request_ids.begin(), fetch_data->request_ids.end());
-  } else {
-    std::string version;
-    if (extension_cache_ &&
-        extension_cache_->GetExtension(fetch_data->id, NULL, &version) &&
-        version == fetch_data->version) {
-      base::FilePath crx_path;
-      // Now get .crx file path and mark extension as used.
-      extension_cache_->GetExtension(fetch_data->id, &crx_path, &version);
-      NotifyDelegateDownloadFinished(fetch_data.Pass(), crx_path, false);
-    } else {
-      extensions_queue_.ScheduleRequest(fetch_data.Pass());
-    }
-  }
-}
-
-void ExtensionDownloader::NotifyDelegateDownloadFinished(
-    scoped_ptr<ExtensionFetch> fetch_data,
-    const base::FilePath& crx_path,
-    bool file_ownership_passed) {
-  delegate_->OnExtensionDownloadFinished(fetch_data->id, crx_path,
-      file_ownership_passed, fetch_data->url, fetch_data->version,
-      ping_results_[fetch_data->id], fetch_data->request_ids);
-  ping_results_.erase(fetch_data->id);
-}
-
-void ExtensionDownloader::CreateExtensionFetcher() {
-  const ExtensionFetch* fetch = extensions_queue_.active_request();
-  extension_fetcher_.reset(net::URLFetcher::Create(
-      kExtensionFetcherId, fetch->url, net::URLFetcher::GET, this));
-  extension_fetcher_->SetRequestContext(request_context_.get());
-  extension_fetcher_->SetAutomaticallyRetryOnNetworkChanges(3);
-
-  int load_flags = net::LOAD_DISABLE_CACHE;
-  bool is_secure = fetch->url.SchemeIsSecure();
-  if (fetch->credentials != ExtensionFetch::CREDENTIALS_COOKIES || !is_secure) {
-      load_flags |= net::LOAD_DO_NOT_SEND_COOKIES |
-                    net::LOAD_DO_NOT_SAVE_COOKIES;
-  }
-  extension_fetcher_->SetLoadFlags(load_flags);
-
-  // Download CRX files to a temp file. The blacklist is small and will be
-  // processed in memory, so it is fetched into a string.
-  if (fetch->id != kBlacklistAppID) {
-    extension_fetcher_->SaveResponseToTemporaryFile(
-        BrowserThread::GetMessageLoopProxyForThread(BrowserThread::FILE));
-  }
-
-  if (fetch->credentials == ExtensionFetch::CREDENTIALS_OAUTH2_TOKEN &&
-      is_secure) {
-    if (access_token_.empty()) {
-      // We should try OAuth2, but we have no token cached. This
-      // ExtensionFetcher will be started once the token fetch is complete,
-      // in either OnTokenFetchSuccess or OnTokenFetchFailure.
-      DCHECK(identity_provider_.get());
-      OAuth2TokenService::ScopeSet webstore_scopes;
-      webstore_scopes.insert(kWebstoreOAuth2Scope);
-      access_token_request_ =
-          identity_provider_->GetTokenService()->StartRequest(
-              identity_provider_->GetActiveAccountId(),
-              webstore_scopes,
-              this);
-      return;
-    }
-    extension_fetcher_->AddExtraRequestHeader(
-        base::StringPrintf("%s: Bearer %s",
-            net::HttpRequestHeaders::kAuthorization,
-            access_token_.c_str()));
-  }
-
-  VLOG(2) << "Starting fetch of " << fetch->url << " for " << fetch->id;
-  extension_fetcher_->Start();
-}
-
-void ExtensionDownloader::OnCRXFetchComplete(
-    const net::URLFetcher* source,
-    const GURL& url,
-    const net::URLRequestStatus& status,
-    int response_code,
-    const base::TimeDelta& backoff_delay) {
-  ExtensionFetch& active_request = *extensions_queue_.active_request();
-  const std::string& id = active_request.id;
-  if (status.status() == net::URLRequestStatus::SUCCESS &&
-      (response_code == 200 || url.SchemeIsFile())) {
-    RETRY_HISTOGRAM("CrxFetchSuccess",
-                    extensions_queue_.active_request_failure_count(), url);
-    base::FilePath crx_path;
-    // Take ownership of the file at |crx_path|.
-    CHECK(source->GetResponseAsFilePath(true, &crx_path));
-    scoped_ptr<ExtensionFetch> fetch_data =
-        extensions_queue_.reset_active_request();
-    if (extension_cache_) {
-      const std::string& version = fetch_data->version;
-      extension_cache_->PutExtension(id, crx_path, version,
-          base::Bind(&ExtensionDownloader::NotifyDelegateDownloadFinished,
-                     weak_ptr_factory_.GetWeakPtr(),
-                     base::Passed(&fetch_data)));
-    } else {
-      NotifyDelegateDownloadFinished(fetch_data.Pass(), crx_path, true);
-    }
-  } else if (IterateFetchCredentialsAfterFailure(
-                &active_request,
-                status,
-                response_code)) {
-    extensions_queue_.RetryRequest(backoff_delay);
-  } else {
-    const std::set<int>& request_ids = active_request.request_ids;
-    const ExtensionDownloaderDelegate::PingResult& ping = ping_results_[id];
-    VLOG(1) << "Failed to fetch extension '" << url.possibly_invalid_spec()
-            << "' response code:" << response_code;
-    if (ShouldRetryRequest(status, response_code) &&
-        extensions_queue_.active_request_failure_count() < kMaxRetries) {
-      extensions_queue_.RetryRequest(backoff_delay);
-    } else {
-      RETRY_HISTOGRAM("CrxFetchFailure",
-                      extensions_queue_.active_request_failure_count(), url);
-      // status.error() is 0 (net::OK) or negative. (See net/base/net_errors.h)
-      UMA_HISTOGRAM_SPARSE_SLOWLY("Extensions.CrxFetchError", -status.error());
-      delegate_->OnExtensionDownloadFailed(
-          id, ExtensionDownloaderDelegate::CRX_FETCH_FAILED, ping, request_ids);
-    }
-    ping_results_.erase(id);
-    extensions_queue_.reset_active_request();
-  }
-
-  extension_fetcher_.reset();
-
-  // If there are any pending downloads left, start the next one.
-  extensions_queue_.StartNextRequest();
-}
-
-void ExtensionDownloader::NotifyExtensionsDownloadFailed(
-    const std::set<std::string>& extension_ids,
-    const std::set<int>& request_ids,
-    ExtensionDownloaderDelegate::Error error) {
-  for (std::set<std::string>::const_iterator it = extension_ids.begin();
-       it != extension_ids.end(); ++it) {
-    const ExtensionDownloaderDelegate::PingResult& ping = ping_results_[*it];
-    delegate_->OnExtensionDownloadFailed(*it, error, ping, request_ids);
-    ping_results_.erase(*it);
-  }
-}
-
-void ExtensionDownloader::NotifyUpdateFound(const std::string& id,
-                                            const std::string& version) {
-  UpdateDetails updateInfo(id, Version(version));
-  content::NotificationService::current()->Notify(
-      extensions::NOTIFICATION_EXTENSION_UPDATE_FOUND,
-      content::NotificationService::AllBrowserContextsAndSources(),
-      content::Details<UpdateDetails>(&updateInfo));
-}
-
-bool ExtensionDownloader::IterateFetchCredentialsAfterFailure(
-    ExtensionFetch* fetch,
-    const net::URLRequestStatus& status,
-    int response_code) {
-  bool auth_failure = status.status() == net::URLRequestStatus::CANCELED ||
-                      (status.status() == net::URLRequestStatus::SUCCESS &&
-                       (response_code == net::HTTP_UNAUTHORIZED ||
-                        response_code == net::HTTP_FORBIDDEN));
-  if (!auth_failure) {
-    return false;
-  }
-  // Here we decide what to do next if the server refused to authorize this
-  // fetch.
-  switch (fetch->credentials) {
-    case ExtensionFetch::CREDENTIALS_NONE:
-      if (fetch->url.DomainIs(kGoogleDotCom) && identity_provider_) {
-        fetch->credentials = ExtensionFetch::CREDENTIALS_OAUTH2_TOKEN;
-      } else {
-        fetch->credentials = ExtensionFetch::CREDENTIALS_COOKIES;
-      }
-      return true;
-    case ExtensionFetch::CREDENTIALS_OAUTH2_TOKEN:
-      fetch->oauth2_attempt_count++;
-      // OAuth2 may fail due to an expired access token, in which case we
-      // should invalidate the token and try again.
-      if (response_code == net::HTTP_UNAUTHORIZED &&
-          fetch->oauth2_attempt_count <= kMaxOAuth2Attempts) {
-        DCHECK(identity_provider_.get());
-        OAuth2TokenService::ScopeSet webstore_scopes;
-        webstore_scopes.insert(kWebstoreOAuth2Scope);
-        identity_provider_->GetTokenService()->InvalidateToken(
-            identity_provider_->GetActiveAccountId(),
-            webstore_scopes,
-            access_token_);
-        access_token_.clear();
-        return true;
-      }
-      // Either there is no Gaia identity available, the active identity
-      // doesn't have access to this resource, or the server keeps returning
-      // 401s and we've retried too many times. Fall back on cookies.
-      if (access_token_.empty() ||
-          response_code == net::HTTP_FORBIDDEN ||
-          fetch->oauth2_attempt_count > kMaxOAuth2Attempts) {
-        fetch->credentials = ExtensionFetch::CREDENTIALS_COOKIES;
-        return true;
-      }
-      // Something else is wrong. Time to give up.
-      return false;
-    case ExtensionFetch::CREDENTIALS_COOKIES:
-      if (response_code == net::HTTP_FORBIDDEN) {
-        // Try the next session identity, up to some maximum.
-        return IncrementAuthUserIndex(&fetch->url);
-      }
-      return false;
-    default:
-      NOTREACHED();
-  }
-  NOTREACHED();
-  return false;
-}
-
-void ExtensionDownloader::OnGetTokenSuccess(
-    const OAuth2TokenService::Request* request,
-    const std::string& access_token,
-    const base::Time& expiration_time) {
-  access_token_ = access_token;
-  extension_fetcher_->AddExtraRequestHeader(
-      base::StringPrintf("%s: Bearer %s",
-          net::HttpRequestHeaders::kAuthorization,
-          access_token_.c_str()));
-  extension_fetcher_->Start();
-}
-
-void ExtensionDownloader::OnGetTokenFailure(
-    const OAuth2TokenService::Request* request,
-    const GoogleServiceAuthError& error) {
-  // If we fail to get an access token, kick the pending fetch and let it fall
-  // back on cookies.
-  extension_fetcher_->Start();
-}
-
-ManifestFetchData* ExtensionDownloader::CreateManifestFetchData(
-    const GURL& update_url,
-    int request_id) {
-  ManifestFetchData::PingMode ping_mode = ManifestFetchData::NO_PING;
-  if (update_url.DomainIs(ping_enabled_domain_.c_str())) {
-    if (enable_extra_update_metrics_) {
-      ping_mode = ManifestFetchData::PING_WITH_METRICS;
-    } else {
-      ping_mode = ManifestFetchData::PING;
-    }
-  }
-  return new ManifestFetchData(
-      update_url, request_id, brand_code_, manifest_query_params_, ping_mode);
-}
-
-}  // namespace extensions
diff --git a/chrome/browser/extensions/updater/extension_downloader.h b/chrome/browser/extensions/updater/extension_downloader.h
deleted file mode 100644
index e60479f2..0000000
--- a/chrome/browser/extensions/updater/extension_downloader.h
+++ /dev/null
@@ -1,334 +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.
-
-#ifndef CHROME_BROWSER_EXTENSIONS_UPDATER_EXTENSION_DOWNLOADER_H_
-#define CHROME_BROWSER_EXTENSIONS_UPDATER_EXTENSION_DOWNLOADER_H_
-
-#include <deque>
-#include <map>
-#include <set>
-#include <string>
-#include <utility>
-#include <vector>
-
-#include "base/basictypes.h"
-#include "base/compiler_specific.h"
-#include "base/memory/linked_ptr.h"
-#include "base/memory/scoped_ptr.h"
-#include "base/memory/weak_ptr.h"
-#include "base/version.h"
-#include "chrome/browser/extensions/updater/extension_downloader_delegate.h"
-#include "extensions/browser/updater/manifest_fetch_data.h"
-#include "extensions/browser/updater/request_queue.h"
-#include "extensions/common/extension.h"
-#include "extensions/common/update_manifest.h"
-#include "google_apis/gaia/oauth2_token_service.h"
-#include "net/url_request/url_fetcher_delegate.h"
-#include "url/gurl.h"
-
-class IdentityProvider;
-
-namespace net {
-class URLFetcher;
-class URLRequestContextGetter;
-class URLRequestStatus;
-}
-
-namespace extensions {
-
-struct UpdateDetails {
-  UpdateDetails(const std::string& id, const base::Version& version);
-  ~UpdateDetails();
-
-  std::string id;
-  base::Version version;
-};
-
-class ExtensionCache;
-class ExtensionUpdaterTest;
-
-// A class that checks for updates of a given list of extensions, and downloads
-// the crx file when updates are found. It uses a |ExtensionDownloaderDelegate|
-// that takes ownership of the downloaded crx files, and handles events during
-// the update check.
-class ExtensionDownloader
-    : public net::URLFetcherDelegate,
-      public OAuth2TokenService::Consumer {
- public:
-  // A closure which constructs a new ExtensionDownloader to be owned by the
-  // caller.
-  typedef base::Callback<
-      scoped_ptr<ExtensionDownloader>(ExtensionDownloaderDelegate* delegate)>
-      Factory;
-
-  // |delegate| is stored as a raw pointer and must outlive the
-  // ExtensionDownloader.
-  ExtensionDownloader(ExtensionDownloaderDelegate* delegate,
-                      net::URLRequestContextGetter* request_context);
-  virtual ~ExtensionDownloader();
-
-  // Adds |extension| to the list of extensions to check for updates.
-  // Returns false if the |extension| can't be updated due to invalid details.
-  // In that case, no callbacks will be performed on the |delegate_|.
-  // The |request_id| is passed on as is to the various |delegate_| callbacks.
-  // This is used for example by ExtensionUpdater to keep track of when
-  // potentially concurrent update checks complete.
-  bool AddExtension(const Extension& extension, int request_id);
-
-  // Adds extension |id| to the list of extensions to check for updates.
-  // Returns false if the |id| can't be updated due to invalid details.
-  // In that case, no callbacks will be performed on the |delegate_|.
-  // The |request_id| is passed on as is to the various |delegate_| callbacks.
-  // This is used for example by ExtensionUpdater to keep track of when
-  // potentially concurrent update checks complete.
-  bool AddPendingExtension(const std::string& id,
-                           const GURL& update_url,
-                           int request_id);
-
-  // Schedules a fetch of the manifest of all the extensions added with
-  // AddExtension() and AddPendingExtension().
-  void StartAllPending(ExtensionCache* cache);
-
-  // Schedules an update check of the blacklist.
-  void StartBlacklistUpdate(const std::string& version,
-                            const ManifestFetchData::PingData& ping_data,
-                            int request_id);
-
-  // Sets an IdentityProvider to be used for OAuth2 authentication on protected
-  // Webstore downloads.
-  void SetWebstoreIdentityProvider(
-      scoped_ptr<IdentityProvider> identity_provider);
-
-  void set_brand_code(const std::string& brand_code) {
-    brand_code_ = brand_code;
-  }
-
-  void set_manifest_query_params(const std::string& params) {
-    manifest_query_params_ = params;
-  }
-
-  void set_ping_enabled_domain(const std::string& domain) {
-    ping_enabled_domain_ = domain;
-  }
-
-  void set_enable_extra_update_metrics(bool enable) {
-    enable_extra_update_metrics_ = enable;
-  }
-
-  // These are needed for unit testing, to help identify the correct mock
-  // URLFetcher objects.
-  static const int kManifestFetcherId = 1;
-  static const int kExtensionFetcherId = 2;
-
-  // Update AppID for extension blacklist.
-  static const char kBlacklistAppID[];
-
-  static const int kMaxRetries = 10;
-
- private:
-  friend class ExtensionUpdaterTest;
-
-  // These counters are bumped as extensions are added to be fetched. They
-  // are then recorded as UMA metrics when all the extensions have been added.
-  struct URLStats {
-    URLStats()
-        : no_url_count(0),
-          google_url_count(0),
-          other_url_count(0),
-          extension_count(0),
-          theme_count(0),
-          app_count(0),
-          platform_app_count(0),
-          pending_count(0) {}
-
-    int no_url_count, google_url_count, other_url_count;
-    int extension_count, theme_count, app_count, platform_app_count,
-        pending_count;
-  };
-
-  // We need to keep track of some information associated with a url
-  // when doing a fetch.
-  struct ExtensionFetch {
-    ExtensionFetch();
-    ExtensionFetch(const std::string& id, const GURL& url,
-                   const std::string& package_hash, const std::string& version,
-                   const std::set<int>& request_ids);
-    ~ExtensionFetch();
-
-    std::string id;
-    GURL url;
-    std::string package_hash;
-    std::string version;
-    std::set<int> request_ids;
-
-    enum CredentialsMode {
-      CREDENTIALS_NONE = 0,
-      CREDENTIALS_OAUTH2_TOKEN,
-      CREDENTIALS_COOKIES,
-    };
-
-    // Indicates the type of credentials to include with this fetch.
-    CredentialsMode credentials;
-
-    // Counts the number of times OAuth2 authentication has been attempted for
-    // this fetch.
-    int oauth2_attempt_count;
-  };
-
-  // Helper for AddExtension() and AddPendingExtension().
-  bool AddExtensionData(const std::string& id,
-                        const base::Version& version,
-                        Manifest::Type extension_type,
-                        const GURL& extension_update_url,
-                        const std::string& update_url_data,
-                        int request_id,
-                        bool force_update,
-                        const std::string& install_source_override);
-
-  // Adds all recorded stats taken so far to histogram counts.
-  void ReportStats() const;
-
-  // Begins an update check.
-  void StartUpdateCheck(scoped_ptr<ManifestFetchData> fetch_data);
-
-  // Called by RequestQueue when a new manifest fetch request is started.
-  void CreateManifestFetcher();
-
-  // net::URLFetcherDelegate implementation.
-  virtual void OnURLFetchComplete(const net::URLFetcher* source) override;
-
-  // Handles the result of a manifest fetch.
-  void OnManifestFetchComplete(const GURL& url,
-                               const net::URLRequestStatus& status,
-                               int response_code,
-                               const base::TimeDelta& backoff_delay,
-                               const std::string& data);
-
-  // Once a manifest is parsed, this starts fetches of any relevant crx files.
-  // If |results| is null, it means something went wrong when parsing it.
-  void HandleManifestResults(const ManifestFetchData& fetch_data,
-                             const UpdateManifest::Results* results);
-
-  // Given a list of potential updates, returns the indices of the ones that are
-  // applicable (are actually a new version, etc.) in |result|.
-  void DetermineUpdates(const ManifestFetchData& fetch_data,
-                        const UpdateManifest::Results& possible_updates,
-                        std::vector<int>* result);
-
-  // Begins (or queues up) download of an updated extension.
-  void FetchUpdatedExtension(scoped_ptr<ExtensionFetch> fetch_data);
-
-  // Called by RequestQueue when a new extension fetch request is started.
-  void CreateExtensionFetcher();
-
-  // Handles the result of a crx fetch.
-  void OnCRXFetchComplete(const net::URLFetcher* source,
-                          const GURL& url,
-                          const net::URLRequestStatus& status,
-                          int response_code,
-                          const base::TimeDelta& backoff_delay);
-
-  // Invokes OnExtensionDownloadFailed() on the |delegate_| for each extension
-  // in the set, with |error| as the reason for failure.
-  void NotifyExtensionsDownloadFailed(const std::set<std::string>& id_set,
-                                      const std::set<int>& request_ids,
-                                      ExtensionDownloaderDelegate::Error error);
-
-  // Send a notification that an update was found for |id| that we'll
-  // attempt to download.
-  void NotifyUpdateFound(const std::string& id, const std::string& version);
-
-  // Do real work of StartAllPending. If .crx cache is used, this function
-  // is called when cache is ready.
-  void DoStartAllPending();
-
-  // Notify delegate and remove ping results.
-  void NotifyDelegateDownloadFinished(scoped_ptr<ExtensionFetch> fetch_data,
-                                      const base::FilePath& crx_path,
-                                      bool file_ownership_passed);
-
-  // Potentially updates an ExtensionFetch's authentication state and returns
-  // |true| if the fetch should be retried. Returns |false| if the failure was
-  // not related to authentication, leaving the ExtensionFetch data unmodified.
-  bool IterateFetchCredentialsAfterFailure(ExtensionFetch* fetch,
-                                           const net::URLRequestStatus& status,
-                                           int response_code);
-
-  // OAuth2TokenService::Consumer implementation.
-  virtual void OnGetTokenSuccess(const OAuth2TokenService::Request* request,
-                                 const std::string& access_token,
-                                 const base::Time& expiration_time) override;
-  virtual void OnGetTokenFailure(const OAuth2TokenService::Request* request,
-                                 const GoogleServiceAuthError& error) override;
-
-  ManifestFetchData* CreateManifestFetchData(const GURL& update_url,
-                                             int request_id);
-
-  // The delegate that receives the crx files downloaded by the
-  // ExtensionDownloader, and that fills in optional ping and update url data.
-  ExtensionDownloaderDelegate* delegate_;
-
-  // The request context to use for the URLFetchers.
-  scoped_refptr<net::URLRequestContextGetter> request_context_;
-
-  // Collects UMA samples that are reported when ReportStats() is called.
-  URLStats url_stats_;
-
-  // List of data on fetches we're going to do. We limit the number of
-  // extensions grouped together in one batch to avoid running into the limits
-  // on the length of http GET requests, so there might be multiple
-  // ManifestFetchData* objects with the same base_url.
-  typedef std::map<std::pair<int, GURL>,
-                   std::vector<linked_ptr<ManifestFetchData> > > FetchMap;
-  FetchMap fetches_preparing_;
-
-  // Outstanding url fetch requests for manifests and updates.
-  scoped_ptr<net::URLFetcher> manifest_fetcher_;
-  scoped_ptr<net::URLFetcher> extension_fetcher_;
-
-  // Pending manifests and extensions to be fetched when the appropriate fetcher
-  // is available.
-  RequestQueue<ManifestFetchData> manifests_queue_;
-  RequestQueue<ExtensionFetch> extensions_queue_;
-
-  // Maps an extension-id to its PingResult data.
-  std::map<std::string, ExtensionDownloaderDelegate::PingResult> ping_results_;
-
-  // Cache for .crx files.
-  ExtensionCache* extension_cache_;
-
-  // An IdentityProvider which may be used for authentication on protected
-  // download requests. May be NULL.
-  scoped_ptr<IdentityProvider> identity_provider_;
-
-  // A Webstore download-scoped access token for the |identity_provider_|'s
-  // active account, if any.
-  std::string access_token_;
-
-  // A pending token fetch request.
-  scoped_ptr<OAuth2TokenService::Request> access_token_request_;
-
-  // Brand code to include with manifest fetch queries if sending ping data.
-  std::string brand_code_;
-
-  // Baseline parameters to include with manifest fetch queries.
-  std::string manifest_query_params_;
-
-  // Domain to enable ping data. Ping data will be sent with manifest fetches
-  // to update URLs which match this domain. Defaults to empty (no domain).
-  std::string ping_enabled_domain_;
-
-  // Indicates whether or not extra metrics should be included with ping data.
-  // Defaults to |false|.
-  bool enable_extra_update_metrics_;
-
-  // Used to create WeakPtrs to |this|.
-  base::WeakPtrFactory<ExtensionDownloader> weak_ptr_factory_;
-
-  DISALLOW_COPY_AND_ASSIGN(ExtensionDownloader);
-};
-
-}  // namespace extensions
-
-#endif  // CHROME_BROWSER_EXTENSIONS_UPDATER_EXTENSION_DOWNLOADER_H_
diff --git a/chrome/browser/extensions/updater/extension_downloader_delegate.cc b/chrome/browser/extensions/updater/extension_downloader_delegate.cc
deleted file mode 100644
index ab3f734..0000000
--- a/chrome/browser/extensions/updater/extension_downloader_delegate.cc
+++ /dev/null
@@ -1,41 +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/extensions/updater/extension_downloader_delegate.h"
-
-#include "base/logging.h"
-#include "base/version.h"
-
-namespace extensions {
-
-ExtensionDownloaderDelegate::PingResult::PingResult() : did_ping(false) {}
-
-ExtensionDownloaderDelegate::PingResult::~PingResult() {}
-
-ExtensionDownloaderDelegate::~ExtensionDownloaderDelegate() {}
-
-void ExtensionDownloaderDelegate::OnExtensionDownloadFailed(
-    const std::string& id,
-    ExtensionDownloaderDelegate::Error error,
-    const ExtensionDownloaderDelegate::PingResult& ping_result,
-    const std::set<int>& request_id) {}
-
-bool ExtensionDownloaderDelegate::GetPingDataForExtension(
-    const std::string& id,
-    ManifestFetchData::PingData* ping) {
-  return false;
-}
-
-std::string ExtensionDownloaderDelegate::GetUpdateUrlData(
-    const std::string& id) {
-  return std::string();
-}
-
-bool ExtensionDownloaderDelegate::ShouldForceUpdate(
-    const std::string& id,
-    std::string* source) {
-  return false;
-}
-
-}  // namespace extensions
diff --git a/chrome/browser/extensions/updater/extension_downloader_delegate.h b/chrome/browser/extensions/updater/extension_downloader_delegate.h
deleted file mode 100644
index f0b0a3c..0000000
--- a/chrome/browser/extensions/updater/extension_downloader_delegate.h
+++ /dev/null
@@ -1,125 +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.
-
-#ifndef CHROME_BROWSER_EXTENSIONS_UPDATER_EXTENSION_DOWNLOADER_DELEGATE_H_
-#define CHROME_BROWSER_EXTENSIONS_UPDATER_EXTENSION_DOWNLOADER_DELEGATE_H_
-
-#include <set>
-#include <string>
-
-#include "base/time/time.h"
-#include "extensions/browser/updater/manifest_fetch_data.h"
-
-class GURL;
-
-namespace base {
-class FilePath;
-}
-
-namespace extensions {
-
-class ExtensionDownloaderDelegate {
- public:
-  virtual ~ExtensionDownloaderDelegate();
-
-  // Passed as an argument to ExtensionDownloader::OnExtensionDownloadFailed()
-  // to detail the reason for the failure.
-  enum Error {
-    // Background networking is disabled.
-    DISABLED,
-
-    // Failed to fetch the manifest for this extension.
-    MANIFEST_FETCH_FAILED,
-
-    // The manifest couldn't be parsed.
-    MANIFEST_INVALID,
-
-    // The manifest was fetched and parsed, and there are no updates for
-    // this extension.
-    NO_UPDATE_AVAILABLE,
-
-    // There was an update for this extension but the download of the crx
-    // failed.
-    CRX_FETCH_FAILED,
-  };
-
-  // Passed as an argument to the completion callbacks to signal whether
-  // the extension update sent a ping.
-  struct PingResult {
-    PingResult();
-    ~PingResult();
-
-    // Whether a ping was sent.
-    bool did_ping;
-
-    // The start of day, from the server's perspective. This is only valid
-    // when |did_ping| is true.
-    base::Time day_start;
-  };
-
-  // One of the following 3 methods is always invoked for a given extension
-  // id, if AddExtension() or AddPendingExtension() returned true when that
-  // extension was added to the ExtensionDownloader.
-  // To avoid duplicate work, ExtensionDownloader might merge multiple identical
-  // requests, so there is not necessarily a separate invocation of one of these
-  // methods for each call to AddExtension/AddPendingExtension. If it is
-  // important to be able to match up AddExtension calls with
-  // OnExtensionDownload callbacks, you need to make sure that for every call to
-  // AddExtension/AddPendingExtension the combination of extension id and
-  // request id is unique. The OnExtensionDownload related callbacks will then
-  // be called with all request ids that resulted in that extension being
-  // checked.
-
-  // Invoked if the extension couldn't be downloaded. |error| contains the
-  // failure reason.
-  virtual void OnExtensionDownloadFailed(const std::string& id,
-                                         Error error,
-                                         const PingResult& ping_result,
-                                         const std::set<int>& request_ids);
-
-  // Invoked if the extension had an update available and its crx was
-  // successfully downloaded to |path|. |ownership_passed| is true if delegate
-  // should get ownership of the file.
-  virtual void OnExtensionDownloadFinished(
-      const std::string& id,
-      const base::FilePath& path,
-      bool file_ownership_passed,
-      const GURL& download_url,
-      const std::string& version,
-      const PingResult& ping_result,
-      const std::set<int>& request_ids) = 0;
-
-  // The remaining methods are used by the ExtensionDownloader to retrieve
-  // information about extensions from the delegate.
-
-  // Invoked to fill the PingData for the given extension id. Returns false
-  // if PingData should not be included for this extension's update check
-  // (this is the default).
-  virtual bool GetPingDataForExtension(const std::string& id,
-                                       ManifestFetchData::PingData* ping);
-
-  // Invoked to get the update url data for this extension's update url, if
-  // there is any. The default implementation returns an empty string.
-  virtual std::string GetUpdateUrlData(const std::string& id);
-
-  // Invoked to determine whether extension |id| is currently
-  // pending installation.
-  virtual bool IsExtensionPending(const std::string& id) = 0;
-
-  // Invoked to get the current version of extension |id|. Returns false if
-  // that extension is not installed.
-  virtual bool GetExtensionExistingVersion(const std::string& id,
-                                           std::string* version) = 0;
-
-  // Determines if a given extension should be forced to update and (if so)
-  // what the source of this forcing is (i.e. what string will be passed
-  // in |installsource| as part of the update query parameters). The default
-  // implementation always returns |false|.
-  virtual bool ShouldForceUpdate(const std::string& id,
-                                 std::string* source);
-};
-
-}  // namespace extensions
-
-#endif  // CHROME_BROWSER_EXTENSIONS_UPDATER_EXTENSION_DOWNLOADER_DELEGATE_H_
diff --git a/chrome/browser/extensions/updater/extension_updater.h b/chrome/browser/extensions/updater/extension_updater.h
index 4762739d..ec76162 100644
--- a/chrome/browser/extensions/updater/extension_updater.h
+++ b/chrome/browser/extensions/updater/extension_updater.h
@@ -20,11 +20,11 @@
 #include "base/scoped_observer.h"
 #include "base/time/time.h"
 #include "base/timer/timer.h"
-#include "chrome/browser/extensions/updater/extension_downloader.h"
-#include "chrome/browser/extensions/updater/extension_downloader_delegate.h"
 #include "content/public/browser/notification_observer.h"
 #include "content/public/browser/notification_registrar.h"
 #include "extensions/browser/extension_registry_observer.h"
+#include "extensions/browser/updater/extension_downloader.h"
+#include "extensions/browser/updater/extension_downloader_delegate.h"
 #include "extensions/browser/updater/manifest_fetch_data.h"
 #include "url/gurl.h"
 
diff --git a/chrome/browser/extensions/updater/extension_updater_unittest.cc b/chrome/browser/extensions/updater/extension_updater_unittest.cc
index 0219586..c8f33e8 100644
--- a/chrome/browser/extensions/updater/extension_updater_unittest.cc
+++ b/chrome/browser/extensions/updater/extension_updater_unittest.cc
@@ -31,8 +31,6 @@
 #include "chrome/browser/extensions/test_extension_service.h"
 #include "chrome/browser/extensions/test_extension_system.h"
 #include "chrome/browser/extensions/updater/chrome_extension_downloader_factory.h"
-#include "chrome/browser/extensions/updater/extension_downloader.h"
-#include "chrome/browser/extensions/updater/extension_downloader_delegate.h"
 #include "chrome/browser/extensions/updater/extension_updater.h"
 #include "chrome/browser/google/google_brand.h"
 #include "chrome/browser/prefs/pref_service_syncable.h"
@@ -50,6 +48,8 @@
 #include "extensions/browser/extension_prefs.h"
 #include "extensions/browser/extension_registry.h"
 #include "extensions/browser/extension_system.h"
+#include "extensions/browser/updater/extension_downloader.h"
+#include "extensions/browser/updater/extension_downloader_delegate.h"
 #include "extensions/browser/updater/manifest_fetch_data.h"
 #include "extensions/browser/updater/request_queue_impl.h"
 #include "extensions/common/extension.h"