1dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block/* 2dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Copyright (C) 2010 Google Inc. All rights reserved. 3dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Copyright (C) 2009 Pawel Hajdan (phajdan.jr@chromium.org) 4dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 5dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Redistribution and use in source and binary forms, with or without 6dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * modification, are permitted provided that the following conditions are 7dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * met: 8dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 9dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * * Redistributions of source code must retain the above copyright 10dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * notice, this list of conditions and the following disclaimer. 11dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * * Redistributions in binary form must reproduce the above 12dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * copyright notice, this list of conditions and the following disclaimer 13dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * in the documentation and/or other materials provided with the 14dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * distribution. 15dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * * Neither the name of Google Inc. nor the names of its 16dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * contributors may be used to endorse or promote products derived from 17dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * this software without specific prior written permission. 18dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 19dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 20dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 21dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 22dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 23dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 24dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 25dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 26dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 27dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 28dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block */ 31dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 32dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block/* 33dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block CppBoundClass class: 34dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block This base class serves as a parent for C++ classes designed to be bound to 35dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block JavaScript objects. 36dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 37dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block Subclasses should define the constructor to build the property and method 38dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block lists needed to bind this class to a JS object. They should also declare 39dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block and define member variables and methods to be exposed to JS through 40dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block that object. 41dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block*/ 42dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 43dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#ifndef CppBoundClass_h 44dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#define CppBoundClass_h 45dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 46dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "CppVariant.h" 47dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include <wtf/HashMap.h> 48dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include <wtf/Noncopyable.h> 49dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include <wtf/OwnPtr.h> 50dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include <wtf/Vector.h> 51dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 52dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocknamespace WebKit { 53dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockclass WebFrame; 54dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockclass WebString; 55dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 56dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 57dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef Vector<CppVariant> CppArgumentList; 58dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 59dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block// CppBoundClass lets you map Javascript method calls and property accesses 60dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block// directly to C++ method calls and CppVariant* variable access. 61ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochclass CppBoundClass { 62ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch WTF_MAKE_NONCOPYABLE(CppBoundClass); 63dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockpublic: 64dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block class PropertyCallback { 65dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block public: 66dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block virtual ~PropertyCallback() { } 67dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 68dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // Sets |value| to the value of the property. Returns false in case of 69dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // failure. |value| is always non-0. 70dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block virtual bool getValue(CppVariant* result) = 0; 71dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 72dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // sets the property value to |value|. Returns false in case of failure. 73dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block virtual bool setValue(const CppVariant&) = 0; 74dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block }; 75dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 76dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // Callback class for "void function(CppVariant*)" 77dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block class GetterCallback { 78dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block public: 79dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block virtual ~GetterCallback() {} 80dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block virtual void run(CppVariant*) = 0; 81dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block }; 82dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 83dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // The constructor should call BindMethod, BindProperty, and 84dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // SetFallbackMethod as needed to set up the methods, properties, and 85dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // fallback method. 86dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block CppBoundClass() : m_boundToFrame(false) {} 87dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block virtual ~CppBoundClass(); 88dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 89dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // Return a CppVariant representing this class, for use with BindProperty(). 90dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // The variant type is guaranteed to be NPVariantType_Object. 91dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block CppVariant* getAsCppVariant(); 92dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 93dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // Given a WebFrame, BindToJavascript builds the NPObject that will represent 94dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // the class and binds it to the frame's window under the given name. This 95dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // should generally be called from the WebView delegate's 96dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // WindowObjectCleared(). A class so bound will be accessible to JavaScript 97dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // as window.<classname>. The owner of the CppBoundObject is responsible for 98dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // keeping the object around while the frame is alive, and for destroying it 99dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // afterwards. 100dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block void bindToJavascript(WebKit::WebFrame*, const WebKit::WebString& classname); 101dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 102dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // Used by a test. Returns true if a method with name |name| exists, 103dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // regardless of whether a fallback is registered. 104dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block bool isMethodRegistered(const std::string&) const; 105dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 106dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockprotected: 107dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // Callback for "void function(const CppArguemntList&, CppVariant*)" 108dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block class Callback { 109dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block public: 110dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block virtual ~Callback() {} 111dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block virtual void run(const CppArgumentList&, CppVariant*) = 0; 112dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block }; 113dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 114dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // Callback for "void T::method(const CppArguemntList&, CppVariant*)" 115dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block template <class T> class MemberCallback : public Callback { 116dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block public: 117dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block typedef void (T::*MethodType)(const CppArgumentList&, CppVariant*); 118dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block MemberCallback(T* object, MethodType method) 119dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block : m_object(object) 120dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block , m_method(method) {} 121dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block virtual ~MemberCallback() {} 122dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 123dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block virtual void run(const CppArgumentList& arguments, CppVariant* result) 124dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block { 125dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block (m_object->*m_method)(arguments, result); 126dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 127dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block private: 128dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block T* m_object; 129dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block MethodType m_method; 130dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block }; 131dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 132dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // Callback class for "void T::method(CppVariant*)" 133dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block template <class T> class MemberGetterCallback : public GetterCallback { 134dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block public: 135dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block typedef void (T::*MethodType)(CppVariant*); 136dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block MemberGetterCallback(T* object, MethodType method) 137dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block : m_object(object) 138dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block , m_method(method) {} 139dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block virtual ~MemberGetterCallback() {} 140dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 141dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block virtual void run(CppVariant* result) { (m_object->*m_method)(result); } 142dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block private: 143dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block T* m_object; 144dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block MethodType m_method; 145dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block }; 146dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 147dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // Bind the Javascript method called the string parameter to the C++ method. 148dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block void bindCallback(const std::string&, Callback*); 149dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 150dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // A wrapper for bindCallback, to simplify the common case of binding a 151dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // method on the current object. Though not verified here, |method| 152dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // must be a method of this CppBoundClass subclass. 153dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block template<class T> 154dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block void bindMethod(const std::string& name, void (T::*method)(const CppArgumentList&, CppVariant*)) 155dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block { 156dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block Callback* callback = new MemberCallback<T>(static_cast<T*>(this), method); 157dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block bindCallback(name, callback); 158dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 159dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 160dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // Bind Javascript property |name| to the C++ getter callback |callback|. 161dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // This can be used to create read-only properties. 162dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block void bindGetterCallback(const std::string&, GetterCallback*); 163dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 164dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // A wrapper for BindGetterCallback, to simplify the common case of binding a 165dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // property on the current object. Though not verified here, |method| 166dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // must be a method of this CppBoundClass subclass. 167dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block template<class T> 168dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block void bindProperty(const std::string& name, void (T::*method)(CppVariant*)) 169dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block { 170dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block GetterCallback* callback = new MemberGetterCallback<T>(static_cast<T*>(this), method); 171dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block bindGetterCallback(name, callback); 172dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 173dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 174dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // Bind the Javascript property called |name| to a CppVariant. 175dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block void bindProperty(const std::string&, CppVariant*); 176dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 177dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // Bind Javascript property called |name| to a PropertyCallback. 178dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // CppBoundClass assumes control over the life time of the callback. 179dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block void bindProperty(const std::string&, PropertyCallback*); 180dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 181dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // Set the fallback callback, which is called when when a callback is 182dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // invoked that isn't bound. 183dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // If it is 0 (its default value), a JavaScript exception is thrown in 184dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // that case (as normally expected). If non 0, the fallback method is 185dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // invoked and the script continues its execution. 186dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // Passing 0 clears out any existing binding. 187dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // It is used for tests and should probably only be used in such cases 188dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // as it may cause unexpected behaviors (a JavaScript object with a 189dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // fallback always returns true when checked for a method's 190dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // existence). 191dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block void bindFallbackCallback(Callback* fallbackCallback) 192dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block { 193dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_fallbackCallback.set(fallbackCallback); 194dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 195dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 196dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // A wrapper for BindFallbackCallback, to simplify the common case of 197dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // binding a method on the current object. Though not verified here, 198dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // |method| must be a method of this CppBoundClass subclass. 199dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // Passing 0 for |method| clears out any existing binding. 200dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block template<class T> 201dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block void bindFallbackMethod(void (T::*method)(const CppArgumentList&, CppVariant*)) 202dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block { 203dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (method) { 204dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block Callback* callback = new MemberCallback<T>(static_cast<T*>(this), method); 205dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block bindFallbackCallback(callback); 206dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } else 207dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block bindFallbackCallback(0); 208dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 209dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 210dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // Some fields are protected because some tests depend on accessing them, 211dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // but otherwise they should be considered private. 212dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 213dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block typedef HashMap<NPIdentifier, PropertyCallback*> PropertyList; 214dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block typedef HashMap<NPIdentifier, Callback*> MethodList; 215dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // These maps associate names with property and method pointers to be 216dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // exposed to JavaScript. 217dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block PropertyList m_properties; 218dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block MethodList m_methods; 219dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 220dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // The callback gets invoked when a call is made to an nonexistent method. 221dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block OwnPtr<Callback> m_fallbackCallback; 222dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 223dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockprivate: 224dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // NPObject callbacks. 225dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block friend struct CppNPObject; 226dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block bool hasMethod(NPIdentifier) const; 227dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block bool invoke(NPIdentifier, const NPVariant* args, size_t argCount, 228dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block NPVariant* result); 229dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block bool hasProperty(NPIdentifier) const; 230dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block bool getProperty(NPIdentifier, NPVariant* result) const; 231dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block bool setProperty(NPIdentifier, const NPVariant*); 232dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 233dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // A lazily-initialized CppVariant representing this class. We retain 1 234dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // reference to this object, and it is released on deletion. 235dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block CppVariant m_selfVariant; 236dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 237dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // True if our np_object has been bound to a WebFrame, in which case it must 238dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // be unregistered with V8 when we delete it. 239dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block bool m_boundToFrame; 240dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block}; 241dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 242dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#endif // CppBoundClass_h 243