OLD | NEW |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |