| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/ui/login/login_handler.h" | 5 #include "chrome/browser/ui/login/login_handler.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| (...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 114 DCHECK(request_) << "LoginHandler constructed with NULL request"; | 114 DCHECK(request_) << "LoginHandler constructed with NULL request"; |
| 115 DCHECK(auth_info_.get()) << "LoginHandler constructed with NULL auth info"; | 115 DCHECK(auth_info_.get()) << "LoginHandler constructed with NULL auth info"; |
| 116 | 116 |
| 117 AddRef(); // matched by LoginHandler::ReleaseSoon(). | 117 AddRef(); // matched by LoginHandler::ReleaseSoon(). |
| 118 | 118 |
| 119 const content::ResourceRequestInfo* info = | 119 const content::ResourceRequestInfo* info = |
| 120 ResourceRequestInfo::ForRequest(request); | 120 ResourceRequestInfo::ForRequest(request); |
| 121 DCHECK(info); | 121 DCHECK(info); |
| 122 web_contents_getter_ = info->GetWebContentsGetterForRequest(); | 122 web_contents_getter_ = info->GetWebContentsGetterForRequest(); |
| 123 | 123 |
| 124 BrowserThread::PostTask( | 124 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, |
| 125 BrowserThread::UI, FROM_HERE, | 125 base::BindOnce(&LoginHandler::AddObservers, this)); |
| 126 base::Bind(&LoginHandler::AddObservers, this)); | |
| 127 } | 126 } |
| 128 | 127 |
| 129 void LoginHandler::OnRequestCancelled() { | 128 void LoginHandler::OnRequestCancelled() { |
| 130 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)) << | 129 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)) << |
| 131 "Why is OnRequestCancelled called from the UI thread?"; | 130 "Why is OnRequestCancelled called from the UI thread?"; |
| 132 | 131 |
| 133 // Reference is no longer valid. | 132 // Reference is no longer valid. |
| 134 request_ = NULL; | 133 request_ = NULL; |
| 135 | 134 |
| 136 // Give up on auth if the request was cancelled. Since the dialog was canceled | 135 // Give up on auth if the request was cancelled. Since the dialog was canceled |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 204 // Calling NotifyAuthSupplied() directly instead of posting a task | 203 // Calling NotifyAuthSupplied() directly instead of posting a task |
| 205 // allows other LoginHandler instances to queue their | 204 // allows other LoginHandler instances to queue their |
| 206 // CloseContentsDeferred() before ours. Closing dialogs in the | 205 // CloseContentsDeferred() before ours. Closing dialogs in the |
| 207 // opposite order as they were created avoids races where remaining | 206 // opposite order as they were created avoids races where remaining |
| 208 // dialogs in the same tab may be briefly displayed to the user | 207 // dialogs in the same tab may be briefly displayed to the user |
| 209 // before they are removed. | 208 // before they are removed. |
| 210 NotifyAuthSupplied(username, password); | 209 NotifyAuthSupplied(username, password); |
| 211 | 210 |
| 212 BrowserThread::PostTask( | 211 BrowserThread::PostTask( |
| 213 BrowserThread::UI, FROM_HERE, | 212 BrowserThread::UI, FROM_HERE, |
| 214 base::Bind(&LoginHandler::CloseContentsDeferred, this)); | 213 base::BindOnce(&LoginHandler::CloseContentsDeferred, this)); |
| 215 BrowserThread::PostTask( | 214 BrowserThread::PostTask( |
| 216 BrowserThread::IO, FROM_HERE, | 215 BrowserThread::IO, FROM_HERE, |
| 217 base::Bind(&LoginHandler::SetAuthDeferred, this, username, password)); | 216 base::BindOnce(&LoginHandler::SetAuthDeferred, this, username, password)); |
| 218 } | 217 } |
| 219 | 218 |
| 220 void LoginHandler::CancelAuth() { | 219 void LoginHandler::CancelAuth() { |
| 221 // Cancel the auth without canceling the navigation, so that the auth error | 220 // Cancel the auth without canceling the navigation, so that the auth error |
| 222 // page commits. | 221 // page commits. |
| 223 DoCancelAuth(false); | 222 DoCancelAuth(false); |
| 224 } | 223 } |
| 225 | 224 |
| 226 void LoginHandler::Observe(int type, | 225 void LoginHandler::Observe(int type, |
| 227 const content::NotificationSource& source, | 226 const content::NotificationSource& source, |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 305 | 304 |
| 306 service->Notify(chrome::NOTIFICATION_AUTH_NEEDED, | 305 service->Notify(chrome::NOTIFICATION_AUTH_NEEDED, |
| 307 content::Source<NavigationController>(controller), | 306 content::Source<NavigationController>(controller), |
| 308 content::Details<LoginNotificationDetails>(&details)); | 307 content::Details<LoginNotificationDetails>(&details)); |
| 309 } | 308 } |
| 310 | 309 |
| 311 void LoginHandler::ReleaseSoon() { | 310 void LoginHandler::ReleaseSoon() { |
| 312 if (!TestAndSetAuthHandled()) { | 311 if (!TestAndSetAuthHandled()) { |
| 313 BrowserThread::PostTask( | 312 BrowserThread::PostTask( |
| 314 BrowserThread::IO, FROM_HERE, | 313 BrowserThread::IO, FROM_HERE, |
| 315 base::Bind(&LoginHandler::CancelAuthDeferred, this)); | 314 base::BindOnce(&LoginHandler::CancelAuthDeferred, this)); |
| 316 BrowserThread::PostTask( | 315 BrowserThread::PostTask( |
| 317 BrowserThread::UI, FROM_HERE, | 316 BrowserThread::UI, FROM_HERE, |
| 318 base::Bind(&LoginHandler::NotifyAuthCancelled, this, false)); | 317 base::BindOnce(&LoginHandler::NotifyAuthCancelled, this, false)); |
| 319 } | 318 } |
| 320 | 319 |
| 321 BrowserThread::PostTask( | 320 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, |
| 322 BrowserThread::UI, FROM_HERE, | 321 base::BindOnce(&LoginHandler::RemoveObservers, this)); |
| 323 base::Bind(&LoginHandler::RemoveObservers, this)); | |
| 324 | 322 |
| 325 // Delete this object once all InvokeLaters have been called. | 323 // Delete this object once all InvokeLaters have been called. |
| 326 BrowserThread::ReleaseSoon(BrowserThread::IO, FROM_HERE, this); | 324 BrowserThread::ReleaseSoon(BrowserThread::IO, FROM_HERE, this); |
| 327 } | 325 } |
| 328 | 326 |
| 329 void LoginHandler::AddObservers() { | 327 void LoginHandler::AddObservers() { |
| 330 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 328 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 331 | 329 |
| 332 // This is probably OK; we need to listen to everything and we break out of | 330 // This is probably OK; we need to listen to everything and we break out of |
| 333 // the Observe() if we aren't handling the same auth_info(). | 331 // the Observe() if we aren't handling the same auth_info(). |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 413 | 411 |
| 414 void LoginHandler::DoCancelAuth(bool dismiss_navigation) { | 412 void LoginHandler::DoCancelAuth(bool dismiss_navigation) { |
| 415 if (TestAndSetAuthHandled()) | 413 if (TestAndSetAuthHandled()) |
| 416 return; | 414 return; |
| 417 | 415 |
| 418 // Similar to how we deal with notifications above in SetAuth(). | 416 // Similar to how we deal with notifications above in SetAuth(). |
| 419 if (BrowserThread::CurrentlyOn(BrowserThread::UI)) { | 417 if (BrowserThread::CurrentlyOn(BrowserThread::UI)) { |
| 420 NotifyAuthCancelled(dismiss_navigation); | 418 NotifyAuthCancelled(dismiss_navigation); |
| 421 } else { | 419 } else { |
| 422 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, | 420 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, |
| 423 base::Bind(&LoginHandler::NotifyAuthCancelled, this, | 421 base::BindOnce(&LoginHandler::NotifyAuthCancelled, |
| 424 dismiss_navigation)); | 422 this, dismiss_navigation)); |
| 425 } | 423 } |
| 426 | 424 |
| 427 BrowserThread::PostTask( | 425 BrowserThread::PostTask( |
| 428 BrowserThread::UI, FROM_HERE, | 426 BrowserThread::UI, FROM_HERE, |
| 429 base::Bind(&LoginHandler::CloseContentsDeferred, this)); | 427 base::BindOnce(&LoginHandler::CloseContentsDeferred, this)); |
| 430 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, | 428 BrowserThread::PostTask( |
| 431 base::Bind(&LoginHandler::CancelAuthDeferred, this)); | 429 BrowserThread::IO, FROM_HERE, |
| 430 base::BindOnce(&LoginHandler::CancelAuthDeferred, this)); |
| 432 } | 431 } |
| 433 | 432 |
| 434 // Calls CancelAuth from the IO loop. | 433 // Calls CancelAuth from the IO loop. |
| 435 void LoginHandler::CancelAuthDeferred() { | 434 void LoginHandler::CancelAuthDeferred() { |
| 436 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 435 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 437 | 436 |
| 438 if (request_) { | 437 if (request_) { |
| 439 request_->CancelAuth(); | 438 request_->CancelAuth(); |
| 440 // Verify that CancelAuth doesn't destroy the request via our delegate. | 439 // Verify that CancelAuth doesn't destroy the request via our delegate. |
| 441 DCHECK(request_ != NULL); | 440 DCHECK(request_ != NULL); |
| (...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 657 // ---------------------------------------------------------------------------- | 656 // ---------------------------------------------------------------------------- |
| 658 // Public API | 657 // Public API |
| 659 | 658 |
| 660 LoginHandler* CreateLoginPrompt(net::AuthChallengeInfo* auth_info, | 659 LoginHandler* CreateLoginPrompt(net::AuthChallengeInfo* auth_info, |
| 661 net::URLRequest* request) { | 660 net::URLRequest* request) { |
| 662 bool is_main_frame = | 661 bool is_main_frame = |
| 663 (request->load_flags() & net::LOAD_MAIN_FRAME_DEPRECATED) != 0; | 662 (request->load_flags() & net::LOAD_MAIN_FRAME_DEPRECATED) != 0; |
| 664 LoginHandler* handler = LoginHandler::Create(auth_info, request); | 663 LoginHandler* handler = LoginHandler::Create(auth_info, request); |
| 665 BrowserThread::PostTask( | 664 BrowserThread::PostTask( |
| 666 BrowserThread::UI, FROM_HERE, | 665 BrowserThread::UI, FROM_HERE, |
| 667 base::Bind(&LoginHandler::LoginDialogCallback, request->url(), | 666 base::BindOnce(&LoginHandler::LoginDialogCallback, request->url(), |
| 668 base::RetainedRef(auth_info), base::RetainedRef(handler), | 667 base::RetainedRef(auth_info), base::RetainedRef(handler), |
| 669 is_main_frame)); | 668 is_main_frame)); |
| 670 return handler; | 669 return handler; |
| 671 } | 670 } |
| OLD | NEW |