Index: experimental/c_salt/scripting_bridge.h |
diff --git a/experimental/c_salt/scripting_bridge.h b/experimental/c_salt/scripting_bridge.h |
deleted file mode 100644 |
index f24e9abcbc245ea4e3bbb166ec2b369b45682636..0000000000000000000000000000000000000000 |
--- a/experimental/c_salt/scripting_bridge.h |
+++ /dev/null |
@@ -1,211 +0,0 @@ |
-// Copyright 2010 The Ginsu 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 C_SALT_SCRIPTING_BRIDGE_H_ |
-#define C_SALT_SCRIPTING_BRIDGE_H_ |
- |
-// TODO(dspringer, dmichael): Remove this: |
-#include <nacl/npruntime.h> |
- |
-#include <map> |
-#include <string> |
-#include <vector> |
- |
-#include "boost/noncopyable.hpp" |
-#include "boost/shared_ptr.hpp" |
-#include "c_salt/callback.h" |
-#include "c_salt/property.h" |
-#include "c_salt/scriptable_native_object_ptrs.h" |
-#include "c_salt/variant.h" |
- |
-namespace c_salt { |
- |
-class Instance; |
-class Module; |
- |
-namespace npapi { |
-class BrowserBinding; |
-} // namespace npapi |
- |
-// This class handles all the calls across the bridge to the browser via its |
-// browser binding object, |browser_binding_|. Note that NPObjects cannot have |
-// a vtable, hence the PIMPL pattern used here. Use AddMethodNamed() and |
-// AddProperty() to publish methods and static properties that can be accessed |
-// from the browser code. |
-// |
-// TODO(dspringer): |browser_binding_| gets replaced by pp::ScriptableObject |
-// when Pepper v2 becomes available. |
- |
-class ScriptingBridge : public c_salt::ScriptingInterface, |
- public boost::noncopyable { |
- public: |
- virtual ~ScriptingBridge(); |
- |
- // Causes |method_name| to be published as a method that can be called by |
- // JavaScript. Associated this method with |method|. |
- // |
- // Usage: |
- // AddMethodNamed("myFunc", /* This is the JavaScript name for the method |
- // you want to expose. */ |
- // &handler, /* This is a pointer to an instance of the |
- // handler object. */ |
- // &Handler::MyFunc /* This is the class method that will |
- // get called when "myFunc" is invoked |
- // from JavaScript. */ |
- // ); |
- // |
- // Example: |
- // class MyClass { |
- // void InitializeMethods(ScriptingBridge*); |
- // bool MyFunc(int32_t, double, std::string); |
- // }; |
- // |
- // MyClass::InitializeMethods(ScriptingBridge* bridge) { |
- // bridge->AddMethodNamed("myFunc", this, MyClass::MyFunc); |
- // } |
- // |
- // Caveats: |
- // - Currently, only up to 6 arguments are supported. |
- // - void return types are currently not supported. |
- // - Supported parameter types are currently limited to: |
- // std::string, int32_t, bool, double, and shared_ptr<ScriptingBridge> |
- template <class T, class Signature> |
- bool AddMethodNamed(const std::string& method_name, |
- T* handler, |
- Signature method) { |
- if (method_name.empty() || method == NULL) |
- return false; |
- SharedMethodCallbackExecutor method_ptr( |
- new MethodCallbackExecutorImpl<Signature>(handler, method)); |
- method_dictionary_.insert(MethodDictionary::value_type(method_name, |
- method_ptr)); |
- return true; |
- } |
- |
- // Adds |property| to the property dictionary. These properties should all |
- // be declared as static, mutable properties (the default). See |
- // c_salt/property.h for details. Example usage: |
- // SharedVariant value(new c_salt::Variant(42)); |
- // PropertyAttributes prop_attrib("myProp", value); |
- // bridge->AddProperty(Property(prop_attribs)); |
- bool AddProperty(const Property& property); |
- // Return a Property by ref counting so this can be made thread-safe. Note |
- // that this method bumps the ref count of the underlying instance to a Value, |
- // the caller is responsible for freeing it. Sets |value| to point to a NULL |
- // Value and returns |false| if no such property exists. |
- bool GetValueForPropertyNamed(const std::string& name, |
- SharedVariant* value) const; |
- // Sets the value of the property associated with |name|. Returns |false| |
- // if no such property exists. |
- bool SetValueForPropertyNamed(const std::string& name, const Variant& value); |
- |
- |
- // Make a copy of the browser binding object by asking the browser to retain |
- // it. Use this for the return value of functions that expect the retain |
- // count to increment, such as NPP_GetScriptableInstance(). |
- NPObject* CopyBrowserBinding(); |
- |
- // Release the browser binding object. Note that this *might* cause |this| |
- // to get deleted, if the ref count of the browser binding object falls to 0. |
- void ReleaseBrowserBinding(); |
- |
- // Log a message to the browser's console window. You can usually see this |
- // message when using a JavaScript debugger, such as Chrome Developer Tools. |
- bool LogToConsole(const std::string& msg) const; |
- |
- // Return the browser instance associated with this ScriptingBridge. |
- const NPP& GetBrowserInstance() const; |
- |
- void set_native_object(SharedScriptableNativeObject native_object) { |
- native_object_ = native_object; |
- } |
- |
- // Accessors. |
- const npapi::BrowserBinding* browser_binding() const { |
- return browser_binding_; |
- } |
- SharedScriptableNativeObject native_object() { |
- return native_object_; |
- } |
- |
- // This does not return a const NPObject* because none of the NPAPI that uses |
- // this value accepts a const NPObject*. This will go away with Pepper V2 |
- // so I don't think it's worth thinking about too hard. |
- NPObject* window_object() const; |
- |
- // A hidden class that wraps the NPObject, preserving its memory layout |
- // for the browser. |
- friend class npapi::BrowserBinding; |
- |
- private: |
- typedef std::map<std::string, |
- SharedMethodCallbackExecutor> MethodDictionary; |
- typedef std::map<std::string, Property> PropertyDictionary; |
- |
- ScriptingBridge(); // Not implemented, do not use. |
- explicit ScriptingBridge(npapi::BrowserBinding* browser_binding); |
- |
- // Support for browser-exposed methods. The browser proxy (a private, |
- // platform-specific implementation) invokes a method by first calling |
- // HasScriptMethod(), and if that returns |true|, calls InvokeScriptMethod(). |
- // The browser proxy is responsible for all the variant marshaling from |
- // platform-specific types (for example NPVariant or pp::Var) into c_salt |
- // Types. |
- virtual bool HasScriptMethod(const std::string& name); |
- virtual bool InvokeScriptMethod(const std::string& method_name, |
- const ::c_salt::SharedVariant* params_begin, |
- const ::c_salt::SharedVariant* params_end, |
- ::c_salt::SharedVariant* return_value_var); |
- |
- // Support for browser-exposed properties. The browser proxy (which is |
- // platform-specific) first calls HasProperty() before getting or setting; |
- // the Get or Set is performed only if HasProperty() returns |true|. The |
- // brwoser proxy is responsible for all the variant marshaling. |
- virtual bool HasScriptProperty(const std::string& name); |
- // Set |return_value| to the value associated with property |name|. If |
- // property |name| doesn't exist, then set |return_value| to the null type |
- // and return |false|. |
- virtual bool GetScriptProperty(const std::string& name, |
- SharedVariant* return_value) const; |
- // If |name| is associated with a static property, return that value. Else, |
- // if there is no property associated with |name|, add it as a dynamic |
- // property. See property.h for definitions and more details. |
- virtual bool SetScriptProperty(const std::string& name, |
- const SharedVariant& value); |
- // This succeeds only if |name| is associated with a dynamic property. |
- virtual bool RemoveScriptProperty(const std::string& name); |
- |
- // Return the names of all enumerable properties in to the provided vector. |
- virtual void GetAllPropertyNames(std::vector<std::string>* prop_names) const; |
- |
- // This is called by some browser proxies when all references to a proxy |
- // object have been deallocated, but the proxy's ref count has not gone to 0. |
- // It's kind of an anti-leak clean-up mechanism. |
- virtual void Invalidate(); |
- |
- virtual bool IsNative() const { return true; } |
- |
- // This is a weak reference. Some kind of smart_ptr would be useful here, |
- // but the |browser_binding_| instance is actually a proxy object that is |
- // managed by the browser. In addition, this pointer is actually a circular |
- // reference to the BrowserBinding object that owns this ScriptingBridge |
- // instance. |
- npapi::BrowserBinding* browser_binding_; |
- // |window_object_| is mutable so that the const accessor can create it |
- // lazily. |
- // TODO(dspringer): move this into BrowserBinding. |
- mutable NPObject* window_object_; |
- |
- MethodDictionary method_dictionary_; |
- PropertyDictionary property_dictionary_; |
- // ScriptingBridge owns the native object to ensure it stays alive as long as |
- // the browser needs it, and it goes away as soon as all clients are done with |
- // it. I.e., ScriptingBridge is ref-counted using the appropriate browser |
- // mechanism, and makes sure the target object has the same lifespan. |
- SharedScriptableNativeObject native_object_; |
-}; |
- |
-} // namespace c_salt |
- |
-#endif // C_SALT_SCRIPTING_BRIDGE_H_ |