Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1238)

Unified Diff: components/password_manager/content/browser/credential_manager_dispatcher.cc

Issue 1762603002: Switch components/password_manager code from IPC messages to Mojo. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase only Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 653131249e8934b2a725ebf45850f853489e9cf1..0000000000000000000000000000000000000000
--- a/components/password_manager/content/browser/credential_manager_dispatcher.cc
+++ /dev/null
@@ -1,283 +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;
-
- std::unique_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);
-
- web_contents()->GetRenderViewHost()->Send(
- new CredentialManagerMsg_SendCredential(
- web_contents()->GetRenderViewHost()->GetRoutingID(),
- pending_request_->id(), info));
- pending_request_.reset();
-}
-
-void CredentialManagerDispatcher::SendPasswordForm(
- int request_id,
- const autofill::PasswordForm* form) {
- CredentialInfo info;
- if (form) {
- password_manager::CredentialType type_to_return =
- form->federation_origin.unique()
- ? CredentialType::CREDENTIAL_TYPE_PASSWORD
- : CredentialType::CREDENTIAL_TYPE_FEDERATED;
- info = CredentialInfo(*form, type_to_return);
- if (PasswordStore* store = GetPasswordStore()) {
- if (form->skip_zero_click && IsZeroClickAllowed()) {
- DCHECK(IsUpdatingCredentialAllowed());
- autofill::PasswordForm update_form = *form;
- update_form.skip_zero_click = false;
- store->UpdateLogin(update_form);
- }
- }
- }
- SendCredential(request_id, info);
-}
-
-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

Powered by Google App Engine
This is Rietveld 408576698