Chromium Code Reviews| 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 8051d83138dad0e8f008a3f5163e32310c236cce..64062ecac00668c96f8851e0461c8bcf13aa3377 100644 |
| --- a/chrome/browser/ui/login/login_prompt.cc |
| +++ b/chrome/browser/ui/login/login_prompt.cc |
| @@ -21,7 +21,6 @@ |
| #include "chrome/browser/ui/login/login_interstitial_delegate.h" |
| #include "chrome/common/pref_names.h" |
| #include "chrome/grit/generated_resources.h" |
| -#include "components/password_manager/content/browser/content_password_manager_driver.h" |
| #include "components/password_manager/core/browser/browser_save_password_progress_logger.h" |
| #include "components/password_manager/core/browser/password_manager.h" |
| #include "components/url_formatter/elide_url.h" |
| @@ -145,12 +144,12 @@ WebContents* LoginHandler::GetWebContentsForLogin() const { |
| return WebContents::FromRenderFrameHost(rfh); |
| } |
| -password_manager::ContentPasswordManagerDriver* |
| -LoginHandler::GetPasswordManagerDriverForLogin() { |
| - content::RenderFrameHost* rfh = content::RenderFrameHost::FromID( |
| - render_process_host_id_, render_frame_id_); |
| - return password_manager::ContentPasswordManagerDriver::GetForRenderFrameHost( |
| - rfh); |
| +password_manager::PasswordManager* LoginHandler::GetPasswordManagerForLogin() { |
| + ChromePasswordManagerClient* client = |
| + ChromePasswordManagerClient::FromWebContents(GetWebContentsForLogin()); |
| + if (!client) |
| + return nullptr; |
| + return client->GetPasswordManager(); |
|
Peter Kasting
2015/10/06 22:14:49
Nit: Shorter:
return client ? client->GetPasswo
vabr (Chromium)
2015/10/07 10:29:22
Done.
|
| } |
| void LoginHandler::SetAuth(const base::string16& username, |
| @@ -274,15 +273,17 @@ bool LoginHandler::WasAuthHandled() const { |
| } |
| LoginHandler::~LoginHandler() { |
| - SetModel(NULL); |
| + SetModel(nullptr, nullptr); |
| } |
| -void LoginHandler::SetModel(password_manager::LoginModel* model) { |
| +void LoginHandler::SetModel(password_manager::LoginModel* model, |
| + const autofill::PasswordForm* observed_form) { |
| + DCHECK_EQ(model == nullptr, observed_form == nullptr); |
| if (login_model_) |
| login_model_->RemoveObserver(this); |
| login_model_ = model; |
| if (login_model_) |
| - login_model_->AddObserver(this); |
| + login_model_->AddObserverAndDeliverCredentials(this, *observed_form); |
| } |
| void LoginHandler::NotifyAuthNeeded() { |
| @@ -429,13 +430,11 @@ void LoginHandler::CloseContentsDeferred() { |
| interstitial_page->Proceed(); |
| } |
| -// Helper to create a PasswordForm and stuff it into a vector as input |
| -// for PasswordManager::PasswordFormsParsed, the hook into PasswordManager. |
| -void MakeInputForPasswordManager( |
| - const GURL& request_url, |
| - net::AuthChallengeInfo* auth_info, |
| - LoginHandler* handler, |
| - std::vector<PasswordForm>* password_manager_input) { |
| +// Helper to create a PasswordForm for PasswordManager to start looking for |
| +// saved credentials. |
| +PasswordForm MakeInputForPasswordManager(const GURL& request_url, |
| + net::AuthChallengeInfo* auth_info, |
| + LoginHandler* handler) { |
| PasswordForm dialog_form; |
| if (base::LowerCaseEqualsASCII(auth_info->scheme, "basic")) { |
| dialog_form.scheme = PasswordForm::SCHEME_BASIC; |
| @@ -459,9 +458,9 @@ void MakeInputForPasswordManager( |
| dialog_form.origin = GURL(request_url.scheme() + "://" + host_and_port); |
| } |
| dialog_form.signon_realm = GetSignonRealm(dialog_form.origin, *auth_info); |
| - password_manager_input->push_back(dialog_form); |
| // Set the password form for the handler (by copy). |
| handler->SetPasswordForm(dialog_form); |
| + return dialog_form; |
| } |
| void ShowLoginPrompt(const GURL& request_url, |
| @@ -478,9 +477,6 @@ void ShowLoginPrompt(const GURL& request_url, |
| return; |
| } |
| - password_manager::ContentPasswordManagerDriver* driver = |
| - handler->GetPasswordManagerDriverForLogin(); |
| - |
| // The realm is controlled by the remote server, so there is no reason |
| // to believe it is of a reasonable length. |
| base::string16 elided_realm; |
| @@ -504,12 +500,15 @@ void ShowLoginPrompt(const GURL& request_url, |
| : l10n_util::GetStringFUTF16(IDS_LOGIN_DIALOG_DESCRIPTION, authority, |
| elided_realm); |
| - if (!driver) { |
| + password_manager::PasswordManager* password_manager = |
| + handler->GetPasswordManagerForLogin(); |
| + |
| + if (!password_manager) { |
| #if defined(ENABLE_EXTENSIONS) |
| // A WebContents in a <webview> (a GuestView type) does not have a password |
| // manager, but still needs to be able to show login prompts. |
| if (guest_view::GuestViewBase::FromWebContents(parent_contents)) { |
| - handler->BuildViewForPasswordManager(nullptr, explanation); |
| + handler->BuildViewForPasswordManager(nullptr, explanation, nullptr); |
| return; |
| } |
| #endif |
| @@ -517,8 +516,6 @@ void ShowLoginPrompt(const GURL& request_url, |
| return; |
| } |
| - password_manager::PasswordManager* password_manager = |
| - driver->GetPasswordManager(); |
| if (password_manager && password_manager->client()->IsLoggingActive()) { |
| password_manager::BrowserSavePasswordProgressLogger logger( |
| password_manager->client()); |
| @@ -526,14 +523,12 @@ void ShowLoginPrompt(const GURL& request_url, |
| autofill::SavePasswordProgressLogger::STRING_SHOW_LOGIN_PROMPT_METHOD); |
| } |
| - // Tell the password manager to look for saved passwords. |
| - std::vector<PasswordForm> v; |
| - MakeInputForPasswordManager(request_url, auth_info, handler, &v); |
| - driver->OnPasswordFormsParsedNoRenderCheck(v); |
| - handler->SetPasswordManager(driver->GetPasswordManager()); |
| + handler->SetPasswordManager(password_manager); |
| - handler->BuildViewForPasswordManager(driver->GetPasswordManager(), |
| - explanation); |
| + PasswordForm observed_form( |
| + MakeInputForPasswordManager(request_url, auth_info, handler)); |
| + handler->BuildViewForPasswordManager(password_manager, explanation, |
| + &observed_form); |
| } |
| // This callback is run on the UI thread and creates a constrained window with |