| 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
|
| index a40427da068a7daf901ac88af19dd33419202bcb..244f379a218c38c5c48323c4302b86b08780bd67 100644
|
| --- a/chrome/browser/extensions/updater/extension_downloader.h
|
| +++ b/chrome/browser/extensions/updater/extension_downloader.h
|
| @@ -23,9 +23,12 @@
|
| #include "chrome/browser/extensions/updater/request_queue.h"
|
| #include "chrome/common/extensions/update_manifest.h"
|
| #include "extensions/common/extension.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;
|
| @@ -44,17 +47,23 @@ struct UpdateDetails {
|
|
|
| class ExtensionCache;
|
| class ExtensionUpdaterTest;
|
| +class WebstoreOAuth2TokenProvider;
|
|
|
| // 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 {
|
| +class ExtensionDownloader
|
| + : public net::URLFetcherDelegate,
|
| + public OAuth2TokenService::Consumer {
|
| public:
|
| // |delegate| is stored as a raw pointer and must outlive the
|
| - // ExtensionDownloader.
|
| + // ExtensionDownloader. |webstore_identity_provider| may be NULL if this
|
| + // ExtensionDownloader does not need OAuth2 support; if not NULL, the
|
| + // given IdentityProvider must outlive this ExtensionDownloader.
|
| ExtensionDownloader(ExtensionDownloaderDelegate* delegate,
|
| - net::URLRequestContextGetter* request_context);
|
| + net::URLRequestContextGetter* request_context,
|
| + IdentityProvider* webstore_identity_provider);
|
| virtual ~ExtensionDownloader();
|
|
|
| // Adds |extension| to the list of extensions to check for updates.
|
| @@ -130,8 +139,18 @@ class ExtensionDownloader : public net::URLFetcherDelegate {
|
| std::string version;
|
| std::set<int> request_ids;
|
|
|
| - // Indicates whether or not the fetch is known to require credentials.
|
| - bool is_protected;
|
| + 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().
|
| @@ -204,6 +223,20 @@ class ExtensionDownloader : public net::URLFetcherDelegate {
|
| 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;
|
| +
|
| // The delegate that receives the crx files downloaded by the
|
| // ExtensionDownloader, and that fills in optional ping and update url data.
|
| ExtensionDownloaderDelegate* delegate_;
|
| @@ -240,6 +273,17 @@ class ExtensionDownloader : public net::URLFetcherDelegate {
|
| // Cache for .crx files.
|
| ExtensionCache* extension_cache_;
|
|
|
| + // An IdentityProvider which may be used for authentication on protected
|
| + // download requests. May be NULL.
|
| + 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_;
|
| +
|
| DISALLOW_COPY_AND_ASSIGN(ExtensionDownloader);
|
| };
|
|
|
|
|