| Index: android_webview/browser/aw_login_delegate.cc
|
| diff --git a/android_webview/browser/aw_login_delegate.cc b/android_webview/browser/aw_login_delegate.cc
|
| index ed271c25a559193945daab521dac68bba86993e5..d169710f88c615a5d692dfd5d64fc068bd8944f4 100644
|
| --- a/android_webview/browser/aw_login_delegate.cc
|
| +++ b/android_webview/browser/aw_login_delegate.cc
|
| @@ -56,11 +56,14 @@ AwLoginDelegate::AwLoginDelegate(net::AuthChallengeInfo* auth_info,
|
|
|
| BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
|
| base::Bind(&AwLoginDelegate::HandleHttpAuthRequestOnUIThread,
|
| - make_scoped_refptr(this), (count->auth_attempts_ == 0)));
|
| + this, (count->auth_attempts_ == 0)));
|
| count->auth_attempts_++;
|
| }
|
|
|
| AwLoginDelegate::~AwLoginDelegate() {
|
| + // The Auth handler holds a ref count back on |this| object, so it should be
|
| + // impossible to reach here while this object still owns an auth handler.
|
| + DCHECK(aw_http_auth_handler_ == NULL);
|
| }
|
|
|
| void AwLoginDelegate::Proceed(const string16& user,
|
| @@ -68,14 +71,13 @@ void AwLoginDelegate::Proceed(const string16& user,
|
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
|
| base::Bind(&AwLoginDelegate::ProceedOnIOThread,
|
| - make_scoped_refptr(this), user, password));
|
| + this, user, password));
|
| }
|
|
|
| void AwLoginDelegate::Cancel() {
|
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
|
| - base::Bind(&AwLoginDelegate::CancelOnIOThread,
|
| - make_scoped_refptr(this)));
|
| + base::Bind(&AwLoginDelegate::CancelOnIOThread, this));
|
| }
|
|
|
| void AwLoginDelegate::HandleHttpAuthRequestOnUIThread(
|
| @@ -102,7 +104,9 @@ void AwLoginDelegate::CancelOnIOThread() {
|
| if (request_) {
|
| request_->CancelAuth();
|
| ResourceDispatcherHost::Get()->ClearLoginDelegateForRequest(request_);
|
| + request_ = NULL;
|
| }
|
| + DeleteAuthHandlerSoon();
|
| }
|
|
|
| void AwLoginDelegate::ProceedOnIOThread(const string16& user,
|
| @@ -111,12 +115,23 @@ void AwLoginDelegate::ProceedOnIOThread(const string16& user,
|
| if (request_) {
|
| request_->SetAuth(net::AuthCredentials(user, password));
|
| ResourceDispatcherHost::Get()->ClearLoginDelegateForRequest(request_);
|
| + request_ = NULL;
|
| }
|
| + DeleteAuthHandlerSoon();
|
| }
|
|
|
| void AwLoginDelegate::OnRequestCancelled() {
|
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
|
| request_ = NULL;
|
| + DeleteAuthHandlerSoon();
|
| +}
|
| +
|
| +void AwLoginDelegate::DeleteAuthHandlerSoon() {
|
| + if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) {
|
| + BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
|
| + base::Bind(&AwLoginDelegate::DeleteAuthHandlerSoon, this));
|
| + return;
|
| + }
|
| aw_http_auth_handler_.reset();
|
| }
|
|
|
|
|