blob: 34e07d8136eecac450eac62e59d9886c3a571e87 [file] [log] [blame]
// Copyright 2013 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 "media/base/user_input_monitor.h"
#include "third_party/skia/include/core/SkPoint.h"
namespace media {
#ifdef DISABLE_USER_INPUT_MONITOR
scoped_ptr<UserInputMonitor> UserInputMonitor::Create(
const scoped_refptr<base::SingleThreadTaskRunner>& io_task_runner,
const scoped_refptr<base::SingleThreadTaskRunner>& ui_task_runner) {
return scoped_ptr<UserInputMonitor>();
}
#endif // DISABLE_USER_INPUT_MONITOR
UserInputMonitor::UserInputMonitor()
: monitoring_mouse_(false), key_press_counter_references_(0) {}
UserInputMonitor::~UserInputMonitor() {
DCHECK(!monitoring_mouse_);
DCHECK(!key_press_counter_references_);
}
void UserInputMonitor::AddMouseListener(MouseEventListener* listener) {
base::AutoLock auto_lock(lock_);
mouse_listeners_.AddObserver(listener);
if (!monitoring_mouse_) {
StartMouseMonitoring();
monitoring_mouse_ = true;
DVLOG(2) << "Started mouse monitoring.";
}
}
void UserInputMonitor::RemoveMouseListener(MouseEventListener* listener) {
base::AutoLock auto_lock(lock_);
mouse_listeners_.RemoveObserver(listener);
if (!mouse_listeners_.might_have_observers()) {
StopMouseMonitoring();
monitoring_mouse_ = false;
DVLOG(2) << "Stopped mouse monitoring.";
}
}
void UserInputMonitor::EnableKeyPressMonitoring() {
base::AutoLock auto_lock(lock_);
++key_press_counter_references_;
if (key_press_counter_references_ == 1) {
StartKeyboardMonitoring();
DVLOG(2) << "Started keyboard monitoring.";
}
}
void UserInputMonitor::DisableKeyPressMonitoring() {
base::AutoLock auto_lock(lock_);
DCHECK_NE(key_press_counter_references_, 0u);
--key_press_counter_references_;
if (key_press_counter_references_ == 0) {
StopKeyboardMonitoring();
DVLOG(2) << "Stopped keyboard monitoring.";
}
}
void UserInputMonitor::OnMouseEvent(const SkIPoint& position) {
base::AutoLock auto_lock(lock_);
if (!monitoring_mouse_)
return;
FOR_EACH_OBSERVER(
MouseEventListener, mouse_listeners_, OnMouseMoved(position));
}
} // namespace media