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

Side by Side Diff: ui/ozone/platform/wayland/fake_server.cc

Issue 1698043005: ozone/platform/wayland: Ensure that globals are bound with supported versions (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 10 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 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 kSurfaceVersion = 4;
20 const uint32_t kXdgShellVersion = 1; 19 const uint32_t kXdgShellVersion = 1;
21 const uint32_t kXdgSurfaceVersion = 1;
22 20
23 void DestroyResource(wl_client* client, wl_resource* resource) { 21 void DestroyResource(wl_client* client, wl_resource* resource) {
24 wl_resource_destroy(resource); 22 wl_resource_destroy(resource);
25 } 23 }
26 24
27 // wl_compositor 25 // wl_compositor
28 26
29 void CreateSurface(wl_client* client, wl_resource* resource, uint32_t id) { 27 void CreateSurface(wl_client* client, wl_resource* resource, uint32_t id) {
30 auto compositor = 28 auto compositor =
31 static_cast<MockCompositor*>(wl_resource_get_user_data(resource)); 29 static_cast<MockCompositor*>(wl_resource_get_user_data(resource));
32 wl_resource* surface_resource = 30 wl_resource* surface_resource = wl_resource_create(
33 wl_resource_create(client, &wl_surface_interface, kSurfaceVersion, id); 31 client, &wl_surface_interface, wl_resource_get_version(resource), id);
34 if (!surface_resource) { 32 if (!surface_resource) {
35 wl_client_post_no_memory(client); 33 wl_client_post_no_memory(client);
36 return; 34 return;
37 } 35 }
38 compositor->AddSurface(make_scoped_ptr(new MockSurface(surface_resource))); 36 compositor->AddSurface(make_scoped_ptr(new MockSurface(surface_resource)));
39 } 37 }
40 38
41 const struct wl_compositor_interface compositor_impl = { 39 const struct wl_compositor_interface compositor_impl = {
42 &CreateSurface, // create_surface 40 &CreateSurface, // create_surface
43 nullptr, // create_region 41 nullptr, // create_region
(...skipping 27 matching lines...) Expand all
71 const struct wl_surface_interface surface_impl = { 69 const struct wl_surface_interface surface_impl = {
72 &DestroyResource, // destroy 70 &DestroyResource, // destroy
73 &Attach, // attach 71 &Attach, // attach
74 &Damage, // damage 72 &Damage, // damage
75 nullptr, // frame 73 nullptr, // frame
76 nullptr, // set_opaque_region 74 nullptr, // set_opaque_region
77 nullptr, // set_input_region 75 nullptr, // set_input_region
78 &Commit, // commit 76 &Commit, // commit
79 nullptr, // set_buffer_transform 77 nullptr, // set_buffer_transform
80 nullptr, // set_buffer_scale 78 nullptr, // set_buffer_scale
79 nullptr, // damage_buffer
81 }; 80 };
82 81
83 // xdg_shell 82 // xdg_shell
84 83
85 void UseUnstableVersion(wl_client* client, 84 void UseUnstableVersion(wl_client* client,
86 wl_resource* resource, 85 wl_resource* resource,
87 int32_t version) { 86 int32_t version) {
88 static_cast<MockXdgShell*>(wl_resource_get_user_data(resource)) 87 static_cast<MockXdgShell*>(wl_resource_get_user_data(resource))
89 ->UseUnstableVersion(version); 88 ->UseUnstableVersion(version);
90 } 89 }
91 90
92 void GetXdgSurface(wl_client* client, 91 void GetXdgSurface(wl_client* client,
93 wl_resource* resource, 92 wl_resource* resource,
94 uint32_t id, 93 uint32_t id,
95 wl_resource* surface_resource) { 94 wl_resource* surface_resource) {
96 auto surface = 95 auto surface =
97 static_cast<MockSurface*>(wl_resource_get_user_data(surface_resource)); 96 static_cast<MockSurface*>(wl_resource_get_user_data(surface_resource));
98 if (surface->xdg_surface) { 97 if (surface->xdg_surface) {
99 wl_resource_post_error(resource, XDG_SHELL_ERROR_ROLE, 98 wl_resource_post_error(resource, XDG_SHELL_ERROR_ROLE,
100 "surface already has a role"); 99 "surface already has a role");
101 return; 100 return;
102 } 101 }
103 wl_resource* xdg_surface_resource = wl_resource_create( 102 wl_resource* xdg_surface_resource = wl_resource_create(
104 client, &xdg_surface_interface, kXdgSurfaceVersion, id); 103 client, &xdg_surface_interface, wl_resource_get_version(resource), id);
105 if (!xdg_surface_resource) { 104 if (!xdg_surface_resource) {
106 wl_client_post_no_memory(client); 105 wl_client_post_no_memory(client);
107 return; 106 return;
108 } 107 }
109 surface->xdg_surface.reset(new MockXdgSurface(xdg_surface_resource)); 108 surface->xdg_surface.reset(new MockXdgSurface(xdg_surface_resource));
110 } 109 }
111 110
112 void Pong(wl_client* client, wl_resource* resource, uint32_t serial) { 111 void Pong(wl_client* client, wl_resource* resource, uint32_t serial) {
113 static_cast<MockXdgShell*>(wl_resource_get_user_data(resource))->Pong(serial); 112 static_cast<MockXdgShell*>(wl_resource_get_user_data(resource))->Pong(serial);
114 } 113 }
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
225 global_.reset(wl_global_create(display, interface_, version_, this, &Bind)); 224 global_.reset(wl_global_create(display, interface_, version_, this, &Bind));
226 return global_; 225 return global_;
227 } 226 }
228 227
229 // static 228 // static
230 void Global::Bind(wl_client* client, 229 void Global::Bind(wl_client* client,
231 void* data, 230 void* data,
232 uint32_t version, 231 uint32_t version,
233 uint32_t id) { 232 uint32_t id) {
234 auto global = static_cast<Global*>(data); 233 auto global = static_cast<Global*>(data);
235 wl_resource* resource = 234 wl_resource* resource = wl_resource_create(
236 wl_resource_create(client, global->interface_, global->version_, id); 235 client, global->interface_, std::min(version, global->version_), id);
237 if (!resource) { 236 if (!resource) {
238 wl_client_post_no_memory(client); 237 wl_client_post_no_memory(client);
239 return; 238 return;
240 } 239 }
241 if (!global->resource_) 240 if (!global->resource_)
242 global->resource_ = resource; 241 global->resource_ = resource;
243 wl_resource_set_implementation(resource, global->implementation_, global, 242 wl_resource_set_implementation(resource, global->implementation_, global,
244 &Global::OnResourceDestroyed); 243 &Global::OnResourceDestroyed);
245 } 244 }
246 245
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
341 } 340 }
342 341
343 void FakeServer::OnFileCanReadWithoutBlocking(int fd) { 342 void FakeServer::OnFileCanReadWithoutBlocking(int fd) {
344 wl_event_loop_dispatch(event_loop_, 0); 343 wl_event_loop_dispatch(event_loop_, 0);
345 wl_display_flush_clients(display_.get()); 344 wl_display_flush_clients(display_.get());
346 } 345 }
347 346
348 void FakeServer::OnFileCanWriteWithoutBlocking(int fd) {} 347 void FakeServer::OnFileCanWriteWithoutBlocking(int fd) {}
349 348
350 } // namespace wl 349 } // namespace wl
OLDNEW
« no previous file with comments | « no previous file | ui/ozone/platform/wayland/wayland_display.cc » ('j') | ui/ozone/platform/wayland/wayland_display.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698