| Index: components/password_manager/content/browser/content_credential_manager_dispatcher.cc
|
| diff --git a/components/password_manager/content/browser/content_credential_manager_dispatcher.cc b/components/password_manager/content/browser/content_credential_manager_dispatcher.cc
|
| index fc498d707ce9e06f57bc4d240d92192006f003fa..94e95e10a20ffe3ba99910e9d1c94bc7ec6f8cac 100644
|
| --- a/components/password_manager/content/browser/content_credential_manager_dispatcher.cc
|
| +++ b/components/password_manager/content/browser/content_credential_manager_dispatcher.cc
|
| @@ -4,6 +4,7 @@
|
|
|
| #include "components/password_manager/content/browser/content_credential_manager_dispatcher.h"
|
|
|
| +#include "base/bind.h"
|
| #include "base/strings/string16.h"
|
| #include "base/strings/utf_string_conversions.h"
|
| #include "components/autofill/core/common/password_form.h"
|
| @@ -90,7 +91,7 @@ void ContentCredentialManagerDispatcher::OnNotifySignedOut(int request_id) {
|
| void ContentCredentialManagerDispatcher::OnRequestCredential(
|
| int request_id,
|
| bool /* zero_click_only */,
|
| - const std::vector<GURL>& federations) {
|
| + const std::vector<GURL>& /* federations */) {
|
| DCHECK(request_id);
|
| PasswordStore* store = GetPasswordStore();
|
| if (pending_request_id_ || !store) {
|
| @@ -107,6 +108,7 @@ void ContentCredentialManagerDispatcher::OnRequestCredential(
|
|
|
| pending_request_id_ = request_id;
|
|
|
| + // TODO(mkwst): we should deal with federated login types.
|
| autofill::PasswordForm form;
|
| form.scheme = autofill::PasswordForm::SCHEME_HTML;
|
| form.origin = web_contents()->GetLastCommittedURL().GetOrigin();
|
| @@ -119,16 +121,23 @@ void ContentCredentialManagerDispatcher::OnGetPasswordStoreResults(
|
| const std::vector<autofill::PasswordForm*>& results) {
|
| DCHECK(pending_request_id_);
|
|
|
| - // Take ownership of all the password form objects in the |results| vector.
|
| - ScopedVector<autofill::PasswordForm> entries;
|
| - entries.assign(results.begin(), results.end());
|
| + if (results.empty() ||
|
| + !client_->PromptUserToChooseCredentials(results, base::Bind(
|
| + &ContentCredentialManagerDispatcher::SendCredential,
|
| + base::Unretained(this),
|
| + pending_request_id_))) {
|
| + SendCredential(pending_request_id_, CredentialInfo());
|
| + }
|
| +}
|
| +
|
| +PasswordStore* ContentCredentialManagerDispatcher::GetPasswordStore() {
|
| + return client_ ? client_->GetPasswordStore() : nullptr;
|
| +}
|
|
|
| - // TODO(mkwst): This is a stub. We're just grabbing the first result and
|
| - // piping it down into Blink. Really, we should be kicking off some sort
|
| - // of UI full of magic moments and delight. Also, we should deal with
|
| - // federated login types.
|
| - CredentialInfo info = results.empty() ? CredentialInfo()
|
| - : CredentialInfo(*entries[0]);
|
| +void ContentCredentialManagerDispatcher::SendCredential(
|
| + int request_id, const CredentialInfo& info) {
|
| + DCHECK(pending_request_id_);
|
| + DCHECK_EQ(pending_request_id_, request_id);
|
| web_contents()->GetRenderViewHost()->Send(
|
| new CredentialManagerMsg_SendCredential(
|
| web_contents()->GetRenderViewHost()->GetRoutingID(),
|
| @@ -137,8 +146,4 @@ void ContentCredentialManagerDispatcher::OnGetPasswordStoreResults(
|
| pending_request_id_ = 0;
|
| }
|
|
|
| -PasswordStore* ContentCredentialManagerDispatcher::GetPasswordStore() {
|
| - return client_ ? client_->GetPasswordStore() : nullptr;
|
| -}
|
| -
|
| } // namespace password_manager
|
|
|