Index: net/http/http_auth_handler_negotiate.cc |
diff --git a/net/http/http_auth_handler_negotiate.cc b/net/http/http_auth_handler_negotiate.cc |
index 422ddd729a27cf4dc9c24198c4dc30e0087cd60c..b02913b8024f01a704c687bcec6d2a05a59b5f74 100644 |
--- a/net/http/http_auth_handler_negotiate.cc |
+++ b/net/http/http_auth_handler_negotiate.cc |
@@ -61,10 +61,14 @@ int HttpAuthHandlerNegotiate::Factory::CreateAuthHandler( |
new HttpAuthHandlerNegotiate(auth_library_.get(), max_token_length_, |
url_security_manager(), resolver_, |
disable_cname_lookup_, use_port_)); |
- if (!tmp_handler->InitFromChallenge(challenge, target, origin, net_log)) |
- return ERR_INVALID_RESPONSE; |
- handler->swap(tmp_handler); |
- return OK; |
+#elif defined(OS_ANDROID) |
+ if (is_unsupported_ || auth_library_->empty() || reason == CREATE_PREEMPTIVE) |
+ return ERR_UNSUPPORTED_AUTH_SCHEME; |
+ // TODO(cbentzel): Move towards model of parsing in the factory |
+ // method and only constructing when valid. |
+ scoped_ptr<HttpAuthHandler> tmp_handler(new HttpAuthHandlerNegotiate( |
+ auth_library_.get(), url_security_manager(), resolver_, |
+ disable_cname_lookup_, use_port_)); |
#elif defined(OS_POSIX) |
if (is_unsupported_) |
return ERR_UNSUPPORTED_AUTH_SCHEME; |
@@ -78,11 +82,11 @@ int HttpAuthHandlerNegotiate::Factory::CreateAuthHandler( |
new HttpAuthHandlerNegotiate(auth_library_.get(), url_security_manager(), |
resolver_, disable_cname_lookup_, |
use_port_)); |
+#endif |
if (!tmp_handler->InitFromChallenge(challenge, target, origin, net_log)) |
return ERR_INVALID_RESPONSE; |
handler->swap(tmp_handler); |
return OK; |
-#endif |
} |
HttpAuthHandlerNegotiate::HttpAuthHandlerNegotiate( |
@@ -94,7 +98,9 @@ HttpAuthHandlerNegotiate::HttpAuthHandlerNegotiate( |
HostResolver* resolver, |
bool disable_cname_lookup, |
bool use_port) |
-#if defined(OS_WIN) |
+#if defined(OS_ANDROID) |
+ : auth_system_(*auth_library), |
+#elif defined(OS_WIN) |
: auth_system_(auth_library, "Negotiate", NEGOSSP_NAME, max_token_length), |
#elif defined(OS_POSIX) |
: auth_system_(auth_library, "Negotiate", CHROME_GSS_SPNEGO_MECH_OID_DESC), |
@@ -315,8 +321,10 @@ int HttpAuthHandlerNegotiate::DoResolveCanonicalNameComplete(int rv) { |
int HttpAuthHandlerNegotiate::DoGenerateAuthToken() { |
next_state_ = STATE_GENERATE_AUTH_TOKEN_COMPLETE; |
AuthCredentials* credentials = has_credentials_ ? &credentials_ : NULL; |
- // TODO(cbentzel): This should possibly be done async. |
- return auth_system_.GenerateAuthToken(credentials, spn_, auth_token_); |
+ return auth_system_.GenerateAuthToken( |
+ credentials, spn_, auth_token_, |
+ base::Bind(&HttpAuthHandlerNegotiate::OnIOComplete, |
+ base::Unretained(this))); |
} |
int HttpAuthHandlerNegotiate::DoGenerateAuthTokenComplete(int rv) { |