OLD | NEW |
| (Empty) |
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 | |
3 // found in the LICENSE file. | |
4 | |
5 #include "components/mus/public/cpp/tests/window_server_test_base.h" | |
6 | |
7 #include "base/bind.h" | |
8 #include "base/location.h" | |
9 #include "base/run_loop.h" | |
10 #include "base/single_thread_task_runner.h" | |
11 #include "base/test/test_timeouts.h" | |
12 #include "base/threading/thread_task_runner_handle.h" | |
13 #include "components/mus/public/cpp/window.h" | |
14 #include "components/mus/public/cpp/window_tree_client.h" | |
15 #include "components/mus/public/cpp/window_tree_host_factory.h" | |
16 #include "services/shell/public/cpp/connector.h" | |
17 | |
18 namespace mus { | |
19 namespace { | |
20 | |
21 base::RunLoop* current_run_loop = nullptr; | |
22 | |
23 void TimeoutRunLoop(const base::Closure& timeout_task, bool* timeout) { | |
24 CHECK(current_run_loop); | |
25 *timeout = true; | |
26 timeout_task.Run(); | |
27 } | |
28 | |
29 } // namespace | |
30 | |
31 WindowServerTestBase::WindowServerTestBase() | |
32 : most_recent_client_(nullptr), | |
33 window_manager_(nullptr), | |
34 window_manager_delegate_(nullptr), | |
35 window_manager_client_(nullptr), | |
36 window_tree_client_destroyed_(false) {} | |
37 | |
38 WindowServerTestBase::~WindowServerTestBase() {} | |
39 | |
40 // static | |
41 bool WindowServerTestBase::DoRunLoopWithTimeout() { | |
42 if (current_run_loop != nullptr) | |
43 return false; | |
44 | |
45 bool timeout = false; | |
46 base::RunLoop run_loop; | |
47 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( | |
48 FROM_HERE, base::Bind(&TimeoutRunLoop, run_loop.QuitClosure(), &timeout), | |
49 TestTimeouts::action_timeout()); | |
50 | |
51 current_run_loop = &run_loop; | |
52 current_run_loop->Run(); | |
53 current_run_loop = nullptr; | |
54 return !timeout; | |
55 } | |
56 | |
57 // static | |
58 bool WindowServerTestBase::QuitRunLoop() { | |
59 if (!current_run_loop) | |
60 return false; | |
61 | |
62 current_run_loop->Quit(); | |
63 current_run_loop = nullptr; | |
64 return true; | |
65 } | |
66 | |
67 void WindowServerTestBase::SetUp() { | |
68 WindowServerShellTestBase::SetUp(); | |
69 | |
70 CreateWindowTreeHost(connector(), this, &host_, this); | |
71 | |
72 ASSERT_TRUE(DoRunLoopWithTimeout()); // RunLoop should be quit by OnEmbed(). | |
73 std::swap(window_manager_, most_recent_client_); | |
74 } | |
75 | |
76 bool WindowServerTestBase::AcceptConnection(shell::Connection* connection) { | |
77 connection->AddInterface<mojom::WindowTreeClient>(this); | |
78 return true; | |
79 } | |
80 | |
81 void WindowServerTestBase::OnEmbed(Window* root) { | |
82 most_recent_client_ = root->window_tree(); | |
83 EXPECT_TRUE(QuitRunLoop()); | |
84 ASSERT_TRUE(window_manager_client_); | |
85 window_manager_client_->AddActivationParent(root); | |
86 } | |
87 | |
88 void WindowServerTestBase::OnDidDestroyClient(WindowTreeClient* client) { | |
89 window_tree_client_destroyed_ = true; | |
90 } | |
91 | |
92 void WindowServerTestBase::OnEventObserved(const ui::Event& event, | |
93 Window* target) {} | |
94 | |
95 void WindowServerTestBase::SetWindowManagerClient(WindowManagerClient* client) { | |
96 window_manager_client_ = client; | |
97 } | |
98 | |
99 bool WindowServerTestBase::OnWmSetBounds(Window* window, gfx::Rect* bounds) { | |
100 return window_manager_delegate_ | |
101 ? window_manager_delegate_->OnWmSetBounds(window, bounds) | |
102 : true; | |
103 } | |
104 | |
105 bool WindowServerTestBase::OnWmSetProperty( | |
106 Window* window, | |
107 const std::string& name, | |
108 std::unique_ptr<std::vector<uint8_t>>* new_data) { | |
109 return window_manager_delegate_ | |
110 ? window_manager_delegate_->OnWmSetProperty(window, name, new_data) | |
111 : true; | |
112 } | |
113 | |
114 Window* WindowServerTestBase::OnWmCreateTopLevelWindow( | |
115 std::map<std::string, std::vector<uint8_t>>* properties) { | |
116 return window_manager_delegate_ | |
117 ? window_manager_delegate_->OnWmCreateTopLevelWindow(properties) | |
118 : nullptr; | |
119 } | |
120 | |
121 void WindowServerTestBase::OnWmClientJankinessChanged( | |
122 const std::set<Window*>& client_windows, | |
123 bool janky) { | |
124 if (window_manager_delegate_) | |
125 window_manager_delegate_->OnWmClientJankinessChanged(client_windows, janky); | |
126 } | |
127 | |
128 void WindowServerTestBase::OnWmNewDisplay(Window* window, | |
129 const display::Display& display) { | |
130 if (window_manager_delegate_) | |
131 window_manager_delegate_->OnWmNewDisplay(window, display); | |
132 } | |
133 | |
134 void WindowServerTestBase::OnAccelerator(uint32_t id, const ui::Event& event) { | |
135 if (window_manager_delegate_) | |
136 window_manager_delegate_->OnAccelerator(id, event); | |
137 } | |
138 | |
139 void WindowServerTestBase::Create(shell::Connection* connection, | |
140 mojom::WindowTreeClientRequest request) { | |
141 new WindowTreeClient(this, nullptr, std::move(request)); | |
142 } | |
143 | |
144 } // namespace mus | |
OLD | NEW |