| Index: services/device/fingerprint/fingerprint_impl_chromeos_unittest.cc | 
| diff --git a/services/device/fingerprint/fingerprint_impl_chromeos_unittest.cc b/services/device/fingerprint/fingerprint_impl_chromeos_unittest.cc | 
| new file mode 100644 | 
| index 0000000000000000000000000000000000000000..f9d0d0da960996dbe4f278603235919d8029533b | 
| --- /dev/null | 
| +++ b/services/device/fingerprint/fingerprint_impl_chromeos_unittest.cc | 
| @@ -0,0 +1,108 @@ | 
| +// Copyright 2017 The Chromium Authors. All rights reserved. | 
| +// Use of this source code is governed by a BSD-style license that can be | 
| +// found in the LICENSE file. | 
| + | 
| +#include "services/device/fingerprint/fingerprint_impl_chromeos.h" | 
| + | 
| +#include "base/macros.h" | 
| +#include "base/message_loop/message_loop.h" | 
| +#include "base/run_loop.h" | 
| +#include "mojo/public/cpp/bindings/binding.h" | 
| +#include "testing/gtest/include/gtest/gtest.h" | 
| + | 
| +namespace device { | 
| + | 
| +class FakeBiodObserver : public mojom::BiodObserver { | 
| + public: | 
| +  explicit FakeBiodObserver(mojom::BiodObserverRequest request) | 
| +      : binding_(this, std::move(request)) {} | 
| +  ~FakeBiodObserver() override {} | 
| + | 
| +  // mojom::BiodObserver | 
| +  void OnRestarted() override { restarts_++; } | 
| + | 
| +  void OnScanned(uint32_t scan_result, bool is_complete) override { scans_++; } | 
| + | 
| +  void OnAttempt(uint32_t scan_result, | 
| +                 const std::vector<std::string>& recognized_user_ids) override { | 
| +    attempts_++; | 
| +  } | 
| + | 
| +  void OnFailure() override { failures_++; } | 
| + | 
| +  // Test status counts. | 
| +  int Scans() { return scans_; } | 
| +  int Attempts() { return attempts_; } | 
| +  int Restarts() { return restarts_; } | 
| +  int Failures() { return failures_; } | 
| + | 
| + private: | 
| +  mojo::Binding<mojom::BiodObserver> binding_; | 
| +  int scans_ = 0;     // Count of scan signal received. | 
| +  int attempts_ = 0;  // Count of attempt signal received. | 
| +  int restarts_ = 0;  // Count of restart signal received. | 
| +  int failures_ = 0;  // Count of failure signal received. | 
| + | 
| +  DISALLOW_COPY_AND_ASSIGN(FakeBiodObserver); | 
| +}; | 
| + | 
| +class FingerprintImplChromeOSTest : public testing::Test { | 
| + public: | 
| +  FingerprintImplChromeOSTest() { | 
| +    fingerprint_ = base::WrapUnique(new FingerprintImplChromeOS()); | 
| +  } | 
| +  ~FingerprintImplChromeOSTest() override {} | 
| + | 
| +  FingerprintImplChromeOS* fingerprint() { return fingerprint_.get(); } | 
| + | 
| +  void GenerateRestartSignal() { fingerprint_->BiodBiometricClientRestarted(); } | 
| + | 
| +  void GenerateScanSignal() { | 
| +    fingerprint_->BiometricsScanEventReceived(0, true); | 
| +  } | 
| + | 
| +  void GenerateAttemptSignal() { | 
| +    std::vector<std::string> user_list; | 
| +    fingerprint_->BiometricsAttemptEventReceived(0, user_list); | 
| +  } | 
| + | 
| +  void GenerateFailureSignal() { fingerprint_->BiometricsFailureReceived(); } | 
| + | 
| + private: | 
| +  base::MessageLoop message_loop_; | 
| +  std::unique_ptr<FingerprintImplChromeOS> fingerprint_; | 
| + | 
| +  DISALLOW_COPY_AND_ASSIGN(FingerprintImplChromeOSTest); | 
| +}; | 
| + | 
| +TEST_F(FingerprintImplChromeOSTest, BiodObserverTest) { | 
| +  mojom::BiodObserverPtr proxy1; | 
| +  FakeBiodObserver observer1(mojo::MakeRequest(&proxy1)); | 
| +  mojom::BiodObserverPtr proxy2; | 
| +  FakeBiodObserver observer2(mojo::MakeRequest(&proxy2)); | 
| + | 
| +  fingerprint()->AddBiodObserver(std::move(proxy1)); | 
| +  fingerprint()->AddBiodObserver(std::move(proxy2)); | 
| + | 
| +  GenerateRestartSignal(); | 
| +  base::RunLoop().RunUntilIdle(); | 
| +  EXPECT_EQ(observer1.Restarts(), 1); | 
| +  EXPECT_EQ(observer2.Restarts(), 1); | 
| + | 
| +  GenerateScanSignal(); | 
| +  base::RunLoop().RunUntilIdle(); | 
| +  EXPECT_EQ(observer1.Scans(), 1); | 
| +  EXPECT_EQ(observer2.Scans(), 1); | 
| + | 
| +  GenerateAttemptSignal(); | 
| +  base::RunLoop().RunUntilIdle(); | 
| +  EXPECT_EQ(observer1.Attempts(), 1); | 
| +  EXPECT_EQ(observer2.Attempts(), 1); | 
| + | 
| +  GenerateFailureSignal(); | 
| +  base::RunLoop().RunUntilIdle(); | 
| +  EXPECT_EQ(observer1.Failures(), 1); | 
| +  EXPECT_EQ(observer2.Failures(), 1); | 
| +} | 
| + | 
| +}  // namespace device | 
|  |