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

Side by Side Diff: services/ui/public/cpp/tests/window_tree_client_unittest.cc

Issue 2125663002: mus: Add watcher for all touch events. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Overload copy assignment operator for Change struct. Created 4 years, 5 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
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 "services/ui/public/cpp/window_tree_client.h" 5 #include "services/ui/public/cpp/window_tree_client.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 8
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/macros.h" 10 #include "base/macros.h"
(...skipping 432 matching lines...) Expand 10 before | Expand all | Expand 10 after
443 WindowTreeSetup setup; 443 WindowTreeSetup setup;
444 Window* root = setup.GetFirstRoot(); 444 Window* root = setup.GetFirstRoot();
445 ASSERT_TRUE(root); 445 ASSERT_TRUE(root);
446 446
447 TestInputEventHandler event_handler; 447 TestInputEventHandler event_handler;
448 root->set_input_event_handler(&event_handler); 448 root->set_input_event_handler(&event_handler);
449 449
450 std::unique_ptr<ui::Event> ui_event( 450 std::unique_ptr<ui::Event> ui_event(
451 new ui::MouseEvent(ui::ET_MOUSE_MOVED, gfx::Point(), gfx::Point(), 451 new ui::MouseEvent(ui::ET_MOUSE_MOVED, gfx::Point(), gfx::Point(),
452 ui::EventTimeForNow(), ui::EF_NONE, 0)); 452 ui::EventTimeForNow(), ui::EF_NONE, 0));
453 mojo::Array<uint32_t> event_observer_ids;
454 event_observer_ids.push_back(0);
453 setup.window_tree_client()->OnWindowInputEvent( 455 setup.window_tree_client()->OnWindowInputEvent(
454 1, server_id(root), ui::Event::Clone(*ui_event.get()), 0); 456 1, server_id(root), ui::Event::Clone(*ui_event.get()),
457 std::move(event_observer_ids));
455 EXPECT_TRUE(event_handler.received_event()); 458 EXPECT_TRUE(event_handler.received_event());
456 EXPECT_TRUE(setup.window_tree()->WasEventAcked(1)); 459 EXPECT_TRUE(setup.window_tree()->WasEventAcked(1));
457 event_handler.Reset(); 460 event_handler.Reset();
458 461
459 event_handler.set_should_manually_ack(); 462 event_handler.set_should_manually_ack();
460 setup.window_tree_client()->OnWindowInputEvent( 463 setup.window_tree_client()->OnWindowInputEvent(
461 33, server_id(root), ui::Event::Clone(*ui_event.get()), 0); 464 33, server_id(root), ui::Event::Clone(*ui_event.get()),
465 std::move(event_observer_ids));
462 EXPECT_TRUE(event_handler.received_event()); 466 EXPECT_TRUE(event_handler.received_event());
463 EXPECT_FALSE(setup.window_tree()->WasEventAcked(33)); 467 EXPECT_FALSE(setup.window_tree()->WasEventAcked(33));
464 468
465 event_handler.AckEvent(); 469 event_handler.AckEvent();
466 EXPECT_TRUE(setup.window_tree()->WasEventAcked(33)); 470 EXPECT_TRUE(setup.window_tree()->WasEventAcked(33));
467 } 471 }
468 472
469 // Tests event observers triggered by events that did not hit a target in this 473 // Tests event observers triggered by events that did not hit a target in this
470 // window tree. 474 // window tree.
471 TEST_F(WindowTreeClientTest, OnEventObserved) { 475 TEST_F(WindowTreeClientTest, OnEventObserved) {
472 WindowTreeSetup setup; 476 WindowTreeSetup setup;
473 Window* root = setup.GetFirstRoot(); 477 Window* root = setup.GetFirstRoot();
474 ASSERT_TRUE(root); 478 ASSERT_TRUE(root);
475 479
476 // Set up an event observer. 480 // Set up an event observer.
477 mojom::EventMatcherPtr matcher = mojom::EventMatcher::New(); 481 mojom::EventMatcherPtr matcher = mojom::EventMatcher::New();
478 matcher->type_matcher = mojom::EventTypeMatcher::New(); 482 matcher->type_matcher = mojom::EventTypeMatcher::New();
479 matcher->type_matcher->type = ui::mojom::EventType::POINTER_DOWN; 483 matcher->type_matcher->type = ui::mojom::EventType::POINTER_DOWN;
480 setup.client()->SetEventObserver(std::move(matcher)); 484 uint32_t observer_id = setup.client()->AddEventObserver(std::move(matcher));
481 485
482 // Simulate the server sending an observed event. 486 // Simulate the server sending an observed event.
483 uint32_t event_observer_id = setup.GetEventObserverId(); 487 uint32_t event_observer_id = setup.GetEventObserverId();
488 mojo::Array<uint32_t> event_observer_ids;
489 event_observer_ids.push_back(event_observer_id);
484 std::unique_ptr<ui::Event> ui_event( 490 std::unique_ptr<ui::Event> ui_event(
485 new ui::MouseEvent(ui::ET_MOUSE_PRESSED, gfx::Point(), gfx::Point(), 491 new ui::MouseEvent(ui::ET_MOUSE_PRESSED, gfx::Point(), gfx::Point(),
486 ui::EventTimeForNow(), ui::EF_CONTROL_DOWN, 0)); 492 ui::EventTimeForNow(), ui::EF_CONTROL_DOWN, 0));
487 setup.window_tree_client()->OnEventObserved(ui::Event::Clone(*ui_event.get()), 493 setup.window_tree_client()->OnEventObserved(ui::Event::Clone(*ui_event.get()),
488 event_observer_id); 494 std::move(event_observer_ids));
489 495
490 // Delegate sensed the event. 496 // Delegate sensed the event.
491 ui::Event* last_event = setup.window_tree_delegate()->last_event_observed(); 497 ui::Event* last_event = setup.window_tree_delegate()->last_event_observed();
492 EXPECT_EQ(ui::ET_MOUSE_PRESSED, last_event->type()); 498 EXPECT_EQ(ui::ET_MOUSE_PRESSED, last_event->type());
493 EXPECT_EQ(ui::EF_CONTROL_DOWN, last_event->flags()); 499 EXPECT_EQ(ui::EF_CONTROL_DOWN, last_event->flags());
494 setup.window_tree_delegate()->Reset(); 500 setup.window_tree_delegate()->Reset();
495 501
496 // Clear the event observer. 502 // Clear the event observer.
497 setup.client()->SetEventObserver(nullptr); 503 setup.client()->RemoveEventObserver(observer_id);
498 504
499 // Simulate another event from the server. 505 // Simulate another event from the server.
500 setup.window_tree_client()->OnEventObserved(ui::Event::Clone(*ui_event.get()), 506 setup.window_tree_client()->OnEventObserved(ui::Event::Clone(*ui_event.get()),
501 event_observer_id); 507 std::move(event_observer_ids));
502 508
503 // No event was sensed. 509 // No event was sensed.
504 EXPECT_FALSE(setup.window_tree_delegate()->last_event_observed()); 510 EXPECT_FALSE(setup.window_tree_delegate()->last_event_observed());
505 } 511 }
506 512
507 // Tests event observers triggered by events that hit this window tree. 513 // Tests event observers triggered by events that hit this window tree.
508 TEST_F(WindowTreeClientTest, OnWindowInputEventWithEventObserver) { 514 TEST_F(WindowTreeClientTest, OnWindowInputEventWithEventObserver) {
509 WindowTreeSetup setup; 515 WindowTreeSetup setup;
510 Window* root = setup.GetFirstRoot(); 516 Window* root = setup.GetFirstRoot();
511 ASSERT_TRUE(root); 517 ASSERT_TRUE(root);
512 518
513 // Set up an event observer. 519 // Set up an event observer.
514 mojom::EventMatcherPtr matcher = mojom::EventMatcher::New(); 520 mojom::EventMatcherPtr matcher = mojom::EventMatcher::New();
515 matcher->type_matcher = mojom::EventTypeMatcher::New(); 521 matcher->type_matcher = mojom::EventTypeMatcher::New();
516 matcher->type_matcher->type = ui::mojom::EventType::POINTER_DOWN; 522 matcher->type_matcher->type = ui::mojom::EventType::POINTER_DOWN;
517 setup.client()->SetEventObserver(std::move(matcher)); 523 setup.client()->AddEventObserver(std::move(matcher));
518 524
519 // Simulate the server dispatching an event that also matched the observer. 525 // Simulate the server dispatching an event that also matched the observer.
520 uint32_t event_observer_id = setup.GetEventObserverId(); 526 uint32_t event_observer_id = setup.GetEventObserverId();
527 mojo::Array<uint32_t> event_observer_ids;
528 event_observer_ids.push_back(event_observer_id);
521 std::unique_ptr<ui::Event> ui_event( 529 std::unique_ptr<ui::Event> ui_event(
522 new ui::MouseEvent(ui::ET_MOUSE_PRESSED, gfx::Point(), gfx::Point(), 530 new ui::MouseEvent(ui::ET_MOUSE_PRESSED, gfx::Point(), gfx::Point(),
523 ui::EventTimeForNow(), ui::EF_CONTROL_DOWN, 0)); 531 ui::EventTimeForNow(), ui::EF_CONTROL_DOWN, 0));
524 setup.window_tree_client()->OnWindowInputEvent( 532 setup.window_tree_client()->OnWindowInputEvent(
525 1, server_id(root), std::move(ui_event), event_observer_id); 533 1, server_id(root), std::move(ui_event), std::move(event_observer_ids));
526 534
527 // Delegate sensed the event. 535 // Delegate sensed the event.
528 ui::Event* last_event = setup.window_tree_delegate()->last_event_observed(); 536 ui::Event* last_event = setup.window_tree_delegate()->last_event_observed();
529 EXPECT_EQ(ui::ET_MOUSE_PRESSED, last_event->type()); 537 EXPECT_EQ(ui::ET_MOUSE_PRESSED, last_event->type());
530 EXPECT_EQ(ui::EF_CONTROL_DOWN, last_event->flags()); 538 EXPECT_EQ(ui::EF_CONTROL_DOWN, last_event->flags());
531 } 539 }
532 540
533 // Tests that replacing an event observer with a new one results in only new 541 // Tests that adding another event observer should observe both events.
534 // events being observed. 542 TEST_F(WindowTreeClientTest, EventObserverMult) {
535 TEST_F(WindowTreeClientTest, EventObserverReplaced) {
536 WindowTreeSetup setup; 543 WindowTreeSetup setup;
537 Window* root = setup.GetFirstRoot(); 544 Window* root = setup.GetFirstRoot();
538 ASSERT_TRUE(root); 545 ASSERT_TRUE(root);
539 546
540 // Set up an event observer. 547 // Set up an event observer.
541 mojom::EventMatcherPtr matcher1 = mojom::EventMatcher::New(); 548 mojom::EventMatcherPtr matcher1 = mojom::EventMatcher::New();
542 matcher1->type_matcher = mojom::EventTypeMatcher::New(); 549 matcher1->type_matcher = mojom::EventTypeMatcher::New();
543 matcher1->type_matcher->type = ui::mojom::EventType::POINTER_DOWN; 550 matcher1->type_matcher->type = ui::mojom::EventType::POINTER_DOWN;
544 setup.client()->SetEventObserver(std::move(matcher1)); 551 setup.client()->AddEventObserver(std::move(matcher1));
545 uint32_t event_observer_id1 = setup.GetEventObserverId(); 552 uint32_t event_observer_id1 = setup.GetEventObserverId();
553 mojo::Array<uint32_t> event_observer_ids1;
554 event_observer_ids1.push_back(event_observer_id1);
546 555
547 // Replace it with a second observer. 556 // Add a second observer.
548 mojom::EventMatcherPtr matcher2 = mojom::EventMatcher::New(); 557 mojom::EventMatcherPtr matcher2 = mojom::EventMatcher::New();
549 matcher2->type_matcher = mojom::EventTypeMatcher::New(); 558 matcher2->type_matcher = mojom::EventTypeMatcher::New();
550 matcher2->type_matcher->type = ui::mojom::EventType::POINTER_UP; 559 matcher2->type_matcher->type = ui::mojom::EventType::POINTER_UP;
551 setup.client()->SetEventObserver(std::move(matcher2)); 560 setup.client()->AddEventObserver(std::move(matcher2));
552 uint32_t event_observer_id2 = setup.GetEventObserverId(); 561 uint32_t event_observer_id2 = setup.GetEventObserverId();
562 mojo::Array<uint32_t> event_observer_ids2;
563 event_observer_ids2.push_back(event_observer_id2);
553 564
554 // Simulate the server sending an observed event that matched the old observer 565 // Simulate the server sending an observed event that matched the old observer
555 // (e.g. that was in-flight when the observer was replaced). 566 // (e.g. that was in-flight when the observer was replaced).
556 std::unique_ptr<ui::Event> pressed_event( 567 std::unique_ptr<ui::Event> pressed_event(
557 new ui::MouseEvent(ui::ET_MOUSE_PRESSED, gfx::Point(), gfx::Point(), 568 new ui::MouseEvent(ui::ET_MOUSE_PRESSED, gfx::Point(), gfx::Point(),
558 ui::EventTimeForNow(), ui::EF_NONE, 0)); 569 ui::EventTimeForNow(), ui::EF_NONE, 0));
559 setup.window_tree_client()->OnEventObserved(std::move(pressed_event), 570 setup.window_tree_client()->OnEventObserved(std::move(pressed_event),
560 event_observer_id1); 571 std::move(event_observer_ids1));
561 572
562 // The event was not sensed, because it does not match the current observer. 573 // The event should be sensed, because it matches the first observer.
563 EXPECT_FALSE(setup.window_tree_delegate()->last_event_observed()); 574 EXPECT_TRUE(setup.window_tree_delegate()->last_event_observed());
575 // The delegate sensed the event.
576 ui::Event* last_event = setup.window_tree_delegate()->last_event_observed();
577 EXPECT_EQ(ui::ET_MOUSE_PRESSED, last_event->type());
578 EXPECT_EQ(ui::EF_NONE, last_event->flags());
564 579
565 // Simulate another event that matches the new observer. 580 // Simulate another event that matches the second observer.
566 std::unique_ptr<ui::Event> released_event( 581 std::unique_ptr<ui::Event> released_event(
567 new ui::MouseEvent(ui::ET_MOUSE_RELEASED, gfx::Point(), gfx::Point(), 582 new ui::MouseEvent(ui::ET_MOUSE_RELEASED, gfx::Point(), gfx::Point(),
568 ui::EventTimeForNow(), ui::EF_CONTROL_DOWN, 0)); 583 ui::EventTimeForNow(), ui::EF_CONTROL_DOWN, 0));
569 setup.window_tree_client()->OnEventObserved(std::move(released_event), 584 setup.window_tree_client()->OnEventObserved(std::move(released_event),
570 event_observer_id2); 585 std::move(event_observer_ids2));
571 586
587 EXPECT_TRUE(setup.window_tree_delegate()->last_event_observed());
572 // The delegate sensed the event. 588 // The delegate sensed the event.
573 ui::Event* last_event = setup.window_tree_delegate()->last_event_observed(); 589 last_event = setup.window_tree_delegate()->last_event_observed();
574 EXPECT_EQ(ui::ET_MOUSE_RELEASED, last_event->type()); 590 EXPECT_EQ(ui::ET_MOUSE_RELEASED, last_event->type());
575 EXPECT_EQ(ui::EF_CONTROL_DOWN, last_event->flags()); 591 EXPECT_EQ(ui::EF_CONTROL_DOWN, last_event->flags());
576 } 592 }
577 593
578 // Verifies focus is reverted if the server replied that the change failed. 594 // Verifies focus is reverted if the server replied that the change failed.
579 TEST_F(WindowTreeClientTest, SetFocusFailed) { 595 TEST_F(WindowTreeClientTest, SetFocusFailed) {
580 WindowTreeSetup setup; 596 WindowTreeSetup setup;
581 Window* root = setup.GetFirstRoot(); 597 Window* root = setup.GetFirstRoot();
582 ASSERT_TRUE(root); 598 ASSERT_TRUE(root);
583 root->SetVisible(true); 599 root->SetVisible(true);
(...skipping 458 matching lines...) Expand 10 before | Expand all | Expand 10 after
1042 1058
1043 // Create a new Window, and attempt to place capture on that. 1059 // Create a new Window, and attempt to place capture on that.
1044 Window* child = setup.client()->NewWindow(); 1060 Window* child = setup.client()->NewWindow();
1045 child->SetVisible(true); 1061 child->SetVisible(true);
1046 root->AddChild(child); 1062 root->AddChild(child);
1047 child->SetCapture(); 1063 child->SetCapture();
1048 EXPECT_TRUE(child->HasCapture()); 1064 EXPECT_TRUE(child->HasCapture());
1049 } 1065 }
1050 1066
1051 } // namespace ui 1067 } // namespace ui
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698