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

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

Issue 1872133002: Revert of Reland: Switch components/password_manager code from IPC messages to Mojo. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: 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_impl.cc
diff --git a/components/password_manager/content/browser/credential_manager_impl.cc b/components/password_manager/content/browser/credential_manager_impl.cc
deleted file mode 100644
index 0d5fa0d157a4a922783cee439c3e69248f53a4c9..0000000000000000000000000000000000000000
--- a/components/password_manager/content/browser/credential_manager_impl.cc
+++ /dev/null
@@ -1,281 +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_impl.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/public/cpp/type_converters.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/web_contents.h"
-#include "mojo/common/url_type_converters.h"
-
-namespace password_manager {
-
-namespace {
-
-void RunMojoGetCallback(const mojom::CredentialManager::GetCallback& callback,
- const CredentialInfo& info) {
- mojom::CredentialInfoPtr credential = mojom::CredentialInfo::From(info);
- callback.Run(mojom::CredentialManagerError::SUCCESS, std::move(credential));
-}
-
-} // namespace
-
-// CredentialManagerImpl -------------------------------------------------
-
-CredentialManagerImpl::CredentialManagerImpl(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());
-}
-
-CredentialManagerImpl::~CredentialManagerImpl() {}
-
-void CredentialManagerImpl::BindRequest(
- mojom::CredentialManagerRequest request) {
- bindings_.AddBinding(this, std::move(request));
-}
-
-void CredentialManagerImpl::Store(mojom::CredentialInfoPtr credential,
- const StoreCallback& callback) {
- CredentialInfo info = credential.To<CredentialInfo>();
- DCHECK_NE(CredentialType::CREDENTIAL_TYPE_EMPTY, info.type);
-
- // Send acknowledge response back.
- callback.Run();
-
- if (!client_->IsSavingAndFillingEnabledForCurrentPage())
- return;
-
- std::unique_ptr<autofill::PasswordForm> form(
- CreatePasswordFormFromCredentialInfo(
- info, web_contents()->GetLastCommittedURL().GetOrigin()));
- form->skip_zero_click = !IsZeroClickAllowed();
-
- form_manager_.reset(new CredentialManagerPasswordFormManager(
- client_, GetDriver(), *form, this));
-}
-
-void CredentialManagerImpl::OnProvisionalSaveComplete() {
- DCHECK(form_manager_);
- DCHECK(client_->IsSavingAndFillingEnabledForCurrentPage());
- const autofill::PasswordForm& form = form_manager_->pending_credentials();
-
- if (!form.federation_origin.unique()) {
- // If this is a federated credential, check it against the federated matches
- // produced by the PasswordFormManager. If a match is found, update it and
- // return.
- for (const auto& match : form_manager_->federated_matches()) {
- if (match->username_value == form.username_value &&
- match->federation_origin.IsSameOriginWith(form.federation_origin)) {
- form_manager_->Update(*match);
- return;
- }
- }
- } else if (!form_manager_->IsNewLogin()) {
- // Otherwise, if this is not a new password credential, update the existing
- // credential without prompting the user. This will also update the
- // 'skip_zero_click' state, as we've gotten an explicit signal that the page
- // understands the credential management API and so can be trusted to notify
- // us when they sign the user out.
- form_manager_->Update(*form_manager_->preferred_match());
- return;
- }
-
- // Otherwise, this is a new form, so as the user if they'd like to save.
- client_->PromptUserToSaveOrUpdatePassword(
- std::move(form_manager_), CredentialSourceType::CREDENTIAL_SOURCE_API,
- false);
-}
-
-void CredentialManagerImpl::RequireUserMediation(
- const RequireUserMediationCallback& callback) {
- PasswordStore* store = GetPasswordStore();
- if (!store || !IsUpdatingCredentialAllowed()) {
- callback.Run();
- return;
- }
-
- if (store->affiliated_match_helper()) {
- store->affiliated_match_helper()->GetAffiliatedAndroidRealms(
- GetSynthesizedFormForOrigin(),
- base::Bind(&CredentialManagerImpl::ScheduleRequireMediationTask,
- weak_factory_.GetWeakPtr(), callback));
- } else {
- std::vector<std::string> no_affiliated_realms;
- ScheduleRequireMediationTask(callback, no_affiliated_realms);
- }
-}
-
-void CredentialManagerImpl::ScheduleRequireMediationTask(
- const RequireUserMediationCallback& callback,
- 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());
- }
-
- // Send acknowledge response back.
- callback.Run();
-}
-
-void CredentialManagerImpl::Get(bool zero_click_only,
- bool include_passwords,
- mojo::Array<mojo::String> federations,
- const GetCallback& callback) {
- PasswordStore* store = GetPasswordStore();
- if (pending_request_ || !store) {
- // Callback error.
- callback.Run(pending_request_
- ? mojom::CredentialManagerError::PENDINGREQUEST
- : mojom::CredentialManagerError::PASSWORDSTOREUNAVAILABLE,
- nullptr);
- 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()) {
- // Callback with empty credential info.
- callback.Run(mojom::CredentialManagerError::SUCCESS,
- mojom::CredentialInfo::New());
- return;
- }
-
- if (store->affiliated_match_helper()) {
- store->affiliated_match_helper()->GetAffiliatedAndroidRealms(
- GetSynthesizedFormForOrigin(),
- base::Bind(&CredentialManagerImpl::ScheduleRequestTask,
- weak_factory_.GetWeakPtr(), callback, zero_click_only,
- include_passwords, federations.To<std::vector<GURL>>()));
- } else {
- std::vector<std::string> no_affiliated_realms;
- ScheduleRequestTask(callback, zero_click_only, include_passwords,
- federations.To<std::vector<GURL>>(),
- no_affiliated_realms);
- }
-}
-
-void CredentialManagerImpl::ScheduleRequestTask(
- const GetCallback& callback,
- 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, base::Bind(&RunMojoGetCallback, callback), 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* CredentialManagerImpl::GetPasswordStore() {
- return client_ ? client_->GetPasswordStore() : nullptr;
-}
-
-bool CredentialManagerImpl::IsZeroClickAllowed() const {
- return *auto_signin_enabled_ && !client_->IsOffTheRecord();
-}
-
-GURL CredentialManagerImpl::GetOrigin() const {
- return web_contents()->GetLastCommittedURL().GetOrigin();
-}
-
-base::WeakPtr<PasswordManagerDriver> CredentialManagerImpl::GetDriver() {
- ContentPasswordManagerDriverFactory* driver_factory =
- ContentPasswordManagerDriverFactory::FromWebContents(web_contents());
- DCHECK(driver_factory);
- PasswordManagerDriver* driver =
- driver_factory->GetDriverForFrame(web_contents()->GetMainFrame());
- return driver->AsWeakPtr();
-}
-
-void CredentialManagerImpl::SendCredential(
- const SendCredentialCallback& send_callback,
- const CredentialInfo& info) {
- DCHECK(pending_request_);
- DCHECK(send_callback.Equals(pending_request_->send_callback()));
-
- send_callback.Run(info);
- pending_request_.reset();
-}
-
-void CredentialManagerImpl::SendPasswordForm(
- const SendCredentialCallback& send_callback,
- 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(send_callback, info);
-}
-
-PasswordManagerClient* CredentialManagerImpl::client() const {
- return client_;
-}
-
-autofill::PasswordForm CredentialManagerImpl::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 CredentialManagerImpl::DoneRequiringUserMediation() {
- DCHECK(pending_require_user_mediation_);
- pending_require_user_mediation_.reset();
-}
-
-bool CredentialManagerImpl::IsUpdatingCredentialAllowed() const {
- return !client_->DidLastPageLoadEncounterSSLErrors() &&
- !client_->IsOffTheRecord();
-}
-
-} // namespace password_manager

Powered by Google App Engine
This is Rietveld 408576698