• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 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_PASSWORD_MANAGER_CLIENT_H_
6 #define COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_PASSWORD_MANAGER_CLIENT_H_
7 
8 #include "base/metrics/field_trial.h"
9 #include "components/autofill/core/common/password_form.h"
10 #include "components/autofill/core/common/password_form_fill_data.h"
11 #include "components/password_manager/core/browser/password_store.h"
12 
13 class PrefService;
14 
15 namespace password_manager {
16 
17 struct CredentialInfo;
18 class PasswordFormManager;
19 class PasswordManagerDriver;
20 class PasswordStore;
21 
22 // An abstraction of operations that depend on the embedders (e.g. Chrome)
23 // environment.
24 class PasswordManagerClient {
25  public:
PasswordManagerClient()26   PasswordManagerClient() {}
~PasswordManagerClient()27   virtual ~PasswordManagerClient() {}
28 
29   // For automated testing, the save password prompt should sometimes not be
30   // shown, and password immediately saved instead. That can be enforced by
31   // a command-line flag. If auto-saving is enforced, this method returns true.
32   // The default return value is false.
33   virtual bool IsAutomaticPasswordSavingEnabled() const;
34 
35   // If the password manager should work for the current page. Default
36   // always returns true.
37   virtual bool IsPasswordManagerEnabledForCurrentPage() const;
38 
39   // Return true if |form| should not be available for autofill.
40   virtual bool ShouldFilterAutofillResult(
41       const autofill::PasswordForm& form) = 0;
42 
43   // Returns true if |username| and |origin| correspond to the account which is
44   // syncing.
45   virtual bool IsSyncAccountCredential(
46       const std::string& username, const std::string& origin) const = 0;
47 
48   // Called when all autofill results have been computed. Client can use
49   // this signal to report statistics. Default implementation is a noop.
AutofillResultsComputed()50   virtual void AutofillResultsComputed() {}
51 
52   // Informs the embedder of a password form that can be saved if the user
53   // allows it. The embedder is not required to prompt the user if it decides
54   // that this form doesn't need to be saved.
55   // Returns true if the prompt was indeed displayed.
56   virtual bool PromptUserToSavePassword(
57       scoped_ptr<PasswordFormManager> form_to_save) = 0;
58 
59   // Called when a password is saved in an automated fashion. Embedder may
60   // inform the user that this save has occured.
61   virtual void AutomaticPasswordSave(
62       scoped_ptr<PasswordFormManager> saved_form_manager) = 0;
63 
64   // Called when a password is autofilled. |best_matches| contains the
65   // PasswordForm into which a password was filled: the client may choose to
66   // save this to the PasswordStore, for example. Default implementation is a
67   // noop.
PasswordWasAutofilled(const autofill::PasswordFormMap & best_matches)68   virtual void PasswordWasAutofilled(
69       const autofill::PasswordFormMap& best_matches) const {}
70 
71   // Called when password autofill is blocked by the blacklist. |best_matches|
72   // contains the PasswordForm that flags the current site as being on the
73   // blacklist. The client may choose to remove this from the PasswordStore in
74   // order to unblacklist a site, for example. Default implementation is a noop.
PasswordAutofillWasBlocked(const autofill::PasswordFormMap & best_matches)75   virtual void PasswordAutofillWasBlocked(
76       const autofill::PasswordFormMap& best_matches) const {}
77 
78   // Called to authenticate the autofill password data.  If authentication is
79   // successful, this should continue filling the form.
80   virtual void AuthenticateAutofillAndFillForm(
81       scoped_ptr<autofill::PasswordFormFillData> fill_data) = 0;
82 
83   // Gets prefs associated with this embedder.
84   virtual PrefService* GetPrefs() = 0;
85 
86   // Returns the PasswordStore associated with this instance.
87   virtual PasswordStore* GetPasswordStore() = 0;
88 
89   // Returns the PasswordManagerDriver instance associated with this instance.
90   virtual PasswordManagerDriver* GetDriver() = 0;
91 
92   // Returns the probability that the experiment identified by |experiment_name|
93   // should be enabled. The default implementation returns 0.
94   virtual base::FieldTrial::Probability GetProbabilityForExperiment(
95       const std::string& experiment_name);
96 
97   // Returns true if password sync is enabled in the embedder. The default
98   // implementation returns false.
99   virtual bool IsPasswordSyncEnabled();
100 
101   // Only for clients which registered with a LogRouter: If called with
102   // |router_can_be_used| set to false, the client may no longer use the
103   // LogRouter. If |router_can_be_used| is true, the LogRouter can be used after
104   // the return from OnLogRouterAvailabilityChanged.
105   virtual void OnLogRouterAvailabilityChanged(bool router_can_be_used);
106 
107   // Forward |text| for display to the LogRouter (if registered with one).
108   virtual void LogSavePasswordProgress(const std::string& text);
109 
110   // Returns true if logs recorded via LogSavePasswordProgress will be
111   // displayed, and false otherwise.
112   virtual bool IsLoggingActive() const;
113 
114   // Returns the authorization prompt policy to be used with the given form.
115   // Only relevant on OSX.
116   virtual PasswordStore::AuthorizationPromptPolicy GetAuthorizationPromptPolicy(
117       const autofill::PasswordForm& form);
118 
119   // Called in response to an IPC from the renderer, triggered by a page's call
120   // to 'navigator.credentials.notifyFailedSignIn'.
OnNotifyFailedSignIn(int request_id,const CredentialInfo &)121   virtual void OnNotifyFailedSignIn(int request_id, const CredentialInfo&) {}
122 
123   // Called in response to an IPC from the renderer, triggered by a page's call
124   // to 'navigator.credentials.notifySignedIn'.
OnNotifySignedIn(int request_id,const CredentialInfo &)125   virtual void OnNotifySignedIn(int request_id, const CredentialInfo&) {}
126 
127   // Called in response to an IPC from the renderer, triggered by a page's call
128   // to 'navigator.credentials.notifySignedOut'.
OnNotifySignedOut(int request_id)129   virtual void OnNotifySignedOut(int request_id) {}
130 
131   // Called in response to an IPC from the renderer, triggered by a page's call
132   // to 'navigator.credentials.request'.
OnRequestCredential(int request_id,bool zero_click_only,const std::vector<GURL> & federations)133   virtual void OnRequestCredential(int request_id,
134                                    bool zero_click_only,
135                                    const std::vector<GURL>& federations) {}
136 
137  private:
138   DISALLOW_COPY_AND_ASSIGN(PasswordManagerClient);
139 };
140 
141 }  // namespace password_manager
142 
143 #endif  // COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_PASSWORD_MANAGER_CLIENT_H_
144