| OLD | NEW |
| (Empty) |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #include "net/http/http_auth_handler.h" | |
| 6 | |
| 7 #include "base/bind.h" | |
| 8 #include "base/bind_helpers.h" | |
| 9 #include "base/logging.h" | |
| 10 #include "net/base/net_errors.h" | |
| 11 #include "net/http/http_auth_challenge_tokenizer.h" | |
| 12 | |
| 13 namespace net { | |
| 14 | |
| 15 HttpAuthHandler::HttpAuthHandler() | |
| 16 : auth_scheme_(HttpAuth::AUTH_SCHEME_MAX), | |
| 17 score_(-1), | |
| 18 target_(HttpAuth::AUTH_NONE), | |
| 19 properties_(-1) { | |
| 20 } | |
| 21 | |
| 22 HttpAuthHandler::~HttpAuthHandler() { | |
| 23 } | |
| 24 | |
| 25 bool HttpAuthHandler::InitFromChallenge( | |
| 26 HttpAuthChallengeTokenizer* challenge, | |
| 27 HttpAuth::Target target, | |
| 28 const GURL& origin, | |
| 29 const BoundNetLog& net_log) { | |
| 30 origin_ = origin; | |
| 31 target_ = target; | |
| 32 score_ = -1; | |
| 33 properties_ = -1; | |
| 34 net_log_ = net_log; | |
| 35 | |
| 36 auth_challenge_ = challenge->challenge_text(); | |
| 37 bool ok = Init(challenge); | |
| 38 | |
| 39 // Init() is expected to set the scheme, realm, score, and properties. The | |
| 40 // realm may be empty. | |
| 41 DCHECK(!ok || score_ != -1); | |
| 42 DCHECK(!ok || properties_ != -1); | |
| 43 DCHECK(!ok || auth_scheme_ != HttpAuth::AUTH_SCHEME_MAX); | |
| 44 | |
| 45 return ok; | |
| 46 } | |
| 47 | |
| 48 namespace { | |
| 49 | |
| 50 NetLog::EventType EventTypeFromAuthTarget(HttpAuth::Target target) { | |
| 51 switch (target) { | |
| 52 case HttpAuth::AUTH_PROXY: | |
| 53 return NetLog::TYPE_AUTH_PROXY; | |
| 54 case HttpAuth::AUTH_SERVER: | |
| 55 return NetLog::TYPE_AUTH_SERVER; | |
| 56 default: | |
| 57 NOTREACHED(); | |
| 58 return NetLog::TYPE_CANCELLED; | |
| 59 } | |
| 60 } | |
| 61 | |
| 62 } // namespace | |
| 63 | |
| 64 int HttpAuthHandler::GenerateAuthToken( | |
| 65 const AuthCredentials* credentials, const HttpRequestInfo* request, | |
| 66 const CompletionCallback& callback, std::string* auth_token) { | |
| 67 DCHECK(!callback.is_null()); | |
| 68 DCHECK(request); | |
| 69 DCHECK(credentials != NULL || AllowsDefaultCredentials()); | |
| 70 DCHECK(auth_token != NULL); | |
| 71 DCHECK(callback_.is_null()); | |
| 72 callback_ = callback; | |
| 73 net_log_.BeginEvent(EventTypeFromAuthTarget(target_)); | |
| 74 int rv = GenerateAuthTokenImpl( | |
| 75 credentials, request, | |
| 76 base::Bind(&HttpAuthHandler::OnGenerateAuthTokenComplete, | |
| 77 base::Unretained(this)), | |
| 78 auth_token); | |
| 79 if (rv != ERR_IO_PENDING) | |
| 80 FinishGenerateAuthToken(); | |
| 81 return rv; | |
| 82 } | |
| 83 | |
| 84 bool HttpAuthHandler::NeedsIdentity() { | |
| 85 return true; | |
| 86 } | |
| 87 | |
| 88 bool HttpAuthHandler::AllowsDefaultCredentials() { | |
| 89 return false; | |
| 90 } | |
| 91 | |
| 92 bool HttpAuthHandler::AllowsExplicitCredentials() { | |
| 93 return true; | |
| 94 } | |
| 95 | |
| 96 void HttpAuthHandler::OnGenerateAuthTokenComplete(int rv) { | |
| 97 CompletionCallback callback = callback_; | |
| 98 FinishGenerateAuthToken(); | |
| 99 DCHECK(!callback.is_null()); | |
| 100 callback.Run(rv); | |
| 101 } | |
| 102 | |
| 103 void HttpAuthHandler::FinishGenerateAuthToken() { | |
| 104 // TOOD(cbentzel): Should this be done in OK case only? | |
| 105 net_log_.EndEvent(EventTypeFromAuthTarget(target_)); | |
| 106 callback_.Reset(); | |
| 107 } | |
| 108 | |
| 109 } // namespace net | |
| OLD | NEW |