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_GENERATION_MANAGER_H_
6#define COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_PASSWORD_GENERATION_MANAGER_H_
7
8#include <vector>
9
10#include "base/basictypes.h"
11
12namespace autofill {
13class FormStructure;
14}
15
16namespace password_manager {
17
18class PasswordManagerClient;
19class PasswordManagerDriver;
20
21// Per-tab manager for password generation. Will enable this feature only if
22//
23// -  Password manager is enabled
24// -  Password sync is enabled
25//
26// NOTE: At the moment, the creation of the renderer PasswordGenerationManager
27// is controlled by a switch (--enable-password-generation) so this feature will
28// not be enabled regardless of the above criteria without the switch being
29// present.
30//
31// This class is used to determine what forms we should offer to generate
32// passwords for and manages the popup which is created if the user chooses to
33// generate a password.
34class PasswordGenerationManager {
35 public:
36  explicit PasswordGenerationManager(PasswordManagerClient* client);
37  virtual ~PasswordGenerationManager();
38
39  // Detect account creation forms from forms with autofill type annotated.
40  // Will send a message to the renderer if we find a correctly annotated form
41  // and the feature is enabled.
42  void DetectAccountCreationForms(
43      const std::vector<autofill::FormStructure*>& forms);
44
45 private:
46  friend class PasswordGenerationManagerTest;
47
48  // Determines current state of password generation
49  bool IsGenerationEnabled() const;
50
51  // The PasswordManagerClient instance associated with this instance. Must
52  // outlive this instance.
53  PasswordManagerClient* client_;
54
55  // The PasswordManagerDriver instance associated with this instance. Must
56  // outlive this instance.
57  PasswordManagerDriver* driver_;
58
59  DISALLOW_COPY_AND_ASSIGN(PasswordGenerationManager);
60};
61
62}  // namespace password_manager
63
64#endif  // COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_PASSWORD_GENERATION_MANAGER_H_
65