| 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 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 73 private: | 73 private: |
| 74 WindowServerTestHelper ws_test_helper_; | 74 WindowServerTestHelper ws_test_helper_; |
| 75 DISALLOW_COPY_AND_ASSIGN(DisplayTest); | 75 DISALLOW_COPY_AND_ASSIGN(DisplayTest); |
| 76 }; | 76 }; |
| 77 | 77 |
| 78 TEST_F(DisplayTest, CallsCreateDefaultDisplays) { | 78 TEST_F(DisplayTest, CallsCreateDefaultDisplays) { |
| 79 const int kNumHostsToCreate = 2; | 79 const int kNumHostsToCreate = 2; |
| 80 window_server_delegate()->CreateDisplays(kNumHostsToCreate); | 80 window_server_delegate()->CreateDisplays(kNumHostsToCreate); |
| 81 | 81 |
| 82 DisplayManager* display_manager = window_server()->display_manager(); | 82 DisplayManager* display_manager = window_server()->display_manager(); |
| 83 WindowManagerWindowTreeFactorySetTestApi( | 83 AddWindowManager(window_server(), kTestId1); |
| 84 window_server()->window_manager_window_tree_factory_set()) | |
| 85 .Add(kTestId1); | |
| 86 // The first register should trigger creation of the default | 84 // The first register should trigger creation of the default |
| 87 // Displays. There should be kNumHostsToCreate Displays. | 85 // Displays. There should be kNumHostsToCreate Displays. |
| 88 EXPECT_EQ(static_cast<size_t>(kNumHostsToCreate), | 86 EXPECT_EQ(static_cast<size_t>(kNumHostsToCreate), |
| 89 display_manager->displays().size()); | 87 display_manager->displays().size()); |
| 90 | 88 |
| 91 // Each host should have a WindowManagerState for kTestId1. | 89 // Each host should have a WindowManagerState for kTestId1. |
| 92 for (Display* display : display_manager->displays()) { | 90 for (Display* display : display_manager->displays()) { |
| 93 EXPECT_EQ(1u, display->num_window_manger_states()); | 91 EXPECT_EQ(1u, display->num_window_manger_states()); |
| 94 EXPECT_TRUE(GetWindowManagerStateForUser(display, kTestId1)); | 92 EXPECT_TRUE(GetWindowManagerStateForUser(display, kTestId1)); |
| 95 EXPECT_FALSE(GetWindowManagerStateForUser(display, kTestId2)); | 93 EXPECT_FALSE(GetWindowManagerStateForUser(display, kTestId2)); |
| 96 } | 94 } |
| 97 | 95 |
| 98 // Add another registry, should trigger creation of another wm. | 96 // Add another registry, should trigger creation of another wm. |
| 99 WindowManagerWindowTreeFactorySetTestApi( | 97 AddWindowManager(window_server(), kTestId2); |
| 100 window_server()->window_manager_window_tree_factory_set()) | |
| 101 .Add(kTestId2); | |
| 102 for (Display* display : display_manager->displays()) { | 98 for (Display* display : display_manager->displays()) { |
| 103 ASSERT_EQ(2u, display->num_window_manger_states()); | 99 ASSERT_EQ(2u, display->num_window_manger_states()); |
| 104 WindowManagerDisplayRoot* root1 = | 100 WindowManagerDisplayRoot* root1 = |
| 105 display->GetWindowManagerDisplayRootForUser(kTestId1); | 101 display->GetWindowManagerDisplayRootForUser(kTestId1); |
| 106 ASSERT_TRUE(root1); | 102 ASSERT_TRUE(root1); |
| 107 WindowManagerDisplayRoot* root2 = | 103 WindowManagerDisplayRoot* root2 = |
| 108 display->GetWindowManagerDisplayRootForUser(kTestId2); | 104 display->GetWindowManagerDisplayRootForUser(kTestId2); |
| 109 ASSERT_TRUE(root2); | 105 ASSERT_TRUE(root2); |
| 110 // Verify the two states have different roots. | 106 // Verify the two states have different roots. |
| 111 EXPECT_NE(root1, root2); | 107 EXPECT_NE(root1, root2); |
| 112 EXPECT_NE(root1->root(), root2->root()); | 108 EXPECT_NE(root1->root(), root2->root()); |
| 113 } | 109 } |
| 114 } | 110 } |
| 115 | 111 |
| 116 TEST_F(DisplayTest, Destruction) { | 112 TEST_F(DisplayTest, Destruction) { |
| 117 window_server_delegate()->CreateDisplays(1); | 113 window_server_delegate()->CreateDisplays(1); |
| 118 | 114 |
| 119 WindowManagerWindowTreeFactorySetTestApi( | 115 AddWindowManager(window_server(), kTestId1); |
| 120 window_server()->window_manager_window_tree_factory_set()) | |
| 121 .Add(kTestId1); | |
| 122 | 116 |
| 123 // Add another registry, should trigger creation of another wm. | 117 // Add another registry, should trigger creation of another wm. |
| 124 DisplayManager* display_manager = window_server()->display_manager(); | 118 DisplayManager* display_manager = window_server()->display_manager(); |
| 125 WindowManagerWindowTreeFactorySetTestApi( | 119 AddWindowManager(window_server(), kTestId2); |
| 126 window_server()->window_manager_window_tree_factory_set()) | |
| 127 .Add(kTestId2); | |
| 128 ASSERT_EQ(1u, display_manager->displays().size()); | 120 ASSERT_EQ(1u, display_manager->displays().size()); |
| 129 Display* display = *display_manager->displays().begin(); | 121 Display* display = *display_manager->displays().begin(); |
| 130 ASSERT_EQ(2u, display->num_window_manger_states()); | 122 ASSERT_EQ(2u, display->num_window_manger_states()); |
| 131 // There should be two trees, one for each windowmanager. | 123 // There should be two trees, one for each windowmanager. |
| 132 EXPECT_EQ(2u, window_server()->num_trees()); | 124 EXPECT_EQ(2u, window_server()->num_trees()); |
| 133 | 125 |
| 134 { | 126 { |
| 135 WindowManagerState* state = GetWindowManagerStateForUser(display, kTestId1); | 127 WindowManagerState* state = GetWindowManagerStateForUser(display, kTestId1); |
| 136 // Destroy the tree associated with |state|. Should result in deleting | 128 // Destroy the tree associated with |state|. Should result in deleting |
| 137 // |state|. | 129 // |state|. |
| 138 window_server()->DestroyTree(state->window_tree()); | 130 window_server()->DestroyTree(state->window_tree()); |
| 139 ASSERT_EQ(1u, display->num_window_manger_states()); | 131 ASSERT_EQ(1u, display->num_window_manger_states()); |
| 140 EXPECT_FALSE(GetWindowManagerStateForUser(display, kTestId1)); | 132 EXPECT_FALSE(GetWindowManagerStateForUser(display, kTestId1)); |
| 141 EXPECT_EQ(1u, display_manager->displays().size()); | 133 EXPECT_EQ(1u, display_manager->displays().size()); |
| 142 EXPECT_EQ(1u, window_server()->num_trees()); | 134 EXPECT_EQ(1u, window_server()->num_trees()); |
| 143 } | 135 } |
| 144 | 136 |
| 145 EXPECT_FALSE(window_server_delegate()->got_on_no_more_displays()); | 137 EXPECT_FALSE(window_server_delegate()->got_on_no_more_displays()); |
| 146 window_server()->display_manager()->DestroyDisplay(display); | 138 window_server()->display_manager()->DestroyDisplay(display); |
| 147 // There is still one tree left. | 139 // There is still one tree left. |
| 148 EXPECT_EQ(1u, window_server()->num_trees()); | 140 EXPECT_EQ(1u, window_server()->num_trees()); |
| 149 EXPECT_TRUE(window_server_delegate()->got_on_no_more_displays()); | 141 EXPECT_TRUE(window_server_delegate()->got_on_no_more_displays()); |
| 150 } | 142 } |
| 151 | 143 |
| 152 TEST_F(DisplayTest, EventStateResetOnUserSwitch) { | 144 TEST_F(DisplayTest, EventStateResetOnUserSwitch) { |
| 153 window_server_delegate()->CreateDisplays(1); | 145 window_server_delegate()->CreateDisplays(1); |
| 154 | 146 |
| 155 WindowManagerWindowTreeFactorySetTestApi( | 147 AddWindowManager(window_server(), kTestId1); |
| 156 window_server()->window_manager_window_tree_factory_set()) | 148 AddWindowManager(window_server(), kTestId2); |
| 157 .Add(kTestId1); | |
| 158 WindowManagerWindowTreeFactorySetTestApi( | |
| 159 window_server()->window_manager_window_tree_factory_set()) | |
| 160 .Add(kTestId2); | |
| 161 | 149 |
| 162 window_server()->user_id_tracker()->SetActiveUserId(kTestId1); | 150 window_server()->user_id_tracker()->SetActiveUserId(kTestId1); |
| 163 | 151 |
| 164 DisplayManager* display_manager = window_server()->display_manager(); | 152 DisplayManager* display_manager = window_server()->display_manager(); |
| 165 ASSERT_EQ(1u, display_manager->displays().size()); | 153 ASSERT_EQ(1u, display_manager->displays().size()); |
| 166 Display* display = *display_manager->displays().begin(); | 154 Display* display = *display_manager->displays().begin(); |
| 167 WindowManagerState* active_wms = | 155 WindowManagerState* active_wms = |
| 168 display->GetActiveWindowManagerDisplayRoot()->window_manager_state(); | 156 display->GetActiveWindowManagerDisplayRoot()->window_manager_state(); |
| 169 ASSERT_TRUE(active_wms); | 157 ASSERT_TRUE(active_wms); |
| 170 EXPECT_EQ(kTestId1, active_wms->user_id()); | 158 EXPECT_EQ(kTestId1, active_wms->user_id()); |
| (...skipping 21 matching lines...) Expand all Loading... |
| 192 EXPECT_EQ(kTestId2, active_wms->user_id()); | 180 EXPECT_EQ(kTestId2, active_wms->user_id()); |
| 193 EXPECT_EQ(gfx::Point(20, 25), | 181 EXPECT_EQ(gfx::Point(20, 25), |
| 194 active_wms->event_dispatcher()->mouse_pointer_last_location()); | 182 active_wms->event_dispatcher()->mouse_pointer_last_location()); |
| 195 EXPECT_FALSE(EventDispatcherTestApi(active_wms->event_dispatcher()) | 183 EXPECT_FALSE(EventDispatcherTestApi(active_wms->event_dispatcher()) |
| 196 .AreAnyPointersDown()); | 184 .AreAnyPointersDown()); |
| 197 } | 185 } |
| 198 | 186 |
| 199 // Verifies capture fails when wm is inactive and succeeds when wm is active. | 187 // Verifies capture fails when wm is inactive and succeeds when wm is active. |
| 200 TEST_F(DisplayTest, SetCaptureFromWindowManager) { | 188 TEST_F(DisplayTest, SetCaptureFromWindowManager) { |
| 201 window_server_delegate()->CreateDisplays(1); | 189 window_server_delegate()->CreateDisplays(1); |
| 202 WindowManagerWindowTreeFactorySetTestApi( | 190 AddWindowManager(window_server(), kTestId1); |
| 203 window_server()->window_manager_window_tree_factory_set()) | 191 AddWindowManager(window_server(), kTestId2); |
| 204 .Add(kTestId1); | |
| 205 WindowManagerWindowTreeFactorySetTestApi( | |
| 206 window_server()->window_manager_window_tree_factory_set()) | |
| 207 .Add(kTestId2); | |
| 208 window_server()->user_id_tracker()->SetActiveUserId(kTestId1); | 192 window_server()->user_id_tracker()->SetActiveUserId(kTestId1); |
| 209 DisplayManager* display_manager = window_server()->display_manager(); | 193 DisplayManager* display_manager = window_server()->display_manager(); |
| 210 ASSERT_EQ(1u, display_manager->displays().size()); | 194 ASSERT_EQ(1u, display_manager->displays().size()); |
| 211 Display* display = *display_manager->displays().begin(); | 195 Display* display = *display_manager->displays().begin(); |
| 212 WindowManagerState* wms_for_id2 = | 196 WindowManagerState* wms_for_id2 = |
| 213 GetWindowManagerStateForUser(display, kTestId2); | 197 GetWindowManagerStateForUser(display, kTestId2); |
| 214 ASSERT_TRUE(wms_for_id2); | 198 ASSERT_TRUE(wms_for_id2); |
| 215 EXPECT_FALSE(wms_for_id2->IsActive()); | 199 EXPECT_FALSE(wms_for_id2->IsActive()); |
| 216 | 200 |
| 217 // Create a child of the root that we can set capture on. | 201 // Create a child of the root that we can set capture on. |
| 218 WindowTree* tree = wms_for_id2->window_tree(); | 202 WindowTree* tree = wms_for_id2->window_tree(); |
| 219 ClientWindowId child_window_id; | 203 ClientWindowId child_window_id; |
| 220 ASSERT_TRUE(NewWindowInTree(tree, &child_window_id)); | 204 ASSERT_TRUE(NewWindowInTree(tree, &child_window_id)); |
| 221 | 205 |
| 222 WindowTreeTestApi(tree).EnableCapture(); | 206 WindowTreeTestApi(tree).EnableCapture(); |
| 223 | 207 |
| 224 // SetCapture() should fail for user id2 as it is inactive. | 208 // SetCapture() should fail for user id2 as it is inactive. |
| 225 EXPECT_FALSE(tree->SetCapture(child_window_id)); | 209 EXPECT_FALSE(tree->SetCapture(child_window_id)); |
| 226 | 210 |
| 227 // Make the second user active and verify capture works. | 211 // Make the second user active and verify capture works. |
| 228 window_server()->user_id_tracker()->SetActiveUserId(kTestId2); | 212 window_server()->user_id_tracker()->SetActiveUserId(kTestId2); |
| 229 EXPECT_TRUE(wms_for_id2->IsActive()); | 213 EXPECT_TRUE(wms_for_id2->IsActive()); |
| 230 EXPECT_TRUE(tree->SetCapture(child_window_id)); | 214 EXPECT_TRUE(tree->SetCapture(child_window_id)); |
| 231 } | 215 } |
| 232 | 216 |
| 233 TEST_F(DisplayTest, FocusFailsForInactiveUser) { | 217 TEST_F(DisplayTest, FocusFailsForInactiveUser) { |
| 234 window_server_delegate()->CreateDisplays(1); | 218 window_server_delegate()->CreateDisplays(1); |
| 235 WindowManagerWindowTreeFactorySetTestApi( | 219 AddWindowManager(window_server(), kTestId1); |
| 236 window_server()->window_manager_window_tree_factory_set()) | |
| 237 .Add(kTestId1); | |
| 238 TestWindowTreeClient* window_tree_client1 = | 220 TestWindowTreeClient* window_tree_client1 = |
| 239 window_server_delegate()->last_client(); | 221 window_server_delegate()->last_client(); |
| 240 ASSERT_TRUE(window_tree_client1); | 222 ASSERT_TRUE(window_tree_client1); |
| 241 WindowManagerWindowTreeFactorySetTestApi( | 223 AddWindowManager(window_server(), kTestId2); |
| 242 window_server()->window_manager_window_tree_factory_set()) | |
| 243 .Add(kTestId2); | |
| 244 window_server()->user_id_tracker()->SetActiveUserId(kTestId1); | 224 window_server()->user_id_tracker()->SetActiveUserId(kTestId1); |
| 245 DisplayManager* display_manager = window_server()->display_manager(); | 225 DisplayManager* display_manager = window_server()->display_manager(); |
| 246 ASSERT_EQ(1u, display_manager->displays().size()); | 226 ASSERT_EQ(1u, display_manager->displays().size()); |
| 247 Display* display = *display_manager->displays().begin(); | 227 Display* display = *display_manager->displays().begin(); |
| 248 WindowManagerState* wms_for_id2 = | 228 WindowManagerState* wms_for_id2 = |
| 249 GetWindowManagerStateForUser(display, kTestId2); | 229 GetWindowManagerStateForUser(display, kTestId2); |
| 250 wms_for_id2->window_tree()->AddActivationParent( | 230 wms_for_id2->window_tree()->AddActivationParent( |
| 251 ClientWindowIdForFirstRoot(wms_for_id2->window_tree())); | 231 ClientWindowIdForFirstRoot(wms_for_id2->window_tree())); |
| 252 ASSERT_TRUE(wms_for_id2); | 232 ASSERT_TRUE(wms_for_id2); |
| 253 EXPECT_FALSE(wms_for_id2->IsActive()); | 233 EXPECT_FALSE(wms_for_id2->IsActive()); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 265 ClientWindowIdForFirstRoot(wms_for_id1->window_tree())); | 245 ClientWindowIdForFirstRoot(wms_for_id1->window_tree())); |
| 266 ClientWindowId child1_id; | 246 ClientWindowId child1_id; |
| 267 NewWindowInTree(wms_for_id1->window_tree(), &child1_id); | 247 NewWindowInTree(wms_for_id1->window_tree(), &child1_id); |
| 268 EXPECT_TRUE(wms_for_id1->IsActive()); | 248 EXPECT_TRUE(wms_for_id1->IsActive()); |
| 269 EXPECT_TRUE(wms_for_id1->window_tree()->SetFocus(child1_id)); | 249 EXPECT_TRUE(wms_for_id1->window_tree()->SetFocus(child1_id)); |
| 270 } | 250 } |
| 271 | 251 |
| 272 // Verifies a single tree is used for multiple displays. | 252 // Verifies a single tree is used for multiple displays. |
| 273 TEST_F(DisplayTest, MultipleDisplays) { | 253 TEST_F(DisplayTest, MultipleDisplays) { |
| 274 window_server_delegate()->CreateDisplays(2); | 254 window_server_delegate()->CreateDisplays(2); |
| 275 WindowManagerWindowTreeFactorySetTestApi( | 255 AddWindowManager(window_server(), kTestId1); |
| 276 window_server()->window_manager_window_tree_factory_set()) | |
| 277 .Add(kTestId1); | |
| 278 window_server()->user_id_tracker()->SetActiveUserId(kTestId1); | 256 window_server()->user_id_tracker()->SetActiveUserId(kTestId1); |
| 279 ASSERT_EQ(1u, window_server_delegate()->bindings()->size()); | 257 ASSERT_EQ(1u, window_server_delegate()->bindings()->size()); |
| 280 TestWindowTreeBinding* window_tree_binding = | 258 TestWindowTreeBinding* window_tree_binding = |
| 281 (*window_server_delegate()->bindings())[0]; | 259 (*window_server_delegate()->bindings())[0]; |
| 282 WindowTree* tree = window_tree_binding->tree(); | 260 WindowTree* tree = window_tree_binding->tree(); |
| 283 ASSERT_EQ(2u, tree->roots().size()); | 261 ASSERT_EQ(2u, tree->roots().size()); |
| 284 std::set<const ServerWindow*> roots = tree->roots(); | 262 std::set<const ServerWindow*> roots = tree->roots(); |
| 285 auto it = roots.begin(); | 263 auto it = roots.begin(); |
| 286 ServerWindow* root1 = tree->GetWindow((*it)->id()); | 264 ServerWindow* root1 = tree->GetWindow((*it)->id()); |
| 287 ++it; | 265 ++it; |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 343 bool* destroyed_; | 321 bool* destroyed_; |
| 344 | 322 |
| 345 DISALLOW_COPY_AND_ASSIGN(ServerWindowDestructionObserver); | 323 DISALLOW_COPY_AND_ASSIGN(ServerWindowDestructionObserver); |
| 346 }; | 324 }; |
| 347 | 325 |
| 348 } // namespace | 326 } // namespace |
| 349 | 327 |
| 350 // Assertions around destroying a secondary display. | 328 // Assertions around destroying a secondary display. |
| 351 TEST_F(DisplayTest, DestroyingDisplayDoesntDelete) { | 329 TEST_F(DisplayTest, DestroyingDisplayDoesntDelete) { |
| 352 window_server_delegate()->CreateDisplays(2); | 330 window_server_delegate()->CreateDisplays(2); |
| 353 WindowManagerWindowTreeFactorySetTestApi( | 331 AddWindowManager(window_server(), kTestId1); |
| 354 window_server()->window_manager_window_tree_factory_set()) | |
| 355 .Add(kTestId1); | |
| 356 window_server()->user_id_tracker()->SetActiveUserId(kTestId1); | 332 window_server()->user_id_tracker()->SetActiveUserId(kTestId1); |
| 357 ASSERT_EQ(1u, window_server_delegate()->bindings()->size()); | 333 ASSERT_EQ(1u, window_server_delegate()->bindings()->size()); |
| 358 WindowTree* tree = (*window_server_delegate()->bindings())[0]->tree(); | 334 WindowTree* tree = (*window_server_delegate()->bindings())[0]->tree(); |
| 359 ASSERT_EQ(2u, tree->roots().size()); | 335 ASSERT_EQ(2u, tree->roots().size()); |
| 360 Display* secondary_display = | 336 Display* secondary_display = |
| 361 GetSecondaryDisplay(window_server()->display_manager()); | 337 GetSecondaryDisplay(window_server()->display_manager()); |
| 362 ASSERT_TRUE(secondary_display); | 338 ASSERT_TRUE(secondary_display); |
| 363 bool secondary_root_destroyed = false; | 339 bool secondary_root_destroyed = false; |
| 364 ServerWindow* secondary_root = GetRootOnDisplay(tree, secondary_display); | 340 ServerWindow* secondary_root = GetRootOnDisplay(tree, secondary_display); |
| 365 ASSERT_TRUE(secondary_root); | 341 ASSERT_TRUE(secondary_root); |
| (...skipping 21 matching lines...) Expand all Loading... |
| 387 ASSERT_EQ(0u, tree_client->tracker()->changes()->size()); | 363 ASSERT_EQ(0u, tree_client->tracker()->changes()->size()); |
| 388 | 364 |
| 389 // The window should be destroyed when the client says so. | 365 // The window should be destroyed when the client says so. |
| 390 ASSERT_TRUE(tree->DeleteWindow(secondary_root_id)); | 366 ASSERT_TRUE(tree->DeleteWindow(secondary_root_id)); |
| 391 EXPECT_TRUE(secondary_root_destroyed); | 367 EXPECT_TRUE(secondary_root_destroyed); |
| 392 } | 368 } |
| 393 | 369 |
| 394 } // namespace test | 370 } // namespace test |
| 395 } // namespace ws | 371 } // namespace ws |
| 396 } // namespace ui | 372 } // namespace ui |
| OLD | NEW |