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" 33d0825bca7fe65beaee391d30da42e937db621564Steve Block#import <WebCore/Bridge.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 625ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark virtual JSC::Bindings::Class *getClass() const; 635ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch virtual JSC::JSValue invokeMethod(JSC::ExecState*, const JSC::Bindings::MethodList&, const JSC::ArgList& args); 655ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 665ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark virtual bool supportsInvokeDefaultMethod() const; 670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch virtual JSC::JSValue invokeDefaultMethod(JSC::ExecState*, const JSC::ArgList&); 685ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 695ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark virtual bool supportsConstruct() const; 700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch virtual JSC::JSValue invokeConstruct(JSC::ExecState*, const JSC::ArgList&); 715ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch virtual JSC::JSValue defaultValue(JSC::ExecState*, JSC::PreferredPrimitiveType) const; 730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch virtual JSC::JSValue valueOf(JSC::ExecState*) const; 745ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 75563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark virtual void getPropertyNames(JSC::ExecState*, JSC::PropertyNameArray&); 76563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch JSC::JSValue stringValue(JSC::ExecState*) const; 780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch JSC::JSValue numberValue(JSC::ExecState*) const; 790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch JSC::JSValue booleanValue() const; 805ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch JSC::JSValue invoke(JSC::ExecState*, InvokeType, uint64_t identifier, const JSC::ArgList& args); 825ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 83d0825bca7fe65beaee391d30da42e937db621564Steve Block template <typename T> 84d0825bca7fe65beaee391d30da42e937db621564Steve Block std::auto_ptr<T> waitForReply(uint32_t requestID) const { 85d0825bca7fe65beaee391d30da42e937db621564Steve Block std::auto_ptr<T> reply = m_instanceProxy->waitForReply<T>(requestID); 86d0825bca7fe65beaee391d30da42e937db621564Steve Block 87d0825bca7fe65beaee391d30da42e937db621564Steve Block // If the instance proxy was invalidated, just return a null reply. 88d0825bca7fe65beaee391d30da42e937db621564Steve Block if (!m_instanceProxy) 89d0825bca7fe65beaee391d30da42e937db621564Steve Block return std::auto_ptr<T>(); 90d0825bca7fe65beaee391d30da42e937db621564Steve Block 91d0825bca7fe65beaee391d30da42e937db621564Steve Block return reply; 92d0825bca7fe65beaee391d30da42e937db621564Steve Block } 93d0825bca7fe65beaee391d30da42e937db621564Steve Block 945ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark NetscapePluginInstanceProxy* m_instanceProxy; 955ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark uint32_t m_objectID; 965ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark JSC::Bindings::FieldMap m_fields; 975ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark JSC::Bindings::MethodMap m_methods; 985ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark}; 995ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 1005ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark} 1015ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 1025ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark#endif // ProxyInstance_h 1035ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark#endif // USE(PLUGIN_HOST_PROCESS) 104