| Index: services/ui/ws/window_tree.cc
|
| diff --git a/services/ui/ws/window_tree.cc b/services/ui/ws/window_tree.cc
|
| index 0206327b3029fe4a72b98b55812605d6bcc98571..c13e5602c2cb225b287390871917f01765c8c59c 100644
|
| --- a/services/ui/ws/window_tree.cc
|
| +++ b/services/ui/ws/window_tree.cc
|
| @@ -987,16 +987,26 @@ void WindowTree::DispatchInputEventImpl(ServerWindow* target,
|
| event_source_wms_ = display_root->window_manager_state();
|
| // Should only get events from windows attached to a host.
|
| DCHECK(event_source_wms_);
|
| - bool matched_observer =
|
| - event_observer_matcher_ && event_observer_matcher_->MatchesEvent(event);
|
| + bool matched_pointer_watcher = EventMatchesPointerWatcher(event);
|
| client()->OnWindowInputEvent(
|
| event_ack_id_, ClientWindowIdForWindow(target).id,
|
| - ui::Event::Clone(event), matched_observer ? event_observer_id_ : 0);
|
| + ui::Event::Clone(event),
|
| + matched_pointer_watcher ? pointer_watcher_id_ : 0);
|
| +}
|
| +
|
| +bool WindowTree::EventMatchesPointerWatcher(const ui::Event& event) {
|
| + if (!has_pointer_watcher_)
|
| + return false;
|
| + if (!event.IsPointerEvent())
|
| + return false;
|
| + if (!pointer_watcher_want_moves_ && event.type() == ui::ET_POINTER_MOVED)
|
| + return false;
|
| + return true;
|
| }
|
|
|
| void WindowTree::SendToEventObserver(const ui::Event& event) {
|
| - if (event_observer_matcher_ && event_observer_matcher_->MatchesEvent(event))
|
| - client()->OnEventObserved(ui::Event::Clone(event), event_observer_id_);
|
| + if (EventMatchesPointerWatcher(event))
|
| + client()->OnEventObserved(ui::Event::Clone(event), pointer_watcher_id_);
|
| }
|
|
|
| void WindowTree::NewWindow(
|
| @@ -1164,48 +1174,20 @@ void WindowTree::ReleaseCapture(uint32_t change_id, Id window_id) {
|
|
|
| void WindowTree::SetEventObserver(mojom::EventMatcherPtr matcher,
|
| uint32_t observer_id) {
|
| - if (matcher.is_null() || observer_id == 0) {
|
| - // Clear any existing event observer.
|
| - event_observer_matcher_.reset();
|
| - event_observer_id_ = 0;
|
| - return;
|
| - }
|
| -
|
| - // Do not allow key events to be observed, as a compromised app could register
|
| - // itself as an event observer and spy on keystrokes to another app.
|
| - if (!matcher->type_matcher && !matcher->pointer_kind_matcher) {
|
| - DVLOG(1) << "SetEventObserver must specify an event type.";
|
| - return;
|
| - }
|
| + // JAMES - remove this function
|
| +}
|
|
|
| - const ui::mojom::EventType event_type_whitelist[] = {
|
| - ui::mojom::EventType::POINTER_CANCEL, ui::mojom::EventType::POINTER_DOWN,
|
| - ui::mojom::EventType::POINTER_MOVE, ui::mojom::EventType::POINTER_UP,
|
| - ui::mojom::EventType::MOUSE_EXIT, ui::mojom::EventType::WHEEL,
|
| - };
|
| -
|
| - if (matcher->type_matcher) {
|
| - auto iter =
|
| - std::find(std::begin(event_type_whitelist),
|
| - std::end(event_type_whitelist), matcher->type_matcher->type);
|
| - if (iter == std::end(event_type_whitelist)) {
|
| - DVLOG(1) << "SetEventObserver event type not allowed";
|
| - return;
|
| - }
|
| - }
|
| - if (matcher->pointer_kind_matcher) {
|
| - ui::mojom::PointerKind pointer_kind =
|
| - matcher->pointer_kind_matcher->pointer_kind;
|
| - if (pointer_kind != ui::mojom::PointerKind::MOUSE &&
|
| - pointer_kind != ui::mojom::PointerKind::TOUCH &&
|
| - pointer_kind != ui::mojom::PointerKind::PEN) {
|
| - DVLOG(1) << "SetEventObserver pointer kind not allowed";
|
| - return;
|
| - }
|
| - }
|
| +void WindowTree::StartPointerWatcher(bool want_moves,
|
| + uint32_t pointer_watcher_id) {
|
| + has_pointer_watcher_ = true;
|
| + pointer_watcher_want_moves_ = want_moves;
|
| + pointer_watcher_id_ = pointer_watcher_id;
|
| +}
|
|
|
| - event_observer_matcher_.reset(new EventMatcher(*matcher));
|
| - event_observer_id_ = observer_id;
|
| +void WindowTree::StopPointerWatcher() {
|
| + has_pointer_watcher_ = false;
|
| + pointer_watcher_want_moves_ = false;
|
| + pointer_watcher_id_ = 0;
|
| }
|
|
|
| void WindowTree::SetWindowBounds(uint32_t change_id,
|
|
|