| Index: chrome/browser/ui/login/login_prompt.cc | 
| diff --git a/chrome/browser/ui/login/login_prompt.cc b/chrome/browser/ui/login/login_prompt.cc | 
| index 380f7b559a9229350334e4c99bc899b83591010f..7cf93c546d9572d65ab95a09ec54ee85e1ca812f 100644 | 
| --- a/chrome/browser/ui/login/login_prompt.cc | 
| +++ b/chrome/browser/ui/login/login_prompt.cc | 
| @@ -350,7 +350,14 @@ void LoginHandler::SetAuthDeferred(const std::wstring& username, | 
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 
|  | 
| if (request_) { | 
| -    request_->SetAuth(WideToUTF16Hack(username), WideToUTF16Hack(password)); | 
| +    if (auth_info->over_protocol == AUTH_OVER_TLS) { | 
| +      DCHECK_EQ(ASCIIToWide(net::kTLSSRPScheme), auth_info_->scheme); | 
| +      request_->SetTLSLogin(WideToUTF16Hack(username), | 
| +                            WideToUTF16Hack(password)); | 
| +      request_->ContinueWithTLSLogin(); | 
| +    } else { | 
| +      request_->SetAuth(WideToUTF16Hack(username), WideToUTF16Hack(password)); | 
| +    } | 
| ResetLoginHandlerForRequest(request_); | 
| } | 
| } | 
| @@ -360,8 +367,14 @@ void LoginHandler::CancelAuthDeferred() { | 
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 
|  | 
| if (request_) { | 
| -    request_->CancelAuth(); | 
| -    // Verify that CancelAuth doesn't destroy the request via our delegate. | 
| +    if (auth_info->over_protocol == AUTH_OVER_TLS) { | 
| +      DCHECK_EQ(ASCIIToWide(net::kTLSSRPScheme), auth_info_->scheme); | 
| +      request_->CancelTLSLogin(); | 
| +    } else { | 
| +      request_->CancelAuth(); | 
| +    } | 
| +    // Verify that CancelAuth/CancelTLSLogin doesn't destroy the request via | 
| +    // our delegate. | 
| DCHECK(request_ != NULL); | 
| ResetLoginHandlerForRequest(request_); | 
| } | 
| @@ -435,6 +448,8 @@ class LoginDialogTask : public Task { | 
| dialog_form.scheme = PasswordForm::SCHEME_BASIC; | 
| } else if (LowerCaseEqualsASCII(auth_info_->scheme, "digest")) { | 
| dialog_form.scheme = PasswordForm::SCHEME_DIGEST; | 
| +    } else if (LowerCaseEqualsASCII(auth_info_->scheme, "tls-srp")) { | 
| +      dialog_form.scheme = PasswordForm::SCHEME_TLS_SRP; | 
| } else { | 
| dialog_form.scheme = PasswordForm::SCHEME_OTHER; | 
| } | 
| @@ -442,10 +457,12 @@ class LoginDialogTask : public Task { | 
| if (auth_info_->is_proxy) { | 
| std::string origin = host_and_port; | 
| // We don't expect this to already start with http:// or https://. | 
| -      DCHECK(origin.find("http://") != 0 && origin.find("https://") != 0); | 
| +      DCHECK(origin.find("http://") != 0 && origin.find("https://") != 0 && | 
| +             origin.find("httpsv://") != 0); | 
| origin = std::string("http://") + origin; | 
| dialog_form.origin = GURL(origin); | 
| } else if (net::GetHostAndPort(request_url_) != host_and_port) { | 
| +      LOG(INFO) << net::GetHostAndPort(request_url_) << " vs " << host_and_port; | 
| dialog_form.origin = GURL(); | 
| NOTREACHED();  // crbug.com/32718 | 
| } else { | 
|  |