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

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

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

Powered by Google App Engine
This is Rietveld 408576698