Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(575)

Side by Side Diff: components/mus/ws/window_tree_unittest.cc

Issue 1939133002: StructTraits to map mus::mojom::Event to unique_ptr<ui::Event> (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressed feedback. Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « components/mus/ws/window_tree_client_unittest.cc ('k') | mash/app_driver/app_driver.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "components/mus/ws/window_tree.h" 5 #include "components/mus/ws/window_tree.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 8
9 #include <string> 9 #include <string>
10 #include <vector> 10 #include <vector>
(...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after
253 DispatchEventAndAckImmediately(CreatePointerUpEvent(21, 22)); 253 DispatchEventAndAckImmediately(CreatePointerUpEvent(21, 22));
254 wm_client()->tracker()->changes()->clear(); 254 wm_client()->tracker()->changes()->clear();
255 tree1_client->tracker()->changes()->clear(); 255 tree1_client->tracker()->changes()->clear();
256 256
257 // Press in the same location. Should not get a focus change event (only input 257 // Press in the same location. Should not get a focus change event (only input
258 // event). 258 // event).
259 DispatchEventAndAckImmediately(CreatePointerDownEvent(61, 22)); 259 DispatchEventAndAckImmediately(CreatePointerDownEvent(61, 22));
260 EXPECT_EQ(child1, display()->GetFocusedWindow()); 260 EXPECT_EQ(child1, display()->GetFocusedWindow());
261 ASSERT_EQ(wm_client()->tracker()->changes()->size(), 1u) 261 ASSERT_EQ(wm_client()->tracker()->changes()->size(), 1u)
262 << SingleChangeToDescription(*wm_client()->tracker()->changes()); 262 << SingleChangeToDescription(*wm_client()->tracker()->changes());
263 EXPECT_EQ("InputEvent window=0,3 event_action=4", 263 EXPECT_EQ("InputEvent window=0,3 event_action=16",
264 ChangesToDescription1(*wm_client()->tracker()->changes())[0]); 264 ChangesToDescription1(*wm_client()->tracker()->changes())[0]);
265 EXPECT_TRUE(tree1_client->tracker()->changes()->empty()); 265 EXPECT_TRUE(tree1_client->tracker()->changes()->empty());
266 } 266 }
267 267
268 TEST_F(WindowTreeTest, BasicInputEventTarget) { 268 TEST_F(WindowTreeTest, BasicInputEventTarget) {
269 TestWindowTreeClient* embed_client = nullptr; 269 TestWindowTreeClient* embed_client = nullptr;
270 WindowTree* tree = nullptr; 270 WindowTree* tree = nullptr;
271 ServerWindow* window = nullptr; 271 ServerWindow* window = nullptr;
272 EXPECT_NO_FATAL_FAILURE( 272 EXPECT_NO_FATAL_FAILURE(
273 SetupEventTargeting(&embed_client, &tree, &window)); 273 SetupEventTargeting(&embed_client, &tree, &window));
274 274
275 // Send an event to |v1|. |embed_client| should get the event, not 275 // Send an event to |v1|. |embed_client| should get the event, not
276 // |wm_client|, since |v1| lives inside an embedded window. 276 // |wm_client|, since |v1| lives inside an embedded window.
277 DispatchEventAndAckImmediately(CreatePointerDownEvent(21, 22)); 277 DispatchEventAndAckImmediately(CreatePointerDownEvent(21, 22));
278 ASSERT_EQ(1u, wm_client()->tracker()->changes()->size()); 278 ASSERT_EQ(1u, wm_client()->tracker()->changes()->size());
279 EXPECT_EQ("Focused id=2,1", 279 EXPECT_EQ("Focused id=2,1",
280 ChangesToDescription1(*wm_client()->tracker()->changes())[0]); 280 ChangesToDescription1(*wm_client()->tracker()->changes())[0]);
281 ASSERT_EQ(2u, embed_client->tracker()->changes()->size()); 281 ASSERT_EQ(2u, embed_client->tracker()->changes()->size());
282 EXPECT_EQ("Focused id=2,1", 282 EXPECT_EQ("Focused id=2,1",
283 ChangesToDescription1(*embed_client->tracker()->changes())[0]); 283 ChangesToDescription1(*embed_client->tracker()->changes())[0]);
284 EXPECT_EQ("InputEvent window=2,1 event_action=4", 284 EXPECT_EQ("InputEvent window=2,1 event_action=16",
285 ChangesToDescription1(*embed_client->tracker()->changes())[1]); 285 ChangesToDescription1(*embed_client->tracker()->changes())[1]);
286 } 286 }
287 287
288 // Tests that a client can observe events outside its bounds. 288 // Tests that a client can observe events outside its bounds.
289 TEST_F(WindowTreeTest, SetEventObserver) { 289 TEST_F(WindowTreeTest, SetEventObserver) {
290 // Create an embedded client. 290 // Create an embedded client.
291 TestWindowTreeClient* client = nullptr; 291 TestWindowTreeClient* client = nullptr;
292 WindowTree* tree = nullptr; 292 WindowTree* tree = nullptr;
293 ServerWindow* window = nullptr; 293 ServerWindow* window = nullptr;
294 EXPECT_NO_FATAL_FAILURE(SetupEventTargeting(&client, &tree, &window)); 294 EXPECT_NO_FATAL_FAILURE(SetupEventTargeting(&client, &tree, &window));
295 295
296 // Create an event outside the bounds of the client. 296 // Create an event outside the bounds of the client.
297 ui::PointerEvent pointer_down = CreatePointerDownEvent(5, 5); 297 ui::PointerEvent pointer_down = CreatePointerDownEvent(5, 5);
298 298
299 // Events are not observed before setting an observer. 299 // Events are not observed before setting an observer.
300 DispatchEventAndAckImmediately(pointer_down); 300 DispatchEventAndAckImmediately(pointer_down);
301 ASSERT_EQ(0u, client->tracker()->changes()->size()); 301 ASSERT_EQ(0u, client->tracker()->changes()->size());
302 302
303 // Create an observer for pointer-down events. 303 // Create an observer for pointer-down events.
304 WindowTreeTestApi(tree).SetEventObserver( 304 WindowTreeTestApi(tree).SetEventObserver(
305 CreateEventMatcher(mojom::EventType::POINTER_DOWN), 111u); 305 CreateEventMatcher(mojom::EventType::POINTER_DOWN), 111u);
306 306
307 // Pointer-down events are sent to the client. 307 // Pointer-down events are sent to the client.
308 DispatchEventAndAckImmediately(pointer_down); 308 DispatchEventAndAckImmediately(pointer_down);
309 ASSERT_EQ(1u, client->tracker()->changes()->size()); 309 ASSERT_EQ(1u, client->tracker()->changes()->size());
310 EXPECT_EQ("EventObserved event_action=4 event_observer_id=111", 310 EXPECT_EQ("EventObserved event_action=16 event_observer_id=111",
311 ChangesToDescription1(*client->tracker()->changes())[0]); 311 ChangesToDescription1(*client->tracker()->changes())[0]);
312 client->tracker()->changes()->clear(); 312 client->tracker()->changes()->clear();
313 313
314 // Clearing the observer stops sending events to the client. 314 // Clearing the observer stops sending events to the client.
315 WindowTreeTestApi(tree).SetEventObserver(nullptr, 0u); 315 WindowTreeTestApi(tree).SetEventObserver(nullptr, 0u);
316 DispatchEventAndAckImmediately(pointer_down); 316 DispatchEventAndAckImmediately(pointer_down);
317 ASSERT_EQ(0u, client->tracker()->changes()->size()); 317 ASSERT_EQ(0u, client->tracker()->changes()->size());
318 } 318 }
319 319
320 // Tests that a client using an event observer does not receive events that 320 // Tests that a client using an event observer does not receive events that
(...skipping 28 matching lines...) Expand all
349 WindowTreeTestApi(tree).SetEventObserver( 349 WindowTreeTestApi(tree).SetEventObserver(
350 CreateEventMatcher(mojom::EventType::POINTER_UP), 111u); 350 CreateEventMatcher(mojom::EventType::POINTER_UP), 111u);
351 351
352 // Create an event inside the bounds of the client. 352 // Create an event inside the bounds of the client.
353 ui::PointerEvent pointer_up = CreatePointerUpEvent(25, 25); 353 ui::PointerEvent pointer_up = CreatePointerUpEvent(25, 25);
354 354
355 // The event is dispatched once, with a flag set that it matched the event 355 // The event is dispatched once, with a flag set that it matched the event
356 // observer. 356 // observer.
357 DispatchEventAndAckImmediately(pointer_up); 357 DispatchEventAndAckImmediately(pointer_up);
358 ASSERT_EQ(1u, client->tracker()->changes()->size()); 358 ASSERT_EQ(1u, client->tracker()->changes()->size());
359 EXPECT_EQ("InputEvent window=2,1 event_action=6 event_observer_id=111", 359 EXPECT_EQ("InputEvent window=2,1 event_action=18 event_observer_id=111",
360 SingleChangeToDescription(*client->tracker()->changes())); 360 SingleChangeToDescription(*client->tracker()->changes()));
361 } 361 }
362 362
363 // Tests that events generated by user A are not observed by event observers for 363 // Tests that events generated by user A are not observed by event observers for
364 // user B. 364 // user B.
365 TEST_F(WindowTreeTest, SetEventObserverWrongUser) { 365 TEST_F(WindowTreeTest, SetEventObserverWrongUser) {
366 // Embed a window tree belonging to a different user. 366 // Embed a window tree belonging to a different user.
367 TestWindowTreeBinding* other_binding; 367 TestWindowTreeBinding* other_binding;
368 WindowTree* other_tree = CreateNewTree("other_user", &other_binding); 368 WindowTree* other_tree = CreateNewTree("other_user", &other_binding);
369 other_binding->client()->tracker()->changes()->clear(); 369 other_binding->client()->tracker()->changes()->clear();
370 370
371 // Set event observers on both the wm tree and the other user's tree. 371 // Set event observers on both the wm tree and the other user's tree.
372 WindowTreeTestApi(wm_tree()).SetEventObserver( 372 WindowTreeTestApi(wm_tree()).SetEventObserver(
373 CreateEventMatcher(mojom::EventType::POINTER_UP), 111u); 373 CreateEventMatcher(mojom::EventType::POINTER_UP), 111u);
374 WindowTreeTestApi(other_tree) 374 WindowTreeTestApi(other_tree)
375 .SetEventObserver(CreateEventMatcher(mojom::EventType::POINTER_UP), 222u); 375 .SetEventObserver(CreateEventMatcher(mojom::EventType::POINTER_UP), 222u);
376 376
377 // An event is observed by the wm tree, but not by the other user's tree. 377 // An event is observed by the wm tree, but not by the other user's tree.
378 DispatchEventAndAckImmediately(CreatePointerUpEvent(5, 5)); 378 DispatchEventAndAckImmediately(CreatePointerUpEvent(5, 5));
379 ASSERT_EQ(1u, wm_client()->tracker()->changes()->size()); 379 ASSERT_EQ(1u, wm_client()->tracker()->changes()->size());
380 EXPECT_EQ("InputEvent window=0,3 event_action=6 event_observer_id=111", 380 EXPECT_EQ("InputEvent window=0,3 event_action=18 event_observer_id=111",
381 SingleChangeToDescription(*wm_client()->tracker()->changes())); 381 SingleChangeToDescription(*wm_client()->tracker()->changes()));
382 ASSERT_EQ(0u, other_binding->client()->tracker()->changes()->size()); 382 ASSERT_EQ(0u, other_binding->client()->tracker()->changes()->size());
383 } 383 }
384 384
385 // Tests that an event observer cannot observe keystrokes. 385 // Tests that an event observer cannot observe keystrokes.
386 TEST_F(WindowTreeTest, SetEventObserverKeyEventsDisallowed) { 386 TEST_F(WindowTreeTest, SetEventObserverKeyEventsDisallowed) {
387 WindowTreeTestApi(wm_tree()).SetEventObserver( 387 WindowTreeTestApi(wm_tree()).SetEventObserver(
388 CreateEventMatcher(mojom::EventType::KEY_PRESSED), 111u); 388 CreateEventMatcher(mojom::EventType::KEY_PRESSED), 111u);
389 ui::KeyEvent key_pressed(ui::ET_KEY_PRESSED, ui::VKEY_A, ui::EF_NONE); 389 ui::KeyEvent key_pressed(ui::ET_KEY_PRESSED, ui::VKEY_A, ui::EF_NONE);
390 DispatchEventAndAckImmediately(key_pressed); 390 DispatchEventAndAckImmediately(key_pressed);
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after
533 EXPECT_TRUE( 533 EXPECT_TRUE(
534 wm_tree()->NewWindow(embed_window_id, ServerWindow::Properties())); 534 wm_tree()->NewWindow(embed_window_id, ServerWindow::Properties()));
535 EXPECT_TRUE(wm_tree()->SetWindowVisibility(embed_window_id, true)); 535 EXPECT_TRUE(wm_tree()->SetWindowVisibility(embed_window_id, true));
536 ASSERT_TRUE(FirstRoot(wm_tree())); 536 ASSERT_TRUE(FirstRoot(wm_tree()));
537 EXPECT_TRUE(wm_tree()->AddWindow(FirstRootId(wm_tree()), embed_window_id)); 537 EXPECT_TRUE(wm_tree()->AddWindow(FirstRootId(wm_tree()), embed_window_id));
538 display()->root_window()->SetBounds(gfx::Rect(0, 0, 100, 100)); 538 display()->root_window()->SetBounds(gfx::Rect(0, 0, 100, 100));
539 539
540 wm_client()->tracker()->changes()->clear(); 540 wm_client()->tracker()->changes()->clear();
541 DispatchEventWithoutAck(CreateMouseMoveEvent(21, 22)); 541 DispatchEventWithoutAck(CreateMouseMoveEvent(21, 22));
542 ASSERT_EQ(1u, wm_client()->tracker()->changes()->size()); 542 ASSERT_EQ(1u, wm_client()->tracker()->changes()->size());
543 EXPECT_EQ("InputEvent window=0,3 event_action=5", 543 EXPECT_EQ("InputEvent window=0,3 event_action=17",
544 ChangesToDescription1(*wm_client()->tracker()->changes())[0]); 544 ChangesToDescription1(*wm_client()->tracker()->changes())[0]);
545 wm_client()->tracker()->changes()->clear(); 545 wm_client()->tracker()->changes()->clear();
546 546
547 // Send another event. This event shouldn't reach the client. 547 // Send another event. This event shouldn't reach the client.
548 DispatchEventWithoutAck(CreateMouseMoveEvent(21, 22)); 548 DispatchEventWithoutAck(CreateMouseMoveEvent(21, 22));
549 ASSERT_EQ(0u, wm_client()->tracker()->changes()->size()); 549 ASSERT_EQ(0u, wm_client()->tracker()->changes()->size());
550 550
551 // Ack the first event. That should trigger the dispatch of the second event. 551 // Ack the first event. That should trigger the dispatch of the second event.
552 AckPreviousEvent(); 552 AckPreviousEvent();
553 ASSERT_EQ(1u, wm_client()->tracker()->changes()->size()); 553 ASSERT_EQ(1u, wm_client()->tracker()->changes()->size());
554 EXPECT_EQ("InputEvent window=0,3 event_action=5", 554 EXPECT_EQ("InputEvent window=0,3 event_action=17",
555 ChangesToDescription1(*wm_client()->tracker()->changes())[0]); 555 ChangesToDescription1(*wm_client()->tracker()->changes())[0]);
556 } 556 }
557 557
558 // Establish client, call NewTopLevelWindow(), make sure get id, and make 558 // Establish client, call NewTopLevelWindow(), make sure get id, and make
559 // sure client paused. 559 // sure client paused.
560 TEST_F(WindowTreeTest, NewTopLevelWindow) { 560 TEST_F(WindowTreeTest, NewTopLevelWindow) {
561 TestWindowManager wm_internal; 561 TestWindowManager wm_internal;
562 set_window_manager_internal(wm_tree(), &wm_internal); 562 set_window_manager_internal(wm_tree(), &wm_internal);
563 563
564 TestWindowTreeBinding* child_binding; 564 TestWindowTreeBinding* child_binding;
(...skipping 429 matching lines...) Expand 10 before | Expand all | Expand 10 after
994 ASSERT_NE(new_opacity, unknown_window.opacity()); 994 ASSERT_NE(new_opacity, unknown_window.opacity());
995 995
996 EXPECT_FALSE(tree->SetWindowOpacity( 996 EXPECT_FALSE(tree->SetWindowOpacity(
997 ClientWindowId(WindowIdToTransportId(window_id)), new_opacity)); 997 ClientWindowId(WindowIdToTransportId(window_id)), new_opacity));
998 EXPECT_NE(new_opacity, unknown_window.opacity()); 998 EXPECT_NE(new_opacity, unknown_window.opacity());
999 } 999 }
1000 1000
1001 } // namespace test 1001 } // namespace test
1002 } // namespace ws 1002 } // namespace ws
1003 } // namespace mus 1003 } // namespace mus
OLDNEW
« no previous file with comments | « components/mus/ws/window_tree_client_unittest.cc ('k') | mash/app_driver/app_driver.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698