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