| Index: services/ui/public/cpp/tests/window_tree_client_unittest.cc
|
| diff --git a/services/ui/public/cpp/tests/window_tree_client_unittest.cc b/services/ui/public/cpp/tests/window_tree_client_unittest.cc
|
| index 5766f754a24bdfece1d6762111ca939c985b4d85..c936893437ddbfc31e48fab80b7ab9c8972d12fb 100644
|
| --- a/services/ui/public/cpp/tests/window_tree_client_unittest.cc
|
| +++ b/services/ui/public/cpp/tests/window_tree_client_unittest.cc
|
| @@ -450,15 +450,19 @@ TEST_F(WindowTreeClientTest, InputEventBasic) {
|
| std::unique_ptr<ui::Event> ui_event(
|
| new ui::MouseEvent(ui::ET_MOUSE_MOVED, gfx::Point(), gfx::Point(),
|
| ui::EventTimeForNow(), ui::EF_NONE, 0));
|
| + mojo::Array<uint32_t> event_observer_ids;
|
| + event_observer_ids.push_back(0);
|
| setup.window_tree_client()->OnWindowInputEvent(
|
| - 1, server_id(root), ui::Event::Clone(*ui_event.get()), 0);
|
| + 1, server_id(root), ui::Event::Clone(*ui_event.get()),
|
| + std::move(event_observer_ids));
|
| EXPECT_TRUE(event_handler.received_event());
|
| EXPECT_TRUE(setup.window_tree()->WasEventAcked(1));
|
| event_handler.Reset();
|
|
|
| event_handler.set_should_manually_ack();
|
| setup.window_tree_client()->OnWindowInputEvent(
|
| - 33, server_id(root), ui::Event::Clone(*ui_event.get()), 0);
|
| + 33, server_id(root), ui::Event::Clone(*ui_event.get()),
|
| + std::move(event_observer_ids));
|
| EXPECT_TRUE(event_handler.received_event());
|
| EXPECT_FALSE(setup.window_tree()->WasEventAcked(33));
|
|
|
| @@ -477,15 +481,17 @@ TEST_F(WindowTreeClientTest, OnEventObserved) {
|
| mojom::EventMatcherPtr matcher = mojom::EventMatcher::New();
|
| matcher->type_matcher = mojom::EventTypeMatcher::New();
|
| matcher->type_matcher->type = ui::mojom::EventType::POINTER_DOWN;
|
| - setup.client()->SetEventObserver(std::move(matcher));
|
| + uint32_t observer_id = setup.client()->AddEventObserver(std::move(matcher));
|
|
|
| // Simulate the server sending an observed event.
|
| uint32_t event_observer_id = setup.GetEventObserverId();
|
| + mojo::Array<uint32_t> event_observer_ids;
|
| + event_observer_ids.push_back(event_observer_id);
|
| std::unique_ptr<ui::Event> ui_event(
|
| new ui::MouseEvent(ui::ET_MOUSE_PRESSED, gfx::Point(), gfx::Point(),
|
| ui::EventTimeForNow(), ui::EF_CONTROL_DOWN, 0));
|
| setup.window_tree_client()->OnEventObserved(ui::Event::Clone(*ui_event.get()),
|
| - event_observer_id);
|
| + std::move(event_observer_ids));
|
|
|
| // Delegate sensed the event.
|
| ui::Event* last_event = setup.window_tree_delegate()->last_event_observed();
|
| @@ -494,11 +500,11 @@ TEST_F(WindowTreeClientTest, OnEventObserved) {
|
| setup.window_tree_delegate()->Reset();
|
|
|
| // Clear the event observer.
|
| - setup.client()->SetEventObserver(nullptr);
|
| + setup.client()->RemoveEventObserver(observer_id);
|
|
|
| // Simulate another event from the server.
|
| setup.window_tree_client()->OnEventObserved(ui::Event::Clone(*ui_event.get()),
|
| - event_observer_id);
|
| + std::move(event_observer_ids));
|
|
|
| // No event was sensed.
|
| EXPECT_FALSE(setup.window_tree_delegate()->last_event_observed());
|
| @@ -514,15 +520,17 @@ TEST_F(WindowTreeClientTest, OnWindowInputEventWithEventObserver) {
|
| mojom::EventMatcherPtr matcher = mojom::EventMatcher::New();
|
| matcher->type_matcher = mojom::EventTypeMatcher::New();
|
| matcher->type_matcher->type = ui::mojom::EventType::POINTER_DOWN;
|
| - setup.client()->SetEventObserver(std::move(matcher));
|
| + setup.client()->AddEventObserver(std::move(matcher));
|
|
|
| // Simulate the server dispatching an event that also matched the observer.
|
| uint32_t event_observer_id = setup.GetEventObserverId();
|
| + mojo::Array<uint32_t> event_observer_ids;
|
| + event_observer_ids.push_back(event_observer_id);
|
| std::unique_ptr<ui::Event> ui_event(
|
| new ui::MouseEvent(ui::ET_MOUSE_PRESSED, gfx::Point(), gfx::Point(),
|
| ui::EventTimeForNow(), ui::EF_CONTROL_DOWN, 0));
|
| setup.window_tree_client()->OnWindowInputEvent(
|
| - 1, server_id(root), std::move(ui_event), event_observer_id);
|
| + 1, server_id(root), std::move(ui_event), std::move(event_observer_ids));
|
|
|
| // Delegate sensed the event.
|
| ui::Event* last_event = setup.window_tree_delegate()->last_event_observed();
|
| @@ -530,9 +538,8 @@ TEST_F(WindowTreeClientTest, OnWindowInputEventWithEventObserver) {
|
| EXPECT_EQ(ui::EF_CONTROL_DOWN, last_event->flags());
|
| }
|
|
|
| -// Tests that replacing an event observer with a new one results in only new
|
| -// events being observed.
|
| -TEST_F(WindowTreeClientTest, EventObserverReplaced) {
|
| +// Tests that adding another event observer should observe both events.
|
| +TEST_F(WindowTreeClientTest, EventObserverMult) {
|
| WindowTreeSetup setup;
|
| Window* root = setup.GetFirstRoot();
|
| ASSERT_TRUE(root);
|
| @@ -541,15 +548,19 @@ TEST_F(WindowTreeClientTest, EventObserverReplaced) {
|
| mojom::EventMatcherPtr matcher1 = mojom::EventMatcher::New();
|
| matcher1->type_matcher = mojom::EventTypeMatcher::New();
|
| matcher1->type_matcher->type = ui::mojom::EventType::POINTER_DOWN;
|
| - setup.client()->SetEventObserver(std::move(matcher1));
|
| + setup.client()->AddEventObserver(std::move(matcher1));
|
| uint32_t event_observer_id1 = setup.GetEventObserverId();
|
| + mojo::Array<uint32_t> event_observer_ids1;
|
| + event_observer_ids1.push_back(event_observer_id1);
|
|
|
| - // Replace it with a second observer.
|
| + // Add a second observer.
|
| mojom::EventMatcherPtr matcher2 = mojom::EventMatcher::New();
|
| matcher2->type_matcher = mojom::EventTypeMatcher::New();
|
| matcher2->type_matcher->type = ui::mojom::EventType::POINTER_UP;
|
| - setup.client()->SetEventObserver(std::move(matcher2));
|
| + setup.client()->AddEventObserver(std::move(matcher2));
|
| uint32_t event_observer_id2 = setup.GetEventObserverId();
|
| + mojo::Array<uint32_t> event_observer_ids2;
|
| + event_observer_ids2.push_back(event_observer_id2);
|
|
|
| // Simulate the server sending an observed event that matched the old observer
|
| // (e.g. that was in-flight when the observer was replaced).
|
| @@ -557,20 +568,25 @@ TEST_F(WindowTreeClientTest, EventObserverReplaced) {
|
| new ui::MouseEvent(ui::ET_MOUSE_PRESSED, gfx::Point(), gfx::Point(),
|
| ui::EventTimeForNow(), ui::EF_NONE, 0));
|
| setup.window_tree_client()->OnEventObserved(std::move(pressed_event),
|
| - event_observer_id1);
|
| + std::move(event_observer_ids1));
|
|
|
| - // The event was not sensed, because it does not match the current observer.
|
| - EXPECT_FALSE(setup.window_tree_delegate()->last_event_observed());
|
| + // The event should be sensed, because it matches the first observer.
|
| + EXPECT_TRUE(setup.window_tree_delegate()->last_event_observed());
|
| + // The delegate sensed the event.
|
| + ui::Event* last_event = setup.window_tree_delegate()->last_event_observed();
|
| + EXPECT_EQ(ui::ET_MOUSE_PRESSED, last_event->type());
|
| + EXPECT_EQ(ui::EF_NONE, last_event->flags());
|
|
|
| - // Simulate another event that matches the new observer.
|
| + // Simulate another event that matches the second observer.
|
| std::unique_ptr<ui::Event> released_event(
|
| new ui::MouseEvent(ui::ET_MOUSE_RELEASED, gfx::Point(), gfx::Point(),
|
| ui::EventTimeForNow(), ui::EF_CONTROL_DOWN, 0));
|
| setup.window_tree_client()->OnEventObserved(std::move(released_event),
|
| - event_observer_id2);
|
| + std::move(event_observer_ids2));
|
|
|
| + EXPECT_TRUE(setup.window_tree_delegate()->last_event_observed());
|
| // The delegate sensed the event.
|
| - ui::Event* last_event = setup.window_tree_delegate()->last_event_observed();
|
| + last_event = setup.window_tree_delegate()->last_event_observed();
|
| EXPECT_EQ(ui::ET_MOUSE_RELEASED, last_event->type());
|
| EXPECT_EQ(ui::EF_CONTROL_DOWN, last_event->flags());
|
| }
|
|
|