| Index: net/http/http_network_transaction.h
|
| ===================================================================
|
| --- net/http/http_network_transaction.h (revision 50667)
|
| +++ net/http/http_network_transaction.h (working copy)
|
| @@ -20,7 +20,6 @@
|
| #include "net/base/ssl_config_service.h"
|
| #include "net/http/http_alternate_protocols.h"
|
| #include "net/http/http_auth.h"
|
| -#include "net/http/http_auth_controller.h"
|
| #include "net/http/http_auth_handler.h"
|
| #include "net/http/http_response_info.h"
|
| #include "net/http/http_transaction.h"
|
| @@ -241,25 +240,85 @@
|
| // Returns true if we should try to add an Authorization header.
|
| bool ShouldApplyServerAuth() const;
|
|
|
| + // Adds either the proxy auth header, or the origin server auth header,
|
| + // as specified by |target|.
|
| + void AddAuthorizationHeader(
|
| + HttpAuth::Target target, HttpRequestHeaders* authorization_headers);
|
| +
|
| + // Returns a log message for all the response headers related to the auth
|
| + // challenge.
|
| + std::string AuthChallengeLogMessage() const;
|
| +
|
| // Handles HTTP status code 401 or 407.
|
| // HandleAuthChallenge() returns a network error code, or OK on success.
|
| // May update |pending_auth_target_| or |response_.auth_challenge|.
|
| int HandleAuthChallenge(bool establishing_tunnel);
|
|
|
| + // Populates response_.auth_challenge with the challenge information, so that
|
| + // URLRequestHttpJob can prompt for a username/password.
|
| + void PopulateAuthChallenge(HttpAuth::Target target,
|
| + const GURL& auth_origin);
|
| +
|
| + // Invalidates any auth cache entries after authentication has failed.
|
| + // The identity that was rejected is auth_identity_[target].
|
| + void InvalidateRejectedAuthFromCache(HttpAuth::Target target,
|
| + const GURL& auth_origin);
|
| +
|
| + // Sets auth_identity_[target] to the next identity that the transaction
|
| + // should try. It chooses candidates by searching the auth cache
|
| + // and the URL for a username:password. Returns true if an identity
|
| + // was found.
|
| + bool SelectNextAuthIdentityToTry(HttpAuth::Target target,
|
| + const GURL& auth_origin);
|
| +
|
| + // Searches the auth cache for an entry that encompasses the request's path.
|
| + // If such an entry is found, updates auth_identity_[target] and
|
| + // auth_handler_[target] with the cache entry's data and returns true.
|
| + bool SelectPreemptiveAuth(HttpAuth::Target target);
|
| +
|
| bool HaveAuth(HttpAuth::Target target) const {
|
| - return auth_controllers_[target].get() &&
|
| - auth_controllers_[target]->HaveAuth();
|
| + return auth_handler_[target].get() && !auth_identity_[target].invalid;
|
| }
|
|
|
| - // Get the {scheme, host, path, port} for the authentication target
|
| - GURL AuthURL(HttpAuth::Target target) const;
|
| + // Get the {scheme, host, port} for the authentication target
|
| + GURL AuthOrigin(HttpAuth::Target target) const;
|
|
|
| + // Same as AuthOrigin(), but will return an invalid GURL if the target is
|
| + // invalid.
|
| + GURL PossiblyInvalidAuthOrigin(HttpAuth::Target target) const;
|
| +
|
| + // Get the absolute path of the resource needing authentication.
|
| + // For proxy authentication the path is always empty string.
|
| + std::string AuthPath(HttpAuth::Target target) const;
|
| +
|
| + // Generate an authentication token for |target| if necessary. The return
|
| + // value is a net error code. |OK| will be returned both in the case that
|
| + // a token is correctly generated synchronously, as well as when no tokens
|
| + // were necessary.
|
| + int MaybeGenerateAuthToken(HttpAuth::Target target);
|
| +
|
| void MarkBrokenAlternateProtocolAndFallback();
|
|
|
| + // Returns a string representation of a HttpAuth::Target value that can be
|
| + // used in log messages.
|
| + static std::string AuthTargetString(HttpAuth::Target target);
|
| +
|
| static bool g_ignore_certificate_errors;
|
|
|
| - scoped_ptr<HttpAuthController> auth_controllers_[HttpAuth::AUTH_NUM_TARGETS];
|
| + // |auth_handler_| encapsulates the logic for the particular auth-scheme.
|
| + // This includes the challenge's parameters. If NULL, then there is no
|
| + // associated auth handler.
|
| + scoped_ptr<HttpAuthHandler> auth_handler_[HttpAuth::AUTH_NUM_TARGETS];
|
|
|
| + // |auth_identity_| holds the (username/password) that should be used by
|
| + // the |auth_handler_| to generate credentials. This identity can come from
|
| + // a number of places (url, cache, prompt).
|
| + HttpAuth::Identity auth_identity_[HttpAuth::AUTH_NUM_TARGETS];
|
| +
|
| + // |auth_token_| contains the opaque string to pass to the proxy or
|
| + // server to authenticate the client.
|
| + std::string auth_token_[HttpAuth::AUTH_NUM_TARGETS];
|
| +
|
| // Whether this transaction is waiting for proxy auth, server auth, or is
|
| // not waiting for any auth at all. |pending_auth_target_| is read and
|
| // cleared by RestartWithAuth().
|
| @@ -300,6 +359,15 @@
|
| // Only valid if |alternate_protocol_mode_| == kUsingAlternateProtocol.
|
| HttpAlternateProtocols::Protocol alternate_protocol_;
|
|
|
| + // True if we've used the username/password embedded in the URL. This
|
| + // makes sure we use the embedded identity only once for the transaction,
|
| + // preventing an infinite auth restart loop.
|
| + bool embedded_identity_used_;
|
| +
|
| + // True if default credentials have already been tried for this transaction
|
| + // in response to an HTTP authentication challenge.
|
| + bool default_credentials_used_;
|
| +
|
| SSLConfig ssl_config_;
|
|
|
| std::string request_headers_;
|
|
|