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

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

Issue 2183163002: mus: Change PointerWatcher to observe all pointer events, with moves optional. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Change to use PointerEvent. Created 4 years, 4 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 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
88 88
89 TestWindowTreeClientDelegate* window_tree_delegate() { 89 TestWindowTreeClientDelegate* window_tree_delegate() {
90 return &window_tree_delegate_; 90 return &window_tree_delegate_;
91 } 91 }
92 92
93 Window* GetFirstRoot() { 93 Window* GetFirstRoot() {
94 return client()->GetRoots().empty() ? nullptr 94 return client()->GetRoots().empty() ? nullptr
95 : *client()->GetRoots().begin(); 95 : *client()->GetRoots().begin();
96 } 96 }
97 97
98 uint32_t GetEventObserverId() { 98 uint32_t GetPointerWatcherId() {
99 return WindowTreeClientPrivate(&tree_client_).event_observer_id(); 99 return WindowTreeClientPrivate(&tree_client_).pointer_watcher_id();
100 } 100 }
101 101
102 private: 102 private:
103 TestWindowTree window_tree_; 103 TestWindowTree window_tree_;
104 TestWindowTreeClientDelegate window_tree_delegate_; 104 TestWindowTreeClientDelegate window_tree_delegate_;
105 WindowTreeClient tree_client_; 105 WindowTreeClient tree_client_;
106 106
107 DISALLOW_COPY_AND_ASSIGN(WindowTreeSetup); 107 DISALLOW_COPY_AND_ASSIGN(WindowTreeSetup);
108 }; 108 };
109 109
(...skipping 356 matching lines...) Expand 10 before | Expand all | Expand 10 after
466 EXPECT_TRUE(setup.window_tree()->WasEventAcked(33)); 466 EXPECT_TRUE(setup.window_tree()->WasEventAcked(33));
467 } 467 }
468 468
469 // Tests event observers triggered by events that did not hit a target in this 469 // Tests event observers triggered by events that did not hit a target in this
470 // window tree. 470 // window tree.
471 TEST_F(WindowTreeClientTest, OnEventObserved) { 471 TEST_F(WindowTreeClientTest, OnEventObserved) {
472 WindowTreeSetup setup; 472 WindowTreeSetup setup;
473 Window* root = setup.GetFirstRoot(); 473 Window* root = setup.GetFirstRoot();
474 ASSERT_TRUE(root); 474 ASSERT_TRUE(root);
475 475
476 // Set up an event observer. 476 // Start a pointer watcher for all events excluding move events.
477 mojom::EventMatcherPtr matcher = mojom::EventMatcher::New(); 477 setup.client()->StartPointerWatcher(false /* want_moves */);
478 matcher->type_matcher = mojom::EventTypeMatcher::New();
479 matcher->type_matcher->type = ui::mojom::EventType::POINTER_DOWN;
480 setup.client()->SetEventObserver(std::move(matcher));
481 478
482 // Simulate the server sending an observed event. 479 // Simulate the server sending an observed event.
483 uint32_t event_observer_id = setup.GetEventObserverId(); 480 uint32_t pointer_watcher_id = setup.GetPointerWatcherId();
484 std::unique_ptr<ui::Event> ui_event( 481 std::unique_ptr<ui::Event> ui_event(
485 new ui::MouseEvent(ui::ET_MOUSE_PRESSED, gfx::Point(), gfx::Point(), 482 new ui::MouseEvent(ui::ET_MOUSE_PRESSED, gfx::Point(), gfx::Point(),
James Cook 2016/07/27 01:54:01 Change all these test events to PointerEvents, sin
riajiang 2016/07/27 22:39:16 Done.
486 ui::EventTimeForNow(), ui::EF_CONTROL_DOWN, 0)); 483 ui::EventTimeForNow(), ui::EF_CONTROL_DOWN, 0));
487 setup.window_tree_client()->OnEventObserved(ui::Event::Clone(*ui_event.get()), 484 setup.window_tree_client()->OnEventObserved(ui::Event::Clone(*ui_event.get()),
488 event_observer_id); 485 pointer_watcher_id);
489 486
490 // Delegate sensed the event. 487 // Delegate sensed the event.
491 ui::Event* last_event = setup.window_tree_delegate()->last_event_observed(); 488 ui::Event* last_event = setup.window_tree_delegate()->last_event_observed();
492 EXPECT_EQ(ui::ET_MOUSE_PRESSED, last_event->type()); 489 EXPECT_EQ(ui::ET_MOUSE_PRESSED, last_event->type());
493 EXPECT_EQ(ui::EF_CONTROL_DOWN, last_event->flags()); 490 EXPECT_EQ(ui::EF_CONTROL_DOWN, last_event->flags());
494 setup.window_tree_delegate()->Reset(); 491 setup.window_tree_delegate()->Reset();
495 492
496 // Clear the event observer. 493 // Stop the pointer watcher.
497 setup.client()->SetEventObserver(nullptr); 494 setup.client()->StopPointerWatcher();
498 495
499 // Simulate another event from the server. 496 // Simulate another event from the server.
500 setup.window_tree_client()->OnEventObserved(ui::Event::Clone(*ui_event.get()), 497 setup.window_tree_client()->OnEventObserved(ui::Event::Clone(*ui_event.get()),
501 event_observer_id); 498 pointer_watcher_id);
502 499
503 // No event was sensed. 500 // No event was sensed.
504 EXPECT_FALSE(setup.window_tree_delegate()->last_event_observed()); 501 EXPECT_FALSE(setup.window_tree_delegate()->last_event_observed());
505 } 502 }
506 503
507 // Tests event observers triggered by events that hit this window tree. 504 // Tests event observers triggered by events that hit this window tree.
508 TEST_F(WindowTreeClientTest, OnWindowInputEventWithEventObserver) { 505 TEST_F(WindowTreeClientTest, OnWindowInputEventWithEventObserver) {
509 WindowTreeSetup setup; 506 WindowTreeSetup setup;
510 Window* root = setup.GetFirstRoot(); 507 Window* root = setup.GetFirstRoot();
511 ASSERT_TRUE(root); 508 ASSERT_TRUE(root);
512 509
513 // Set up an event observer. 510 // Start a pointer watcher for all events excluding move events.
514 mojom::EventMatcherPtr matcher = mojom::EventMatcher::New(); 511 setup.client()->StartPointerWatcher(false /* want_moves */);
515 matcher->type_matcher = mojom::EventTypeMatcher::New();
516 matcher->type_matcher->type = ui::mojom::EventType::POINTER_DOWN;
517 setup.client()->SetEventObserver(std::move(matcher));
518 512
519 // Simulate the server dispatching an event that also matched the observer. 513 // Simulate the server dispatching an event that also matched the observer.
520 uint32_t event_observer_id = setup.GetEventObserverId(); 514 uint32_t pointer_watcher_id = setup.GetPointerWatcherId();
521 std::unique_ptr<ui::Event> ui_event( 515 std::unique_ptr<ui::Event> ui_event(
522 new ui::MouseEvent(ui::ET_MOUSE_PRESSED, gfx::Point(), gfx::Point(), 516 new ui::MouseEvent(ui::ET_MOUSE_PRESSED, gfx::Point(), gfx::Point(),
523 ui::EventTimeForNow(), ui::EF_CONTROL_DOWN, 0)); 517 ui::EventTimeForNow(), ui::EF_CONTROL_DOWN, 0));
524 setup.window_tree_client()->OnWindowInputEvent( 518 setup.window_tree_client()->OnWindowInputEvent(
525 1, server_id(root), std::move(ui_event), event_observer_id); 519 1, server_id(root), std::move(ui_event), pointer_watcher_id);
526 520
527 // Delegate sensed the event. 521 // Delegate sensed the event.
528 ui::Event* last_event = setup.window_tree_delegate()->last_event_observed(); 522 ui::Event* last_event = setup.window_tree_delegate()->last_event_observed();
529 EXPECT_EQ(ui::ET_MOUSE_PRESSED, last_event->type()); 523 EXPECT_EQ(ui::ET_MOUSE_PRESSED, last_event->type());
530 EXPECT_EQ(ui::EF_CONTROL_DOWN, last_event->flags()); 524 EXPECT_EQ(ui::EF_CONTROL_DOWN, last_event->flags());
531 } 525 }
532 526
533 // Tests that replacing an event observer with a new one results in only new 527 // Tests that replacing a pointer watcher with a new one that has different
534 // events being observed. 528 // |want_moves| values results in only new events being observed.
535 TEST_F(WindowTreeClientTest, EventObserverReplaced) { 529 TEST_F(WindowTreeClientTest, EventObserverReplaced) {
536 WindowTreeSetup setup; 530 WindowTreeSetup setup;
537 Window* root = setup.GetFirstRoot(); 531 Window* root = setup.GetFirstRoot();
538 ASSERT_TRUE(root); 532 ASSERT_TRUE(root);
539 533
540 // Set up an event observer. 534 // Start a pointer watcher for all events excluding move events.
541 mojom::EventMatcherPtr matcher1 = mojom::EventMatcher::New(); 535 setup.client()->StartPointerWatcher(false /* want_moves */);
542 matcher1->type_matcher = mojom::EventTypeMatcher::New(); 536 uint32_t pointer_watcher_id1 = setup.GetPointerWatcherId();
543 matcher1->type_matcher->type = ui::mojom::EventType::POINTER_DOWN;
544 setup.client()->SetEventObserver(std::move(matcher1));
545 uint32_t event_observer_id1 = setup.GetEventObserverId();
546 537
547 // Replace it with a second observer. 538 // Replace it with a second watcher that also watches for move events.
548 mojom::EventMatcherPtr matcher2 = mojom::EventMatcher::New(); 539 setup.client()->StartPointerWatcher(true /* want_moves */);
549 matcher2->type_matcher = mojom::EventTypeMatcher::New(); 540 uint32_t pointer_watcher_id2 = setup.GetPointerWatcherId();
550 matcher2->type_matcher->type = ui::mojom::EventType::POINTER_UP;
551 setup.client()->SetEventObserver(std::move(matcher2));
552 uint32_t event_observer_id2 = setup.GetEventObserverId();
553 541
554 // Simulate the server sending an observed event that matched the old observer 542 // Simulate the server sending an observed event that matched the old watcher
555 // (e.g. that was in-flight when the observer was replaced). 543 // (e.g. that was in-flight when the observer was replaced).
556 std::unique_ptr<ui::Event> pressed_event( 544 std::unique_ptr<ui::Event> pressed_event(
557 new ui::MouseEvent(ui::ET_MOUSE_PRESSED, gfx::Point(), gfx::Point(), 545 new ui::MouseEvent(ui::ET_MOUSE_PRESSED, gfx::Point(), gfx::Point(),
558 ui::EventTimeForNow(), ui::EF_NONE, 0)); 546 ui::EventTimeForNow(), ui::EF_NONE, 0));
559 setup.window_tree_client()->OnEventObserved(std::move(pressed_event), 547 setup.window_tree_client()->OnEventObserved(std::move(pressed_event),
560 event_observer_id1); 548 pointer_watcher_id1);
561 549
562 // The event was not sensed, because it does not match the current observer. 550 // The event was not sensed, because it does not match the current watcher.
563 EXPECT_FALSE(setup.window_tree_delegate()->last_event_observed()); 551 EXPECT_FALSE(setup.window_tree_delegate()->last_event_observed());
564 552
565 // Simulate another event that matches the new observer. 553 // Simulate another event that matches the new watcher.
566 std::unique_ptr<ui::Event> released_event( 554 std::unique_ptr<ui::Event> moved_event(
567 new ui::MouseEvent(ui::ET_MOUSE_RELEASED, gfx::Point(), gfx::Point(), 555 new ui::MouseEvent(ui::ET_MOUSE_MOVED, gfx::Point(), gfx::Point(),
568 ui::EventTimeForNow(), ui::EF_CONTROL_DOWN, 0)); 556 ui::EventTimeForNow(), ui::EF_CONTROL_DOWN, 0));
569 setup.window_tree_client()->OnEventObserved(std::move(released_event), 557 setup.window_tree_client()->OnEventObserved(std::move(moved_event),
570 event_observer_id2); 558 pointer_watcher_id2);
571 559
572 // The delegate sensed the event. 560 // The delegate sensed the event.
573 ui::Event* last_event = setup.window_tree_delegate()->last_event_observed(); 561 ui::Event* last_event = setup.window_tree_delegate()->last_event_observed();
574 EXPECT_EQ(ui::ET_MOUSE_RELEASED, last_event->type()); 562 EXPECT_EQ(ui::ET_MOUSE_MOVED, last_event->type());
575 EXPECT_EQ(ui::EF_CONTROL_DOWN, last_event->flags()); 563 EXPECT_EQ(ui::EF_CONTROL_DOWN, last_event->flags());
576 } 564 }
577 565
578 // Verifies focus is reverted if the server replied that the change failed. 566 // Verifies focus is reverted if the server replied that the change failed.
579 TEST_F(WindowTreeClientTest, SetFocusFailed) { 567 TEST_F(WindowTreeClientTest, SetFocusFailed) {
580 WindowTreeSetup setup; 568 WindowTreeSetup setup;
581 Window* root = setup.GetFirstRoot(); 569 Window* root = setup.GetFirstRoot();
582 ASSERT_TRUE(root); 570 ASSERT_TRUE(root);
583 root->SetVisible(true); 571 root->SetVisible(true);
584 Window* child = setup.client()->NewWindow(); 572 Window* child = setup.client()->NewWindow();
(...skipping 457 matching lines...) Expand 10 before | Expand all | Expand 10 after
1042 1030
1043 // Create a new Window, and attempt to place capture on that. 1031 // Create a new Window, and attempt to place capture on that.
1044 Window* child = setup.client()->NewWindow(); 1032 Window* child = setup.client()->NewWindow();
1045 child->SetVisible(true); 1033 child->SetVisible(true);
1046 root->AddChild(child); 1034 root->AddChild(child);
1047 child->SetCapture(); 1035 child->SetCapture();
1048 EXPECT_TRUE(child->HasCapture()); 1036 EXPECT_TRUE(child->HasCapture());
1049 } 1037 }
1050 1038
1051 } // namespace ui 1039 } // namespace ui
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698