| OLD | NEW |
| 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/atomicops.h" | 9 #include "base/atomicops.h" |
| 10 #include "base/macros.h" | 10 #include "base/macros.h" |
| (...skipping 18 matching lines...) Expand all Loading... |
| 29 #include "services/ui/ws/window_tree.h" | 29 #include "services/ui/ws/window_tree.h" |
| 30 #include "services/ui/ws/window_tree_binding.h" | 30 #include "services/ui/ws/window_tree_binding.h" |
| 31 #include "testing/gtest/include/gtest/gtest.h" | 31 #include "testing/gtest/include/gtest/gtest.h" |
| 32 #include "ui/gfx/geometry/rect.h" | 32 #include "ui/gfx/geometry/rect.h" |
| 33 | 33 |
| 34 namespace ui { | 34 namespace ui { |
| 35 namespace ws { | 35 namespace ws { |
| 36 namespace test { | 36 namespace test { |
| 37 namespace { | 37 namespace { |
| 38 | 38 |
| 39 // Stub PlatformScreen implementation so PlatformScreen::GetInstance() doesn't | |
| 40 // fail. | |
| 41 class TestPlatformScreen : public display::PlatformScreen { | |
| 42 public: | |
| 43 TestPlatformScreen() {} | |
| 44 ~TestPlatformScreen() override {} | |
| 45 | |
| 46 // display::PlatformScreen: | |
| 47 void AddInterfaces(service_manager::InterfaceRegistry* registry) override {} | |
| 48 void Init(display::PlatformScreenDelegate* delegate) override {} | |
| 49 void RequestCloseDisplay(int64_t display_id) override {} | |
| 50 int64_t GetPrimaryDisplayId() const override { return 1; } | |
| 51 | |
| 52 private: | |
| 53 DISALLOW_COPY_AND_ASSIGN(TestPlatformScreen); | |
| 54 }; | |
| 55 | |
| 56 class TestDisplayManagerObserver : public mojom::DisplayManagerObserver { | 39 class TestDisplayManagerObserver : public mojom::DisplayManagerObserver { |
| 57 public: | 40 public: |
| 58 TestDisplayManagerObserver() {} | 41 TestDisplayManagerObserver() {} |
| 59 ~TestDisplayManagerObserver() override {} | 42 ~TestDisplayManagerObserver() override {} |
| 60 | 43 |
| 61 std::string GetAndClearObserverCalls() { | 44 std::string GetAndClearObserverCalls() { |
| 62 std::string result; | 45 std::string result; |
| 63 std::swap(observer_calls_, result); | 46 std::swap(observer_calls_, result); |
| 64 return result; | 47 return result; |
| 65 } | 48 } |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 114 class UserDisplayManagerTest : public testing::Test { | 97 class UserDisplayManagerTest : public testing::Test { |
| 115 public: | 98 public: |
| 116 UserDisplayManagerTest() {} | 99 UserDisplayManagerTest() {} |
| 117 ~UserDisplayManagerTest() override {} | 100 ~UserDisplayManagerTest() override {} |
| 118 | 101 |
| 119 WindowServer* window_server() { return ws_test_helper_.window_server(); } | 102 WindowServer* window_server() { return ws_test_helper_.window_server(); } |
| 120 TestWindowServerDelegate* window_server_delegate() { | 103 TestWindowServerDelegate* window_server_delegate() { |
| 121 return ws_test_helper_.window_server_delegate(); | 104 return ws_test_helper_.window_server_delegate(); |
| 122 } | 105 } |
| 123 | 106 |
| 107 TestPlatformScreen& platform_screen() { return platform_screen_; } |
| 108 |
| 124 private: | 109 private: |
| 110 // testing::Test: |
| 111 void SetUp() override { |
| 112 platform_screen_.Init(window_server()->display_manager()); |
| 113 } |
| 114 |
| 115 WindowServerTestHelper ws_test_helper_; |
| 125 TestPlatformScreen platform_screen_; | 116 TestPlatformScreen platform_screen_; |
| 126 WindowServerTestHelper ws_test_helper_; | |
| 127 DISALLOW_COPY_AND_ASSIGN(UserDisplayManagerTest); | 117 DISALLOW_COPY_AND_ASSIGN(UserDisplayManagerTest); |
| 128 }; | 118 }; |
| 129 | 119 |
| 130 TEST_F(UserDisplayManagerTest, OnlyNotifyWhenFrameDecorationsSet) { | 120 TEST_F(UserDisplayManagerTest, OnlyNotifyWhenFrameDecorationsSet) { |
| 131 window_server_delegate()->CreateDisplays(1); | 121 platform_screen().AddDisplay(); |
| 132 | 122 |
| 133 const UserId kUserId1 = "2"; | 123 const UserId kUserId1 = "2"; |
| 134 TestDisplayManagerObserver display_manager_observer1; | 124 TestDisplayManagerObserver display_manager_observer1; |
| 135 DisplayManager* display_manager = window_server()->display_manager(); | 125 DisplayManager* display_manager = window_server()->display_manager(); |
| 136 AddWindowManager(window_server(), kUserId1); | 126 AddWindowManager(window_server(), kUserId1); |
| 137 UserDisplayManager* user_display_manager1 = | 127 UserDisplayManager* user_display_manager1 = |
| 138 display_manager->GetUserDisplayManager(kUserId1); | 128 display_manager->GetUserDisplayManager(kUserId1); |
| 139 ASSERT_TRUE(user_display_manager1); | 129 ASSERT_TRUE(user_display_manager1); |
| 140 UserDisplayManagerTestApi(user_display_manager1) | 130 UserDisplayManagerTestApi(user_display_manager1) |
| 141 .SetTestObserver(&display_manager_observer1); | 131 .SetTestObserver(&display_manager_observer1); |
| 142 // Observer should not have been notified yet. | 132 // Observer should not have been notified yet. |
| 143 EXPECT_EQ(std::string(), | 133 EXPECT_EQ(std::string(), |
| 144 display_manager_observer1.GetAndClearObserverCalls()); | 134 display_manager_observer1.GetAndClearObserverCalls()); |
| 145 | 135 |
| 146 // Set the frame decoration values, which should trigger sending immediately. | 136 // Set the frame decoration values, which should trigger sending immediately. |
| 147 ASSERT_EQ(1u, display_manager->displays().size()); | 137 ASSERT_EQ(1u, display_manager->displays().size()); |
| 148 window_server() | 138 window_server() |
| 149 ->window_manager_window_tree_factory_set() | 139 ->window_manager_window_tree_factory_set() |
| 150 ->GetWindowManagerStateForUser(kUserId1) | 140 ->GetWindowManagerStateForUser(kUserId1) |
| 151 ->SetFrameDecorationValues(CreateDefaultFrameDecorationValues()); | 141 ->SetFrameDecorationValues(CreateDefaultFrameDecorationValues()); |
| 152 EXPECT_EQ("OnDisplays 1", | 142 EXPECT_EQ("OnDisplays 1", |
| 153 display_manager_observer1.GetAndClearObserverCalls()); | 143 display_manager_observer1.GetAndClearObserverCalls()); |
| 154 | 144 |
| 155 UserDisplayManagerTestApi(user_display_manager1).SetTestObserver(nullptr); | 145 UserDisplayManagerTestApi(user_display_manager1).SetTestObserver(nullptr); |
| 156 } | 146 } |
| 157 | 147 |
| 158 TEST_F(UserDisplayManagerTest, AddObserverAfterFrameDecorationsSet) { | 148 TEST_F(UserDisplayManagerTest, AddObserverAfterFrameDecorationsSet) { |
| 159 window_server_delegate()->CreateDisplays(1); | 149 platform_screen().AddDisplay(); |
| 160 | 150 |
| 161 const UserId kUserId1 = "2"; | 151 const UserId kUserId1 = "2"; |
| 162 TestDisplayManagerObserver display_manager_observer1; | 152 TestDisplayManagerObserver display_manager_observer1; |
| 163 DisplayManager* display_manager = window_server()->display_manager(); | 153 DisplayManager* display_manager = window_server()->display_manager(); |
| 164 AddWindowManager(window_server(), kUserId1); | 154 AddWindowManager(window_server(), kUserId1); |
| 165 UserDisplayManager* user_display_manager1 = | 155 UserDisplayManager* user_display_manager1 = |
| 166 display_manager->GetUserDisplayManager(kUserId1); | 156 display_manager->GetUserDisplayManager(kUserId1); |
| 167 ASSERT_TRUE(user_display_manager1); | 157 ASSERT_TRUE(user_display_manager1); |
| 168 ASSERT_EQ(1u, display_manager->displays().size()); | 158 ASSERT_EQ(1u, display_manager->displays().size()); |
| 169 window_server() | 159 window_server() |
| 170 ->window_manager_window_tree_factory_set() | 160 ->window_manager_window_tree_factory_set() |
| 171 ->GetWindowManagerStateForUser(kUserId1) | 161 ->GetWindowManagerStateForUser(kUserId1) |
| 172 ->SetFrameDecorationValues(CreateDefaultFrameDecorationValues()); | 162 ->SetFrameDecorationValues(CreateDefaultFrameDecorationValues()); |
| 173 | 163 |
| 174 UserDisplayManagerTestApi(user_display_manager1) | 164 UserDisplayManagerTestApi(user_display_manager1) |
| 175 .SetTestObserver(&display_manager_observer1); | 165 .SetTestObserver(&display_manager_observer1); |
| 176 EXPECT_EQ("OnDisplays 1", | 166 EXPECT_EQ("OnDisplays 1", |
| 177 display_manager_observer1.GetAndClearObserverCalls()); | 167 display_manager_observer1.GetAndClearObserverCalls()); |
| 178 | 168 |
| 179 UserDisplayManagerTestApi(user_display_manager1).SetTestObserver(nullptr); | 169 UserDisplayManagerTestApi(user_display_manager1).SetTestObserver(nullptr); |
| 180 } | 170 } |
| 181 | 171 |
| 182 TEST_F(UserDisplayManagerTest, AddRemoveDisplay) { | 172 TEST_F(UserDisplayManagerTest, AddRemoveDisplay) { |
| 183 window_server_delegate()->CreateDisplays(1); | 173 platform_screen().AddDisplay(); |
| 184 | 174 |
| 185 const UserId kUserId1 = "2"; | 175 const UserId kUserId1 = "2"; |
| 186 TestDisplayManagerObserver display_manager_observer1; | 176 TestDisplayManagerObserver display_manager_observer1; |
| 187 DisplayManager* display_manager = window_server()->display_manager(); | 177 DisplayManager* display_manager = window_server()->display_manager(); |
| 188 AddWindowManager(window_server(), kUserId1); | 178 AddWindowManager(window_server(), kUserId1); |
| 189 UserDisplayManager* user_display_manager1 = | 179 UserDisplayManager* user_display_manager1 = |
| 190 display_manager->GetUserDisplayManager(kUserId1); | 180 display_manager->GetUserDisplayManager(kUserId1); |
| 191 ASSERT_TRUE(user_display_manager1); | 181 ASSERT_TRUE(user_display_manager1); |
| 192 ASSERT_EQ(1u, display_manager->displays().size()); | 182 ASSERT_EQ(1u, display_manager->displays().size()); |
| 193 window_server() | 183 window_server() |
| 194 ->window_manager_window_tree_factory_set() | 184 ->window_manager_window_tree_factory_set() |
| 195 ->GetWindowManagerStateForUser(kUserId1) | 185 ->GetWindowManagerStateForUser(kUserId1) |
| 196 ->SetFrameDecorationValues(CreateDefaultFrameDecorationValues()); | 186 ->SetFrameDecorationValues(CreateDefaultFrameDecorationValues()); |
| 197 UserDisplayManagerTestApi(user_display_manager1) | 187 UserDisplayManagerTestApi(user_display_manager1) |
| 198 .SetTestObserver(&display_manager_observer1); | 188 .SetTestObserver(&display_manager_observer1); |
| 199 EXPECT_EQ("OnDisplays 1", | 189 EXPECT_EQ("OnDisplays 1", |
| 200 display_manager_observer1.GetAndClearObserverCalls()); | 190 display_manager_observer1.GetAndClearObserverCalls()); |
| 201 | 191 |
| 202 // Add another display. | 192 // Add another display. |
| 203 Display* display2 = new Display(window_server()); | 193 const int64_t second_display_id = platform_screen().AddDisplay(); |
| 204 display2->Init(PlatformDisplayInitParams(), nullptr); | |
| 205 | 194 |
| 206 // Observer should be notified immediately as frame decorations were set. | 195 // Observer should be notified immediately as frame decorations were set. |
| 207 EXPECT_EQ("OnDisplaysChanged 2", | 196 EXPECT_EQ("OnDisplaysChanged 2", |
| 208 display_manager_observer1.GetAndClearObserverCalls()); | 197 display_manager_observer1.GetAndClearObserverCalls()); |
| 209 | 198 |
| 210 // Remove the display and verify observer is notified. | 199 // Remove the display and verify observer is notified. |
| 211 display_manager->DestroyDisplay(display2); | 200 platform_screen().RemoveDisplay(second_display_id); |
| 212 display2 = nullptr; | |
| 213 EXPECT_EQ("OnDisplayRemoved 2", | 201 EXPECT_EQ("OnDisplayRemoved 2", |
| 214 display_manager_observer1.GetAndClearObserverCalls()); | 202 display_manager_observer1.GetAndClearObserverCalls()); |
| 215 | 203 |
| 216 UserDisplayManagerTestApi(user_display_manager1).SetTestObserver(nullptr); | 204 UserDisplayManagerTestApi(user_display_manager1).SetTestObserver(nullptr); |
| 217 } | 205 } |
| 218 | 206 |
| 219 TEST_F(UserDisplayManagerTest, NegativeCoordinates) { | 207 TEST_F(UserDisplayManagerTest, NegativeCoordinates) { |
| 220 window_server_delegate()->CreateDisplays(1); | 208 platform_screen().AddDisplay(); |
| 221 | 209 |
| 222 const UserId kUserId1 = "2"; | 210 const UserId kUserId1 = "2"; |
| 223 TestDisplayManagerObserver display_manager_observer1; | 211 TestDisplayManagerObserver display_manager_observer1; |
| 224 DisplayManager* display_manager = window_server()->display_manager(); | 212 DisplayManager* display_manager = window_server()->display_manager(); |
| 225 AddWindowManager(window_server(), kUserId1); | 213 AddWindowManager(window_server(), kUserId1); |
| 226 UserDisplayManager* user_display_manager1 = | 214 UserDisplayManager* user_display_manager1 = |
| 227 display_manager->GetUserDisplayManager(kUserId1); | 215 display_manager->GetUserDisplayManager(kUserId1); |
| 228 ASSERT_TRUE(user_display_manager1); | 216 ASSERT_TRUE(user_display_manager1); |
| 229 | 217 |
| 230 user_display_manager1->OnMouseCursorLocationChanged(gfx::Point(-10, -11)); | 218 user_display_manager1->OnMouseCursorLocationChanged(gfx::Point(-10, -11)); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 241 base::subtle::Atomic32 location = | 229 base::subtle::Atomic32 location = |
| 242 base::subtle::NoBarrier_Load(cursor_location_memory); | 230 base::subtle::NoBarrier_Load(cursor_location_memory); |
| 243 EXPECT_EQ(gfx::Point(static_cast<int16_t>(location >> 16), | 231 EXPECT_EQ(gfx::Point(static_cast<int16_t>(location >> 16), |
| 244 static_cast<int16_t>(location & 0xFFFF)), | 232 static_cast<int16_t>(location & 0xFFFF)), |
| 245 gfx::Point(-10, -11)); | 233 gfx::Point(-10, -11)); |
| 246 } | 234 } |
| 247 | 235 |
| 248 } // namespace test | 236 } // namespace test |
| 249 } // namespace ws | 237 } // namespace ws |
| 250 } // namespace ui | 238 } // namespace ui |
| OLD | NEW |