| Index: net/http/http_auth_handler_basic.cc
|
| diff --git a/net/http/http_auth_handler_basic.cc b/net/http/http_auth_handler_basic.cc
|
| index e48aa6761ebfc40c886513169e0f2c4b92429971..9ed28e2063297c119a647595e0086d9643e0af45 100644
|
| --- a/net/http/http_auth_handler_basic.cc
|
| +++ b/net/http/http_auth_handler_basic.cc
|
| @@ -53,9 +53,20 @@ bool HttpAuthHandlerBasic::ParseChallenge(
|
|
|
| HttpAuth::AuthorizationResult HttpAuthHandlerBasic::HandleAnotherChallenge(
|
| HttpAuth::ChallengeTokenizer* challenge) {
|
| - // Basic authentication is always a single round, so any responses should
|
| - // be treated as a rejection.
|
| - return HttpAuth::AUTHORIZATION_RESULT_REJECT;
|
| + // Basic authentication is always a single round, so any responses
|
| + // should be treated as a rejection. However, if the new challenge
|
| + // is for a different realm, then indicate the realm change.
|
| + HttpUtil::NameValuePairsIterator parameters = challenge->param_pairs();
|
| + std::string realm;
|
| + while (parameters.GetNext()) {
|
| + if (LowerCaseEqualsASCII(parameters.name(), "realm")) {
|
| + realm = parameters.value();
|
| + break;
|
| + }
|
| + }
|
| + return (realm_ != realm)?
|
| + HttpAuth::AUTHORIZATION_RESULT_DIFFERENT_REALM:
|
| + HttpAuth::AUTHORIZATION_RESULT_REJECT;
|
| }
|
|
|
| int HttpAuthHandlerBasic::GenerateAuthTokenImpl(
|
|
|