OLD | NEW |
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 "components/mus/public/cpp/window_tree_client.h" | 5 #include "components/mus/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 434 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
445 Window* root = setup.GetFirstRoot(); | 445 Window* root = setup.GetFirstRoot(); |
446 ASSERT_TRUE(root); | 446 ASSERT_TRUE(root); |
447 | 447 |
448 TestInputEventHandler event_handler; | 448 TestInputEventHandler event_handler; |
449 root->set_input_event_handler(&event_handler); | 449 root->set_input_event_handler(&event_handler); |
450 | 450 |
451 std::unique_ptr<ui::Event> ui_event( | 451 std::unique_ptr<ui::Event> ui_event( |
452 new ui::MouseEvent(ui::ET_MOUSE_MOVED, gfx::Point(), gfx::Point(), | 452 new ui::MouseEvent(ui::ET_MOUSE_MOVED, gfx::Point(), gfx::Point(), |
453 ui::EventTimeForNow(), ui::EF_NONE, 0)); | 453 ui::EventTimeForNow(), ui::EF_NONE, 0)); |
454 setup.window_tree_client()->OnWindowInputEvent( | 454 setup.window_tree_client()->OnWindowInputEvent( |
455 1, server_id(root), mojom::Event::From(*ui_event.get()), 0); | 455 1, server_id(root), ui::Event::Clone(*ui_event.get()), 0); |
456 EXPECT_TRUE(event_handler.received_event()); | 456 EXPECT_TRUE(event_handler.received_event()); |
457 EXPECT_TRUE(setup.window_tree()->WasEventAcked(1)); | 457 EXPECT_TRUE(setup.window_tree()->WasEventAcked(1)); |
458 event_handler.Reset(); | 458 event_handler.Reset(); |
459 | 459 |
460 event_handler.set_should_manually_ack(); | 460 event_handler.set_should_manually_ack(); |
461 setup.window_tree_client()->OnWindowInputEvent( | 461 setup.window_tree_client()->OnWindowInputEvent( |
462 33, server_id(root), mojom::Event::From(*ui_event.get()), 0); | 462 33, server_id(root), ui::Event::Clone(*ui_event.get()), 0); |
463 EXPECT_TRUE(event_handler.received_event()); | 463 EXPECT_TRUE(event_handler.received_event()); |
464 EXPECT_FALSE(setup.window_tree()->WasEventAcked(33)); | 464 EXPECT_FALSE(setup.window_tree()->WasEventAcked(33)); |
465 | 465 |
466 event_handler.AckEvent(); | 466 event_handler.AckEvent(); |
467 EXPECT_TRUE(setup.window_tree()->WasEventAcked(33)); | 467 EXPECT_TRUE(setup.window_tree()->WasEventAcked(33)); |
468 } | 468 } |
469 | 469 |
470 // Tests event observers triggered by events that did not hit a target in this | 470 // Tests event observers triggered by events that did not hit a target in this |
471 // window tree. | 471 // window tree. |
472 TEST_F(WindowTreeClientTest, OnEventObserved) { | 472 TEST_F(WindowTreeClientTest, OnEventObserved) { |
473 WindowTreeSetup setup; | 473 WindowTreeSetup setup; |
474 Window* root = setup.GetFirstRoot(); | 474 Window* root = setup.GetFirstRoot(); |
475 ASSERT_TRUE(root); | 475 ASSERT_TRUE(root); |
476 | 476 |
477 // Set up an event observer. | 477 // Set up an event observer. |
478 mojom::EventMatcherPtr matcher = mojom::EventMatcher::New(); | 478 mojom::EventMatcherPtr matcher = mojom::EventMatcher::New(); |
479 matcher->type_matcher = mojom::EventTypeMatcher::New(); | 479 matcher->type_matcher = mojom::EventTypeMatcher::New(); |
480 matcher->type_matcher->type = mojom::EventType::POINTER_DOWN; | 480 matcher->type_matcher->type = mojom::EventType::POINTER_DOWN; |
481 setup.client()->SetEventObserver(std::move(matcher)); | 481 setup.client()->SetEventObserver(std::move(matcher)); |
482 | 482 |
483 // Simulate the server sending an observed event. | 483 // Simulate the server sending an observed event. |
484 uint32_t event_observer_id = setup.GetEventObserverId(); | 484 uint32_t event_observer_id = setup.GetEventObserverId(); |
485 std::unique_ptr<ui::Event> ui_event( | 485 std::unique_ptr<ui::Event> ui_event( |
486 new ui::MouseEvent(ui::ET_MOUSE_PRESSED, gfx::Point(), gfx::Point(), | 486 new ui::MouseEvent(ui::ET_MOUSE_PRESSED, gfx::Point(), gfx::Point(), |
487 ui::EventTimeForNow(), ui::EF_CONTROL_DOWN, 0)); | 487 ui::EventTimeForNow(), ui::EF_CONTROL_DOWN, 0)); |
488 setup.window_tree_client()->OnEventObserved( | 488 setup.window_tree_client()->OnEventObserved(ui::Event::Clone(*ui_event.get()), |
489 mojom::Event::From(*ui_event.get()), event_observer_id); | 489 event_observer_id); |
490 | 490 |
491 // Delegate sensed the event. | 491 // Delegate sensed the event. |
492 ui::Event* last_event = setup.window_tree_delegate()->last_event_observed(); | 492 ui::Event* last_event = setup.window_tree_delegate()->last_event_observed(); |
493 EXPECT_EQ(ui::ET_MOUSE_PRESSED, last_event->type()); | 493 EXPECT_EQ(ui::ET_MOUSE_PRESSED, last_event->type()); |
494 EXPECT_EQ(ui::EF_CONTROL_DOWN, last_event->flags()); | 494 EXPECT_EQ(ui::EF_CONTROL_DOWN, last_event->flags()); |
495 setup.window_tree_delegate()->Reset(); | 495 setup.window_tree_delegate()->Reset(); |
496 | 496 |
497 // Clear the event observer. | 497 // Clear the event observer. |
498 setup.client()->SetEventObserver(nullptr); | 498 setup.client()->SetEventObserver(nullptr); |
499 | 499 |
500 // Simulate another event from the server. | 500 // Simulate another event from the server. |
501 setup.window_tree_client()->OnEventObserved( | 501 setup.window_tree_client()->OnEventObserved(ui::Event::Clone(*ui_event.get()), |
502 mojom::Event::From(*ui_event.get()), event_observer_id); | 502 event_observer_id); |
503 | 503 |
504 // No event was sensed. | 504 // No event was sensed. |
505 EXPECT_FALSE(setup.window_tree_delegate()->last_event_observed()); | 505 EXPECT_FALSE(setup.window_tree_delegate()->last_event_observed()); |
506 } | 506 } |
507 | 507 |
508 // Tests event observers triggered by events that hit this window tree. | 508 // Tests event observers triggered by events that hit this window tree. |
509 TEST_F(WindowTreeClientTest, OnWindowInputEventWithEventObserver) { | 509 TEST_F(WindowTreeClientTest, OnWindowInputEventWithEventObserver) { |
510 WindowTreeSetup setup; | 510 WindowTreeSetup setup; |
511 Window* root = setup.GetFirstRoot(); | 511 Window* root = setup.GetFirstRoot(); |
512 ASSERT_TRUE(root); | 512 ASSERT_TRUE(root); |
513 | 513 |
514 // Set up an event observer. | 514 // Set up an event observer. |
515 mojom::EventMatcherPtr matcher = mojom::EventMatcher::New(); | 515 mojom::EventMatcherPtr matcher = mojom::EventMatcher::New(); |
516 matcher->type_matcher = mojom::EventTypeMatcher::New(); | 516 matcher->type_matcher = mojom::EventTypeMatcher::New(); |
517 matcher->type_matcher->type = mojom::EventType::POINTER_DOWN; | 517 matcher->type_matcher->type = mojom::EventType::POINTER_DOWN; |
518 setup.client()->SetEventObserver(std::move(matcher)); | 518 setup.client()->SetEventObserver(std::move(matcher)); |
519 | 519 |
520 // Simulate the server dispatching an event that also matched the observer. | 520 // Simulate the server dispatching an event that also matched the observer. |
521 uint32_t event_observer_id = setup.GetEventObserverId(); | 521 uint32_t event_observer_id = setup.GetEventObserverId(); |
522 std::unique_ptr<ui::Event> ui_event( | 522 std::unique_ptr<ui::Event> ui_event( |
523 new ui::MouseEvent(ui::ET_MOUSE_PRESSED, gfx::Point(), gfx::Point(), | 523 new ui::MouseEvent(ui::ET_MOUSE_PRESSED, gfx::Point(), gfx::Point(), |
524 ui::EventTimeForNow(), ui::EF_CONTROL_DOWN, 0)); | 524 ui::EventTimeForNow(), ui::EF_CONTROL_DOWN, 0)); |
525 setup.window_tree_client()->OnWindowInputEvent( | 525 setup.window_tree_client()->OnWindowInputEvent( |
526 1, server_id(root), mojom::Event::From(*ui_event.get()), | 526 1, server_id(root), std::move(ui_event), event_observer_id); |
527 event_observer_id); | |
528 | 527 |
529 // Delegate sensed the event. | 528 // Delegate sensed the event. |
530 ui::Event* last_event = setup.window_tree_delegate()->last_event_observed(); | 529 ui::Event* last_event = setup.window_tree_delegate()->last_event_observed(); |
531 EXPECT_EQ(ui::ET_MOUSE_PRESSED, last_event->type()); | 530 EXPECT_EQ(ui::ET_MOUSE_PRESSED, last_event->type()); |
532 EXPECT_EQ(ui::EF_CONTROL_DOWN, last_event->flags()); | 531 EXPECT_EQ(ui::EF_CONTROL_DOWN, last_event->flags()); |
533 } | 532 } |
534 | 533 |
535 // Tests that replacing an event observer with a new one results in only new | 534 // Tests that replacing an event observer with a new one results in only new |
536 // events being observed. | 535 // events being observed. |
537 TEST_F(WindowTreeClientTest, EventObserverReplaced) { | 536 TEST_F(WindowTreeClientTest, EventObserverReplaced) { |
(...skipping 13 matching lines...) Expand all Loading... |
551 matcher2->type_matcher = mojom::EventTypeMatcher::New(); | 550 matcher2->type_matcher = mojom::EventTypeMatcher::New(); |
552 matcher2->type_matcher->type = mojom::EventType::POINTER_UP; | 551 matcher2->type_matcher->type = mojom::EventType::POINTER_UP; |
553 setup.client()->SetEventObserver(std::move(matcher2)); | 552 setup.client()->SetEventObserver(std::move(matcher2)); |
554 uint32_t event_observer_id2 = setup.GetEventObserverId(); | 553 uint32_t event_observer_id2 = setup.GetEventObserverId(); |
555 | 554 |
556 // Simulate the server sending an observed event that matched the old observer | 555 // Simulate the server sending an observed event that matched the old observer |
557 // (e.g. that was in-flight when the observer was replaced). | 556 // (e.g. that was in-flight when the observer was replaced). |
558 std::unique_ptr<ui::Event> pressed_event( | 557 std::unique_ptr<ui::Event> pressed_event( |
559 new ui::MouseEvent(ui::ET_MOUSE_PRESSED, gfx::Point(), gfx::Point(), | 558 new ui::MouseEvent(ui::ET_MOUSE_PRESSED, gfx::Point(), gfx::Point(), |
560 ui::EventTimeForNow(), ui::EF_NONE, 0)); | 559 ui::EventTimeForNow(), ui::EF_NONE, 0)); |
561 setup.window_tree_client()->OnEventObserved( | 560 setup.window_tree_client()->OnEventObserved(std::move(pressed_event), |
562 mojom::Event::From(*pressed_event.get()), event_observer_id1); | 561 event_observer_id1); |
563 | 562 |
564 // The event was not sensed, because it does not match the current observer. | 563 // The event was not sensed, because it does not match the current observer. |
565 EXPECT_FALSE(setup.window_tree_delegate()->last_event_observed()); | 564 EXPECT_FALSE(setup.window_tree_delegate()->last_event_observed()); |
566 | 565 |
567 // Simulate another event that matches the new observer. | 566 // Simulate another event that matches the new observer. |
568 std::unique_ptr<ui::Event> released_event( | 567 std::unique_ptr<ui::Event> released_event( |
569 new ui::MouseEvent(ui::ET_MOUSE_RELEASED, gfx::Point(), gfx::Point(), | 568 new ui::MouseEvent(ui::ET_MOUSE_RELEASED, gfx::Point(), gfx::Point(), |
570 ui::EventTimeForNow(), ui::EF_CONTROL_DOWN, 0)); | 569 ui::EventTimeForNow(), ui::EF_CONTROL_DOWN, 0)); |
571 setup.window_tree_client()->OnEventObserved( | 570 setup.window_tree_client()->OnEventObserved(std::move(released_event), |
572 mojom::Event::From(*released_event.get()), event_observer_id2); | 571 event_observer_id2); |
573 | 572 |
574 // The delegate sensed the event. | 573 // The delegate sensed the event. |
575 ui::Event* last_event = setup.window_tree_delegate()->last_event_observed(); | 574 ui::Event* last_event = setup.window_tree_delegate()->last_event_observed(); |
576 EXPECT_EQ(ui::ET_MOUSE_RELEASED, last_event->type()); | 575 EXPECT_EQ(ui::ET_MOUSE_RELEASED, last_event->type()); |
577 EXPECT_EQ(ui::EF_CONTROL_DOWN, last_event->flags()); | 576 EXPECT_EQ(ui::EF_CONTROL_DOWN, last_event->flags()); |
578 } | 577 } |
579 | 578 |
580 // Verifies focus is reverted if the server replied that the change failed. | 579 // Verifies focus is reverted if the server replied that the change failed. |
581 TEST_F(WindowTreeClientTest, SetFocusFailed) { | 580 TEST_F(WindowTreeClientTest, SetFocusFailed) { |
582 WindowTreeSetup setup; | 581 WindowTreeSetup setup; |
(...skipping 461 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1044 | 1043 |
1045 // Create a new Window, and attempt to place capture on that. | 1044 // Create a new Window, and attempt to place capture on that. |
1046 Window* child = setup.client()->NewWindow(); | 1045 Window* child = setup.client()->NewWindow(); |
1047 child->SetVisible(true); | 1046 child->SetVisible(true); |
1048 root->AddChild(child); | 1047 root->AddChild(child); |
1049 child->SetCapture(); | 1048 child->SetCapture(); |
1050 EXPECT_TRUE(child->HasCapture()); | 1049 EXPECT_TRUE(child->HasCapture()); |
1051 } | 1050 } |
1052 | 1051 |
1053 } // namespace mus | 1052 } // namespace mus |
OLD | NEW |