| Index: chrome/browser/extensions/updater/extension_downloader.h
|
| diff --git a/chrome/browser/extensions/updater/extension_downloader.h b/chrome/browser/extensions/updater/extension_downloader.h
|
| deleted file mode 100644
|
| index e60479f21463ab14cfacdd063d7ca9e4fe8f2d76..0000000000000000000000000000000000000000
|
| --- 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_
|
|
|