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

Unified Diff: ppapi/native_client/tests/ppapi_test_lib/module_instance.cc

Issue 7740013: Cloning a bunch of stuff from the native_client repository at r6528 (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 9 years, 4 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
Index: ppapi/native_client/tests/ppapi_test_lib/module_instance.cc
===================================================================
--- ppapi/native_client/tests/ppapi_test_lib/module_instance.cc (revision 0)
+++ ppapi/native_client/tests/ppapi_test_lib/module_instance.cc (revision 0)
@@ -0,0 +1,175 @@
+// Copyright (c) 2011 The Native Client Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+//
+// This implements the required interfaces for representing a plugin module
+// instance in browser interactions and provides a way to register custom
+// plugin interfaces.
+//
+
+#include <stdio.h>
+#include <string.h>
+
+#include <map>
+
+#include "native_client/src/include/nacl_macros.h"
+#include "native_client/src/shared/platform/nacl_check.h"
+#include "native_client/tests/ppapi_test_lib/get_browser_interface.h"
+#include "native_client/tests/ppapi_test_lib/internal_utils.h"
+#include "native_client/tests/ppapi_test_lib/test_interface.h"
+
+#include "ppapi/c/dev/ppb_var_deprecated.h"
+#include "ppapi/c/pp_errors.h"
+#include "ppapi/c/pp_instance.h"
+#include "ppapi/c/pp_module.h"
+#include "ppapi/c/pp_var.h"
+#include "ppapi/c/ppb.h"
+#include "ppapi/c/ppb_var.h"
+#include "ppapi/c/ppp.h"
+#include "ppapi/c/ppp_instance.h"
+#include "ppapi/c/ppp_messaging.h"
+
+///////////////////////////////////////////////////////////////////////////////
+// Plugin interface registration
+///////////////////////////////////////////////////////////////////////////////
+
+namespace {
+
+class PluginInterfaceTable {
+ public:
+ // Return singleton intsance.
+ static PluginInterfaceTable* Get() {
+ static PluginInterfaceTable table;
+ return &table;
+ }
+
+ void AddInterface(const char* interface_name, const void* ppp_interface) {
+ interface_map_[nacl::string(interface_name)] = ppp_interface;
+ }
+ const void* GetInterface(const char* interface_name) {
+ // This will add a NULL element for missing interfaces.
+ return interface_map_[nacl::string(interface_name)];
+ }
+
+ private:
+ NACL_DISALLOW_COPY_AND_ASSIGN(PluginInterfaceTable);
+
+ PluginInterfaceTable() {}
+
+ typedef std::map<nacl::string, const void*> InterfaceMap;
+ InterfaceMap interface_map_;
+};
+
+} // namespace
+
+void RegisterPluginInterface(const char* interface_name,
+ const void* ppp_interface) {
+ PluginInterfaceTable::Get()->AddInterface(interface_name, ppp_interface);
+}
+
+
+///////////////////////////////////////////////////////////////////////////////
+// PPP_Instance implementation
+///////////////////////////////////////////////////////////////////////////////
+
+PP_Bool DidCreateDefault(PP_Instance instance,
+ uint32_t /*argc*/,
+ const char* /*argn*/[],
+ const char* /*argv*/[]) {
+ CHECK(ppb_get_interface() != NULL);
+ CHECK(PPBCore() != NULL);
+ CHECK(PPBGraphics2D() != NULL);
+ CHECK(PPBImageData() != NULL);
+ CHECK(PPBInstance() != NULL);
+ CHECK(PPBMessaging() != NULL);
+ CHECK(PPBURLLoader() != NULL);
+ CHECK(PPBURLRequestInfo() != NULL);
+ CHECK(PPBURLResponseInfo() != NULL);
+ CHECK(PPBVar() != NULL);
+
+ set_pp_instance(instance);
+ SetupTests();
+
+ return PP_TRUE;
+}
+
+namespace {
+
+void DidDestroy(PP_Instance /*instance*/) {
+}
+
+void DidChangeView(PP_Instance /*instance*/,
+ const struct PP_Rect* /*position*/,
+ const struct PP_Rect* /*clip*/) {
+}
+
+void DidChangeFocus(PP_Instance /*instance*/,
+ PP_Bool /*has_focus*/) {
+}
+
+PP_Bool HandleDocumentLoad(PP_Instance instance,
+ PP_Resource url_loader) {
+ return PP_TRUE;
+}
+
+const PPP_Instance ppp_instance_interface = {
+ DidCreateDefault,
+ DidDestroy,
+ DidChangeView,
+ DidChangeFocus,
+ HandleDocumentLoad
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// PPP_Messaging implementation
+///////////////////////////////////////////////////////////////////////////////
+
+void HandleMessage(PP_Instance instance, PP_Var message) {
+ if (message.type != PP_VARTYPE_STRING)
+ return;
+ uint32_t len = 0;
+ const char* test_name = PPBVar()->VarToUtf8(message, &len);
+ RunTest(test_name);
+}
+
+const PPP_Messaging ppp_messaging_interface = {
+ HandleMessage
+};
+
+} // namespace
+
+///////////////////////////////////////////////////////////////////////////////
+// PPP implementation
+///////////////////////////////////////////////////////////////////////////////
+
+int32_t PPP_InitializeModule(PP_Module module,
+ PPB_GetInterface get_browser_interface) {
+ set_pp_module(module);
+ set_ppb_get_interface(get_browser_interface);
+ SetupPluginInterfaces();
+ return PP_OK;
+}
+
+void PPP_ShutdownModule() {
+}
+
+const void* PPP_GetInterface(const char* interface_name) {
+ const void* ppp = PluginInterfaceTable::Get()->GetInterface(interface_name);
+
+ // The PPP_Instance interface is required for every plugin,
+ // so supply one if the tester has not.
+ if (ppp == NULL && 0 == strncmp(PPP_INSTANCE_INTERFACE, interface_name,
+ strlen(PPP_INSTANCE_INTERFACE))) {
+ return &ppp_instance_interface;
+ }
+ // The PPP_Messaging interface is required for the test set-up,
+ // so we supply our own.
+ if (0 == strncmp(PPP_MESSAGING_INTERFACE, interface_name,
+ strlen(PPP_MESSAGING_INTERFACE))) {
+ CHECK(ppp == NULL);
+ return &ppp_messaging_interface;
+ }
+ // All other interfaces are to be optionally supplied by the tester,
+ // so we return whatever was added in SetupPluginInterfaces() (if anything).
+ return ppp;
+}
« no previous file with comments | « ppapi/native_client/tests/ppapi_test_lib/internal_utils.cc ('k') | ppapi/native_client/tests/ppapi_test_lib/nacl.scons » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698