1// Copyright 2013 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_AUTOFILL_CORE_BROWSER_PASSWORD_GENERATOR_H_
6#define COMPONENTS_AUTOFILL_CORE_BROWSER_PASSWORD_GENERATOR_H_
7
8#include <string>
9
10#include "base/basictypes.h"
11#include "base/gtest_prod_util.h"
12
13namespace autofill {
14
15// Class to generate random passwords. Currently we just use a generic algorithm
16// for all sites, but eventually we can incorporate additional information to
17// determine passwords that are likely to be accepted (i.e. use pattern field,
18// previous generated passwords, crowdsourcing, etc.)
19class PasswordGenerator {
20 public:
21  // |max_length| is used as a hint for the generated password's length.
22  explicit PasswordGenerator(int max_length);
23  ~PasswordGenerator();
24
25  // Returns a random password such that:
26  // (1) Each character is guaranteed to be a non-whitespace printable ASCII
27  //     character.
28  // (2) The generated password will contain AT LEAST one upper case letter, one
29  //     lower case letter, and one digit.
30  // (3) The password length will be equal to |password_length_| (see comment
31  //     for the constructor).
32  // Not thread safe.
33  std::string Generate() const;
34
35 private:
36  // Unit test also need to access |kDefaultPasswordLength|.
37  static const int kDefaultPasswordLength;
38  FRIEND_TEST_ALL_PREFIXES(PasswordGeneratorTest, PasswordLength);
39
40  // The length of the generated password.
41  const int password_length_;
42
43  DISALLOW_COPY_AND_ASSIGN(PasswordGenerator);
44};
45
46}  // namespace autofill
47
48#endif  // COMPONENTS_AUTOFILL_CORE_BROWSER_PASSWORD_GENERATOR_H_
49