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

Side by Side Diff: chromeos/dbus/services/surface_service_provider.cc

Issue 1394573003: chromeos: Add SurfaceServiceProvider. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 2 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
(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 "chromeos/dbus/services/surface_service_provider.h"
6
7 #include "base/bind.h"
8 #include "dbus/message.h"
9 #include "third_party/cros_system_api/dbus/service_constants.h"
10
11 namespace chromeos {
12 namespace {
13
14 void OnGraphicsBufferCreated(
15 const dbus::ExportedObject::ResponseSender& response_sender,
16 scoped_ptr<dbus::Response> response,
17 int32 buffer) {
18 dbus::MessageWriter writer(response.get());
19 writer.AppendInt32(buffer);
20 response_sender.Run(response.Pass());
21 }
22
23 } // namespace
24
25 SurfaceServiceProvider::SurfaceServiceProvider(scoped_ptr<Delegate> delegate)
26 : delegate_(delegate.Pass()), weak_ptr_factory_(this) {}
27
28 SurfaceServiceProvider::~SurfaceServiceProvider() {}
29
30 void SurfaceServiceProvider::Start(
31 scoped_refptr<dbus::ExportedObject> exported_object) {
32 exported_object->ExportMethod(
33 kLibCrosServiceInterface, kCreateGraphicsBufferFromUnixFd,
34 base::Bind(&SurfaceServiceProvider::CreateGraphicsBufferFromUnixFd,
35 weak_ptr_factory_.GetWeakPtr()),
36 base::Bind(&SurfaceServiceProvider::OnExported,
37 weak_ptr_factory_.GetWeakPtr()));
38
39 exported_object->ExportMethod(
40 kLibCrosServiceInterface, kDestroyGraphicsBuffer,
41 base::Bind(&SurfaceServiceProvider::DestroyGraphicsBuffer,
42 weak_ptr_factory_.GetWeakPtr()),
43 base::Bind(&SurfaceServiceProvider::OnExported,
44 weak_ptr_factory_.GetWeakPtr()));
45
46 exported_object->ExportMethod(
47 kLibCrosServiceInterface, kSetTestSurfaceContents,
48 base::Bind(&SurfaceServiceProvider::SetTestSurfaceContents,
49 weak_ptr_factory_.GetWeakPtr()),
50 base::Bind(&SurfaceServiceProvider::OnExported,
51 weak_ptr_factory_.GetWeakPtr()));
52 }
53
54 void SurfaceServiceProvider::CreateGraphicsBufferFromUnixFd(
55 dbus::MethodCall* method_call,
56 dbus::ExportedObject::ResponseSender response_sender) {
57 uint32 width = 0;
58 uint32 height = 0;
59 dbus::FileDescriptor fd;
60 uint32 stride = 0;
61 dbus::MessageReader reader(method_call);
62 if (!reader.PopUint32(&width) || !reader.PopUint32(&height) ||
63 !reader.PopFileDescriptor(&fd) || !reader.PopUint32(&stride)) {
64 LOG(ERROR) << "Unable to parse " << kCreateGraphicsBufferFromUnixFd
65 << " request";
66 response_sender.Run(dbus::Response::FromMethodCall(method_call));
67 return;
68 }
69
70 fd.CheckValidity();
71 if (!fd.is_valid()) {
72 LOG(ERROR) << kCreateGraphicsBufferFromUnixFd
73 << " request contained an invalid file descriptor";
74 response_sender.Run(dbus::Response::FromMethodCall(method_call));
75 return;
76 }
77
78 delegate_->CreateGraphicsBufferFromUnixFd(
79 gfx::Size(width, height), base::ScopedFD(fd.TakeValue()), stride,
80 base::Bind(&OnGraphicsBufferCreated, response_sender,
81 base::Passed(dbus::Response::FromMethodCall(method_call))));
82 }
83
84 void SurfaceServiceProvider::DestroyGraphicsBuffer(
85 dbus::MethodCall* method_call,
86 dbus::ExportedObject::ResponseSender response_sender) {
87 int32 buffer = 0;
88 dbus::MessageReader reader(method_call);
89 if (reader.PopInt32(&buffer)) {
90 delegate_->DestroyGraphicsBuffer(buffer);
91 } else {
92 LOG(ERROR) << "Unable to parse " << kDestroyGraphicsBuffer << " request";
93 }
94 response_sender.Run(dbus::Response::FromMethodCall(method_call));
95 }
96
97 void SurfaceServiceProvider::SetTestSurfaceContents(
98 dbus::MethodCall* method_call,
99 dbus::ExportedObject::ResponseSender response_sender) {
100 int32 buffer = 0;
101 dbus::MessageReader reader(method_call);
102 if (reader.PopInt32(&buffer)) {
103 delegate_->SetTestSurfaceContents(buffer);
104 } else {
105 LOG(ERROR) << "Unable to parse " << kSetTestSurfaceContents << " request";
106 }
107 response_sender.Run(dbus::Response::FromMethodCall(method_call));
108 }
109
110 void SurfaceServiceProvider::OnExported(const std::string& interface_name,
111 const std::string& method_name,
112 bool success) {
113 if (!success)
114 LOG(ERROR) << "failed to export " << interface_name << "." << method_name;
115 }
116
117 } // namespace chromeos
OLDNEW
« ash/surfaces/test_surface_overlay_view.h ('K') | « chromeos/dbus/services/surface_service_provider.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698