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 |