| Index: ui/aura/mus/user_activity_forwarder_unittest.cc
 | 
| diff --git a/ui/aura/mus/user_activity_forwarder_unittest.cc b/ui/aura/mus/user_activity_forwarder_unittest.cc
 | 
| new file mode 100644
 | 
| index 0000000000000000000000000000000000000000..8130db9d1ccbf3b2355d29c835c5b5617cc2a395
 | 
| --- /dev/null
 | 
| +++ b/ui/aura/mus/user_activity_forwarder_unittest.cc
 | 
| @@ -0,0 +1,85 @@
 | 
| +// 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 "ui/aura/mus/user_activity_forwarder.h"
 | 
| +
 | 
| +#include <memory>
 | 
| +#include <vector>
 | 
| +
 | 
| +#include "base/macros.h"
 | 
| +#include "base/memory/ptr_util.h"
 | 
| +#include "base/time/time.h"
 | 
| +#include "mojo/public/cpp/bindings/interface_request.h"
 | 
| +#include "services/ui/common/task_runner_test_base.h"
 | 
| +#include "services/ui/public/interfaces/user_activity_monitor.mojom.h"
 | 
| +#include "testing/gtest/include/gtest/gtest.h"
 | 
| +#include "ui/base/user_activity/user_activity_detector.h"
 | 
| +
 | 
| +namespace {
 | 
| +
 | 
| +// Fake implementation of ui::mojom::UserActivityMonitor for testing that just
 | 
| +// supports tracking and notifying observers.
 | 
| +class FakeUserActivityMonitor : public ui::mojom::UserActivityMonitor {
 | 
| + public:
 | 
| +  FakeUserActivityMonitor() : binding_(this) {}
 | 
| +  ~FakeUserActivityMonitor() override {}
 | 
| +
 | 
| +  ui::mojom::UserActivityMonitorPtr GetPtr() {
 | 
| +    return binding_.CreateInterfacePtrAndBind();
 | 
| +  }
 | 
| +
 | 
| +  // Notifies all observers about user activity.
 | 
| +  // ui::TaskRunnerTestBase::RunUntilIdle() must be called after this method in
 | 
| +  // order for observers to receive notifications.
 | 
| +  void NotifyUserActivityObservers() {
 | 
| +    for (auto& observer : activity_observers_)
 | 
| +      observer->OnUserActivity();
 | 
| +  }
 | 
| +
 | 
| +  // ui::mojom::UserActivityMonitor:
 | 
| +  void AddUserActivityObserver(
 | 
| +      uint32_t delay_between_notify_secs,
 | 
| +      ui::mojom::UserActivityObserverPtr observer) override {
 | 
| +    activity_observers_.push_back(std::move(observer));
 | 
| +  }
 | 
| +  void AddUserIdleObserver(uint32_t idleness_in_minutes,
 | 
| +                           ui::mojom::UserIdleObserverPtr observer) override {
 | 
| +    NOTREACHED() << "Unexpected AddUserIdleObserver call";
 | 
| +  }
 | 
| +
 | 
| + private:
 | 
| +  mojo::Binding<ui::mojom::UserActivityMonitor> binding_;
 | 
| +  std::vector<ui::mojom::UserActivityObserverPtr> activity_observers_;
 | 
| +
 | 
| +  DISALLOW_COPY_AND_ASSIGN(FakeUserActivityMonitor);
 | 
| +};
 | 
| +
 | 
| +}  // namespace
 | 
| +
 | 
| +namespace aura {
 | 
| +
 | 
| +using UserActivityForwarderTest = ui::TaskRunnerTestBase;
 | 
| +
 | 
| +TEST_F(UserActivityForwarderTest, ForwardActivityToDetector) {
 | 
| +  FakeUserActivityMonitor monitor;
 | 
| +  ui::UserActivityDetector detector;
 | 
| +  UserActivityForwarder forwarder(monitor.GetPtr(), &detector);
 | 
| +
 | 
| +  // Run pending tasks so |monitor| receives |forwarder|'s registration.
 | 
| +  RunUntilIdle();
 | 
| +
 | 
| +  base::TimeTicks now = base::TimeTicks::FromInternalValue(1000);
 | 
| +  detector.set_now_for_test(now);
 | 
| +  monitor.NotifyUserActivityObservers();
 | 
| +  RunUntilIdle();
 | 
| +  EXPECT_EQ(now, detector.last_activity_time());
 | 
| +
 | 
| +  now += base::TimeDelta::FromSeconds(10);
 | 
| +  detector.set_now_for_test(now);
 | 
| +  monitor.NotifyUserActivityObservers();
 | 
| +  RunUntilIdle();
 | 
| +  EXPECT_EQ(now, detector.last_activity_time());
 | 
| +}
 | 
| +
 | 
| +}  // namespace aura
 | 
| 
 |