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 "ui/ozone/platform/wayland/fake_server.h" | 5 #include "ui/ozone/platform/wayland/fake_server.h" |
6 | 6 |
7 #include <sys/socket.h> | 7 #include <sys/socket.h> |
8 #include <wayland-server.h> | 8 #include <wayland-server.h> |
9 #include <xdg-shell-unstable-v5-server-protocol.h> | 9 #include <xdg-shell-unstable-v5-server-protocol.h> |
10 | 10 |
11 #include "base/bind.h" | 11 #include "base/bind.h" |
12 #include "base/files/scoped_file.h" | 12 #include "base/files/scoped_file.h" |
13 #include "base/strings/string_number_conversions.h" | 13 #include "base/strings/string_number_conversions.h" |
14 | 14 |
15 namespace wl { | 15 namespace wl { |
16 namespace { | 16 namespace { |
17 | 17 |
18 const uint32_t kCompositorVersion = 4; | 18 const uint32_t kCompositorVersion = 4; |
| 19 const uint32_t kSeatVersion = 4; |
19 const uint32_t kXdgShellVersion = 1; | 20 const uint32_t kXdgShellVersion = 1; |
20 | 21 |
21 void DestroyResource(wl_client* client, wl_resource* resource) { | 22 void DestroyResource(wl_client* client, wl_resource* resource) { |
22 wl_resource_destroy(resource); | 23 wl_resource_destroy(resource); |
23 } | 24 } |
24 | 25 |
25 // wl_compositor | 26 // wl_compositor |
26 | 27 |
27 void CreateSurface(wl_client* client, wl_resource* resource, uint32_t id) { | 28 void CreateSurface(wl_client* client, wl_resource* resource, uint32_t id) { |
28 auto compositor = | 29 auto compositor = |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
113 } | 114 } |
114 | 115 |
115 const struct xdg_shell_interface xdg_shell_impl = { | 116 const struct xdg_shell_interface xdg_shell_impl = { |
116 &DestroyResource, // destroy | 117 &DestroyResource, // destroy |
117 &UseUnstableVersion, // use_unstable_version | 118 &UseUnstableVersion, // use_unstable_version |
118 &GetXdgSurface, // get_xdg_surface | 119 &GetXdgSurface, // get_xdg_surface |
119 nullptr, // get_xdg_popup | 120 nullptr, // get_xdg_popup |
120 &Pong, // pong | 121 &Pong, // pong |
121 }; | 122 }; |
122 | 123 |
| 124 // wl_seat |
| 125 |
| 126 void GetPointer(wl_client* client, wl_resource* resource, uint32_t id) { |
| 127 auto seat = static_cast<MockSeat*>(wl_resource_get_user_data(resource)); |
| 128 wl_resource* pointer_resource = wl_resource_create( |
| 129 client, &wl_pointer_interface, wl_resource_get_version(resource), id); |
| 130 if (!pointer_resource) { |
| 131 wl_client_post_no_memory(client); |
| 132 return; |
| 133 } |
| 134 seat->pointer.reset(new MockPointer(pointer_resource)); |
| 135 } |
| 136 |
| 137 const struct wl_seat_interface seat_impl = { |
| 138 &GetPointer, // get_pointer |
| 139 nullptr, // get_keyboard |
| 140 nullptr, // get_touch, |
| 141 &DestroyResource, // release |
| 142 }; |
| 143 |
| 144 // wl_pointer |
| 145 |
| 146 const struct wl_pointer_interface pointer_impl = { |
| 147 nullptr, // set_cursor |
| 148 &DestroyResource, // release |
| 149 }; |
| 150 |
123 // xdg_surface | 151 // xdg_surface |
124 | 152 |
125 void SetTitle(wl_client* client, wl_resource* resource, const char* title) { | 153 void SetTitle(wl_client* client, wl_resource* resource, const char* title) { |
126 static_cast<MockXdgSurface*>(wl_resource_get_user_data(resource)) | 154 static_cast<MockXdgSurface*>(wl_resource_get_user_data(resource)) |
127 ->SetTitle(title); | 155 ->SetTitle(title); |
128 } | 156 } |
129 | 157 |
130 void SetAppId(wl_client* client, wl_resource* resource, const char* app_id) { | 158 void SetAppId(wl_client* client, wl_resource* resource, const char* app_id) { |
131 static_cast<MockXdgSurface*>(wl_resource_get_user_data(resource)) | 159 static_cast<MockXdgSurface*>(wl_resource_get_user_data(resource)) |
132 ->SetAppId(app_id); | 160 ->SetAppId(app_id); |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
200 if (xdg_surface && xdg_surface->resource()) | 228 if (xdg_surface && xdg_surface->resource()) |
201 wl_resource_destroy(xdg_surface->resource()); | 229 wl_resource_destroy(xdg_surface->resource()); |
202 } | 230 } |
203 | 231 |
204 MockSurface* MockSurface::FromResource(wl_resource* resource) { | 232 MockSurface* MockSurface::FromResource(wl_resource* resource) { |
205 if (!wl_resource_instance_of(resource, &wl_surface_interface, &surface_impl)) | 233 if (!wl_resource_instance_of(resource, &wl_surface_interface, &surface_impl)) |
206 return nullptr; | 234 return nullptr; |
207 return static_cast<MockSurface*>(wl_resource_get_user_data(resource)); | 235 return static_cast<MockSurface*>(wl_resource_get_user_data(resource)); |
208 } | 236 } |
209 | 237 |
| 238 MockPointer::MockPointer(wl_resource* resource) : ServerObject(resource) { |
| 239 wl_resource_set_implementation(resource, &pointer_impl, this, |
| 240 &ServerObject::OnResourceDestroyed); |
| 241 } |
| 242 |
| 243 MockPointer::~MockPointer() {} |
| 244 |
210 void GlobalDeleter::operator()(wl_global* global) { | 245 void GlobalDeleter::operator()(wl_global* global) { |
211 wl_global_destroy(global); | 246 wl_global_destroy(global); |
212 } | 247 } |
213 | 248 |
214 Global::Global(const wl_interface* interface, | 249 Global::Global(const wl_interface* interface, |
215 const void* implementation, | 250 const void* implementation, |
216 uint32_t version) | 251 uint32_t version) |
217 : interface_(interface), | 252 : interface_(interface), |
218 implementation_(implementation), | 253 implementation_(implementation), |
219 version_(version) {} | 254 version_(version) {} |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
252 | 287 |
253 MockCompositor::MockCompositor() | 288 MockCompositor::MockCompositor() |
254 : Global(&wl_compositor_interface, &compositor_impl, kCompositorVersion) {} | 289 : Global(&wl_compositor_interface, &compositor_impl, kCompositorVersion) {} |
255 | 290 |
256 MockCompositor::~MockCompositor() {} | 291 MockCompositor::~MockCompositor() {} |
257 | 292 |
258 void MockCompositor::AddSurface(scoped_ptr<MockSurface> surface) { | 293 void MockCompositor::AddSurface(scoped_ptr<MockSurface> surface) { |
259 surfaces_.push_back(std::move(surface)); | 294 surfaces_.push_back(std::move(surface)); |
260 } | 295 } |
261 | 296 |
| 297 MockSeat::MockSeat() : Global(&wl_seat_interface, &seat_impl, kSeatVersion) {} |
| 298 |
| 299 MockSeat::~MockSeat() {} |
| 300 |
262 MockXdgShell::MockXdgShell() | 301 MockXdgShell::MockXdgShell() |
263 : Global(&xdg_shell_interface, &xdg_shell_impl, kXdgShellVersion) {} | 302 : Global(&xdg_shell_interface, &xdg_shell_impl, kXdgShellVersion) {} |
264 | 303 |
265 MockXdgShell::~MockXdgShell() {} | 304 MockXdgShell::~MockXdgShell() {} |
266 | 305 |
267 void DisplayDeleter::operator()(wl_display* display) { | 306 void DisplayDeleter::operator()(wl_display* display) { |
268 wl_display_destroy(display); | 307 wl_display_destroy(display); |
269 } | 308 } |
270 | 309 |
271 FakeServer::FakeServer() | 310 FakeServer::FakeServer() |
(...skipping 14 matching lines...) Expand all Loading... |
286 int fd[2]; | 325 int fd[2]; |
287 if (socketpair(AF_UNIX, SOCK_STREAM | SOCK_CLOEXEC, 0, fd) < 0) | 326 if (socketpair(AF_UNIX, SOCK_STREAM | SOCK_CLOEXEC, 0, fd) < 0) |
288 return false; | 327 return false; |
289 base::ScopedFD server_fd(fd[0]); | 328 base::ScopedFD server_fd(fd[0]); |
290 base::ScopedFD client_fd(fd[1]); | 329 base::ScopedFD client_fd(fd[1]); |
291 | 330 |
292 if (wl_display_init_shm(display_.get()) < 0) | 331 if (wl_display_init_shm(display_.get()) < 0) |
293 return false; | 332 return false; |
294 if (!compositor_.Initialize(display_.get())) | 333 if (!compositor_.Initialize(display_.get())) |
295 return false; | 334 return false; |
| 335 if (!seat_.Initialize(display_.get())) |
| 336 return false; |
296 if (!xdg_shell_.Initialize(display_.get())) | 337 if (!xdg_shell_.Initialize(display_.get())) |
297 return false; | 338 return false; |
298 | 339 |
299 client_ = wl_client_create(display_.get(), server_fd.get()); | 340 client_ = wl_client_create(display_.get(), server_fd.get()); |
300 if (!client_) | 341 if (!client_) |
301 return false; | 342 return false; |
302 (void)server_fd.release(); | 343 (void)server_fd.release(); |
303 | 344 |
304 base::Thread::Options options; | 345 base::Thread::Options options; |
305 options.message_pump_factory = | 346 options.message_pump_factory = |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
340 } | 381 } |
341 | 382 |
342 void FakeServer::OnFileCanReadWithoutBlocking(int fd) { | 383 void FakeServer::OnFileCanReadWithoutBlocking(int fd) { |
343 wl_event_loop_dispatch(event_loop_, 0); | 384 wl_event_loop_dispatch(event_loop_, 0); |
344 wl_display_flush_clients(display_.get()); | 385 wl_display_flush_clients(display_.get()); |
345 } | 386 } |
346 | 387 |
347 void FakeServer::OnFileCanWriteWithoutBlocking(int fd) {} | 388 void FakeServer::OnFileCanWriteWithoutBlocking(int fd) {} |
348 | 389 |
349 } // namespace wl | 390 } // namespace wl |
OLD | NEW |