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

Side by Side Diff: services/ui/ws/window_tree_unittest.cc

Issue 2745143004: Inform window manager about modal windows in mus+ash. (Closed)
Patch Set: . Created 3 years, 9 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
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "services/ui/ws/window_tree.h" 5 #include "services/ui/ws/window_tree.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 8
9 #include <string> 9 #include <string>
10 #include <vector> 10 #include <vector>
(...skipping 784 matching lines...) Expand 10 before | Expand all | Expand 10 after
795 ASSERT_TRUE(tree->SetWindowVisibility(w11_id, true)); 795 ASSERT_TRUE(tree->SetWindowVisibility(w11_id, true));
796 796
797 // Create |w2| as a child of |root_window| and modal to |w1| and leave it 797 // Create |w2| as a child of |root_window| and modal to |w1| and leave it
798 // hidden. 798 // hidden.
799 ClientWindowId w2_id = BuildClientWindowId(tree, 2); 799 ClientWindowId w2_id = BuildClientWindowId(tree, 2);
800 ASSERT_TRUE(tree->NewWindow(w2_id, ServerWindow::Properties())); 800 ASSERT_TRUE(tree->NewWindow(w2_id, ServerWindow::Properties()));
801 ServerWindow* w2 = tree->GetWindowByClientId(w2_id); 801 ServerWindow* w2 = tree->GetWindowByClientId(w2_id);
802 w2->SetBounds(gfx::Rect(50, 10, 10, 10)); 802 w2->SetBounds(gfx::Rect(50, 10, 10, 10));
803 ASSERT_TRUE(tree->AddWindow(root_window_id, w2_id)); 803 ASSERT_TRUE(tree->AddWindow(root_window_id, w2_id));
804 ASSERT_TRUE(tree->AddTransientWindow(w1_id, w2_id)); 804 ASSERT_TRUE(tree->AddTransientWindow(w1_id, w2_id));
805 ASSERT_TRUE(tree->SetModalType(w2_id, MODAL_TYPE_WINDOW)); 805 ASSERT_TRUE(tree->SetModalType(w2, MODAL_TYPE_WINDOW));
806 806
807 // Set capture to |w11|. 807 // Set capture to |w11|.
808 DispatchEventWithoutAck(CreatePointerDownEvent(25, 25)); 808 DispatchEventWithoutAck(CreatePointerDownEvent(25, 25));
809 ASSERT_TRUE(tree->SetCapture(w11_id)); 809 ASSERT_TRUE(tree->SetCapture(w11_id));
810 EXPECT_EQ(w11, GetCaptureWindow(display)); 810 EXPECT_EQ(w11, GetCaptureWindow(display));
811 AckPreviousEvent(); 811 AckPreviousEvent();
812 812
813 // Make |w2| visible. This should release capture as capture is set to a 813 // Make |w2| visible. This should release capture as capture is set to a
814 // descendant of the modal parent. 814 // descendant of the modal parent.
815 ASSERT_TRUE(tree->SetWindowVisibility(w2_id, true)); 815 ASSERT_TRUE(tree->SetWindowVisibility(w2_id, true));
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
848 848
849 // Set capture to |w11|. 849 // Set capture to |w11|.
850 DispatchEventWithoutAck(CreatePointerDownEvent(25, 25)); 850 DispatchEventWithoutAck(CreatePointerDownEvent(25, 25));
851 ASSERT_TRUE(tree->SetCapture(w11_id)); 851 ASSERT_TRUE(tree->SetCapture(w11_id));
852 EXPECT_EQ(w11, GetCaptureWindow(display)); 852 EXPECT_EQ(w11, GetCaptureWindow(display));
853 AckPreviousEvent(); 853 AckPreviousEvent();
854 854
855 // Set |w2| modal to |w1|. This should release the capture as the capture is 855 // Set |w2| modal to |w1|. This should release the capture as the capture is
856 // set to a descendant of the modal parent. 856 // set to a descendant of the modal parent.
857 ASSERT_TRUE(tree->AddTransientWindow(w1_id, w2_id)); 857 ASSERT_TRUE(tree->AddTransientWindow(w1_id, w2_id));
858 ASSERT_TRUE(tree->SetModalType(w2_id, MODAL_TYPE_WINDOW)); 858 ASSERT_TRUE(tree->SetModalType(w2, MODAL_TYPE_WINDOW));
859 EXPECT_EQ(nullptr, GetCaptureWindow(display)); 859 EXPECT_EQ(nullptr, GetCaptureWindow(display));
860 } 860 }
861 861
862 // Tests that showing a modal window does not change capture if the capture is 862 // Tests that showing a modal window does not change capture if the capture is
863 // not on a descendant of the modal parent. 863 // not on a descendant of the modal parent.
864 TEST_F(WindowTreeTest, ShowModalWindowWithNonDescendantCapture) { 864 TEST_F(WindowTreeTest, ShowModalWindowWithNonDescendantCapture) {
865 TestWindowTreeClient* embed_client = nullptr; 865 TestWindowTreeClient* embed_client = nullptr;
866 WindowTree* tree = nullptr; 866 WindowTree* tree = nullptr;
867 ServerWindow* w1 = nullptr; 867 ServerWindow* w1 = nullptr;
868 EXPECT_NO_FATAL_FAILURE(SetupEventTargeting(&embed_client, &tree, &w1)); 868 EXPECT_NO_FATAL_FAILURE(SetupEventTargeting(&embed_client, &tree, &w1));
869 869
870 w1->SetBounds(gfx::Rect(10, 10, 30, 30)); 870 w1->SetBounds(gfx::Rect(10, 10, 30, 30));
871 const ServerWindow* root_window = *tree->roots().begin(); 871 const ServerWindow* root_window = *tree->roots().begin();
872 ClientWindowId root_window_id = ClientWindowIdForWindow(tree, root_window); 872 ClientWindowId root_window_id = ClientWindowIdForWindow(tree, root_window);
873 ClientWindowId w1_id = ClientWindowIdForWindow(tree, w1); 873 ClientWindowId w1_id = ClientWindowIdForWindow(tree, w1);
874 Display* display = tree->GetDisplay(w1); 874 Display* display = tree->GetDisplay(w1);
875 875
876 // Create |w2| as a child of |root_window| and modal to |w1| and leave it 876 // Create |w2| as a child of |root_window| and modal to |w1| and leave it
877 // hidden. 877 // hidden.
878 ClientWindowId w2_id = BuildClientWindowId(tree, 2); 878 ClientWindowId w2_id = BuildClientWindowId(tree, 2);
879 ASSERT_TRUE(tree->NewWindow(w2_id, ServerWindow::Properties())); 879 ASSERT_TRUE(tree->NewWindow(w2_id, ServerWindow::Properties()));
880 ServerWindow* w2 = tree->GetWindowByClientId(w2_id); 880 ServerWindow* w2 = tree->GetWindowByClientId(w2_id);
881 w2->SetBounds(gfx::Rect(50, 10, 10, 10)); 881 w2->SetBounds(gfx::Rect(50, 10, 10, 10));
882 ASSERT_TRUE(tree->AddWindow(root_window_id, w2_id)); 882 ASSERT_TRUE(tree->AddWindow(root_window_id, w2_id));
883 ASSERT_TRUE(tree->AddTransientWindow(w1_id, w2_id)); 883 ASSERT_TRUE(tree->AddTransientWindow(w1_id, w2_id));
884 ASSERT_TRUE(tree->SetModalType(w2_id, MODAL_TYPE_WINDOW)); 884 ASSERT_TRUE(tree->SetModalType(w2, MODAL_TYPE_WINDOW));
885 885
886 // Create |w3| as a child of |root_window| and make it visible. 886 // Create |w3| as a child of |root_window| and make it visible.
887 ClientWindowId w3_id = BuildClientWindowId(tree, 3); 887 ClientWindowId w3_id = BuildClientWindowId(tree, 3);
888 ASSERT_TRUE(tree->NewWindow(w3_id, ServerWindow::Properties())); 888 ASSERT_TRUE(tree->NewWindow(w3_id, ServerWindow::Properties()));
889 ServerWindow* w3 = tree->GetWindowByClientId(w3_id); 889 ServerWindow* w3 = tree->GetWindowByClientId(w3_id);
890 w3->SetBounds(gfx::Rect(70, 10, 10, 10)); 890 w3->SetBounds(gfx::Rect(70, 10, 10, 10));
891 ASSERT_TRUE(tree->AddWindow(root_window_id, w3_id)); 891 ASSERT_TRUE(tree->AddWindow(root_window_id, w3_id));
892 ASSERT_TRUE(tree->SetWindowVisibility(w3_id, true)); 892 ASSERT_TRUE(tree->SetWindowVisibility(w3_id, true));
893 893
894 // Set capture to |w3|. 894 // Set capture to |w3|.
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
934 934
935 // Set capture to |w3|. 935 // Set capture to |w3|.
936 DispatchEventWithoutAck(CreatePointerDownEvent(25, 25)); 936 DispatchEventWithoutAck(CreatePointerDownEvent(25, 25));
937 ASSERT_TRUE(tree->SetCapture(w3_id)); 937 ASSERT_TRUE(tree->SetCapture(w3_id));
938 EXPECT_EQ(w3, GetCaptureWindow(display)); 938 EXPECT_EQ(w3, GetCaptureWindow(display));
939 AckPreviousEvent(); 939 AckPreviousEvent();
940 940
941 // Set |w2| modal to |w1|. This should not release the capture as the capture 941 // Set |w2| modal to |w1|. This should not release the capture as the capture
942 // is not set to a descendant of the modal parent. 942 // is not set to a descendant of the modal parent.
943 ASSERT_TRUE(tree->AddTransientWindow(w1_id, w2_id)); 943 ASSERT_TRUE(tree->AddTransientWindow(w1_id, w2_id));
944 ASSERT_TRUE(tree->SetModalType(w2_id, MODAL_TYPE_WINDOW)); 944 ASSERT_TRUE(tree->SetModalType(w2, MODAL_TYPE_WINDOW));
945 EXPECT_EQ(w3, GetCaptureWindow(display)); 945 EXPECT_EQ(w3, GetCaptureWindow(display));
946 } 946 }
947 947
948 // Tests that showing a system modal window releases the capture. 948 // Tests that showing a system modal window releases the capture.
949 TEST_F(WindowTreeTest, ShowSystemModalWindowWithCapture) { 949 TEST_F(WindowTreeTest, ShowSystemModalWindowWithCapture) {
950 TestWindowTreeClient* embed_client = nullptr; 950 TestWindowTreeClient* embed_client = nullptr;
951 WindowTree* tree = nullptr; 951 WindowTree* tree = nullptr;
952 ServerWindow* w1 = nullptr; 952 ServerWindow* w1 = nullptr;
953 EXPECT_NO_FATAL_FAILURE(SetupEventTargeting(&embed_client, &tree, &w1)); 953 EXPECT_NO_FATAL_FAILURE(SetupEventTargeting(&embed_client, &tree, &w1));
954 954
955 w1->SetBounds(gfx::Rect(10, 10, 10, 10)); 955 w1->SetBounds(gfx::Rect(10, 10, 10, 10));
956 const ServerWindow* root_window = *tree->roots().begin(); 956 const ServerWindow* root_window = *tree->roots().begin();
957 ClientWindowId root_window_id = ClientWindowIdForWindow(tree, root_window); 957 ClientWindowId root_window_id = ClientWindowIdForWindow(tree, root_window);
958 ClientWindowId w1_id = ClientWindowIdForWindow(tree, w1); 958 ClientWindowId w1_id = ClientWindowIdForWindow(tree, w1);
959 Display* display = tree->GetDisplay(w1); 959 Display* display = tree->GetDisplay(w1);
960 960
961 // Create a system modal window |w2| as a child of |root_window| and leave it 961 // Create a system modal window |w2| as a child of |root_window| and leave it
962 // hidden. 962 // hidden.
963 ClientWindowId w2_id = BuildClientWindowId(tree, 2); 963 ClientWindowId w2_id = BuildClientWindowId(tree, 2);
964 ASSERT_TRUE(tree->NewWindow(w2_id, ServerWindow::Properties())); 964 ASSERT_TRUE(tree->NewWindow(w2_id, ServerWindow::Properties()));
965 ServerWindow* w2 = tree->GetWindowByClientId(w2_id); 965 ServerWindow* w2 = tree->GetWindowByClientId(w2_id);
966 w2->SetBounds(gfx::Rect(30, 10, 10, 10)); 966 w2->SetBounds(gfx::Rect(30, 10, 10, 10));
967 ASSERT_TRUE(tree->AddWindow(root_window_id, w2_id)); 967 ASSERT_TRUE(tree->AddWindow(root_window_id, w2_id));
968 ASSERT_TRUE(tree->SetModalType(w2_id, MODAL_TYPE_SYSTEM)); 968 ASSERT_TRUE(tree->SetModalType(w2, MODAL_TYPE_SYSTEM));
969 969
970 // Set capture to |w1|. 970 // Set capture to |w1|.
971 DispatchEventWithoutAck(CreatePointerDownEvent(15, 15)); 971 DispatchEventWithoutAck(CreatePointerDownEvent(15, 15));
972 ASSERT_TRUE(tree->SetCapture(w1_id)); 972 ASSERT_TRUE(tree->SetCapture(w1_id));
973 EXPECT_EQ(w1, GetCaptureWindow(display)); 973 EXPECT_EQ(w1, GetCaptureWindow(display));
974 AckPreviousEvent(); 974 AckPreviousEvent();
975 975
976 // Make |w2| visible. This should release capture as it is system modal 976 // Make |w2| visible. This should release capture as it is system modal
977 // window. 977 // window.
978 ASSERT_TRUE(tree->SetWindowVisibility(w2_id, true)); 978 ASSERT_TRUE(tree->SetWindowVisibility(w2_id, true));
(...skipping 21 matching lines...) Expand all
1000 ASSERT_TRUE(tree->AddWindow(root_window_id, w2_id)); 1000 ASSERT_TRUE(tree->AddWindow(root_window_id, w2_id));
1001 ASSERT_TRUE(tree->SetWindowVisibility(w2_id, true)); 1001 ASSERT_TRUE(tree->SetWindowVisibility(w2_id, true));
1002 1002
1003 // Set capture to |w1|. 1003 // Set capture to |w1|.
1004 DispatchEventWithoutAck(CreatePointerDownEvent(15, 15)); 1004 DispatchEventWithoutAck(CreatePointerDownEvent(15, 15));
1005 ASSERT_TRUE(tree->SetCapture(w1_id)); 1005 ASSERT_TRUE(tree->SetCapture(w1_id));
1006 EXPECT_EQ(w1, GetCaptureWindow(display)); 1006 EXPECT_EQ(w1, GetCaptureWindow(display));
1007 AckPreviousEvent(); 1007 AckPreviousEvent();
1008 1008
1009 // Make |w2| modal to system. This should release capture. 1009 // Make |w2| modal to system. This should release capture.
1010 ASSERT_TRUE(tree->SetModalType(w2_id, MODAL_TYPE_SYSTEM)); 1010 ASSERT_TRUE(tree->SetModalType(w2, MODAL_TYPE_SYSTEM));
1011 EXPECT_EQ(nullptr, GetCaptureWindow(display)); 1011 EXPECT_EQ(nullptr, GetCaptureWindow(display));
1012 } 1012 }
1013 1013
1014 // Tests that moving the capture window to a modal parent releases the capture 1014 // Tests that moving the capture window to a modal parent releases the capture
1015 // as capture cannot be blocked by a modal window. 1015 // as capture cannot be blocked by a modal window.
1016 TEST_F(WindowTreeTest, MoveCaptureWindowToModalParent) { 1016 TEST_F(WindowTreeTest, MoveCaptureWindowToModalParent) {
1017 TestWindowTreeClient* embed_client = nullptr; 1017 TestWindowTreeClient* embed_client = nullptr;
1018 WindowTree* tree = nullptr; 1018 WindowTree* tree = nullptr;
1019 ServerWindow* w1 = nullptr; 1019 ServerWindow* w1 = nullptr;
1020 EXPECT_NO_FATAL_FAILURE(SetupEventTargeting(&embed_client, &tree, &w1)); 1020 EXPECT_NO_FATAL_FAILURE(SetupEventTargeting(&embed_client, &tree, &w1));
(...skipping 14 matching lines...) Expand all
1035 1035
1036 ClientWindowId w3_id = BuildClientWindowId(tree, 3); 1036 ClientWindowId w3_id = BuildClientWindowId(tree, 3);
1037 ASSERT_TRUE(tree->NewWindow(w3_id, ServerWindow::Properties())); 1037 ASSERT_TRUE(tree->NewWindow(w3_id, ServerWindow::Properties()));
1038 ServerWindow* w3 = tree->GetWindowByClientId(w3_id); 1038 ServerWindow* w3 = tree->GetWindowByClientId(w3_id);
1039 w3->SetBounds(gfx::Rect(70, 10, 10, 10)); 1039 w3->SetBounds(gfx::Rect(70, 10, 10, 10));
1040 ASSERT_TRUE(tree->AddWindow(root_window_id, w3_id)); 1040 ASSERT_TRUE(tree->AddWindow(root_window_id, w3_id));
1041 ASSERT_TRUE(tree->SetWindowVisibility(w3_id, true)); 1041 ASSERT_TRUE(tree->SetWindowVisibility(w3_id, true));
1042 1042
1043 // Set |w2| modal to |w1|. 1043 // Set |w2| modal to |w1|.
1044 ASSERT_TRUE(tree->AddTransientWindow(w1_id, w2_id)); 1044 ASSERT_TRUE(tree->AddTransientWindow(w1_id, w2_id));
1045 ASSERT_TRUE(tree->SetModalType(w2_id, MODAL_TYPE_WINDOW)); 1045 ASSERT_TRUE(tree->SetModalType(w2, MODAL_TYPE_WINDOW));
1046 1046
1047 // Set capture to |w3|. 1047 // Set capture to |w3|.
1048 DispatchEventWithoutAck(CreatePointerDownEvent(25, 25)); 1048 DispatchEventWithoutAck(CreatePointerDownEvent(25, 25));
1049 ASSERT_TRUE(tree->SetCapture(w3_id)); 1049 ASSERT_TRUE(tree->SetCapture(w3_id));
1050 EXPECT_EQ(w3, GetCaptureWindow(display)); 1050 EXPECT_EQ(w3, GetCaptureWindow(display));
1051 AckPreviousEvent(); 1051 AckPreviousEvent();
1052 1052
1053 // Make |w3| child of |w1|. This should release capture as |w3| is now blocked 1053 // Make |w3| child of |w1|. This should release capture as |w3| is now blocked
1054 // by a modal window. 1054 // by a modal window.
1055 ASSERT_TRUE(tree->AddWindow(w1_id, w3_id)); 1055 ASSERT_TRUE(tree->AddWindow(w1_id, w3_id));
(...skipping 365 matching lines...) Expand 10 before | Expand all | Expand 10 after
1421 client->tracker()->changes()->clear(); 1421 client->tracker()->changes()->clear();
1422 } 1422 }
1423 1423
1424 // Client should not have got any messages after shutdown. 1424 // Client should not have got any messages after shutdown.
1425 EXPECT_TRUE(client->tracker()->changes()->empty()); 1425 EXPECT_TRUE(client->tracker()->changes()->empty());
1426 } 1426 }
1427 1427
1428 } // namespace test 1428 } // namespace test
1429 } // namespace ws 1429 } // namespace ws
1430 } // namespace ui 1430 } // namespace ui
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698