1 // Copyright (c) 2014 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_CREDENTIAL_MANAGER_PASSWORD_FORM_MANAGER_H_ 6 #define COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_CREDENTIAL_MANAGER_PASSWORD_FORM_MANAGER_H_ 7 8 #include "base/macros.h" 9 #include "base/memory/weak_ptr.h" 10 #include "components/password_manager/core/browser/password_form_manager.h" 11 12 namespace password_manager { 13 14 class PasswordManagerClient; 15 struct PasswordForm; 16 17 // A delegate that is notified when CredentialManagerPasswordFormManager 18 // finishes working with password forms. 19 class CredentialManagerPasswordFormManagerDelegate { 20 public: 21 // Called when a password form has been provisionally saved. 22 virtual void OnProvisionalSaveComplete() = 0; 23 }; 24 25 // A PasswordFormManager built to handle PasswordForm objects synthesized 26 // by the Credential Manager API. 27 class CredentialManagerPasswordFormManager : public PasswordFormManager { 28 public: 29 // Given a |client| and an |observed_form|, kick off the process of fetching 30 // matching logins from the password store; if |observed_form| doesn't map to 31 // a blacklisted origin, provisionally save |saved_form|. Once saved, let the 32 // delegate know that it's safe to poke at the UI. |form_fetcher| is passed 33 // to PasswordFormManager. |form_saver| can be null, in which case it is 34 // created automatically. 35 // 36 // This class does not take ownership of |delegate|. 37 CredentialManagerPasswordFormManager( 38 PasswordManagerClient* client, 39 std::unique_ptr<PasswordForm> saved_form, 40 CredentialManagerPasswordFormManagerDelegate* delegate, 41 std::unique_ptr<FormSaver> form_saver, 42 std::unique_ptr<FormFetcher> form_fetcher); 43 ~CredentialManagerPasswordFormManager() override; 44 45 // FormFetcher::Consumer: 46 void OnFetchCompleted() override; 47 48 // PasswordFormManagerForUI: 49 metrics_util::CredentialSourceType GetCredentialSource() const override; 50 51 private: 52 // Calls OnProvisionalSaveComplete on |delegate_|. 53 void NotifyDelegate(); 54 55 CredentialManagerPasswordFormManagerDelegate* delegate_; 56 57 base::WeakPtrFactory<CredentialManagerPasswordFormManager> weak_factory_{ 58 this}; 59 60 DISALLOW_COPY_AND_ASSIGN(CredentialManagerPasswordFormManager); 61 }; 62 63 } // namespace password_manager 64 65 #endif // COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_CREDENTIAL_MANAGER_PASSWORD_FORM_MANAGER_H_ 66