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 CHROME_BROWSER_UI_PASSWORDS_MANAGE_PASSWORDS_UI_CONTROLLER_MOCK_H_
6#define CHROME_BROWSER_UI_PASSWORDS_MANAGE_PASSWORDS_UI_CONTROLLER_MOCK_H_
7
8#include "base/basictypes.h"
9#include "chrome/browser/ui/passwords/manage_passwords_ui_controller.h"
10#include "components/password_manager/core/common/password_manager_ui.h"
11#include "content/public/browser/navigation_details.h"
12
13namespace content {
14class WebContents;
15}  // namespace content
16
17// This mock is used in tests to ensure that we're just testing the controller
18// behavior, and not the behavior of the bits and pieces it relies upon (like
19// FormManager).
20class ManagePasswordsUIControllerMock
21    : public ManagePasswordsUIController {
22 public:
23  explicit ManagePasswordsUIControllerMock(
24      content::WebContents* contents);
25  virtual ~ManagePasswordsUIControllerMock();
26
27  // Navigation, surprisingly, is platform-specific; Android's settings page
28  // is native UI and therefore isn't available in a tab for unit tests.
29  //
30  // TODO(mkwst): Determine how to reasonably test this on that platform.
31  virtual void NavigateToPasswordManagerSettingsPage() OVERRIDE;
32  bool navigated_to_settings_page() const {
33    return navigated_to_settings_page_;
34  }
35
36  // We don't have a FormManager in tests, so stub these out.
37  virtual void SavePasswordInternal() OVERRIDE;
38  bool saved_password() const { return saved_password_; }
39
40  virtual void NeverSavePasswordInternal() OVERRIDE;
41  bool never_saved_password() const { return never_saved_password_; }
42
43  virtual const autofill::PasswordForm& PendingCredentials() const OVERRIDE;
44  void SetPendingCredentials(autofill::PasswordForm pending_credentials);
45
46  // Sneaky setters for testing.
47  void SetPasswordFormMap(const autofill::ConstPasswordFormMap& map) {
48    password_form_map_ = map;
49  }
50  void SetState(password_manager::ui::State state) { state_ = state; }
51
52  void SetTimer(base::ElapsedTimer* timer) { timer_.reset(timer); }
53
54  // True if this controller is installed on |web_contents()|.
55  bool IsInstalled() const;
56
57  using ManagePasswordsUIController::DidNavigateMainFrame;
58
59 private:
60  bool navigated_to_settings_page_;
61  bool saved_password_;
62  bool never_saved_password_;
63
64  autofill::PasswordForm pending_credentials_;
65
66  DISALLOW_COPY_AND_ASSIGN(ManagePasswordsUIControllerMock);
67};
68
69#endif  // CHROME_BROWSER_UI_PASSWORDS_MANAGE_PASSWORDS_UI_CONTROLLER_MOCK_H_
70