1c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant// Copyright 2014 The Chromium Authors. All rights reserved.
2c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant// Use of this source code is governed by a BSD-style license that can be
3c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant// found in the LICENSE file.
4c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant
5b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant#include "ui/events/test/platform_event_waiter.h"
6b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant
7c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant#include "base/message_loop/message_loop.h"
8c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant#include "ui/events/platform/platform_event_source.h"
9c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant
10c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnantnamespace ui {
11c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant
12c52f43e72dfcea03037729649da84c23b3beb04aHoward HinnantPlatformEventWaiter::PlatformEventWaiter(
13c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant    const base::Closure& success_callback,
14c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant    const PlatformEventMatcher& event_matcher)
15c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant    : success_callback_(success_callback),
16c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant      event_matcher_(event_matcher) {
17c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant  PlatformEventSource::GetInstance()->AddPlatformEventObserver(this);
18c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant}
19c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant
20c52f43e72dfcea03037729649da84c23b3beb04aHoward HinnantPlatformEventWaiter::~PlatformEventWaiter() {
21c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant  PlatformEventSource::GetInstance()->RemovePlatformEventObserver(this);
22c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant}
23c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant
24c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnantvoid PlatformEventWaiter::WillProcessEvent(const PlatformEvent& event) {
25c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant  if (event_matcher_.Run(event)) {
26c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant    base::MessageLoop::current()->PostTask(FROM_HERE, success_callback_);
27c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant    delete this;
28c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant  }
29c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant}
30c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant
31c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnantvoid PlatformEventWaiter::DidProcessEvent(const PlatformEvent& event) {
32c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant}
33
34// static
35PlatformEventWaiter* PlatformEventWaiter::Create(
36    const base::Closure& success_callback,
37    const PlatformEventMatcher& event_matcher) {
38  return new PlatformEventWaiter(success_callback, event_matcher);
39}
40
41}  // namespace ui
42