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 74400df148442edbda55e4dc5894a691b35d3ef8..1b1cf95224f9acdcbd659515809e338208d3b1e2 100644 |
--- a/chrome/browser/ui/login/login_prompt.cc |
+++ b/chrome/browser/ui/login/login_prompt.cc |
@@ -105,8 +105,15 @@ LoginHandler::LoginHandler(net::AuthChallengeInfo* auth_info, |
} |
} |
-LoginHandler::~LoginHandler() { |
- SetModel(NULL); |
+void LoginHandler::OnRequestCancelled() { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)) << |
+ "Why is OnRequestCancelled called from the UI thread?"; |
+ |
+ // Reference is no longer valid. |
+ request_ = NULL; |
+ |
+ // Give up on auth if the request was cancelled. |
+ CancelAuth(); |
} |
void LoginHandler::SetPasswordForm(const webkit::forms::PasswordForm& form) { |
@@ -184,34 +191,6 @@ void LoginHandler::CancelAuth() { |
base::Bind(&LoginHandler::CancelAuthDeferred, this)); |
} |
-void LoginHandler::OnRequestCancelled() { |
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)) << |
- "Why is OnRequestCancelled called from the UI thread?"; |
- |
- // Reference is no longer valid. |
- request_ = NULL; |
- |
- // Give up on auth if the request was cancelled. |
- CancelAuth(); |
-} |
- |
-void LoginHandler::AddObservers() { |
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
- |
- // This is probably OK; we need to listen to everything and we break out of |
- // the Observe() if we aren't handling the same auth_info(). |
- registrar_.reset(new content::NotificationRegistrar); |
- registrar_->Add(this, chrome::NOTIFICATION_AUTH_SUPPLIED, |
- content::NotificationService::AllBrowserContextsAndSources()); |
- registrar_->Add(this, chrome::NOTIFICATION_AUTH_CANCELLED, |
- content::NotificationService::AllBrowserContextsAndSources()); |
-} |
- |
-void LoginHandler::RemoveObservers() { |
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
- |
- registrar_.reset(); |
-} |
void LoginHandler::Observe(int type, |
const content::NotificationSource& source, |
@@ -255,6 +234,17 @@ void LoginHandler::Observe(int type, |
} |
} |
+// Returns whether authentication had been handled (SetAuth or CancelAuth). |
+bool LoginHandler::WasAuthHandled() const { |
+ base::AutoLock lock(handled_auth_lock_); |
+ bool was_handled = handled_auth_; |
+ return was_handled; |
+} |
+ |
+LoginHandler::~LoginHandler() { |
+ SetModel(NULL); |
+} |
+ |
void LoginHandler::SetModel(LoginModel* model) { |
if (login_model_) |
login_model_->SetObserver(NULL); |
@@ -287,23 +277,40 @@ void LoginHandler::NotifyAuthNeeded() { |
content::Details<LoginNotificationDetails>(&details)); |
} |
-void LoginHandler::NotifyAuthCancelled() { |
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
- DCHECK(WasAuthHandled()); |
+void LoginHandler::ReleaseSoon() { |
+ if (!TestAndSetAuthHandled()) { |
+ BrowserThread::PostTask( |
+ BrowserThread::IO, FROM_HERE, |
+ base::Bind(&LoginHandler::CancelAuthDeferred, this)); |
+ BrowserThread::PostTask( |
+ BrowserThread::UI, FROM_HERE, |
+ base::Bind(&LoginHandler::NotifyAuthCancelled, this)); |
+ } |
- content::NotificationService* service = |
- content::NotificationService::current(); |
- NavigationController* controller = NULL; |
+ BrowserThread::PostTask( |
+ BrowserThread::UI, FROM_HERE, |
+ base::Bind(&LoginHandler::RemoveObservers, this)); |
- WebContents* requesting_contents = GetWebContentsForLogin(); |
- if (requesting_contents) |
- controller = &requesting_contents->GetController(); |
+ // Delete this object once all InvokeLaters have been called. |
+ BrowserThread::ReleaseSoon(BrowserThread::IO, FROM_HERE, this); |
+} |
- LoginNotificationDetails details(this); |
+void LoginHandler::AddObservers() { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
- service->Notify(chrome::NOTIFICATION_AUTH_CANCELLED, |
- content::Source<NavigationController>(controller), |
- content::Details<LoginNotificationDetails>(&details)); |
+ // This is probably OK; we need to listen to everything and we break out of |
+ // the Observe() if we aren't handling the same auth_info(). |
+ registrar_.reset(new content::NotificationRegistrar); |
+ registrar_->Add(this, chrome::NOTIFICATION_AUTH_SUPPLIED, |
+ content::NotificationService::AllBrowserContextsAndSources()); |
+ registrar_->Add(this, chrome::NOTIFICATION_AUTH_CANCELLED, |
+ content::NotificationService::AllBrowserContextsAndSources()); |
+} |
+ |
+void LoginHandler::RemoveObservers() { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
+ |
+ registrar_.reset(); |
} |
void LoginHandler::NotifyAuthSupplied(const string16& username, |
@@ -327,29 +334,23 @@ void LoginHandler::NotifyAuthSupplied(const string16& username, |
content::Details<AuthSuppliedLoginNotificationDetails>(&details)); |
} |
-void LoginHandler::ReleaseSoon() { |
- if (!TestAndSetAuthHandled()) { |
- BrowserThread::PostTask( |
- BrowserThread::IO, FROM_HERE, |
- base::Bind(&LoginHandler::CancelAuthDeferred, this)); |
- BrowserThread::PostTask( |
- BrowserThread::UI, FROM_HERE, |
- base::Bind(&LoginHandler::NotifyAuthCancelled, this)); |
- } |
+void LoginHandler::NotifyAuthCancelled() { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
+ DCHECK(WasAuthHandled()); |
- BrowserThread::PostTask( |
- BrowserThread::UI, FROM_HERE, |
- base::Bind(&LoginHandler::RemoveObservers, this)); |
+ content::NotificationService* service = |
+ content::NotificationService::current(); |
+ NavigationController* controller = NULL; |
- // Delete this object once all InvokeLaters have been called. |
- BrowserThread::ReleaseSoon(BrowserThread::IO, FROM_HERE, this); |
-} |
+ WebContents* requesting_contents = GetWebContentsForLogin(); |
+ if (requesting_contents) |
+ controller = &requesting_contents->GetController(); |
-// Returns whether authentication had been handled (SetAuth or CancelAuth). |
-bool LoginHandler::WasAuthHandled() const { |
- base::AutoLock lock(handled_auth_lock_); |
- bool was_handled = handled_auth_; |
- return was_handled; |
+ LoginNotificationDetails details(this); |
+ |
+ service->Notify(chrome::NOTIFICATION_AUTH_CANCELLED, |
+ content::Source<NavigationController>(controller), |
+ content::Details<LoginNotificationDetails>(&details)); |
} |
// Marks authentication as handled and returns the previous handled state. |