1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Use of this source code is governed by a BSD-style license that can be
3bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// found in the LICENSE file.
4bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
5bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#ifndef CHROME_BROWSER_CHROMEOS_LOGIN_MOCK_OWNER_KEY_UTILS_H_
6bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#define CHROME_BROWSER_CHROMEOS_LOGIN_MOCK_OWNER_KEY_UTILS_H_
7bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#pragma once
8bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
9bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include <vector>
10bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
11bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "base/basictypes.h"
12bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "base/file_path.h"
13ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "crypto/rsa_private_key.h"
14bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/browser/chromeos/cros/login_library.h"
15bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/browser/chromeos/login/owner_key_utils.h"
16dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/browser/browser_thread.h"
17bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "testing/gmock/include/gmock/gmock.h"
18bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "testing/gtest/include/gtest/gtest.h"
19bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
20bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsennamespace chromeos {
21bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
22bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenclass MockKeyUtils : public OwnerKeyUtils {
23bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen public:
24bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  MockKeyUtils() {}
25bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  MOCK_METHOD2(ImportPublicKey, bool(const FilePath& key_file,
26bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                                     std::vector<uint8>* output));
27bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  MOCK_METHOD3(Verify, bool(const std::string& data,
28bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                            const std::vector<uint8> signature,
29bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                            const std::vector<uint8> public_key));
30bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  MOCK_METHOD3(Sign, bool(const std::string& data,
31bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                          std::vector<uint8>* OUT_signature,
32ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                          crypto::RSAPrivateKey* key));
33ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  MOCK_METHOD1(FindPrivateKey,
34ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen               crypto::RSAPrivateKey*(const std::vector<uint8>& key));
35bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  MOCK_METHOD0(GetOwnerKeyFilePath, FilePath());
36ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  MOCK_METHOD2(ExportPublicKeyToFile, bool(crypto::RSAPrivateKey* pair,
37dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen                                           const FilePath& key_file));
38bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen protected:
39bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  virtual ~MockKeyUtils() {}
40bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
41bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen private:
42bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  DISALLOW_COPY_AND_ASSIGN(MockKeyUtils);
43bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen};
44bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
45bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenclass MockInjector : public OwnerKeyUtils::Factory {
46bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen public:
47bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // Takes ownership of |mock|.
48bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  explicit MockInjector(MockKeyUtils* mock) : transient_(mock) {
49bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  }
50bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
51bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  virtual ~MockInjector() {}
52bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
53bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // If this is called, its caller takes ownership of |transient_|.
54bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // If it's never called, |transient_| remains our problem.
55bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  OwnerKeyUtils* CreateOwnerKeyUtils() {
56bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    return transient_.get();
57bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  }
58bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
59bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen private:
60bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  scoped_refptr<MockKeyUtils> transient_;
61bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  DISALLOW_COPY_AND_ASSIGN(MockInjector);
62bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen};
63bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
64bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen}  // namespace chromeos
65bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
66bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#endif  // CHROME_BROWSER_CHROMEOS_LOGIN_MOCK_OWNER_KEY_UTILS_H_
67