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

Side by Side Diff: components/mus/ws/display_unittest.cc

Issue 2105483002: mus: Make sure only valid user-ids can be active. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 5 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
« no previous file with comments | « components/mus/ws/cursor_unittest.cc ('k') | components/mus/ws/user_id_tracker.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 <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
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « components/mus/ws/cursor_unittest.cc ('k') | components/mus/ws/user_id_tracker.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698