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()); |
} |