15ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark/* 2d0825bca7fe65beaee391d30da42e937db621564Steve Block * Copyright (C) 2009, 2010 Apple Inc. All Rights Reserved. 35ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark * 45ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark * Redistribution and use in source and binary forms, with or without 55ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark * modification, are permitted provided that the following conditions 65ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark * are met: 75ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark * 1. Redistributions of source code must retain the above copyright 85ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark * notice, this list of conditions and the following disclaimer. 95ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark * 2. Redistributions in binary form must reproduce the above copyright 105ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark * notice, this list of conditions and the following disclaimer in the 115ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark * documentation and/or other materials provided with the distribution. 125ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark * 135ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY 145ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 155ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 165ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR 175ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 185ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 195ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 205ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 215ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 225ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 235ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 245ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark */ 255ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 265ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark#if USE(PLUGIN_HOST_PROCESS) 275ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 285ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark#ifndef ProxyInstance_h 295ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark#define ProxyInstance_h 305ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 31d0825bca7fe65beaee391d30da42e937db621564Steve Block#import "NetscapePluginInstanceProxy.h" 32d0825bca7fe65beaee391d30da42e937db621564Steve Block#import "WebKitPluginHostTypes.h" 3353733164eb6cabab5a1eddcabb42e4ce27eb0e44Ben Murdoch#import <WebCore/BridgeJSC.h> 34d0825bca7fe65beaee391d30da42e937db621564Steve Block#import <WebCore/runtime_root.h> 35d0825bca7fe65beaee391d30da42e937db621564Steve Block#import <wtf/OwnPtr.h> 365ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 375ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clarknamespace WebKit { 385ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 395ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clarkclass ProxyClass; 405ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 415ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clarkclass ProxyInstance : public JSC::Bindings::Instance { 425ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clarkpublic: 435ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark static PassRefPtr<ProxyInstance> create(PassRefPtr<JSC::Bindings::RootObject> rootObject, NetscapePluginInstanceProxy* instanceProxy, uint32_t objectID) 445ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark { 455ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark return adoptRef(new ProxyInstance(rootObject, instanceProxy, objectID)); 465ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark } 475ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark ~ProxyInstance(); 485ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 495ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark JSC::Bindings::MethodList methodsNamed(const JSC::Identifier&); 505ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark JSC::Bindings::Field* fieldNamed(const JSC::Identifier&); 515ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch JSC::JSValue fieldValue(JSC::ExecState*, const JSC::Bindings::Field*) const; 530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch void setFieldValue(JSC::ExecState*, const JSC::Bindings::Field*, JSC::JSValue) const; 545ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 55563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark void invalidate(); 56563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 57563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark uint32_t objectID() const { return m_objectID; } 58563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 595ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clarkprivate: 605ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark ProxyInstance(PassRefPtr<JSC::Bindings::RootObject>, NetscapePluginInstanceProxy*, uint32_t objectID); 615ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 62dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block virtual JSC::Bindings::RuntimeObject* newRuntimeObject(JSC::ExecState*); 63dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 64dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block virtual JSC::Bindings::Class* getClass() const; 65dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 66dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block virtual JSC::JSValue getMethod(JSC::ExecState* exec, const JSC::Identifier& propertyName); 675af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke virtual JSC::JSValue invokeMethod(JSC::ExecState*, JSC::RuntimeMethod*); 685ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 695ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark virtual bool supportsInvokeDefaultMethod() const; 705af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke virtual JSC::JSValue invokeDefaultMethod(JSC::ExecState*); 715ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 725ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark virtual bool supportsConstruct() const; 730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch virtual JSC::JSValue invokeConstruct(JSC::ExecState*, const JSC::ArgList&); 745ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch virtual JSC::JSValue defaultValue(JSC::ExecState*, JSC::PreferredPrimitiveType) const; 760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch virtual JSC::JSValue valueOf(JSC::ExecState*) const; 775ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 78563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark virtual void getPropertyNames(JSC::ExecState*, JSC::PropertyNameArray&); 79563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch JSC::JSValue stringValue(JSC::ExecState*) const; 810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch JSC::JSValue numberValue(JSC::ExecState*) const; 820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch JSC::JSValue booleanValue() const; 835ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 845af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke JSC::JSValue invoke(JSC::ExecState*, InvokeType, uint64_t identifier, const JSC::ArgList&); 855ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 86d0825bca7fe65beaee391d30da42e937db621564Steve Block template <typename T> 87d0825bca7fe65beaee391d30da42e937db621564Steve Block std::auto_ptr<T> waitForReply(uint32_t requestID) const { 88d0825bca7fe65beaee391d30da42e937db621564Steve Block std::auto_ptr<T> reply = m_instanceProxy->waitForReply<T>(requestID); 89d0825bca7fe65beaee391d30da42e937db621564Steve Block 90d0825bca7fe65beaee391d30da42e937db621564Steve Block // If the instance proxy was invalidated, just return a null reply. 91d0825bca7fe65beaee391d30da42e937db621564Steve Block if (!m_instanceProxy) 92d0825bca7fe65beaee391d30da42e937db621564Steve Block return std::auto_ptr<T>(); 93d0825bca7fe65beaee391d30da42e937db621564Steve Block 94d0825bca7fe65beaee391d30da42e937db621564Steve Block return reply; 95d0825bca7fe65beaee391d30da42e937db621564Steve Block } 96d0825bca7fe65beaee391d30da42e937db621564Steve Block 975ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark NetscapePluginInstanceProxy* m_instanceProxy; 985ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark uint32_t m_objectID; 995ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark JSC::Bindings::FieldMap m_fields; 1005ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark JSC::Bindings::MethodMap m_methods; 1015ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark}; 1025ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 1035ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark} 1045ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 1055ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark#endif // ProxyInstance_h 1065ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark#endif // USE(PLUGIN_HOST_PROCESS) 107