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

Side by Side Diff: services/ui/ws/window_manager_state_unittest.cc

Issue 2884463002: Make event-targeting asynchronous in window server. (Closed)
Patch Set: rebase and use EventTargeter Created 3 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
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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/ws/window_manager_state.h" 5 #include "services/ui/ws/window_manager_state.h"
6 6
7 #include <memory> 7 #include <memory>
8 8
9 #include "base/command_line.h"
9 #include "base/macros.h" 10 #include "base/macros.h"
10 #include "base/memory/ptr_util.h" 11 #include "base/memory/ptr_util.h"
11 #include "base/memory/ref_counted.h" 12 #include "base/memory/ref_counted.h"
12 #include "base/test/test_simple_task_runner.h" 13 #include "base/test/test_simple_task_runner.h"
13 #include "base/threading/thread_task_runner_handle.h" 14 #include "base/threading/thread_task_runner_handle.h"
14 #include "services/service_manager/public/interfaces/connector.mojom.h" 15 #include "services/service_manager/public/interfaces/connector.mojom.h"
15 #include "services/ui/common/accelerator_util.h" 16 #include "services/ui/common/accelerator_util.h"
16 #include "services/ui/ws/accelerator.h" 17 #include "services/ui/ws/accelerator.h"
17 #include "services/ui/ws/display.h" 18 #include "services/ui/ws/display.h"
18 #include "services/ui/ws/display_manager.h" 19 #include "services/ui/ws/display_manager.h"
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
93 } 94 }
94 95
95 void DestroyWindowTree() { 96 void DestroyWindowTree() {
96 window_event_targeting_helper_.window_server()->DestroyTree(window_tree_); 97 window_event_targeting_helper_.window_server()->DestroyTree(window_tree_);
97 window_tree_ = nullptr; 98 window_tree_ = nullptr;
98 } 99 }
99 100
100 // testing::Test: 101 // testing::Test:
101 void SetUp() override; 102 void SetUp() override;
102 103
104 protected:
105 // Handles WindowStateManager ack timeouts.
106 scoped_refptr<base::TestSimpleTaskRunner> task_runner_;
107
103 private: 108 private:
104 WindowEventTargetingHelper window_event_targeting_helper_; 109 WindowEventTargetingHelper window_event_targeting_helper_;
105 110
106 WindowManagerState* window_manager_state_; 111 WindowManagerState* window_manager_state_;
107 112
108 // Handles WindowStateManager ack timeouts.
109 scoped_refptr<base::TestSimpleTaskRunner> task_runner_;
110 TestWindowManager window_manager_; 113 TestWindowManager window_manager_;
111 ServerWindow* window_ = nullptr; 114 ServerWindow* window_ = nullptr;
112 WindowTree* window_tree_ = nullptr; 115 WindowTree* window_tree_ = nullptr;
113 TestWindowTreeClient* window_tree_client_ = nullptr; 116 TestWindowTreeClient* window_tree_client_ = nullptr;
114 117
115 DISALLOW_COPY_AND_ASSIGN(WindowManagerStateTest); 118 DISALLOW_COPY_AND_ASSIGN(WindowManagerStateTest);
116 }; 119 };
117 120
118 WindowManagerStateTest::WindowManagerStateTest() 121 WindowManagerStateTest::WindowManagerStateTest()
119 : task_runner_(new base::TestSimpleTaskRunner) {} 122 : task_runner_(new base::TestSimpleTaskRunner) {}
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
171 window_tree_client_->tracker()->changes()->clear(); 174 window_tree_client_->tracker()->changes()->clear();
172 } 175 }
173 176
174 void SetCanFocusUp(ServerWindow* window) { 177 void SetCanFocusUp(ServerWindow* window) {
175 while (window) { 178 while (window) {
176 window->set_can_focus(true); 179 window->set_can_focus(true);
177 window = window->parent(); 180 window = window->parent();
178 } 181 }
179 } 182 }
180 183
184 class WindowManagerStateTestAsync : public WindowManagerStateTest {
185 public:
186 WindowManagerStateTestAsync() {}
187 ~WindowManagerStateTestAsync() override {}
188
189 // WindowManagerStateTest:
190 void SetUp() override {
191 base::CommandLine::ForCurrentProcess()->AppendSwitch(
192 "enable-async-event-targeting");
193 WindowManagerStateTest::SetUp();
194 }
195
196 private:
197 DISALLOW_COPY_AND_ASSIGN(WindowManagerStateTestAsync);
198 };
199
181 // Tests that when an event is dispatched with no accelerator, that post target 200 // Tests that when an event is dispatched with no accelerator, that post target
182 // accelerator is not triggered. 201 // accelerator is not triggered.
183 TEST_F(WindowManagerStateTest, NullAccelerator) { 202 TEST_F(WindowManagerStateTest, NullAccelerator) {
184 WindowManagerState* state = window_manager_state(); 203 WindowManagerState* state = window_manager_state();
185 EXPECT_TRUE(state); 204 EXPECT_TRUE(state);
186 205
187 ServerWindow* target = window(); 206 ServerWindow* target = window();
188 const Display* display = window_tree()->GetDisplay(target); 207 const Display* display = window_tree()->GetDisplay(target);
189 DCHECK(display); 208 DCHECK(display);
190 ui::KeyEvent key(ui::ET_KEY_PRESSED, ui::VKEY_W, ui::EF_CONTROL_DOWN); 209 ui::KeyEvent key(ui::ET_KEY_PRESSED, ui::VKEY_W, ui::EF_CONTROL_DOWN);
(...skipping 501 matching lines...) Expand 10 before | Expand all | Expand 10 after
692 ui::PointerEvent move( 711 ui::PointerEvent move(
693 ui::ET_POINTER_MOVED, gfx::Point(25, 25), gfx::Point(25, 25), 0, 0, 712 ui::ET_POINTER_MOVED, gfx::Point(25, 25), gfx::Point(25, 25), 0, 0,
694 ui::PointerDetails(EventPointerType::POINTER_TYPE_MOUSE, 0), 713 ui::PointerDetails(EventPointerType::POINTER_TYPE_MOUSE, 0),
695 base::TimeTicks()); 714 base::TimeTicks());
696 window_manager_state()->ProcessEvent(move, 0); 715 window_manager_state()->ProcessEvent(move, 0);
697 // The event isn't over a valid target, which should trigger resetting the 716 // The event isn't over a valid target, which should trigger resetting the
698 // cursor to POINTER. 717 // cursor to POINTER.
699 EXPECT_EQ(ui::CursorType::kPointer, cursor_type()); 718 EXPECT_EQ(ui::CursorType::kPointer, cursor_type());
700 } 719 }
701 720
721 TEST_F(WindowManagerStateTestAsync, CursorResetOverNoTargetAsync) {
722 ASSERT_EQ(1u, window_server()->display_manager()->displays().size());
723 const ClientWindowId child_window_id(11);
724 window_tree()->NewWindow(child_window_id, ServerWindow::Properties());
725 ServerWindow* child_window =
726 window_tree()->GetWindowByClientId(child_window_id);
727 window_tree()->AddWindow(FirstRootId(window_tree()), child_window_id);
728 // Setup steps already do hit-test for mouse cursor update so this should go
729 // to the queue in EventDispatcher.
730 EXPECT_TRUE(window_manager_state()
731 ->event_dispatcher()
732 ->event_targeter()
733 ->IsHitTestInFlight());
734 child_window->SetVisible(true);
735 child_window->SetBounds(gfx::Rect(0, 0, 20, 20));
736 child_window->parent()->SetCursor(ui::CursorData(ui::CursorType::kCopy));
737 // Move the mouse outside the bounds of the child, so that the mouse is not
738 // over any valid windows. Cursor should change to POINTER.
739 ui::PointerEvent move(
740 ui::ET_POINTER_MOVED, gfx::Point(25, 25), gfx::Point(25, 25), 0, 0,
741 ui::PointerDetails(EventPointerType::POINTER_TYPE_MOUSE, 0),
742 base::TimeTicks());
743 WindowManagerStateTestApi test_api(window_manager_state());
744 EXPECT_TRUE(test_api.event_queue_empty());
745 window_manager_state()->ProcessEvent(move, 0);
746 // There's no event dispatching in flight but there's hit-test in flight in
747 // EventDispatcher so we still put event processing request into the queue
748 // in WindowManagerState.
749 EXPECT_FALSE(test_api.tree_awaiting_input_ack());
750 EXPECT_TRUE(window_manager_state()
751 ->event_dispatcher()
752 ->event_targeter()
753 ->IsHitTestInFlight());
754 EXPECT_FALSE(test_api.event_queue_empty());
755 task_runner_->RunUntilIdle();
756 EXPECT_TRUE(test_api.event_queue_empty());
757 // The event isn't over a valid target, which should trigger resetting the
758 // cursor to POINTER.
759 EXPECT_EQ(ui::CursorType::kPointer, cursor_type());
760 }
761
702 } // namespace test 762 } // namespace test
703 } // namespace ws 763 } // namespace ws
704 } // namespace ui 764 } // namespace ui
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698