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

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

Issue 1949603002: Revert of mus: Enable system modal windows (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 7 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/event_dispatcher.cc ('k') | components/mus/ws/modal_window_controller.h » ('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 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 "components/mus/ws/event_dispatcher.h" 5 #include "components/mus/ws/event_dispatcher.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include <queue> 10 #include <queue>
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after
201 201
202 bool AreAnyPointersDown() const; 202 bool AreAnyPointersDown() const;
203 // Deletes everything created during SetUp() 203 // Deletes everything created during SetUp()
204 void ClearSetup(); 204 void ClearSetup();
205 std::unique_ptr<ServerWindow> CreateChildWindowWithParent( 205 std::unique_ptr<ServerWindow> CreateChildWindowWithParent(
206 const WindowId& id, 206 const WindowId& id,
207 ServerWindow* parent); 207 ServerWindow* parent);
208 // Creates a window which is a child of |root_window_|. 208 // Creates a window which is a child of |root_window_|.
209 std::unique_ptr<ServerWindow> CreateChildWindow(const WindowId& id); 209 std::unique_ptr<ServerWindow> CreateChildWindow(const WindowId& id);
210 bool IsMouseButtonDown() const; 210 bool IsMouseButtonDown() const;
211 bool IsWindowPointerTarget(const ServerWindow* window) const; 211 bool IsWindowPointerTarget(ServerWindow* window) const;
212 int NumberPointerTargetsForWindow(ServerWindow* window) const; 212 int NumberPointerTargetsForWindow(ServerWindow* window) const;
213 ServerWindow* GetActiveSystemModalWindow() const;
214 213
215 protected: 214 protected:
216 // testing::Test: 215 // testing::Test:
217 void SetUp() override; 216 void SetUp() override;
218 217
219 private: 218 private:
220 std::unique_ptr<TestServerWindowDelegate> window_delegate_; 219 std::unique_ptr<TestServerWindowDelegate> window_delegate_;
221 std::unique_ptr<ServerWindow> root_window_; 220 std::unique_ptr<ServerWindow> root_window_;
222 std::unique_ptr<TestEventDispatcherDelegate> test_event_dispatcher_delegate_; 221 std::unique_ptr<TestEventDispatcherDelegate> test_event_dispatcher_delegate_;
223 std::unique_ptr<EventDispatcher> event_dispatcher_; 222 std::unique_ptr<EventDispatcher> event_dispatcher_;
(...skipping 25 matching lines...) Expand all
249 248
250 std::unique_ptr<ServerWindow> EventDispatcherTest::CreateChildWindow( 249 std::unique_ptr<ServerWindow> EventDispatcherTest::CreateChildWindow(
251 const WindowId& id) { 250 const WindowId& id) {
252 return CreateChildWindowWithParent(id, root_window_.get()); 251 return CreateChildWindowWithParent(id, root_window_.get());
253 } 252 }
254 253
255 bool EventDispatcherTest::IsMouseButtonDown() const { 254 bool EventDispatcherTest::IsMouseButtonDown() const {
256 return EventDispatcherTestApi(event_dispatcher_.get()).is_mouse_button_down(); 255 return EventDispatcherTestApi(event_dispatcher_.get()).is_mouse_button_down();
257 } 256 }
258 257
259 bool EventDispatcherTest::IsWindowPointerTarget( 258 bool EventDispatcherTest::IsWindowPointerTarget(ServerWindow* window) const {
260 const ServerWindow* window) const {
261 return EventDispatcherTestApi(event_dispatcher_.get()) 259 return EventDispatcherTestApi(event_dispatcher_.get())
262 .IsWindowPointerTarget(window); 260 .IsObservingWindow(window);
263 } 261 }
264 262
265 int EventDispatcherTest::NumberPointerTargetsForWindow( 263 int EventDispatcherTest::NumberPointerTargetsForWindow(
266 ServerWindow* window) const { 264 ServerWindow* window) const {
267 return EventDispatcherTestApi(event_dispatcher_.get()) 265 return EventDispatcherTestApi(event_dispatcher_.get())
268 .NumberPointerTargetsForWindow(window); 266 .NumberPointerTargetsForWindow(window);
269 } 267 }
270 268
271 ServerWindow* EventDispatcherTest::GetActiveSystemModalWindow() const {
272 ModalWindowController* mwc =
273 EventDispatcherTestApi(event_dispatcher_.get()).modal_window_controller();
274 return ModalWindowControllerTestApi(mwc).GetActiveSystemModalWindow();
275 }
276
277 void EventDispatcherTest::SetUp() { 269 void EventDispatcherTest::SetUp() {
278 testing::Test::SetUp(); 270 testing::Test::SetUp();
279 271
280 window_delegate_.reset(new TestServerWindowDelegate()); 272 window_delegate_.reset(new TestServerWindowDelegate());
281 root_window_.reset(new ServerWindow(window_delegate_.get(), WindowId(1, 2))); 273 root_window_.reset(new ServerWindow(window_delegate_.get(), WindowId(1, 2)));
282 window_delegate_->set_root_window(root_window_.get()); 274 window_delegate_->set_root_window(root_window_.get());
283 root_window_->SetVisible(true); 275 root_window_->SetVisible(true);
284 276
285 test_event_dispatcher_delegate_.reset( 277 test_event_dispatcher_delegate_.reset(
286 new TestEventDispatcherDelegate(root_window_.get())); 278 new TestEventDispatcherDelegate(root_window_.get()));
(...skipping 1044 matching lines...) Expand 10 before | Expand all | Expand 10 after
1331 EXPECT_TRUE(details->in_nonclient_area); 1323 EXPECT_TRUE(details->in_nonclient_area);
1332 1324
1333 ASSERT_TRUE(details->event); 1325 ASSERT_TRUE(details->event);
1334 ASSERT_TRUE(details->event->IsPointerEvent()); 1326 ASSERT_TRUE(details->event->IsPointerEvent());
1335 1327
1336 ui::PointerEvent* dispatched_event = details->event->AsPointerEvent(); 1328 ui::PointerEvent* dispatched_event = details->event->AsPointerEvent();
1337 EXPECT_EQ(gfx::Point(25, 25), dispatched_event->root_location()); 1329 EXPECT_EQ(gfx::Point(25, 25), dispatched_event->root_location());
1338 EXPECT_EQ(gfx::Point(-25, 15), dispatched_event->location()); 1330 EXPECT_EQ(gfx::Point(-25, 15), dispatched_event->location());
1339 } 1331 }
1340 1332
1341 // Tests that events on a system modal window target the modal window itself.
1342 TEST_F(EventDispatcherTest, ModalWindowEventOnSystemModal) {
1343 std::unique_ptr<ServerWindow> w1 = CreateChildWindow(WindowId(1, 3));
1344
1345 root_window()->SetBounds(gfx::Rect(0, 0, 100, 100));
1346 w1->SetBounds(gfx::Rect(10, 10, 30, 30));
1347 w1->SetModal();
1348
1349 // Send event that is over |w1|.
1350 const ui::PointerEvent mouse_pressed(ui::MouseEvent(
1351 ui::ET_MOUSE_PRESSED, gfx::Point(15, 15), gfx::Point(15, 15),
1352 base::TimeDelta(), ui::EF_LEFT_MOUSE_BUTTON, ui::EF_LEFT_MOUSE_BUTTON));
1353 event_dispatcher()->ProcessEvent(mouse_pressed);
1354
1355 std::unique_ptr<DispatchedEventDetails> details =
1356 test_event_dispatcher_delegate()->GetAndAdvanceDispatchedEventDetails();
1357 ASSERT_TRUE(details);
1358 EXPECT_EQ(w1.get(), details->window);
1359 EXPECT_FALSE(details->in_nonclient_area);
1360
1361 ASSERT_TRUE(details->event);
1362 ASSERT_TRUE(details->event->IsPointerEvent());
1363
1364 ui::PointerEvent* dispatched_event = details->event->AsPointerEvent();
1365 EXPECT_EQ(gfx::Point(15, 15), dispatched_event->root_location());
1366 EXPECT_EQ(gfx::Point(5, 5), dispatched_event->location());
1367 }
1368
1369 // Tests that events outside of system modal window target the modal window.
1370 TEST_F(EventDispatcherTest, ModalWindowEventOutsideSystemModal) {
1371 std::unique_ptr<ServerWindow> w1 = CreateChildWindow(WindowId(1, 3));
1372
1373 root_window()->SetBounds(gfx::Rect(0, 0, 100, 100));
1374 w1->SetBounds(gfx::Rect(10, 10, 30, 30));
1375 w1->SetModal();
1376 event_dispatcher()->AddSystemModalWindow(w1.get());
1377
1378 // Send event that is over |w1|.
1379 const ui::PointerEvent mouse_pressed(ui::MouseEvent(
1380 ui::ET_MOUSE_PRESSED, gfx::Point(45, 15), gfx::Point(45, 15),
1381 base::TimeDelta(), ui::EF_LEFT_MOUSE_BUTTON, ui::EF_LEFT_MOUSE_BUTTON));
1382 event_dispatcher()->ProcessEvent(mouse_pressed);
1383
1384 std::unique_ptr<DispatchedEventDetails> details =
1385 test_event_dispatcher_delegate()->GetAndAdvanceDispatchedEventDetails();
1386 ASSERT_TRUE(details);
1387 EXPECT_EQ(w1.get(), details->window);
1388 EXPECT_TRUE(details->in_nonclient_area);
1389
1390 ASSERT_TRUE(details->event);
1391 ASSERT_TRUE(details->event->IsPointerEvent());
1392
1393 ui::PointerEvent* dispatched_event = details->event->AsPointerEvent();
1394 EXPECT_EQ(gfx::Point(45, 15), dispatched_event->root_location());
1395 EXPECT_EQ(gfx::Point(35, 5), dispatched_event->location());
1396 }
1397 1333
1398 // Tests that setting capture to a descendant of a modal parent fails. 1334 // Tests that setting capture to a descendant of a modal parent fails.
1399 TEST_F(EventDispatcherTest, ModalWindowSetCaptureDescendantOfModalParent) { 1335 TEST_F(EventDispatcherTest, ModalWindowSetCaptureDescendantOfModalParent) {
1400 std::unique_ptr<ServerWindow> w1 = CreateChildWindow(WindowId(1, 3)); 1336 std::unique_ptr<ServerWindow> w1 = CreateChildWindow(WindowId(1, 3));
1401 std::unique_ptr<ServerWindow> w11 = 1337 std::unique_ptr<ServerWindow> w11 =
1402 CreateChildWindowWithParent(WindowId(1, 4), w1.get()); 1338 CreateChildWindowWithParent(WindowId(1, 4), w1.get());
1403 std::unique_ptr<ServerWindow> w2 = CreateChildWindow(WindowId(1, 5)); 1339 std::unique_ptr<ServerWindow> w2 = CreateChildWindow(WindowId(1, 5));
1404 1340
1405 root_window()->SetBounds(gfx::Rect(0, 0, 100, 100)); 1341 root_window()->SetBounds(gfx::Rect(0, 0, 100, 100));
1406 w1->SetBounds(gfx::Rect(10, 10, 30, 30)); 1342 w1->SetBounds(gfx::Rect(10, 10, 30, 30));
1407 w11->SetBounds(gfx::Rect(10, 10, 10, 10)); 1343 w11->SetBounds(gfx::Rect(10, 10, 10, 10));
1408 w2->SetBounds(gfx::Rect(50, 10, 10, 10)); 1344 w2->SetBounds(gfx::Rect(50, 10, 10, 10));
1409 1345
1410 w1->AddTransientWindow(w2.get()); 1346 w1->AddTransientWindow(w2.get());
1411 w2->SetModal(); 1347 w2->SetModal();
1412 1348
1413 EXPECT_FALSE(event_dispatcher()->SetCaptureWindow(w11.get(), false)); 1349 EXPECT_FALSE(event_dispatcher()->SetCaptureWindow(w11.get(), false));
1414 EXPECT_EQ(nullptr, event_dispatcher()->capture_window()); 1350 EXPECT_EQ(nullptr, event_dispatcher()->capture_window());
1415 } 1351 }
1416 1352
1417 // Tests that setting capture to a window unrelated to a modal parent works. 1353 // Tests that setting capture to a window unrelated to a modal parent works.
1418 TEST_F(EventDispatcherTest, ModalWindowSetCaptureUnrelatedWindow) { 1354 TEST_F(EventDispatcherTest, ModalWindowSetCaptureUnrelatedWindow) {
1419 std::unique_ptr<ServerWindow> w1 = CreateChildWindow(WindowId(1, 3)); 1355 std::unique_ptr<ServerWindow> w1 = CreateChildWindow(WindowId(1, 3));
1420 std::unique_ptr<ServerWindow> w2 = CreateChildWindow(WindowId(1, 4)); 1356 std::unique_ptr<ServerWindow> w2 = CreateChildWindow(WindowId(1, 5));
1421 std::unique_ptr<ServerWindow> w3 = CreateChildWindow(WindowId(1, 5)); 1357 std::unique_ptr<ServerWindow> w3 = CreateChildWindow(WindowId(1, 6));
1422 1358
1423 root_window()->SetBounds(gfx::Rect(0, 0, 100, 100)); 1359 root_window()->SetBounds(gfx::Rect(0, 0, 100, 100));
1424 w1->SetBounds(gfx::Rect(10, 10, 30, 30)); 1360 w1->SetBounds(gfx::Rect(10, 10, 30, 30));
1425 w2->SetBounds(gfx::Rect(50, 10, 10, 10)); 1361 w2->SetBounds(gfx::Rect(50, 10, 10, 10));
1426 w3->SetBounds(gfx::Rect(70, 10, 10, 10)); 1362 w3->SetBounds(gfx::Rect(70, 10, 10, 10));
1427 1363
1428 w1->AddTransientWindow(w2.get()); 1364 w1->AddTransientWindow(w2.get());
1429 w2->SetModal(); 1365 w2->SetModal();
1430 1366
1431 EXPECT_TRUE(event_dispatcher()->SetCaptureWindow(w3.get(), false)); 1367 EXPECT_TRUE(event_dispatcher()->SetCaptureWindow(w3.get(), false));
1432 EXPECT_EQ(w3.get(), event_dispatcher()->capture_window()); 1368 EXPECT_EQ(w3.get(), event_dispatcher()->capture_window());
1433 } 1369 }
1434 1370
1435 // Tests that setting capture fails when there is a system modal window.
1436 TEST_F(EventDispatcherTest, ModalWindowSystemSetCapture) {
1437 std::unique_ptr<ServerWindow> w1 = CreateChildWindow(WindowId(1, 3));
1438 std::unique_ptr<ServerWindow> w2 = CreateChildWindow(WindowId(1, 4));
1439
1440 root_window()->SetBounds(gfx::Rect(0, 0, 100, 100));
1441 w1->SetBounds(gfx::Rect(10, 10, 30, 30));
1442 w2->SetBounds(gfx::Rect(50, 10, 10, 10));
1443
1444 event_dispatcher()->AddSystemModalWindow(w2.get());
1445
1446 EXPECT_FALSE(event_dispatcher()->SetCaptureWindow(w1.get(), false));
1447 EXPECT_EQ(nullptr, event_dispatcher()->capture_window());
1448 }
1449
1450 // Tests having multiple system modal windows.
1451 TEST_F(EventDispatcherTest, ModalWindowMultipleSystemModals) {
1452 std::unique_ptr<ServerWindow> w1 = CreateChildWindow(WindowId(1, 3));
1453 std::unique_ptr<ServerWindow> w2 = CreateChildWindow(WindowId(1, 4));
1454 std::unique_ptr<ServerWindow> w3 = CreateChildWindow(WindowId(1, 5));
1455
1456 w2->SetVisible(false);
1457
1458 // In the beginning, there should be no active system modal window.
1459 EXPECT_EQ(nullptr, GetActiveSystemModalWindow());
1460
1461 // Add a visible system modal window. It should become the active one.
1462 event_dispatcher()->AddSystemModalWindow(w1.get());
1463 EXPECT_EQ(w1.get(), GetActiveSystemModalWindow());
1464
1465 // Add an invisible system modal window. It should not change the active one.
1466 event_dispatcher()->AddSystemModalWindow(w2.get());
1467 EXPECT_EQ(w1.get(), GetActiveSystemModalWindow());
1468
1469 // Add another visible system modal window. It should become the active one.
1470 event_dispatcher()->AddSystemModalWindow(w3.get());
1471 EXPECT_EQ(w3.get(), GetActiveSystemModalWindow());
1472
1473 // Make an existing system modal window visible. It should become the active
1474 // one.
1475 w2->SetVisible(true);
1476 EXPECT_EQ(w2.get(), GetActiveSystemModalWindow());
1477
1478 // Remove the active system modal window. Next one should become active.
1479 w2.reset();
1480 EXPECT_EQ(w3.get(), GetActiveSystemModalWindow());
1481
1482 // Remove an inactive system modal window. It should not change the active
1483 // one.
1484 w1.reset();
1485 EXPECT_EQ(w3.get(), GetActiveSystemModalWindow());
1486
1487 // Remove the last remaining system modal window. There should be no active
1488 // one anymore.
1489 w3.reset();
1490 EXPECT_EQ(nullptr, GetActiveSystemModalWindow());
1491 }
1492
1493 } // namespace test 1371 } // namespace test
1494 } // namespace ws 1372 } // namespace ws
1495 } // namespace mus 1373 } // namespace mus
OLDNEW
« no previous file with comments | « components/mus/ws/event_dispatcher.cc ('k') | components/mus/ws/modal_window_controller.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698