| OLD | NEW |
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef NET_HTTP_HTTP_AUTH_CONTROLLER_H_ | 5 #ifndef NET_HTTP_HTTP_AUTH_CONTROLLER_H_ |
| 6 #define NET_HTTP_HTTP_AUTH_CONTROLLER_H_ | 6 #define NET_HTTP_HTTP_AUTH_CONTROLLER_H_ |
| 7 | 7 |
| 8 #include <set> | 8 #include <set> |
| 9 #include <string> | 9 #include <string> |
| 10 | 10 |
| 11 #include "base/basictypes.h" | 11 #include "base/basictypes.h" |
| 12 #include "base/ref_counted.h" | 12 #include "base/ref_counted.h" |
| 13 #include "base/scoped_ptr.h" | 13 #include "base/scoped_ptr.h" |
| 14 #include "googleurl/src/gurl.h" | 14 #include "googleurl/src/gurl.h" |
| 15 #include "net/base/completion_callback.h" | 15 #include "net/base/completion_callback.h" |
| 16 #include "net/base/net_log.h" | 16 #include "net/base/net_log.h" |
| 17 #include "net/http/http_auth.h" | 17 #include "net/http/http_auth.h" |
| 18 | 18 |
| 19 namespace net { | 19 namespace net { |
| 20 | 20 |
| 21 class AuthChallengeInfo; | 21 class AuthChallengeInfo; |
| 22 class HostResolver; | 22 class HostResolver; |
| 23 class HttpAuthHandler; | 23 class HttpAuthHandler; |
| 24 class HttpNetworkSession; | 24 class HttpNetworkSession; |
| 25 class HttpRequestHeaders; | 25 class HttpRequestHeaders; |
| 26 struct HttpRequestInfo; | 26 struct HttpRequestInfo; |
| 27 | 27 |
| 28 class HttpAuthController : public base::RefCounted<HttpAuthController> { | 28 class HttpAuthController { |
| 29 public: | 29 public: |
| 30 // The arguments are self explanatory except possibly for |auth_url|, which | 30 // The arguments are self explanatory except possibly for |auth_url|, which |
| 31 // should be both the auth target and auth path in a single url argument. | 31 // should be both the auth target and auth path in a single url argument. |
| 32 HttpAuthController(HttpAuth::Target target, const GURL& auth_url, | 32 HttpAuthController(HttpAuth::Target target, const GURL& auth_url, |
| 33 scoped_refptr<HttpNetworkSession> session); | 33 scoped_refptr<HttpNetworkSession> session); |
| 34 | 34 |
| 35 ~HttpAuthController(); |
| 36 |
| 35 // Generate an authentication token for |target| if necessary. The return | 37 // Generate an authentication token for |target| if necessary. The return |
| 36 // value is a net error code. |OK| will be returned both in the case that | 38 // value is a net error code. |OK| will be returned both in the case that |
| 37 // a token is correctly generated synchronously, as well as when no tokens | 39 // a token is correctly generated synchronously, as well as when no tokens |
| 38 // were necessary. | 40 // were necessary. |
| 39 virtual int MaybeGenerateAuthToken(const HttpRequestInfo* request, | 41 virtual int MaybeGenerateAuthToken(const HttpRequestInfo* request, |
| 40 CompletionCallback* callback, | 42 CompletionCallback* callback, |
| 41 const BoundNetLog& net_log); | 43 const BoundNetLog& net_log); |
| 42 | 44 |
| 43 // Adds either the proxy auth header, or the origin server auth header, | 45 // Adds either the proxy auth header, or the origin server auth header, |
| 44 // as specified by |target_|. | 46 // as specified by |target_|. |
| 45 virtual void AddAuthorizationHeader( | 47 virtual void AddAuthorizationHeader( |
| 46 HttpRequestHeaders* authorization_headers); | 48 HttpRequestHeaders* authorization_headers); |
| 47 | 49 |
| 48 // Checks for and handles HTTP status code 401 or 407. | 50 // Checks for and handles HTTP status code 401 or 407. |
| 49 // |HandleAuthChallenge()| returns OK on success, or a network error code | 51 // |HandleAuthChallenge()| returns OK on success, or a network error code |
| 50 // otherwise. It may also populate |auth_info_|. | 52 // otherwise. It may also populate |auth_info_|. |
| 51 virtual int HandleAuthChallenge(scoped_refptr<HttpResponseHeaders> headers, | 53 virtual int HandleAuthChallenge(scoped_refptr<HttpResponseHeaders> headers, |
| 52 bool do_not_send_server_auth, | 54 bool do_not_send_server_auth, |
| 53 bool establishing_tunnel, | 55 bool establishing_tunnel, |
| 54 const BoundNetLog& net_log); | 56 const BoundNetLog& net_log); |
| 55 | 57 |
| 56 // Store the supplied credentials and prepare to restart the auth. | 58 // Store the supplied credentials. |
| 57 virtual void ResetAuth(const std::wstring& username, | 59 virtual void SetCredentials(const std::wstring& username, |
| 58 const std::wstring& password); | 60 const std::wstring& password); |
| 61 |
| 62 // Prepare to restart the auth. |
| 63 virtual void PrepareForAuthRestart(); |
| 59 | 64 |
| 60 virtual bool HaveAuthHandler() const { | 65 virtual bool HaveAuthHandler() const { |
| 61 return handler_.get() != NULL; | 66 return handler_.get() != NULL; |
| 62 } | 67 } |
| 63 | 68 |
| 64 virtual bool HaveAuth() const { | 69 virtual bool HaveAuth() const { |
| 65 return handler_.get() && !identity_.invalid; | 70 return handler_.get() && !identity_.invalid; |
| 66 } | 71 } |
| 67 | 72 |
| 73 virtual HttpAuth::Identity AuthIdentity() { |
| 74 return identity_; |
| 75 } |
| 76 |
| 68 virtual scoped_refptr<AuthChallengeInfo> auth_info() { | 77 virtual scoped_refptr<AuthChallengeInfo> auth_info() { |
| 69 return auth_info_; | 78 return auth_info_; |
| 70 } | 79 } |
| 71 | 80 |
| 72 virtual bool IsAuthSchemeDisabled(const std::string& scheme) const; | 81 virtual bool IsAuthSchemeDisabled(const std::string& scheme) const; |
| 73 virtual void DisableAuthScheme(const std::string& scheme); | 82 virtual void DisableAuthScheme(const std::string& scheme); |
| 74 | 83 |
| 75 protected: // So that we can mock this object. | |
| 76 friend class base::RefCounted<HttpAuthController>; | |
| 77 virtual ~HttpAuthController(); | |
| 78 | |
| 79 private: | 84 private: |
| 80 // Searches the auth cache for an entry that encompasses the request's path. | 85 // Searches the auth cache for an entry that encompasses the request's path. |
| 81 // If such an entry is found, updates |identity_| and |handler_| with the | 86 // If such an entry is found, updates |identity_| and |handler_| with the |
| 82 // cache entry's data and returns true. | 87 // cache entry's data and returns true. |
| 83 bool SelectPreemptiveAuth(const BoundNetLog& net_log); | 88 bool SelectPreemptiveAuth(const BoundNetLog& net_log); |
| 84 | 89 |
| 85 // Invalidates any auth cache entries after authentication has failed. | 90 // Invalidates any auth cache entries after authentication has failed. |
| 86 // The identity that was rejected is |identity_|. | 91 // The identity that was rejected is |identity_|. |
| 87 void InvalidateRejectedAuthFromCache(); | 92 void InvalidateRejectedAuthFromCache(); |
| 88 | 93 |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 135 // True if default credentials have already been tried for this transaction | 140 // True if default credentials have already been tried for this transaction |
| 136 // in response to an HTTP authentication challenge. | 141 // in response to an HTTP authentication challenge. |
| 137 bool default_credentials_used_; | 142 bool default_credentials_used_; |
| 138 | 143 |
| 139 scoped_refptr<HttpNetworkSession> session_; | 144 scoped_refptr<HttpNetworkSession> session_; |
| 140 | 145 |
| 141 std::set<std::string> disabled_schemes_; | 146 std::set<std::string> disabled_schemes_; |
| 142 | 147 |
| 143 CompletionCallbackImpl<HttpAuthController> io_callback_; | 148 CompletionCallbackImpl<HttpAuthController> io_callback_; |
| 144 CompletionCallback* user_callback_; | 149 CompletionCallback* user_callback_; |
| 150 |
| 151 DISALLOW_COPY_AND_ASSIGN(HttpAuthController); |
| 145 }; | 152 }; |
| 146 | 153 |
| 147 } // namespace net | 154 } // namespace net |
| 148 | 155 |
| 149 #endif // NET_HTTP_HTTP_AUTH_CONTROLLER_H_ | 156 #endif // NET_HTTP_HTTP_AUTH_CONTROLLER_H_ |
| OLD | NEW |