| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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_prompt.h" | 5 #include "chrome/browser/ui/login/login_prompt.h" |
| 6 | 6 |
| 7 #include <vector> | 7 #include <vector> |
| 8 | 8 |
| 9 #include "base/bind.h" |
| 9 #include "base/command_line.h" | 10 #include "base/command_line.h" |
| 10 #include "base/synchronization/lock.h" | 11 #include "base/synchronization/lock.h" |
| 11 #include "base/utf_string_conversions.h" | 12 #include "base/utf_string_conversions.h" |
| 12 #include "chrome/browser/password_manager/password_manager.h" | 13 #include "chrome/browser/password_manager/password_manager.h" |
| 13 #include "chrome/browser/tab_contents/tab_util.h" | 14 #include "chrome/browser/tab_contents/tab_util.h" |
| 14 #include "chrome/browser/ui/constrained_window.h" | 15 #include "chrome/browser/ui/constrained_window.h" |
| 15 #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" | 16 #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" |
| 16 #include "chrome/common/chrome_notification_types.h" | 17 #include "chrome/common/chrome_notification_types.h" |
| 17 #include "content/browser/renderer_host/render_view_host.h" | 18 #include "content/browser/renderer_host/render_view_host.h" |
| 18 #include "content/browser/renderer_host/render_view_host_delegate.h" | 19 #include "content/browser/renderer_host/render_view_host_delegate.h" |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 83 // This constructor is called on the I/O thread, so we cannot load the nib | 84 // This constructor is called on the I/O thread, so we cannot load the nib |
| 84 // here. BuildViewForPasswordManager() will be invoked on the UI thread | 85 // here. BuildViewForPasswordManager() will be invoked on the UI thread |
| 85 // later, so wait with loading the nib until then. | 86 // later, so wait with loading the nib until then. |
| 86 DCHECK(request_) << "LoginHandler constructed with NULL request"; | 87 DCHECK(request_) << "LoginHandler constructed with NULL request"; |
| 87 DCHECK(auth_info_) << "LoginHandler constructed with NULL auth info"; | 88 DCHECK(auth_info_) << "LoginHandler constructed with NULL auth info"; |
| 88 | 89 |
| 89 AddRef(); // matched by LoginHandler::ReleaseSoon(). | 90 AddRef(); // matched by LoginHandler::ReleaseSoon(). |
| 90 | 91 |
| 91 BrowserThread::PostTask( | 92 BrowserThread::PostTask( |
| 92 BrowserThread::UI, FROM_HERE, | 93 BrowserThread::UI, FROM_HERE, |
| 93 NewRunnableMethod(this, &LoginHandler::AddObservers)); | 94 base::Bind(&LoginHandler::AddObservers, this)); |
| 94 | 95 |
| 95 if (!ResourceDispatcherHost::RenderViewForRequest( | 96 if (!ResourceDispatcherHost::RenderViewForRequest( |
| 96 request_, &render_process_host_id_, &tab_contents_id_)) { | 97 request_, &render_process_host_id_, &tab_contents_id_)) { |
| 97 NOTREACHED(); | 98 NOTREACHED(); |
| 98 } | 99 } |
| 99 } | 100 } |
| 100 | 101 |
| 101 LoginHandler::~LoginHandler() { | 102 LoginHandler::~LoginHandler() { |
| 102 SetModel(NULL); | 103 SetModel(NULL); |
| 103 } | 104 } |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 143 // Calling NotifyAuthSupplied() directly instead of posting a task | 144 // Calling NotifyAuthSupplied() directly instead of posting a task |
| 144 // allows other LoginHandler instances to queue their | 145 // allows other LoginHandler instances to queue their |
| 145 // CloseContentsDeferred() before ours. Closing dialogs in the | 146 // CloseContentsDeferred() before ours. Closing dialogs in the |
| 146 // opposite order as they were created avoids races where remaining | 147 // opposite order as they were created avoids races where remaining |
| 147 // dialogs in the same tab may be briefly displayed to the user | 148 // dialogs in the same tab may be briefly displayed to the user |
| 148 // before they are removed. | 149 // before they are removed. |
| 149 NotifyAuthSupplied(username, password); | 150 NotifyAuthSupplied(username, password); |
| 150 | 151 |
| 151 BrowserThread::PostTask( | 152 BrowserThread::PostTask( |
| 152 BrowserThread::UI, FROM_HERE, | 153 BrowserThread::UI, FROM_HERE, |
| 153 NewRunnableMethod(this, &LoginHandler::CloseContentsDeferred)); | 154 base::Bind(&LoginHandler::CloseContentsDeferred, this)); |
| 154 BrowserThread::PostTask( | 155 BrowserThread::PostTask( |
| 155 BrowserThread::IO, FROM_HERE, | 156 BrowserThread::IO, FROM_HERE, |
| 156 NewRunnableMethod( | 157 base::Bind(&LoginHandler::SetAuthDeferred, this, username, password)); |
| 157 this, &LoginHandler::SetAuthDeferred, username, password)); | |
| 158 } | 158 } |
| 159 | 159 |
| 160 void LoginHandler::CancelAuth() { | 160 void LoginHandler::CancelAuth() { |
| 161 if (TestAndSetAuthHandled()) | 161 if (TestAndSetAuthHandled()) |
| 162 return; | 162 return; |
| 163 | 163 |
| 164 // Similar to how we deal with notifications above in SetAuth() | 164 // Similar to how we deal with notifications above in SetAuth() |
| 165 if (BrowserThread::CurrentlyOn(BrowserThread::UI)) { | 165 if (BrowserThread::CurrentlyOn(BrowserThread::UI)) { |
| 166 NotifyAuthCancelled(); | 166 NotifyAuthCancelled(); |
| 167 } else { | 167 } else { |
| 168 BrowserThread::PostTask( | 168 BrowserThread::PostTask( |
| 169 BrowserThread::UI, FROM_HERE, | 169 BrowserThread::UI, FROM_HERE, |
| 170 NewRunnableMethod(this, &LoginHandler::NotifyAuthCancelled)); | 170 base::Bind(&LoginHandler::NotifyAuthCancelled, this)); |
| 171 } | 171 } |
| 172 | 172 |
| 173 BrowserThread::PostTask( | 173 BrowserThread::PostTask( |
| 174 BrowserThread::UI, FROM_HERE, | 174 BrowserThread::UI, FROM_HERE, |
| 175 NewRunnableMethod(this, &LoginHandler::CloseContentsDeferred)); | 175 base::Bind(&LoginHandler::CloseContentsDeferred, this)); |
| 176 BrowserThread::PostTask( | 176 BrowserThread::PostTask( |
| 177 BrowserThread::IO, FROM_HERE, | 177 BrowserThread::IO, FROM_HERE, |
| 178 NewRunnableMethod(this, &LoginHandler::CancelAuthDeferred)); | 178 base::Bind(&LoginHandler::CancelAuthDeferred, this)); |
| 179 } | 179 } |
| 180 | 180 |
| 181 void LoginHandler::OnRequestCancelled() { | 181 void LoginHandler::OnRequestCancelled() { |
| 182 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)) << | 182 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)) << |
| 183 "Why is OnRequestCancelled called from the UI thread?"; | 183 "Why is OnRequestCancelled called from the UI thread?"; |
| 184 | 184 |
| 185 // Reference is no longer valid. | 185 // Reference is no longer valid. |
| 186 request_ = NULL; | 186 request_ = NULL; |
| 187 | 187 |
| 188 // Give up on auth if the request was cancelled. | 188 // Give up on auth if the request was cancelled. |
| (...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 318 service->Notify( | 318 service->Notify( |
| 319 chrome::NOTIFICATION_AUTH_SUPPLIED, | 319 chrome::NOTIFICATION_AUTH_SUPPLIED, |
| 320 content::Source<NavigationController>(controller), | 320 content::Source<NavigationController>(controller), |
| 321 content::Details<AuthSuppliedLoginNotificationDetails>(&details)); | 321 content::Details<AuthSuppliedLoginNotificationDetails>(&details)); |
| 322 } | 322 } |
| 323 | 323 |
| 324 void LoginHandler::ReleaseSoon() { | 324 void LoginHandler::ReleaseSoon() { |
| 325 if (!TestAndSetAuthHandled()) { | 325 if (!TestAndSetAuthHandled()) { |
| 326 BrowserThread::PostTask( | 326 BrowserThread::PostTask( |
| 327 BrowserThread::IO, FROM_HERE, | 327 BrowserThread::IO, FROM_HERE, |
| 328 NewRunnableMethod(this, &LoginHandler::CancelAuthDeferred)); | 328 base::Bind(&LoginHandler::CancelAuthDeferred, this)); |
| 329 BrowserThread::PostTask( | 329 BrowserThread::PostTask( |
| 330 BrowserThread::UI, FROM_HERE, | 330 BrowserThread::UI, FROM_HERE, |
| 331 NewRunnableMethod(this, &LoginHandler::NotifyAuthCancelled)); | 331 base::Bind(&LoginHandler::NotifyAuthCancelled, this)); |
| 332 } | 332 } |
| 333 | 333 |
| 334 BrowserThread::PostTask( | 334 BrowserThread::PostTask( |
| 335 BrowserThread::UI, FROM_HERE, | 335 BrowserThread::UI, FROM_HERE, |
| 336 NewRunnableMethod(this, &LoginHandler::RemoveObservers)); | 336 base::Bind(&LoginHandler::RemoveObservers, this)); |
| 337 | 337 |
| 338 // Delete this object once all InvokeLaters have been called. | 338 // Delete this object once all InvokeLaters have been called. |
| 339 BrowserThread::ReleaseSoon(BrowserThread::IO, FROM_HERE, this); | 339 BrowserThread::ReleaseSoon(BrowserThread::IO, FROM_HERE, this); |
| 340 } | 340 } |
| 341 | 341 |
| 342 // Returns whether authentication had been handled (SetAuth or CancelAuth). | 342 // Returns whether authentication had been handled (SetAuth or CancelAuth). |
| 343 bool LoginHandler::WasAuthHandled() const { | 343 bool LoginHandler::WasAuthHandled() const { |
| 344 base::AutoLock lock(handled_auth_lock_); | 344 base::AutoLock lock(handled_auth_lock_); |
| 345 bool was_handled = handled_auth_; | 345 bool was_handled = handled_auth_; |
| 346 return was_handled; | 346 return was_handled; |
| (...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 490 // Public API | 490 // Public API |
| 491 | 491 |
| 492 LoginHandler* CreateLoginPrompt(net::AuthChallengeInfo* auth_info, | 492 LoginHandler* CreateLoginPrompt(net::AuthChallengeInfo* auth_info, |
| 493 net::URLRequest* request) { | 493 net::URLRequest* request) { |
| 494 LoginHandler* handler = LoginHandler::Create(auth_info, request); | 494 LoginHandler* handler = LoginHandler::Create(auth_info, request); |
| 495 BrowserThread::PostTask( | 495 BrowserThread::PostTask( |
| 496 BrowserThread::UI, FROM_HERE, new LoginDialogTask( | 496 BrowserThread::UI, FROM_HERE, new LoginDialogTask( |
| 497 request->url(), auth_info, handler)); | 497 request->url(), auth_info, handler)); |
| 498 return handler; | 498 return handler; |
| 499 } | 499 } |
| OLD | NEW |