OLD | NEW |
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 <stdint.h> | 5 #include <stdint.h> |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 | 8 |
9 #include "base/macros.h" | 9 #include "base/macros.h" |
10 #include "base/message_loop/message_loop.h" | 10 #include "base/message_loop/message_loop.h" |
(...skipping 15 matching lines...) Expand all Loading... |
26 #include "components/mus/ws/window_tree_binding.h" | 26 #include "components/mus/ws/window_tree_binding.h" |
27 #include "testing/gtest/include/gtest/gtest.h" | 27 #include "testing/gtest/include/gtest/gtest.h" |
28 #include "ui/events/event.h" | 28 #include "ui/events/event.h" |
29 #include "ui/gfx/geometry/rect.h" | 29 #include "ui/gfx/geometry/rect.h" |
30 | 30 |
31 namespace mus { | 31 namespace mus { |
32 namespace ws { | 32 namespace ws { |
33 namespace test { | 33 namespace test { |
34 namespace { | 34 namespace { |
35 | 35 |
| 36 const UserId kTestId1 = "2"; |
| 37 const UserId kTestId2 = "21"; |
| 38 |
36 ClientWindowId ClientWindowIdForFirstRoot(WindowTree* tree) { | 39 ClientWindowId ClientWindowIdForFirstRoot(WindowTree* tree) { |
37 if (tree->roots().empty()) | 40 if (tree->roots().empty()) |
38 return ClientWindowId(); | 41 return ClientWindowId(); |
39 return ClientWindowIdForWindow(tree, *tree->roots().begin()); | 42 return ClientWindowIdForWindow(tree, *tree->roots().begin()); |
40 } | 43 } |
41 | 44 |
42 WindowManagerState* GetWindowManagerStateForUser(Display* display, | 45 WindowManagerState* GetWindowManagerStateForUser(Display* display, |
43 const UserId& user_id) { | 46 const UserId& user_id) { |
44 WindowManagerDisplayRoot* display_root = | 47 WindowManagerDisplayRoot* display_root = |
45 display->GetWindowManagerDisplayRootForUser(user_id); | 48 display->GetWindowManagerDisplayRootForUser(user_id); |
46 return display_root ? display_root->window_manager_state() : nullptr; | 49 return display_root ? display_root->window_manager_state() : nullptr; |
47 } | 50 } |
48 | 51 |
49 } // namespace | 52 } // namespace |
50 | 53 |
51 // ----------------------------------------------------------------------------- | 54 // ----------------------------------------------------------------------------- |
52 | 55 |
53 class DisplayTest : public testing::Test { | 56 class DisplayTest : public testing::Test { |
54 public: | 57 public: |
55 DisplayTest() : cursor_id_(0), platform_display_factory_(&cursor_id_) {} | 58 DisplayTest() : cursor_id_(0), platform_display_factory_(&cursor_id_) {} |
56 ~DisplayTest() override {} | 59 ~DisplayTest() override {} |
57 | 60 |
58 protected: | 61 protected: |
59 // testing::Test: | 62 // testing::Test: |
60 void SetUp() override { | 63 void SetUp() override { |
61 PlatformDisplay::set_factory_for_testing(&platform_display_factory_); | 64 PlatformDisplay::set_factory_for_testing(&platform_display_factory_); |
62 window_server_.reset(new WindowServer(&window_server_delegate_, | 65 window_server_.reset(new WindowServer(&window_server_delegate_, |
63 scoped_refptr<SurfacesState>())); | 66 scoped_refptr<SurfacesState>())); |
64 window_server_delegate_.set_window_server(window_server_.get()); | 67 window_server_delegate_.set_window_server(window_server_.get()); |
| 68 window_server_->user_id_tracker()->AddUserId(kTestId1); |
| 69 window_server_->user_id_tracker()->AddUserId(kTestId2); |
65 } | 70 } |
66 | 71 |
67 protected: | 72 protected: |
68 int32_t cursor_id_; | 73 int32_t cursor_id_; |
69 TestPlatformDisplayFactory platform_display_factory_; | 74 TestPlatformDisplayFactory platform_display_factory_; |
70 TestWindowServerDelegate window_server_delegate_; | 75 TestWindowServerDelegate window_server_delegate_; |
71 std::unique_ptr<WindowServer> window_server_; | 76 std::unique_ptr<WindowServer> window_server_; |
72 base::MessageLoop message_loop_; | 77 base::MessageLoop message_loop_; |
73 | 78 |
74 private: | 79 private: |
75 DISALLOW_COPY_AND_ASSIGN(DisplayTest); | 80 DISALLOW_COPY_AND_ASSIGN(DisplayTest); |
76 }; | 81 }; |
77 | 82 |
78 TEST_F(DisplayTest, CallsCreateDefaultDisplays) { | 83 TEST_F(DisplayTest, CallsCreateDefaultDisplays) { |
79 const int kNumHostsToCreate = 2; | 84 const int kNumHostsToCreate = 2; |
80 window_server_delegate_.set_num_displays_to_create(kNumHostsToCreate); | 85 window_server_delegate_.set_num_displays_to_create(kNumHostsToCreate); |
81 | 86 |
82 const UserId kTestId1 = "2"; | |
83 const UserId kTestId2 = "21"; | |
84 DisplayManager* display_manager = window_server_->display_manager(); | 87 DisplayManager* display_manager = window_server_->display_manager(); |
85 WindowManagerWindowTreeFactorySetTestApi( | 88 WindowManagerWindowTreeFactorySetTestApi( |
86 window_server_->window_manager_window_tree_factory_set()) | 89 window_server_->window_manager_window_tree_factory_set()) |
87 .Add(kTestId1); | 90 .Add(kTestId1); |
88 // The first register should trigger creation of the default | 91 // The first register should trigger creation of the default |
89 // Displays. There should be kNumHostsToCreate Displays. | 92 // Displays. There should be kNumHostsToCreate Displays. |
90 EXPECT_EQ(static_cast<size_t>(kNumHostsToCreate), | 93 EXPECT_EQ(static_cast<size_t>(kNumHostsToCreate), |
91 display_manager->displays().size()); | 94 display_manager->displays().size()); |
92 | 95 |
93 // Each host should have a WindowManagerState for kTestId1. | 96 // Each host should have a WindowManagerState for kTestId1. |
(...skipping 17 matching lines...) Expand all Loading... |
111 ASSERT_TRUE(root2); | 114 ASSERT_TRUE(root2); |
112 // Verify the two states have different roots. | 115 // Verify the two states have different roots. |
113 EXPECT_NE(root1, root2); | 116 EXPECT_NE(root1, root2); |
114 EXPECT_NE(root1->root(), root2->root()); | 117 EXPECT_NE(root1->root(), root2->root()); |
115 } | 118 } |
116 } | 119 } |
117 | 120 |
118 TEST_F(DisplayTest, Destruction) { | 121 TEST_F(DisplayTest, Destruction) { |
119 window_server_delegate_.set_num_displays_to_create(1); | 122 window_server_delegate_.set_num_displays_to_create(1); |
120 | 123 |
121 const UserId kTestId1 = "2"; | |
122 const UserId kTestId2 = "21"; | |
123 WindowManagerWindowTreeFactorySetTestApi( | 124 WindowManagerWindowTreeFactorySetTestApi( |
124 window_server_->window_manager_window_tree_factory_set()) | 125 window_server_->window_manager_window_tree_factory_set()) |
125 .Add(kTestId1); | 126 .Add(kTestId1); |
126 | 127 |
127 // Add another registry, should trigger creation of another wm. | 128 // Add another registry, should trigger creation of another wm. |
128 DisplayManager* display_manager = window_server_->display_manager(); | 129 DisplayManager* display_manager = window_server_->display_manager(); |
129 WindowManagerWindowTreeFactorySetTestApi( | 130 WindowManagerWindowTreeFactorySetTestApi( |
130 window_server_->window_manager_window_tree_factory_set()) | 131 window_server_->window_manager_window_tree_factory_set()) |
131 .Add(kTestId2); | 132 .Add(kTestId2); |
132 ASSERT_EQ(1u, display_manager->displays().size()); | 133 ASSERT_EQ(1u, display_manager->displays().size()); |
(...skipping 16 matching lines...) Expand all Loading... |
149 EXPECT_FALSE(window_server_delegate_.got_on_no_more_displays()); | 150 EXPECT_FALSE(window_server_delegate_.got_on_no_more_displays()); |
150 window_server_->display_manager()->DestroyDisplay(display); | 151 window_server_->display_manager()->DestroyDisplay(display); |
151 // There is still one tree left. | 152 // There is still one tree left. |
152 EXPECT_EQ(1u, window_server_->num_trees()); | 153 EXPECT_EQ(1u, window_server_->num_trees()); |
153 EXPECT_TRUE(window_server_delegate_.got_on_no_more_displays()); | 154 EXPECT_TRUE(window_server_delegate_.got_on_no_more_displays()); |
154 } | 155 } |
155 | 156 |
156 TEST_F(DisplayTest, EventStateResetOnUserSwitch) { | 157 TEST_F(DisplayTest, EventStateResetOnUserSwitch) { |
157 window_server_delegate_.set_num_displays_to_create(1); | 158 window_server_delegate_.set_num_displays_to_create(1); |
158 | 159 |
159 const UserId kTestId1 = "20"; | |
160 const UserId kTestId2 = "201"; | |
161 WindowManagerWindowTreeFactorySetTestApi( | 160 WindowManagerWindowTreeFactorySetTestApi( |
162 window_server_->window_manager_window_tree_factory_set()) | 161 window_server_->window_manager_window_tree_factory_set()) |
163 .Add(kTestId1); | 162 .Add(kTestId1); |
164 WindowManagerWindowTreeFactorySetTestApi( | 163 WindowManagerWindowTreeFactorySetTestApi( |
165 window_server_->window_manager_window_tree_factory_set()) | 164 window_server_->window_manager_window_tree_factory_set()) |
166 .Add(kTestId2); | 165 .Add(kTestId2); |
167 | 166 |
168 window_server_->user_id_tracker()->SetActiveUserId(kTestId1); | 167 window_server_->user_id_tracker()->SetActiveUserId(kTestId1); |
169 | 168 |
170 DisplayManager* display_manager = window_server_->display_manager(); | 169 DisplayManager* display_manager = window_server_->display_manager(); |
(...skipping 27 matching lines...) Expand all Loading... |
198 EXPECT_EQ(kTestId2, active_wms->user_id()); | 197 EXPECT_EQ(kTestId2, active_wms->user_id()); |
199 EXPECT_EQ(gfx::Point(20, 25), | 198 EXPECT_EQ(gfx::Point(20, 25), |
200 active_wms->event_dispatcher()->mouse_pointer_last_location()); | 199 active_wms->event_dispatcher()->mouse_pointer_last_location()); |
201 EXPECT_FALSE(EventDispatcherTestApi(active_wms->event_dispatcher()) | 200 EXPECT_FALSE(EventDispatcherTestApi(active_wms->event_dispatcher()) |
202 .AreAnyPointersDown()); | 201 .AreAnyPointersDown()); |
203 } | 202 } |
204 | 203 |
205 // Verifies capture fails when wm is inactive and succeeds when wm is active. | 204 // Verifies capture fails when wm is inactive and succeeds when wm is active. |
206 TEST_F(DisplayTest, SetCaptureFromWindowManager) { | 205 TEST_F(DisplayTest, SetCaptureFromWindowManager) { |
207 window_server_delegate_.set_num_displays_to_create(1); | 206 window_server_delegate_.set_num_displays_to_create(1); |
208 const UserId kTestId1 = "20"; | |
209 const UserId kTestId2 = "201"; | |
210 WindowManagerWindowTreeFactorySetTestApi( | 207 WindowManagerWindowTreeFactorySetTestApi( |
211 window_server_->window_manager_window_tree_factory_set()) | 208 window_server_->window_manager_window_tree_factory_set()) |
212 .Add(kTestId1); | 209 .Add(kTestId1); |
213 WindowManagerWindowTreeFactorySetTestApi( | 210 WindowManagerWindowTreeFactorySetTestApi( |
214 window_server_->window_manager_window_tree_factory_set()) | 211 window_server_->window_manager_window_tree_factory_set()) |
215 .Add(kTestId2); | 212 .Add(kTestId2); |
216 window_server_->user_id_tracker()->SetActiveUserId(kTestId1); | 213 window_server_->user_id_tracker()->SetActiveUserId(kTestId1); |
217 DisplayManager* display_manager = window_server_->display_manager(); | 214 DisplayManager* display_manager = window_server_->display_manager(); |
218 ASSERT_EQ(1u, display_manager->displays().size()); | 215 ASSERT_EQ(1u, display_manager->displays().size()); |
219 Display* display = *display_manager->displays().begin(); | 216 Display* display = *display_manager->displays().begin(); |
(...skipping 13 matching lines...) Expand all Loading... |
233 EXPECT_FALSE(tree->SetCapture(child_window_id)); | 230 EXPECT_FALSE(tree->SetCapture(child_window_id)); |
234 | 231 |
235 // Make the second user active and verify capture works. | 232 // Make the second user active and verify capture works. |
236 window_server_->user_id_tracker()->SetActiveUserId(kTestId2); | 233 window_server_->user_id_tracker()->SetActiveUserId(kTestId2); |
237 EXPECT_TRUE(wms_for_id2->IsActive()); | 234 EXPECT_TRUE(wms_for_id2->IsActive()); |
238 EXPECT_TRUE(tree->SetCapture(child_window_id)); | 235 EXPECT_TRUE(tree->SetCapture(child_window_id)); |
239 } | 236 } |
240 | 237 |
241 TEST_F(DisplayTest, FocusFailsForInactiveUser) { | 238 TEST_F(DisplayTest, FocusFailsForInactiveUser) { |
242 window_server_delegate_.set_num_displays_to_create(1); | 239 window_server_delegate_.set_num_displays_to_create(1); |
243 const UserId kTestId1 = "20"; | |
244 const UserId kTestId2 = "201"; | |
245 WindowManagerWindowTreeFactorySetTestApi( | 240 WindowManagerWindowTreeFactorySetTestApi( |
246 window_server_->window_manager_window_tree_factory_set()) | 241 window_server_->window_manager_window_tree_factory_set()) |
247 .Add(kTestId1); | 242 .Add(kTestId1); |
248 TestWindowTreeClient* window_tree_client1 = | 243 TestWindowTreeClient* window_tree_client1 = |
249 window_server_delegate_.last_client(); | 244 window_server_delegate_.last_client(); |
250 ASSERT_TRUE(window_tree_client1); | 245 ASSERT_TRUE(window_tree_client1); |
251 WindowManagerWindowTreeFactorySetTestApi( | 246 WindowManagerWindowTreeFactorySetTestApi( |
252 window_server_->window_manager_window_tree_factory_set()) | 247 window_server_->window_manager_window_tree_factory_set()) |
253 .Add(kTestId2); | 248 .Add(kTestId2); |
254 window_server_->user_id_tracker()->SetActiveUserId(kTestId1); | 249 window_server_->user_id_tracker()->SetActiveUserId(kTestId1); |
(...skipping 20 matching lines...) Expand all Loading... |
275 ClientWindowIdForFirstRoot(wms_for_id1->window_tree())); | 270 ClientWindowIdForFirstRoot(wms_for_id1->window_tree())); |
276 ClientWindowId child1_id; | 271 ClientWindowId child1_id; |
277 NewWindowInTree(wms_for_id1->window_tree(), &child1_id); | 272 NewWindowInTree(wms_for_id1->window_tree(), &child1_id); |
278 EXPECT_TRUE(wms_for_id1->IsActive()); | 273 EXPECT_TRUE(wms_for_id1->IsActive()); |
279 EXPECT_TRUE(wms_for_id1->window_tree()->SetFocus(child1_id)); | 274 EXPECT_TRUE(wms_for_id1->window_tree()->SetFocus(child1_id)); |
280 } | 275 } |
281 | 276 |
282 // Verifies a single tree is used for multiple displays. | 277 // Verifies a single tree is used for multiple displays. |
283 TEST_F(DisplayTest, MultipleDisplays) { | 278 TEST_F(DisplayTest, MultipleDisplays) { |
284 window_server_delegate_.set_num_displays_to_create(2); | 279 window_server_delegate_.set_num_displays_to_create(2); |
285 const UserId kTestId1 = "20"; | |
286 WindowManagerWindowTreeFactorySetTestApi( | 280 WindowManagerWindowTreeFactorySetTestApi( |
287 window_server_->window_manager_window_tree_factory_set()) | 281 window_server_->window_manager_window_tree_factory_set()) |
288 .Add(kTestId1); | 282 .Add(kTestId1); |
289 window_server_->user_id_tracker()->SetActiveUserId(kTestId1); | 283 window_server_->user_id_tracker()->SetActiveUserId(kTestId1); |
290 ASSERT_EQ(1u, window_server_delegate_.bindings()->size()); | 284 ASSERT_EQ(1u, window_server_delegate_.bindings()->size()); |
291 TestWindowTreeBinding* window_tree_binding = | 285 TestWindowTreeBinding* window_tree_binding = |
292 (*window_server_delegate_.bindings())[0]; | 286 (*window_server_delegate_.bindings())[0]; |
293 WindowTree* tree = window_tree_binding->tree(); | 287 WindowTree* tree = window_tree_binding->tree(); |
294 ASSERT_EQ(2u, tree->roots().size()); | 288 ASSERT_EQ(2u, tree->roots().size()); |
295 std::set<const ServerWindow*> roots = tree->roots(); | 289 std::set<const ServerWindow*> roots = tree->roots(); |
296 auto it = roots.begin(); | 290 auto it = roots.begin(); |
297 ServerWindow* root1 = tree->GetWindow((*it)->id()); | 291 ServerWindow* root1 = tree->GetWindow((*it)->id()); |
298 ++it; | 292 ++it; |
299 ServerWindow* root2 = tree->GetWindow((*it)->id()); | 293 ServerWindow* root2 = tree->GetWindow((*it)->id()); |
300 ASSERT_NE(root1, root2); | 294 ASSERT_NE(root1, root2); |
301 Display* display1 = tree->GetDisplay(root1); | 295 Display* display1 = tree->GetDisplay(root1); |
302 WindowManagerState* display1_wms = | 296 WindowManagerState* display1_wms = |
303 display1->GetWindowManagerDisplayRootForUser(kTestId1) | 297 display1->GetWindowManagerDisplayRootForUser(kTestId1) |
304 ->window_manager_state(); | 298 ->window_manager_state(); |
305 Display* display2 = tree->GetDisplay(root2); | 299 Display* display2 = tree->GetDisplay(root2); |
306 WindowManagerState* display2_wms = | 300 WindowManagerState* display2_wms = |
307 display2->GetWindowManagerDisplayRootForUser(kTestId1) | 301 display2->GetWindowManagerDisplayRootForUser(kTestId1) |
308 ->window_manager_state(); | 302 ->window_manager_state(); |
309 EXPECT_EQ(display1_wms->window_tree(), display2_wms->window_tree()); | 303 EXPECT_EQ(display1_wms->window_tree(), display2_wms->window_tree()); |
310 } | 304 } |
311 | 305 |
312 } // namespace test | 306 } // namespace test |
313 } // namespace ws | 307 } // namespace ws |
314 } // namespace mus | 308 } // namespace mus |
OLD | NEW |