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

Side by Side Diff: ppapi/cpp/instance.cc

Issue 318763003: PPAPI: Add C++ wrapper for MessageHandler stuff. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: move messag_handler.h to HEADERS section of library.dsc Created 6 years, 3 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 | Annotate | Revision Log
« no previous file with comments | « ppapi/cpp/instance.h ('k') | ppapi/cpp/message_handler.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "ppapi/cpp/instance.h" 5 #include "ppapi/cpp/instance.h"
6 6
7 #include "ppapi/c/pp_errors.h" 7 #include "ppapi/c/pp_errors.h"
8 #include "ppapi/c/ppb_console.h" 8 #include "ppapi/c/ppb_console.h"
9 #include "ppapi/c/ppb_input_event.h" 9 #include "ppapi/c/ppb_input_event.h"
10 #include "ppapi/c/ppb_instance.h" 10 #include "ppapi/c/ppb_instance.h"
11 #include "ppapi/c/ppb_messaging.h" 11 #include "ppapi/c/ppb_messaging.h"
12 #include "ppapi/c/ppp_message_handler.h"
12 #include "ppapi/cpp/compositor.h" 13 #include "ppapi/cpp/compositor.h"
13 #include "ppapi/cpp/graphics_2d.h" 14 #include "ppapi/cpp/graphics_2d.h"
14 #include "ppapi/cpp/graphics_3d.h" 15 #include "ppapi/cpp/graphics_3d.h"
15 #include "ppapi/cpp/image_data.h" 16 #include "ppapi/cpp/image_data.h"
16 #include "ppapi/cpp/instance_handle.h" 17 #include "ppapi/cpp/instance_handle.h"
17 #include "ppapi/cpp/logging.h" 18 #include "ppapi/cpp/logging.h"
19 #include "ppapi/cpp/message_handler.h"
20 #include "ppapi/cpp/message_loop.h"
18 #include "ppapi/cpp/module.h" 21 #include "ppapi/cpp/module.h"
19 #include "ppapi/cpp/module_impl.h" 22 #include "ppapi/cpp/module_impl.h"
20 #include "ppapi/cpp/point.h" 23 #include "ppapi/cpp/point.h"
21 #include "ppapi/cpp/resource.h" 24 #include "ppapi/cpp/resource.h"
22 #include "ppapi/cpp/var.h" 25 #include "ppapi/cpp/var.h"
23 #include "ppapi/cpp/view.h" 26 #include "ppapi/cpp/view.h"
24 27
25 namespace pp { 28 namespace pp {
26 29
27 namespace { 30 namespace {
28 31
29 template <> const char* interface_name<PPB_Console_1_0>() { 32 template <> const char* interface_name<PPB_Console_1_0>() {
30 return PPB_CONSOLE_INTERFACE_1_0; 33 return PPB_CONSOLE_INTERFACE_1_0;
31 } 34 }
32 35
33 template <> const char* interface_name<PPB_InputEvent_1_0>() { 36 template <> const char* interface_name<PPB_InputEvent_1_0>() {
34 return PPB_INPUT_EVENT_INTERFACE_1_0; 37 return PPB_INPUT_EVENT_INTERFACE_1_0;
35 } 38 }
36 39
37 template <> const char* interface_name<PPB_Instance_1_0>() { 40 template <> const char* interface_name<PPB_Instance_1_0>() {
38 return PPB_INSTANCE_INTERFACE_1_0; 41 return PPB_INSTANCE_INTERFACE_1_0;
39 } 42 }
40 43
41 template <> const char* interface_name<PPB_Messaging_1_0>() { 44 template <> const char* interface_name<PPB_Messaging_1_0>() {
42 return PPB_MESSAGING_INTERFACE_1_0; 45 return PPB_MESSAGING_INTERFACE_1_0;
43 } 46 }
44 47
48 template <> const char* interface_name<PPB_Messaging_1_2>() {
49 return PPB_MESSAGING_INTERFACE_1_2;
50 }
51
52 // PPP_MessageHandler implementation -------------------------------------------
53 void HandleMessage(PP_Instance pp_instance,
54 void* user_data,
55 const PP_Var* var) {
56 MessageHandler* message_handler = static_cast<MessageHandler*>(user_data);
57 message_handler->HandleMessage(InstanceHandle(pp_instance), Var(*var));
58 }
59
60 void HandleBlockingMessage(PP_Instance pp_instance,
61 void* user_data,
62 const PP_Var* var,
63 PP_Var* result) {
64 MessageHandler* message_handler = static_cast<MessageHandler*>(user_data);
65 pp::Var result_var =
66 message_handler->HandleBlockingMessage(InstanceHandle(pp_instance),
67 Var(*var));
68 *result = result_var.Detach();
69 }
70
71 void Destroy(PP_Instance pp_instance, void* user_data) {
72 MessageHandler* message_handler = static_cast<MessageHandler*>(user_data);
73 message_handler->WasUnregistered(InstanceHandle(pp_instance));
74 }
75
76 static PPP_MessageHandler_0_2 message_handler_if = {
77 &HandleMessage, &HandleBlockingMessage, &Destroy
78 };
79
45 } // namespace 80 } // namespace
46 81
47 Instance::Instance(PP_Instance instance) : pp_instance_(instance) { 82 Instance::Instance(PP_Instance instance) : pp_instance_(instance) {
48 } 83 }
49 84
50 Instance::~Instance() { 85 Instance::~Instance() {
51 } 86 }
52 87
53 bool Instance::Init(uint32_t /*argc*/, const char* /*argn*/[], 88 bool Instance::Init(uint32_t /*argc*/, const char* /*argn*/[],
54 const char* /*argv*/[]) { 89 const char* /*argv*/[]) {
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
123 } 158 }
124 159
125 void Instance::ClearInputEventRequest(uint32_t event_classes) { 160 void Instance::ClearInputEventRequest(uint32_t event_classes) {
126 if (!has_interface<PPB_InputEvent_1_0>()) 161 if (!has_interface<PPB_InputEvent_1_0>())
127 return; 162 return;
128 get_interface<PPB_InputEvent_1_0>()->ClearInputEventRequest(pp_instance(), 163 get_interface<PPB_InputEvent_1_0>()->ClearInputEventRequest(pp_instance(),
129 event_classes); 164 event_classes);
130 } 165 }
131 166
132 void Instance::PostMessage(const Var& message) { 167 void Instance::PostMessage(const Var& message) {
133 if (!has_interface<PPB_Messaging_1_0>()) 168 if (has_interface<PPB_Messaging_1_2>()) {
169 get_interface<PPB_Messaging_1_2>()->PostMessage(pp_instance(),
170 message.pp_var());
171 } else if (has_interface<PPB_Messaging_1_0>()) {
172 get_interface<PPB_Messaging_1_0>()->PostMessage(pp_instance(),
173 message.pp_var());
174 }
175 }
176
177 int32_t Instance::RegisterMessageHandler(MessageHandler* message_handler,
178 const MessageLoop& message_loop) {
179 if (!has_interface<PPB_Messaging_1_2>())
180 return PP_ERROR_NOTSUPPORTED;
181 return get_interface<PPB_Messaging_1_2>()->RegisterMessageHandler(
182 pp_instance(),
183 message_handler,
184 &message_handler_if,
185 message_loop.pp_resource());
186 }
187
188 void Instance::UnregisterMessageHandler() {
189 if (!has_interface<PPB_Messaging_1_2>())
134 return; 190 return;
135 get_interface<PPB_Messaging_1_0>()->PostMessage(pp_instance(), 191 get_interface<PPB_Messaging_1_2>()->UnregisterMessageHandler(pp_instance());
136 message.pp_var());
137 } 192 }
138 193
139 void Instance::LogToConsole(PP_LogLevel level, const Var& value) { 194 void Instance::LogToConsole(PP_LogLevel level, const Var& value) {
140 if (!has_interface<PPB_Console_1_0>()) 195 if (!has_interface<PPB_Console_1_0>())
141 return; 196 return;
142 get_interface<PPB_Console_1_0>()->Log( 197 get_interface<PPB_Console_1_0>()->Log(
143 pp_instance(), level, value.pp_var()); 198 pp_instance(), level, value.pp_var());
144 } 199 }
145 200
146 void Instance::LogToConsoleWithSource(PP_LogLevel level, 201 void Instance::LogToConsoleWithSource(PP_LogLevel level,
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
197 if (!that) 252 if (!that)
198 return NULL; 253 return NULL;
199 InterfaceNameToObjectMap::iterator found = 254 InterfaceNameToObjectMap::iterator found =
200 that->interface_name_to_objects_.find(interface_name); 255 that->interface_name_to_objects_.find(interface_name);
201 if (found == that->interface_name_to_objects_.end()) 256 if (found == that->interface_name_to_objects_.end())
202 return NULL; 257 return NULL;
203 return found->second; 258 return found->second;
204 } 259 }
205 260
206 } // namespace pp 261 } // namespace pp
OLDNEW
« no previous file with comments | « ppapi/cpp/instance.h ('k') | ppapi/cpp/message_handler.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698