blob: 2f01215bd2d5aa48fec405f77d6c42c1bdc18948 [file] [log] [blame]
// 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/time/time.h"
#include "mojo/public/cpp/bindings/interface_request.h"
#include "services/ws/common/task_runner_test_base.h"
#include "services/ws/public/mojom/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 ws::mojom::UserActivityMonitor for testing that just
// supports tracking and notifying observers.
class FakeUserActivityMonitor : public ws::mojom::UserActivityMonitor {
public:
FakeUserActivityMonitor() : binding_(this) {}
~FakeUserActivityMonitor() override {}
ws::mojom::UserActivityMonitorPtr GetPtr() {
ws::mojom::UserActivityMonitorPtr ptr;
binding_.Bind(mojo::MakeRequest(&ptr));
return ptr;
}
// Notifies all observers about user activity.
// ws::TaskRunnerTestBase::RunUntilIdle() must be called after this method in
// order for observers to receive notifications.
void NotifyUserActivityObservers() {
for (auto& observer : activity_observers_)
observer->OnUserActivity();
}
// ws::mojom::UserActivityMonitor:
void AddUserActivityObserver(
uint32_t delay_between_notify_secs,
ws::mojom::UserActivityObserverPtr observer) override {
activity_observers_.push_back(std::move(observer));
}
void AddUserIdleObserver(uint32_t idleness_in_minutes,
ws::mojom::UserIdleObserverPtr observer) override {
NOTREACHED() << "Unexpected AddUserIdleObserver call";
}
private:
mojo::Binding<ws::mojom::UserActivityMonitor> binding_;
std::vector<ws::mojom::UserActivityObserverPtr> activity_observers_;
DISALLOW_COPY_AND_ASSIGN(FakeUserActivityMonitor);
};
} // namespace
namespace aura {
using UserActivityForwarderTest = ws::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() + base::TimeDelta::FromMicroseconds(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