| OLD | NEW |
| 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 "components/mus/ws/window_tree.h" | 5 #include "components/mus/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 894 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 905 EXPECT_EQ(w3, GetCaptureWindow(display)); | 905 EXPECT_EQ(w3, GetCaptureWindow(display)); |
| 906 AckPreviousEvent(); | 906 AckPreviousEvent(); |
| 907 | 907 |
| 908 // Set |w2| modal to |w1|. This should not release the capture as the capture | 908 // Set |w2| modal to |w1|. This should not release the capture as the capture |
| 909 // is not set to a descendant of the modal parent. | 909 // is not set to a descendant of the modal parent. |
| 910 ASSERT_TRUE(tree->AddTransientWindow(w1_id, w2_id)); | 910 ASSERT_TRUE(tree->AddTransientWindow(w1_id, w2_id)); |
| 911 ASSERT_TRUE(tree->SetModal(w2_id)); | 911 ASSERT_TRUE(tree->SetModal(w2_id)); |
| 912 EXPECT_EQ(w3, GetCaptureWindow(display)); | 912 EXPECT_EQ(w3, GetCaptureWindow(display)); |
| 913 } | 913 } |
| 914 | 914 |
| 915 // Tests that showing a system modal window releases the capture. |
| 916 TEST_F(WindowTreeTest, ShowSystemModalWindowWithCapture) { |
| 917 TestWindowTreeClient* embed_connection = nullptr; |
| 918 WindowTree* tree = nullptr; |
| 919 ServerWindow* w1 = nullptr; |
| 920 EXPECT_NO_FATAL_FAILURE(SetupEventTargeting(&embed_connection, &tree, &w1)); |
| 921 |
| 922 w1->SetBounds(gfx::Rect(10, 10, 10, 10)); |
| 923 const ServerWindow* root_window = *tree->roots().begin(); |
| 924 ClientWindowId root_window_id = ClientWindowIdForWindow(tree, root_window); |
| 925 ClientWindowId w1_id = ClientWindowIdForWindow(tree, w1); |
| 926 Display* display = tree->GetDisplay(w1); |
| 927 |
| 928 // Create a system modal window |w2| as a child of |root_window| and leave it |
| 929 // hidden. |
| 930 ClientWindowId w2_id = BuildClientWindowId(tree, 2); |
| 931 ASSERT_TRUE(tree->NewWindow(w2_id, ServerWindow::Properties())); |
| 932 ServerWindow* w2 = tree->GetWindowByClientId(w2_id); |
| 933 w2->SetBounds(gfx::Rect(30, 10, 10, 10)); |
| 934 ASSERT_TRUE(tree->AddWindow(root_window_id, w2_id)); |
| 935 ASSERT_TRUE(tree->SetModal(w2_id)); |
| 936 |
| 937 // Set capture to |w1|. |
| 938 DispatchEventWithoutAck(CreatePointerDownEvent(15, 15)); |
| 939 ASSERT_TRUE(tree->SetCapture(w1_id)); |
| 940 EXPECT_EQ(w1, GetCaptureWindow(display)); |
| 941 AckPreviousEvent(); |
| 942 |
| 943 // Make |w2| visible. This should release capture as it is system modal |
| 944 // window. |
| 945 ASSERT_TRUE(tree->SetWindowVisibility(w2_id, true)); |
| 946 EXPECT_EQ(nullptr, GetCaptureWindow(display)); |
| 947 } |
| 948 |
| 949 // Tests that setting a visible window as modal to system releases the capture. |
| 950 TEST_F(WindowTreeTest, VisibleWindowToSystemModalWithCapture) { |
| 951 TestWindowTreeClient* embed_connection = nullptr; |
| 952 WindowTree* tree = nullptr; |
| 953 ServerWindow* w1 = nullptr; |
| 954 EXPECT_NO_FATAL_FAILURE(SetupEventTargeting(&embed_connection, &tree, &w1)); |
| 955 |
| 956 w1->SetBounds(gfx::Rect(10, 10, 10, 10)); |
| 957 const ServerWindow* root_window = *tree->roots().begin(); |
| 958 ClientWindowId root_window_id = ClientWindowIdForWindow(tree, root_window); |
| 959 ClientWindowId w1_id = ClientWindowIdForWindow(tree, w1); |
| 960 Display* display = tree->GetDisplay(w1); |
| 961 |
| 962 // Create |w2| as a child of |root_window| and make it visible. |
| 963 ClientWindowId w2_id = BuildClientWindowId(tree, 2); |
| 964 ASSERT_TRUE(tree->NewWindow(w2_id, ServerWindow::Properties())); |
| 965 ServerWindow* w2 = tree->GetWindowByClientId(w2_id); |
| 966 w2->SetBounds(gfx::Rect(30, 10, 10, 10)); |
| 967 ASSERT_TRUE(tree->AddWindow(root_window_id, w2_id)); |
| 968 ASSERT_TRUE(tree->SetWindowVisibility(w2_id, true)); |
| 969 |
| 970 // Set capture to |w1|. |
| 971 DispatchEventWithoutAck(CreatePointerDownEvent(15, 15)); |
| 972 ASSERT_TRUE(tree->SetCapture(w1_id)); |
| 973 EXPECT_EQ(w1, GetCaptureWindow(display)); |
| 974 AckPreviousEvent(); |
| 975 |
| 976 // Make |w2| modal to system. This should release capture. |
| 977 ASSERT_TRUE(tree->SetModal(w2_id)); |
| 978 EXPECT_EQ(nullptr, GetCaptureWindow(display)); |
| 979 } |
| 980 |
| 915 // Tests that moving the capture window to a modal parent releases the capture | 981 // Tests that moving the capture window to a modal parent releases the capture |
| 916 // as capture cannot be blocked by a modal window. | 982 // as capture cannot be blocked by a modal window. |
| 917 TEST_F(WindowTreeTest, MoveCaptureWindowToModalParent) { | 983 TEST_F(WindowTreeTest, MoveCaptureWindowToModalParent) { |
| 918 TestWindowTreeClient* embed_connection = nullptr; | 984 TestWindowTreeClient* embed_connection = nullptr; |
| 919 WindowTree* tree = nullptr; | 985 WindowTree* tree = nullptr; |
| 920 ServerWindow* w1 = nullptr; | 986 ServerWindow* w1 = nullptr; |
| 921 EXPECT_NO_FATAL_FAILURE(SetupEventTargeting(&embed_connection, &tree, &w1)); | 987 EXPECT_NO_FATAL_FAILURE(SetupEventTargeting(&embed_connection, &tree, &w1)); |
| 922 | 988 |
| 923 w1->SetBounds(gfx::Rect(10, 10, 30, 30)); | 989 w1->SetBounds(gfx::Rect(10, 10, 30, 30)); |
| 924 const ServerWindow* root_window = *tree->roots().begin(); | 990 const ServerWindow* root_window = *tree->roots().begin(); |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 991 ASSERT_NE(new_opacity, unknown_window.opacity()); | 1057 ASSERT_NE(new_opacity, unknown_window.opacity()); |
| 992 | 1058 |
| 993 EXPECT_FALSE(tree->SetWindowOpacity( | 1059 EXPECT_FALSE(tree->SetWindowOpacity( |
| 994 ClientWindowId(WindowIdToTransportId(window_id)), new_opacity)); | 1060 ClientWindowId(WindowIdToTransportId(window_id)), new_opacity)); |
| 995 EXPECT_NE(new_opacity, unknown_window.opacity()); | 1061 EXPECT_NE(new_opacity, unknown_window.opacity()); |
| 996 } | 1062 } |
| 997 | 1063 |
| 998 } // namespace test | 1064 } // namespace test |
| 999 } // namespace ws | 1065 } // namespace ws |
| 1000 } // namespace mus | 1066 } // namespace mus |
| OLD | NEW |