// Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef LOGIN_MANAGER_MOCK_METRICS_H_
#define LOGIN_MANAGER_MOCK_METRICS_H_

#include "login_manager/login_metrics.h"

#include <base/macros.h>
#include <gmock/gmock.h>

namespace login_manager {
class PolicyKey;

class MockMetrics : public LoginMetrics {
 public:
  MockMetrics();
  virtual ~MockMetrics();

  MOCK_METHOD1(SendConsumerAllowsNewUsers, void(bool));
  MOCK_METHOD3(SendLoginUserType, void(bool, bool, bool));
  MOCK_METHOD1(SendPolicyFilesStatus, bool(const PolicyFilesStatus&));
  MOCK_METHOD1(SendStateKeyGenerationStatus, void(StateKeyGenerationStatus));
  MOCK_METHOD1(RecordStats, void(const char*));
  MOCK_METHOD0(HasRecordedChromeExec, bool());

 private:
  DISALLOW_COPY_AND_ASSIGN(MockMetrics);
};

}  // namespace login_manager

#endif  // LOGIN_MANAGER_MOCK_METRICS_H_
