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

Unified Diff: examples/srpc/duality/scripting_bridge.h

Issue 2856050: Adding srpc example to naclports. (Closed) Base URL: http://naclports.googlecode.com/svn/trunk/src/
Patch Set: '' Created 10 years, 5 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 | « examples/srpc/duality/scriptable.cc ('k') | examples/srpc/duality/scripting_bridge.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: examples/srpc/duality/scripting_bridge.h
===================================================================
--- examples/srpc/duality/scripting_bridge.h (revision 0)
+++ examples/srpc/duality/scripting_bridge.h (revision 0)
@@ -0,0 +1,151 @@
+// Copyright 2010 The Native Client SDK Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can
+// be found in the LICENSE file.
+
+#ifndef EXAMPLES_SRPC_DUALITY_SCRIPTING_BRIDGE_H_
+#define EXAMPLES_SRPC_DUALITY_SCRIPTING_BRIDGE_H_
+
+#include <examples/srpc/duality/scriptable.h>
+
+#include <nacl/nacl_npapi.h>
+
+#include <map>
+
+
+// General scripting bridge class that uses an implementable interface to
+// provide NaCl scriptability.
+class ScriptingBridge : public NPObject {
+ public:
+ explicit ScriptingBridge(NPP npp, Scriptable * scriptable_instance);
+ virtual ~ScriptingBridge();
+
+ // Called by NPP_GetScriptableInstance to get the scripting interface for
+ // a plugin object of ScriptableType. The browser may dereference the
+ // returned pointer any time after it gets it, until the plugin is cleaned
+ // up. It should clean it up whenever it decides to collect garbage and
+ // there are no references remaining.
+ template<typename ScriptableType>
+ static NPClass* GetNPSimpleClass();
+
+ private:
+
+ // Creates the plugin-side instance of NPObject.
+ // Called by NPN_CreateObject, declared in npruntime.h
+ // Documentation URL: https://developer.mozilla.org/en/NPClass
+ template<typename ScriptableType>
+ static NPObject* AllocateCallback(NPP npp, NPClass* npclass);
+
+ // Cleans up the plugin-side instance of an NPObject.
+ // Called by NPN_ReleaseObject, declared in npruntime.h
+ // Documentation URL: https://developer.mozilla.org/en/NPClass
+ static void DeallocateCallback(NPObject* object);
+
+ // Returns the value of the property called |name| in |result| and true.
+ // Returns false if |name| is not a property on this object or something else
+ // goes wrong.
+ // Called by NPN_GetProperty, declared in npruntime.h
+ // Documentation URL: https://developer.mozilla.org/en/NPClass
+ static bool GetPropertyCallback(NPObject* object,
+ NPIdentifier name,
+ NPVariant* result);
+
+ // Returns |true| if |method_name| is a recognized method.
+ // Called by NPN_HasMethod, declared in npruntime.h
+ // Documentation URL: https://developer.mozilla.org/en/NPClass
+ static bool HasMethodCallback(NPObject* object, NPIdentifier name);
+
+ // Returns true if |name| is actually the name of a public property on the
+ // plugin class being queried.
+ // Called by NPN_HasProperty, declared in npruntime.h
+ // Documentation URL: https://developer.mozilla.org/en/NPClass
+ static bool HasPropertyCallback(NPObject* object, NPIdentifier name);
+
+ // Not public because it is called by Allocate
+ void Init();
+
+ // Called by the browser when a plugin is being destroyed to clean up any
+ // remaining instances of NPClass.
+ // Documentation URL: https://developer.mozilla.org/en/NPClass
+ static void InvalidateCallback(NPObject* object);
+ void Invalidate();
+
+ // Called by the browser to invoke a function object whose name is |name|.
+ // Called by NPN_Invoke, declared in npruntime.h
+ // Documentation URL: https://developer.mozilla.org/en/NPClass
+ static bool InvokeCallback(NPObject* object,
+ NPIdentifier name,
+ const NPVariant* args,
+ uint32_t arg_count,
+ NPVariant* result);
+
+ // Called by the browser to invoke the default method on an NPObject.
+ // In this case the default method just returns false.
+ // Apparently the plugin won't load properly if we simply
+ // tell the browser we don't have this method.
+ // Called by NPN_InvokeDefault, declared in npruntime.h
+ // Documentation URL: https://developer.mozilla.org/en/NPClass
+ static bool InvokeDefaultCallback(NPObject* object,
+ const NPVariant* args,
+ uint32_t arg_count,
+ NPVariant* result);
+
+ // Removes the property |name| from |object| and returns true.
+ // Returns false if it can't be removed for some reason.
+ // Called by NPN_RemoveProperty, declared in npruntime.h
+ // Documentation URL: https://developer.mozilla.org/en/NPClass
+ static bool RemovePropertyCallback(NPObject* object, NPIdentifier name);
+
+ // Sets the property |name| of |object| to |value| and return true.
+ // Returns false if |name| is not the name of a settable property on |object|
+ // or if something else goes wrong.
+ // Called by NPN_SetProperty, declared in npruntime.h
+ // Documentation URL: https://developer.mozilla.org/en/NPClass
+ static bool SetPropertyCallback(NPObject* object,
+ NPIdentifier name,
+ const NPVariant* value);
+
+ // Not called GetInstance because that would be misleading.
+ // GetInstance would imply a singleton design pattern. ToTYPE implies
+ // the type cast which is appropriate.
+ static ScriptingBridge * ToInstance(NPObject * object);
+
+
+ NPP npp_;
+
+ Scriptable * scriptable_instance_;
+};
+
+template<typename ScriptableType>
+NPClass* ScriptingBridge::GetNPSimpleClass() {
+ printf("Duality: ScriptingBridge::GetNPSimpleClass was called!\n");
+ fflush(stdout);
+ void* np_class_pointer = NPN_MemAlloc(sizeof(NPClass));
+ NPClass* np_class = static_cast<NPClass *>(np_class_pointer);
+ np_class->structVersion = NP_CLASS_STRUCT_VERSION;
+ np_class->allocate = ScriptingBridge::AllocateCallback<ScriptableType>;
+ np_class->deallocate = ScriptingBridge::DeallocateCallback;
+ np_class->invalidate = ScriptingBridge::InvalidateCallback;
+ np_class->hasMethod = ScriptingBridge::HasMethodCallback;
+ np_class->invoke = ScriptingBridge::InvokeCallback;
+ np_class->invokeDefault = ScriptingBridge::InvokeDefaultCallback;
+ np_class->hasProperty = ScriptingBridge::HasPropertyCallback;
+ np_class->getProperty = ScriptingBridge::GetPropertyCallback;
+ np_class->setProperty = ScriptingBridge::SetPropertyCallback;
+ np_class->removeProperty = ScriptingBridge::RemovePropertyCallback;
+ np_class->enumerate = NULL;
+ np_class->construct = NULL;
+ return np_class;
+}
+
+template<typename ScriptableType>
+NPObject* ScriptingBridge::AllocateCallback(NPP npp, NPClass* npclass) {
+ printf("Duality: ScriptingBridge::Allocate was called!\n");
+ fflush(stdout);
+ ScriptableType* scriptable_object = new ScriptableType();
+ ScriptingBridge* bridge = new ScriptingBridge(npp, scriptable_object);
+ bridge->Init();
+ return bridge;
+}
+
+
+#endif // EXAMPLES_SRPC_DUALITY_SCRIPTING_BRIDGE_H_
« no previous file with comments | « examples/srpc/duality/scriptable.cc ('k') | examples/srpc/duality/scripting_bridge.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698