| 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 |