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

Unified 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ppapi/cpp/instance.h ('k') | ppapi/cpp/message_handler.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ppapi/cpp/instance.cc
diff --git a/ppapi/cpp/instance.cc b/ppapi/cpp/instance.cc
index a5be2b9761358af70c48fb7628a7cfb08375af1b..74b93216729dfe7d1bc5bb6ec09e93f7c72f8bbf 100644
--- a/ppapi/cpp/instance.cc
+++ b/ppapi/cpp/instance.cc
@@ -9,12 +9,15 @@
#include "ppapi/c/ppb_input_event.h"
#include "ppapi/c/ppb_instance.h"
#include "ppapi/c/ppb_messaging.h"
+#include "ppapi/c/ppp_message_handler.h"
#include "ppapi/cpp/compositor.h"
#include "ppapi/cpp/graphics_2d.h"
#include "ppapi/cpp/graphics_3d.h"
#include "ppapi/cpp/image_data.h"
#include "ppapi/cpp/instance_handle.h"
#include "ppapi/cpp/logging.h"
+#include "ppapi/cpp/message_handler.h"
+#include "ppapi/cpp/message_loop.h"
#include "ppapi/cpp/module.h"
#include "ppapi/cpp/module_impl.h"
#include "ppapi/cpp/point.h"
@@ -42,6 +45,38 @@ template <> const char* interface_name<PPB_Messaging_1_0>() {
return PPB_MESSAGING_INTERFACE_1_0;
}
+template <> const char* interface_name<PPB_Messaging_1_2>() {
+ return PPB_MESSAGING_INTERFACE_1_2;
+}
+
+// PPP_MessageHandler implementation -------------------------------------------
+void HandleMessage(PP_Instance pp_instance,
+ void* user_data,
+ const PP_Var* var) {
+ MessageHandler* message_handler = static_cast<MessageHandler*>(user_data);
+ message_handler->HandleMessage(InstanceHandle(pp_instance), Var(*var));
+}
+
+void HandleBlockingMessage(PP_Instance pp_instance,
+ void* user_data,
+ const PP_Var* var,
+ PP_Var* result) {
+ MessageHandler* message_handler = static_cast<MessageHandler*>(user_data);
+ pp::Var result_var =
+ message_handler->HandleBlockingMessage(InstanceHandle(pp_instance),
+ Var(*var));
+ *result = result_var.Detach();
+}
+
+void Destroy(PP_Instance pp_instance, void* user_data) {
+ MessageHandler* message_handler = static_cast<MessageHandler*>(user_data);
+ message_handler->WasUnregistered(InstanceHandle(pp_instance));
+}
+
+static PPP_MessageHandler_0_2 message_handler_if = {
+ &HandleMessage, &HandleBlockingMessage, &Destroy
+};
+
} // namespace
Instance::Instance(PP_Instance instance) : pp_instance_(instance) {
@@ -130,10 +165,30 @@ void Instance::ClearInputEventRequest(uint32_t event_classes) {
}
void Instance::PostMessage(const Var& message) {
- if (!has_interface<PPB_Messaging_1_0>())
+ if (has_interface<PPB_Messaging_1_2>()) {
+ get_interface<PPB_Messaging_1_2>()->PostMessage(pp_instance(),
+ message.pp_var());
+ } else if (has_interface<PPB_Messaging_1_0>()) {
+ get_interface<PPB_Messaging_1_0>()->PostMessage(pp_instance(),
+ message.pp_var());
+ }
+}
+
+int32_t Instance::RegisterMessageHandler(MessageHandler* message_handler,
+ const MessageLoop& message_loop) {
+ if (!has_interface<PPB_Messaging_1_2>())
+ return PP_ERROR_NOTSUPPORTED;
+ return get_interface<PPB_Messaging_1_2>()->RegisterMessageHandler(
+ pp_instance(),
+ message_handler,
+ &message_handler_if,
+ message_loop.pp_resource());
+}
+
+void Instance::UnregisterMessageHandler() {
+ if (!has_interface<PPB_Messaging_1_2>())
return;
- get_interface<PPB_Messaging_1_0>()->PostMessage(pp_instance(),
- message.pp_var());
+ get_interface<PPB_Messaging_1_2>()->UnregisterMessageHandler(pp_instance());
}
void Instance::LogToConsole(PP_LogLevel level, const Var& value) {
« 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