| Index: components/password_manager/content/browser/credential_manager_dispatcher.cc
|
| diff --git a/components/password_manager/content/browser/credential_manager_dispatcher.cc b/components/password_manager/content/browser/credential_manager_dispatcher.cc
|
| deleted file mode 100644
|
| index ecf9ddff8d221e0b29b7951f62671e7d5f0568c4..0000000000000000000000000000000000000000
|
| --- a/components/password_manager/content/browser/credential_manager_dispatcher.cc
|
| +++ /dev/null
|
| @@ -1,272 +0,0 @@
|
| -// Copyright 2014 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "components/password_manager/content/browser/credential_manager_dispatcher.h"
|
| -
|
| -#include <utility>
|
| -
|
| -#include "base/bind.h"
|
| -#include "base/strings/string16.h"
|
| -#include "base/strings/utf_string_conversions.h"
|
| -#include "components/autofill/core/common/password_form.h"
|
| -#include "components/password_manager/content/browser/content_password_manager_driver.h"
|
| -#include "components/password_manager/content/browser/content_password_manager_driver_factory.h"
|
| -#include "components/password_manager/content/common/credential_manager_messages.h"
|
| -#include "components/password_manager/core/browser/affiliated_match_helper.h"
|
| -#include "components/password_manager/core/browser/password_manager_client.h"
|
| -#include "components/password_manager/core/browser/password_store.h"
|
| -#include "components/password_manager/core/common/credential_manager_types.h"
|
| -#include "components/password_manager/core/common/password_manager_pref_names.h"
|
| -#include "content/public/browser/render_view_host.h"
|
| -#include "content/public/browser/web_contents.h"
|
| -#include "ipc/ipc_message_macros.h"
|
| -
|
| -namespace password_manager {
|
| -
|
| -// CredentialManagerDispatcher -------------------------------------------------
|
| -
|
| -CredentialManagerDispatcher::CredentialManagerDispatcher(
|
| - content::WebContents* web_contents,
|
| - PasswordManagerClient* client)
|
| - : WebContentsObserver(web_contents), client_(client), weak_factory_(this) {
|
| - DCHECK(web_contents);
|
| - auto_signin_enabled_.Init(prefs::kCredentialsEnableAutosignin,
|
| - client_->GetPrefs());
|
| -}
|
| -
|
| -CredentialManagerDispatcher::~CredentialManagerDispatcher() {
|
| -}
|
| -
|
| -bool CredentialManagerDispatcher::OnMessageReceived(
|
| - const IPC::Message& message) {
|
| - bool handled = true;
|
| - IPC_BEGIN_MESSAGE_MAP(CredentialManagerDispatcher, message)
|
| - IPC_MESSAGE_HANDLER(CredentialManagerHostMsg_Store, OnStore);
|
| - IPC_MESSAGE_HANDLER(CredentialManagerHostMsg_RequireUserMediation,
|
| - OnRequireUserMediation);
|
| - IPC_MESSAGE_HANDLER(CredentialManagerHostMsg_RequestCredential,
|
| - OnRequestCredential);
|
| - IPC_MESSAGE_UNHANDLED(handled = false)
|
| - IPC_END_MESSAGE_MAP()
|
| - return handled;
|
| -}
|
| -
|
| -void CredentialManagerDispatcher::OnStore(
|
| - int request_id,
|
| - const password_manager::CredentialInfo& credential) {
|
| - DCHECK(credential.type != CredentialType::CREDENTIAL_TYPE_EMPTY);
|
| - DCHECK(request_id);
|
| - web_contents()->GetRenderViewHost()->Send(
|
| - new CredentialManagerMsg_AcknowledgeStore(
|
| - web_contents()->GetRenderViewHost()->GetRoutingID(), request_id));
|
| -
|
| - if (!client_->IsSavingAndFillingEnabledForCurrentPage())
|
| - return;
|
| -
|
| - scoped_ptr<autofill::PasswordForm> form(CreatePasswordFormFromCredentialInfo(
|
| - credential, web_contents()->GetLastCommittedURL().GetOrigin()));
|
| - form->skip_zero_click = !IsZeroClickAllowed();
|
| -
|
| - form_manager_.reset(new CredentialManagerPasswordFormManager(
|
| - client_, GetDriver(), *form, this));
|
| -}
|
| -
|
| -void CredentialManagerDispatcher::OnProvisionalSaveComplete() {
|
| - DCHECK(form_manager_);
|
| - DCHECK(client_->IsSavingAndFillingEnabledForCurrentPage());
|
| -
|
| - if (form_manager_->IsNewLogin()) {
|
| - // If the PasswordForm we were given does not match an existing
|
| - // PasswordForm, ask the user if they'd like to save.
|
| - client_->PromptUserToSaveOrUpdatePassword(
|
| - std::move(form_manager_), CredentialSourceType::CREDENTIAL_SOURCE_API,
|
| - false);
|
| - } else {
|
| - // Otherwise, update the existing form, as we've been told by the site
|
| - // that the new PasswordForm is a functioning credential for the user.
|
| - // We use 'PasswordFormManager::Update(PasswordForm&)' here rather than
|
| - // 'PasswordFormManager::UpdateLogin', as we need to port over the
|
| - // 'skip_zero_click' state to ensure that we don't accidentally start
|
| - // signing users in just because the site asks us to. The simplest way
|
| - // to do so is simply to update the password field of the existing
|
| - // credential.
|
| - form_manager_->Update(*form_manager_->preferred_match());
|
| - }
|
| -}
|
| -
|
| -void CredentialManagerDispatcher::OnRequireUserMediation(int request_id) {
|
| - DCHECK(request_id);
|
| -
|
| - PasswordStore* store = GetPasswordStore();
|
| - if (!store || !IsUpdatingCredentialAllowed()) {
|
| - web_contents()->GetRenderViewHost()->Send(
|
| - new CredentialManagerMsg_AcknowledgeRequireUserMediation(
|
| - web_contents()->GetRenderViewHost()->GetRoutingID(), request_id));
|
| - return;
|
| - }
|
| -
|
| - if (store->affiliated_match_helper()) {
|
| - store->affiliated_match_helper()->GetAffiliatedAndroidRealms(
|
| - GetSynthesizedFormForOrigin(),
|
| - base::Bind(&CredentialManagerDispatcher::ScheduleRequireMediationTask,
|
| - weak_factory_.GetWeakPtr(), request_id));
|
| - } else {
|
| - std::vector<std::string> no_affiliated_realms;
|
| - ScheduleRequireMediationTask(request_id, no_affiliated_realms);
|
| - }
|
| -}
|
| -
|
| -void CredentialManagerDispatcher::ScheduleRequireMediationTask(
|
| - int request_id,
|
| - const std::vector<std::string>& android_realms) {
|
| - DCHECK(GetPasswordStore());
|
| - if (!pending_require_user_mediation_) {
|
| - pending_require_user_mediation_.reset(
|
| - new CredentialManagerPendingRequireUserMediationTask(
|
| - this, web_contents()->GetLastCommittedURL().GetOrigin(),
|
| - android_realms));
|
| -
|
| - // This will result in a callback to
|
| - // CredentialManagerPendingRequireUserMediationTask::OnGetPasswordStoreResults().
|
| - GetPasswordStore()->GetAutofillableLogins(
|
| - pending_require_user_mediation_.get());
|
| - } else {
|
| - pending_require_user_mediation_->AddOrigin(
|
| - web_contents()->GetLastCommittedURL().GetOrigin());
|
| - }
|
| -
|
| - web_contents()->GetRenderViewHost()->Send(
|
| - new CredentialManagerMsg_AcknowledgeRequireUserMediation(
|
| - web_contents()->GetRenderViewHost()->GetRoutingID(), request_id));
|
| -}
|
| -
|
| -void CredentialManagerDispatcher::OnRequestCredential(
|
| - int request_id,
|
| - bool zero_click_only,
|
| - bool include_passwords,
|
| - const std::vector<GURL>& federations) {
|
| - DCHECK(request_id);
|
| - PasswordStore* store = GetPasswordStore();
|
| - if (pending_request_ || !store) {
|
| - web_contents()->GetRenderViewHost()->Send(
|
| - new CredentialManagerMsg_RejectCredentialRequest(
|
| - web_contents()->GetRenderViewHost()->GetRoutingID(), request_id,
|
| - pending_request_
|
| - ? blink::WebCredentialManagerPendingRequestError
|
| - : blink::WebCredentialManagerPasswordStoreUnavailableError));
|
| - return;
|
| - }
|
| -
|
| - // Return an empty credential if zero-click is required but disabled, or if
|
| - // the current page has TLS errors.
|
| - if ((zero_click_only && !IsZeroClickAllowed()) ||
|
| - client_->DidLastPageLoadEncounterSSLErrors()) {
|
| - web_contents()->GetRenderViewHost()->Send(
|
| - new CredentialManagerMsg_SendCredential(
|
| - web_contents()->GetRenderViewHost()->GetRoutingID(), request_id,
|
| - CredentialInfo()));
|
| - return;
|
| - }
|
| -
|
| - if (store->affiliated_match_helper()) {
|
| - store->affiliated_match_helper()->GetAffiliatedAndroidRealms(
|
| - GetSynthesizedFormForOrigin(),
|
| - base::Bind(&CredentialManagerDispatcher::ScheduleRequestTask,
|
| - weak_factory_.GetWeakPtr(), request_id, zero_click_only,
|
| - include_passwords, federations));
|
| - } else {
|
| - std::vector<std::string> no_affiliated_realms;
|
| - ScheduleRequestTask(request_id, zero_click_only, include_passwords,
|
| - federations, no_affiliated_realms);
|
| - }
|
| -}
|
| -
|
| -void CredentialManagerDispatcher::ScheduleRequestTask(
|
| - int request_id,
|
| - bool zero_click_only,
|
| - bool include_passwords,
|
| - const std::vector<GURL>& federations,
|
| - const std::vector<std::string>& android_realms) {
|
| - DCHECK(GetPasswordStore());
|
| - pending_request_.reset(new CredentialManagerPendingRequestTask(
|
| - this, request_id, zero_click_only,
|
| - web_contents()->GetLastCommittedURL().GetOrigin(), include_passwords,
|
| - federations, android_realms));
|
| -
|
| - // This will result in a callback to
|
| - // PendingRequestTask::OnGetPasswordStoreResults().
|
| - GetPasswordStore()->GetAutofillableLogins(pending_request_.get());
|
| -}
|
| -
|
| -PasswordStore* CredentialManagerDispatcher::GetPasswordStore() {
|
| - return client_ ? client_->GetPasswordStore() : nullptr;
|
| -}
|
| -
|
| -bool CredentialManagerDispatcher::IsZeroClickAllowed() const {
|
| - return *auto_signin_enabled_ && !client_->IsOffTheRecord();
|
| -}
|
| -
|
| -GURL CredentialManagerDispatcher::GetOrigin() const {
|
| - return web_contents()->GetLastCommittedURL().GetOrigin();
|
| -}
|
| -
|
| -base::WeakPtr<PasswordManagerDriver> CredentialManagerDispatcher::GetDriver() {
|
| - ContentPasswordManagerDriverFactory* driver_factory =
|
| - ContentPasswordManagerDriverFactory::FromWebContents(web_contents());
|
| - DCHECK(driver_factory);
|
| - PasswordManagerDriver* driver =
|
| - driver_factory->GetDriverForFrame(web_contents()->GetMainFrame());
|
| - return driver->AsWeakPtr();
|
| -}
|
| -
|
| -void CredentialManagerDispatcher::SendCredential(int request_id,
|
| - const CredentialInfo& info) {
|
| - DCHECK(pending_request_);
|
| - DCHECK_EQ(pending_request_->id(), request_id);
|
| -
|
| - if (PasswordStore* store = GetPasswordStore()) {
|
| - if (info.type != CredentialType::CREDENTIAL_TYPE_EMPTY &&
|
| - IsZeroClickAllowed()) {
|
| - DCHECK(IsUpdatingCredentialAllowed());
|
| - scoped_ptr<autofill::PasswordForm> form(
|
| - CreatePasswordFormFromCredentialInfo(info,
|
| - pending_request_->origin()));
|
| - form->skip_zero_click = false;
|
| - store->UpdateLogin(*form);
|
| - }
|
| - }
|
| -
|
| - web_contents()->GetRenderViewHost()->Send(
|
| - new CredentialManagerMsg_SendCredential(
|
| - web_contents()->GetRenderViewHost()->GetRoutingID(),
|
| - pending_request_->id(), info));
|
| - pending_request_.reset();
|
| -}
|
| -
|
| -PasswordManagerClient* CredentialManagerDispatcher::client() const {
|
| - return client_;
|
| -}
|
| -
|
| -autofill::PasswordForm
|
| -CredentialManagerDispatcher::GetSynthesizedFormForOrigin() const {
|
| - autofill::PasswordForm synthetic_form;
|
| - synthetic_form.origin = web_contents()->GetLastCommittedURL().GetOrigin();
|
| - synthetic_form.signon_realm = synthetic_form.origin.spec();
|
| - synthetic_form.scheme = autofill::PasswordForm::SCHEME_HTML;
|
| - synthetic_form.ssl_valid = synthetic_form.origin.SchemeIsCryptographic() &&
|
| - !client_->DidLastPageLoadEncounterSSLErrors();
|
| - return synthetic_form;
|
| -}
|
| -
|
| -void CredentialManagerDispatcher::DoneRequiringUserMediation() {
|
| - DCHECK(pending_require_user_mediation_);
|
| - pending_require_user_mediation_.reset();
|
| -}
|
| -
|
| -bool CredentialManagerDispatcher::IsUpdatingCredentialAllowed() const {
|
| - return !client_->DidLastPageLoadEncounterSSLErrors() &&
|
| - !client_->IsOffTheRecord();
|
| -}
|
| -
|
| -} // namespace password_manager
|
|
|