15ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark/* 25ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark * Copyright (C) 2008 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 26e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block#if USE(PLUGIN_HOST_PROCESS) && ENABLE(NETSCAPE_PLUGIN_API) 275ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 285ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark#import "NetscapePluginHostProxy.h" 295ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 305ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark#import <mach/mach.h> 315ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark#import <wtf/StdLibExtras.h> 325ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 335ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark#import "HostedNetscapePluginStream.h" 345ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark#import "NetscapePluginHostManager.h" 355ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark#import "NetscapePluginInstanceProxy.h" 365ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark#import "WebFrameInternal.h" 375ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark#import "WebHostedNetscapePluginView.h" 385ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark#import "WebKitSystemInterface.h" 395ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark#import <WebCore/Frame.h> 40563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark#import <WebCore/IdentifierRep.h> 415ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark#import <WebCore/ScriptController.h> 428a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block#import <string> 435ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 445ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clarkextern "C" { 455ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark#import "WebKitPluginHost.h" 465ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark#import "WebKitPluginClientServer.h" 475ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark} 485ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 495ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clarkusing namespace std; 505ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clarkusing namespace JSC; 515ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clarkusing namespace WebCore; 525ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch@interface WebPlaceholderModalWindow : NSWindow 540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch@end 550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch@implementation WebPlaceholderModalWindow 570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch// Prevent NSApp from calling requestUserAttention: when the window is shown 580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch// modally, even if the app is inactive. See 6823049. 590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch- (BOOL)_wantsUserAttention 600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return NO; 620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch@end 640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 655ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clarknamespace WebKit { 665ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 67563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkclass PluginDestroyDeferrer { 68563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkpublic: 69563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark PluginDestroyDeferrer(NetscapePluginInstanceProxy* proxy) 70563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark : m_proxy(proxy) 71563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { 72563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark m_proxy->willCallPluginFunction(); 73563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 745ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 75563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark ~PluginDestroyDeferrer() 76563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { 7728040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu bool stopped; 7828040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu m_proxy->didCallPluginFunction(stopped); 79563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 80563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 81563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkprivate: 82563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark RefPtr<NetscapePluginInstanceProxy> m_proxy; 83563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}; 84563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 855ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clarktypedef HashMap<mach_port_t, NetscapePluginHostProxy*> PluginProxyMap; 865ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clarkstatic PluginProxyMap& pluginProxyMap() 875ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark{ 885ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark DEFINE_STATIC_LOCAL(PluginProxyMap, pluginProxyMap, ()); 895ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 905ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark return pluginProxyMap; 915ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark} 925ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 93dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockunsigned NetscapePluginHostProxy::s_processingRequests; 94dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochNetscapePluginHostProxy::NetscapePluginHostProxy(mach_port_t clientPort, mach_port_t pluginHostPort, const ProcessSerialNumber& pluginHostPSN, bool shouldCacheMissingPropertiesAndMethods) 965ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark : m_clientPort(clientPort) 97563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark , m_portSet(MACH_PORT_NULL) 985ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark , m_pluginHostPort(pluginHostPort) 99563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark , m_isModal(false) 1005ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark , m_menuBarIsVisible(true) 101dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block , m_fullscreenWindowIsShowing(false) 102563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark , m_pluginHostPSN(pluginHostPSN) 1030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch , m_shouldCacheMissingPropertiesAndMethods(shouldCacheMissingPropertiesAndMethods) 1045ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark{ 1055ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark pluginProxyMap().add(m_clientPort, this); 1065ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 1075ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark // FIXME: We should use libdispatch for this. 1085ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark CFMachPortContext context = { 0, this, 0, 0, 0 }; 1095ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark m_deadNameNotificationPort.adoptCF(CFMachPortCreate(0, deadNameNotificationCallback, &context, 0)); 1105ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 1115ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark mach_port_t previous; 1125ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark mach_port_request_notification(mach_task_self(), pluginHostPort, MACH_NOTIFY_DEAD_NAME, 0, 1135ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark CFMachPortGetPort(m_deadNameNotificationPort.get()), MACH_MSG_TYPE_MAKE_SEND_ONCE, &previous); 1145ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark ASSERT(previous == MACH_PORT_NULL); 1155ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 1165ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark RetainPtr<CFRunLoopSourceRef> deathPortSource(AdoptCF, CFMachPortCreateRunLoopSource(0, m_deadNameNotificationPort.get(), 0)); 1175ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 1185ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark CFRunLoopAddSource(CFRunLoopGetCurrent(), deathPortSource.get(), kCFRunLoopDefaultMode); 1195ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 120563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark m_clientPortSource.adoptCF(WKCreateMIGServerSource((mig_subsystem_t)&WKWebKitPluginClient_subsystem, m_clientPort)); 1215ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark CFRunLoopAddSource(CFRunLoopGetCurrent(), m_clientPortSource.get(), kCFRunLoopDefaultMode); 122563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark CFRunLoopAddSource(CFRunLoopGetCurrent(), m_clientPortSource.get(), (CFStringRef)NSEventTrackingRunLoopMode); 1235ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark} 1245ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 1255ec837f49e9c57d4394ce64b853fd86269c8b340Cary ClarkNetscapePluginHostProxy::~NetscapePluginHostProxy() 1265ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark{ 1275ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark pluginProxyMap().remove(m_clientPort); 128563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 129563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // Free the port set 130563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (m_portSet) { 131563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark mach_port_extract_member(mach_task_self(), m_clientPort, m_portSet); 132563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark mach_port_extract_member(mach_task_self(), CFMachPortGetPort(m_deadNameNotificationPort.get()), m_portSet); 133563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark mach_port_destroy(mach_task_self(), m_portSet); 134563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 1355ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 1365ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark ASSERT(m_clientPortSource); 1375ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark CFRunLoopSourceInvalidate(m_clientPortSource.get()); 1385ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark m_clientPortSource = 0; 1395ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark} 1405ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 1415ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clarkvoid NetscapePluginHostProxy::pluginHostDied() 1425ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark{ 1435ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark PluginInstanceMap instances; 1445ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark m_instances.swap(instances); 1455ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 1465ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark PluginInstanceMap::const_iterator end = instances.end(); 1475ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark for (PluginInstanceMap::const_iterator it = instances.begin(); it != end; ++it) 1485ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark it->second->pluginHostDied(); 1495ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 1505ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark NetscapePluginHostManager::shared().pluginHostDied(this); 1515ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 1525ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark // The plug-in crashed while its menu bar was hidden. Make sure to show it. 153563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (!m_menuBarIsVisible) 1545ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark setMenuBarVisible(true); 1555ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 1565ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark // The plug-in crashed while it had a modal dialog up. 157563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (m_isModal) 158563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark endModal(); 1595ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 1605ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark delete this; 1615ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark} 1625ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 1635ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clarkvoid NetscapePluginHostProxy::addPluginInstance(NetscapePluginInstanceProxy* instance) 1645ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark{ 1655ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark ASSERT(!m_instances.contains(instance->pluginID())); 1665ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 1675ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark m_instances.set(instance->pluginID(), instance); 1685ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark} 1695ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 1705ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clarkvoid NetscapePluginHostProxy::removePluginInstance(NetscapePluginInstanceProxy* instance) 1715ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark{ 1725ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark ASSERT(m_instances.get(instance->pluginID()) == instance); 1735ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 1745ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark m_instances.remove(instance->pluginID()); 1755ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark} 1765ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 1775ec837f49e9c57d4394ce64b853fd86269c8b340Cary ClarkNetscapePluginInstanceProxy* NetscapePluginHostProxy::pluginInstance(uint32_t pluginID) 1785ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark{ 179dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block NetscapePluginInstanceProxy* result = m_instances.get(pluginID).get(); 180dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ASSERT(!result || result->hostProxy() == this); 181dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return result; 1825ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark} 1835ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 1845ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clarkvoid NetscapePluginHostProxy::deadNameNotificationCallback(CFMachPortRef port, void *msg, CFIndex size, void *info) 1855ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark{ 186cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block ASSERT(msg); 187cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block ASSERT(static_cast<mach_msg_header_t*>(msg)->msgh_id == MACH_NOTIFY_DEAD_NAME); 1885ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 1895ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark static_cast<NetscapePluginHostProxy*>(info)->pluginHostDied(); 1905ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark} 1915ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 1925ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clarkvoid NetscapePluginHostProxy::setMenuBarVisible(bool visible) 1935ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark{ 1945ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark m_menuBarIsVisible = visible; 195d0825bca7fe65beaee391d30da42e937db621564Steve Block 1965ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark [NSMenu setMenuBarVisible:visible]; 197d0825bca7fe65beaee391d30da42e937db621564Steve Block} 198d0825bca7fe65beaee391d30da42e937db621564Steve Block 199dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockvoid NetscapePluginHostProxy::didEnterFullscreen() const 200d0825bca7fe65beaee391d30da42e937db621564Steve Block{ 201d0825bca7fe65beaee391d30da42e937db621564Steve Block SetFrontProcess(&m_pluginHostPSN); 202d0825bca7fe65beaee391d30da42e937db621564Steve Block} 203d0825bca7fe65beaee391d30da42e937db621564Steve Block 204dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockvoid NetscapePluginHostProxy::didExitFullscreen() const 205d0825bca7fe65beaee391d30da42e937db621564Steve Block{ 206d0825bca7fe65beaee391d30da42e937db621564Steve Block // If the plug-in host is the current application then we should bring ourselves to the front when it exits full-screen mode. 207d0825bca7fe65beaee391d30da42e937db621564Steve Block 208d0825bca7fe65beaee391d30da42e937db621564Steve Block ProcessSerialNumber frontProcess; 209d0825bca7fe65beaee391d30da42e937db621564Steve Block GetFrontProcess(&frontProcess); 210d0825bca7fe65beaee391d30da42e937db621564Steve Block Boolean isSameProcess = 0; 211d0825bca7fe65beaee391d30da42e937db621564Steve Block SameProcess(&frontProcess, &m_pluginHostPSN, &isSameProcess); 212d0825bca7fe65beaee391d30da42e937db621564Steve Block if (!isSameProcess) 213d0825bca7fe65beaee391d30da42e937db621564Steve Block return; 214d0825bca7fe65beaee391d30da42e937db621564Steve Block 215d0825bca7fe65beaee391d30da42e937db621564Steve Block ProcessSerialNumber currentProcess; 216d0825bca7fe65beaee391d30da42e937db621564Steve Block GetCurrentProcess(¤tProcess); 217d0825bca7fe65beaee391d30da42e937db621564Steve Block SetFrontProcess(¤tProcess); 218d0825bca7fe65beaee391d30da42e937db621564Steve Block} 219d0825bca7fe65beaee391d30da42e937db621564Steve Block 220dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockvoid NetscapePluginHostProxy::setFullscreenWindowIsShowing(bool isShowing) 221d0825bca7fe65beaee391d30da42e937db621564Steve Block{ 222dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (m_fullscreenWindowIsShowing == isShowing) 223d0825bca7fe65beaee391d30da42e937db621564Steve Block return; 224d0825bca7fe65beaee391d30da42e937db621564Steve Block 225dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_fullscreenWindowIsShowing = isShowing; 226dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (m_fullscreenWindowIsShowing) 227dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block didEnterFullscreen(); 228d0825bca7fe65beaee391d30da42e937db621564Steve Block else 229dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block didExitFullscreen(); 230d0825bca7fe65beaee391d30da42e937db621564Steve Block 2315ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark} 2325ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 233563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvoid NetscapePluginHostProxy::applicationDidBecomeActive() 2345ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark{ 235563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark SetFrontProcess(&m_pluginHostPSN); 236563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 2375ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 238563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvoid NetscapePluginHostProxy::beginModal() 239563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{ 240563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark ASSERT(!m_placeholderWindow); 241563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark ASSERT(!m_activationObserver); 242563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch m_placeholderWindow.adoptNS([[WebPlaceholderModalWindow alloc] initWithContentRect:NSMakeRect(0, 0, 1, 1) styleMask:NSBorderlessWindowMask backing:NSBackingStoreBuffered defer:YES]); 244563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 245563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark m_activationObserver = [[NSNotificationCenter defaultCenter] addObserverForName:NSApplicationWillBecomeActiveNotification object:NSApp queue:nil 246563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark usingBlock:^(NSNotification *){ applicationDidBecomeActive(); }]; 247563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 248563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // We need to be able to get the setModal(false) call from the plug-in host. 249563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark CFRunLoopAddSource(CFRunLoopGetCurrent(), m_clientPortSource.get(), (CFStringRef)NSModalPanelRunLoopMode); 250563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 251563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark [NSApp runModalForWindow:m_placeholderWindow.get()]; 2520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 2530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch [m_placeholderWindow.get() orderOut:nil]; 2540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch m_placeholderWindow = 0; 255563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 256563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 257563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvoid NetscapePluginHostProxy::endModal() 258563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{ 259563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark ASSERT(m_placeholderWindow); 260563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark ASSERT(m_activationObserver); 261563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 262563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark [[NSNotificationCenter defaultCenter] removeObserver:m_activationObserver.get()]; 263563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark m_activationObserver = nil; 264563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 265563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark CFRunLoopRemoveSource(CFRunLoopGetCurrent(), m_clientPortSource.get(), (CFStringRef)NSModalPanelRunLoopMode); 266563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 267563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark [NSApp stopModal]; 268563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 269563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // Make ourselves the front process. 270563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark ProcessSerialNumber psn; 271563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark GetCurrentProcess(&psn); 272563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark SetFrontProcess(&psn); 273563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 274563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2755ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 276563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvoid NetscapePluginHostProxy::setModal(bool modal) 277563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{ 278563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (modal == m_isModal) 279563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return; 280563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 281563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark m_isModal = modal; 282563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 283563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (m_isModal) 284563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark beginModal(); 285563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark else 286563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark endModal(); 287563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 288563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 289563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkbool NetscapePluginHostProxy::processRequests() 290563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{ 291dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block s_processingRequests++; 2920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 2930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!m_portSet) { 294563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark mach_port_allocate(mach_task_self(), MACH_PORT_RIGHT_PORT_SET, &m_portSet); 295563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark mach_port_insert_member(mach_task_self(), m_clientPort, m_portSet); 296563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark mach_port_insert_member(mach_task_self(), CFMachPortGetPort(m_deadNameNotificationPort.get()), m_portSet); 297563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 298563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 299563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark char buffer[4096]; 300563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 301563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark mach_msg_header_t* msg = reinterpret_cast<mach_msg_header_t*>(buffer); 302563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 303563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark kern_return_t kr = mach_msg(msg, MACH_RCV_MSG, 0, sizeof(buffer), m_portSet, 0, MACH_PORT_NULL); 304563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 305563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (kr != KERN_SUCCESS) { 306563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark LOG_ERROR("Could not receive mach message, error %x", kr); 307dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block s_processingRequests--; 308563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return false; 309563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 310563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 311563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (msg->msgh_local_port == m_clientPort) { 312563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark __ReplyUnion__WKWebKitPluginClient_subsystem reply; 313563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark mach_msg_header_t* replyHeader = reinterpret_cast<mach_msg_header_t*>(&reply); 314563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 315563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (WebKitPluginClient_server(msg, replyHeader) && replyHeader->msgh_remote_port != MACH_PORT_NULL) { 316563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark kr = mach_msg(replyHeader, MACH_SEND_MSG, replyHeader->msgh_size, 0, MACH_PORT_NULL, 0, MACH_PORT_NULL); 3175ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 318563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (kr != KERN_SUCCESS) { 319563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark LOG_ERROR("Could not send mach message, error %x", kr); 320dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block s_processingRequests--; 321563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return false; 322563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 3235ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark } 324563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 325dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block s_processingRequests--; 326563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return true; 327563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 3285ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 329563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (msg->msgh_local_port == CFMachPortGetPort(m_deadNameNotificationPort.get())) { 330563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark ASSERT(msg->msgh_id == MACH_NOTIFY_DEAD_NAME); 331563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark pluginHostDied(); 332dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block s_processingRequests--; 333563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return false; 334563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 335563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 336563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark ASSERT_NOT_REACHED(); 337dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block s_processingRequests--; 338563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return false; 339563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 340563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 3415ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark} // namespace WebKit 3425ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 3435ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clarkusing namespace WebKit; 3445ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 345563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark// Helper class for deallocating data 346563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkclass DataDeallocator { 347563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkpublic: 348563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark DataDeallocator(data_t data, mach_msg_type_number_t dataLength) 349563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark : m_data(reinterpret_cast<vm_address_t>(data)) 350563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark , m_dataLength(dataLength) 351563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { 352563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 353563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 354563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark ~DataDeallocator() 355563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark { 356563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (!m_data) 357563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return; 358563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 359563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark vm_deallocate(mach_task_self(), m_data, m_dataLength); 360563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 361563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 362563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkprivate: 363563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark vm_address_t m_data; 364563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark vm_size_t m_dataLength; 365563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}; 366563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 3675ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark// MiG callbacks 3685ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clarkkern_return_t WKPCStatusText(mach_port_t clientPort, uint32_t pluginID, data_t text, mach_msg_type_number_t textCnt) 3695ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark{ 370563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark DataDeallocator deallocator(text, textCnt); 371563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 3725ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark NetscapePluginHostProxy* hostProxy = pluginProxyMap().get(clientPort); 3735ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark if (!hostProxy) 3745ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark return KERN_FAILURE; 3755ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 3765ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark NetscapePluginInstanceProxy* instanceProxy = hostProxy->pluginInstance(pluginID); 3775ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark if (!instanceProxy) 3785ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark return KERN_FAILURE; 3795ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 3805ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark instanceProxy->status(text); 3815ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark return KERN_SUCCESS; 3825ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark} 3835ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 3845ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clarkkern_return_t WKPCLoadURL(mach_port_t clientPort, uint32_t pluginID, data_t url, mach_msg_type_number_t urlLength, data_t target, mach_msg_type_number_t targetLength, 3855ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark data_t postData, mach_msg_type_number_t postDataLength, uint32_t flags, 3865ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark uint16_t* outResult, uint32_t* outStreamID) 3875ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark{ 388563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark DataDeallocator urlDeallocator(url, urlLength); 389563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark DataDeallocator targetDeallocator(target, targetLength); 390563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark DataDeallocator postDataDeallocator(postData, postDataLength); 391563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 3925ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark NetscapePluginHostProxy* hostProxy = pluginProxyMap().get(clientPort); 3935ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark if (!hostProxy) 3945ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark return KERN_FAILURE; 3955ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 3965ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark NetscapePluginInstanceProxy* instanceProxy = hostProxy->pluginInstance(pluginID); 3975ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark if (!instanceProxy) 3985ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark return KERN_FAILURE; 3995ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 4005ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark uint32_t streamID = 0; 4015ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark NPError result = instanceProxy->loadURL(url, target, postData, postDataLength, static_cast<LoadURLFlags>(flags), streamID); 4025ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 4035ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark *outResult = result; 4045ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark *outStreamID = streamID; 4055ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark return KERN_SUCCESS; 4065ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark} 4075ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 4085ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clarkkern_return_t WKPCCancelLoadURL(mach_port_t clientPort, uint32_t pluginID, uint32_t streamID, int16_t reason) 4095ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark{ 4105ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark NetscapePluginHostProxy* hostProxy = pluginProxyMap().get(clientPort); 4115ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark if (!hostProxy) 4125ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark return KERN_FAILURE; 4135ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 4145ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark NetscapePluginInstanceProxy* instanceProxy = hostProxy->pluginInstance(pluginID); 4155ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark if (!instanceProxy) 4165ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark return KERN_FAILURE; 4175ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 4180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!instanceProxy->cancelStreamLoad(streamID, reason)) 4195ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark return KERN_FAILURE; 4200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 4215ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark return KERN_SUCCESS; 4225ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark} 4235ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 4245ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clarkkern_return_t WKPCInvalidateRect(mach_port_t clientPort, uint32_t pluginID, double x, double y, double width, double height) 4255ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark{ 4265ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark NetscapePluginHostProxy* hostProxy = pluginProxyMap().get(clientPort); 4275ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark if (!hostProxy) 4280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return KERN_SUCCESS; 4290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 4300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!hostProxy->isProcessingRequests()) { 4310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (NetscapePluginInstanceProxy* instanceProxy = hostProxy->pluginInstance(pluginID)) 4320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch instanceProxy->invalidateRect(x, y, width, height); 4330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return KERN_SUCCESS; 434dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 4350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 4360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // Defer the work 4370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch CFRunLoopPerformBlock(CFRunLoopGetMain(), kCFRunLoopDefaultMode, ^{ 4380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (NetscapePluginHostProxy* hostProxy = pluginProxyMap().get(clientPort)) { 4390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (NetscapePluginInstanceProxy* instanceProxy = hostProxy->pluginInstance(pluginID)) 4400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch instanceProxy->invalidateRect(x, y, width, height); 4410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 4420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch }); 4435ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 4445ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark return KERN_SUCCESS; 4455ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark} 4465ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 447563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkkern_return_t WKPCGetScriptableNPObjectReply(mach_port_t clientPort, uint32_t pluginID, uint32_t requestID, uint32_t objectID) 4485ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark{ 4495ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark NetscapePluginHostProxy* hostProxy = pluginProxyMap().get(clientPort); 4505ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark if (!hostProxy) 4515ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark return KERN_FAILURE; 4525ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 4535ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark NetscapePluginInstanceProxy* instanceProxy = hostProxy->pluginInstance(pluginID); 4545ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark if (!instanceProxy) 4555ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark return KERN_FAILURE; 4565ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 457563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark instanceProxy->setCurrentReply(requestID, new NetscapePluginInstanceProxy::GetScriptableNPObjectReply(objectID)); 4585ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark return KERN_SUCCESS; 4595ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark} 4605ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 461563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkkern_return_t WKPCBooleanReply(mach_port_t clientPort, uint32_t pluginID, uint32_t requestID, boolean_t result) 4625ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark{ 4635ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark NetscapePluginHostProxy* hostProxy = pluginProxyMap().get(clientPort); 4645ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark if (!hostProxy) 4655ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark return KERN_FAILURE; 4665ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 4675ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark NetscapePluginInstanceProxy* instanceProxy = hostProxy->pluginInstance(pluginID); 4685ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark if (!instanceProxy) 4695ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark return KERN_FAILURE; 4705ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 471563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark instanceProxy->setCurrentReply(requestID, new NetscapePluginInstanceProxy::BooleanReply(result)); 4725ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark return KERN_SUCCESS; 4735ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark} 4745ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 475563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkkern_return_t WKPCBooleanAndDataReply(mach_port_t clientPort, uint32_t pluginID, uint32_t requestID, boolean_t returnValue, data_t resultData, mach_msg_type_number_t resultLength) 4765ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark{ 477563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark DataDeallocator deallocator(resultData, resultLength); 478563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 4795ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark NetscapePluginHostProxy* hostProxy = pluginProxyMap().get(clientPort); 4805ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark if (!hostProxy) 4815ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark return KERN_FAILURE; 4825ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 4835ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark NetscapePluginInstanceProxy* instanceProxy = hostProxy->pluginInstance(pluginID); 4845ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark if (!instanceProxy) 4855ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark return KERN_FAILURE; 4865ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 487563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark RetainPtr<CFDataRef> result(AdoptCF, CFDataCreate(0, reinterpret_cast<UInt8*>(resultData), resultLength)); 488563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark instanceProxy->setCurrentReply(requestID, new NetscapePluginInstanceProxy::BooleanAndDataReply(returnValue, result)); 4895ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 4905ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark return KERN_SUCCESS; 4915ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark} 4925ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 4936c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenkern_return_t WKPCInstantiatePluginReply(mach_port_t clientPort, uint32_t pluginID, uint32_t requestID, kern_return_t result, uint32_t renderContextID, uint32_t rendererType) 4945ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark{ 4955ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark NetscapePluginHostProxy* hostProxy = pluginProxyMap().get(clientPort); 4965ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark if (!hostProxy) 4975ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark return KERN_FAILURE; 4985ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 4995ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark NetscapePluginInstanceProxy* instanceProxy = hostProxy->pluginInstance(pluginID); 5005ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark if (!instanceProxy) 5015ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark return KERN_FAILURE; 5025ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 5036c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen instanceProxy->setCurrentReply(requestID, new NetscapePluginInstanceProxy::InstantiatePluginReply(result, renderContextID, static_cast<RendererType>(rendererType))); 5045ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark return KERN_SUCCESS; 5055ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark} 5065ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 5075ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clarkkern_return_t WKPCGetWindowNPObject(mach_port_t clientPort, uint32_t pluginID, uint32_t* outObjectID) 5085ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark{ 5095ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark NetscapePluginHostProxy* hostProxy = pluginProxyMap().get(clientPort); 5105ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark if (!hostProxy) 5115ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark return KERN_FAILURE; 5125ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 5135ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark NetscapePluginInstanceProxy* instanceProxy = hostProxy->pluginInstance(pluginID); 5145ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark if (!instanceProxy) 5155ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark return KERN_FAILURE; 5165ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 5175ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark uint32_t objectID; 5185ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark if (!instanceProxy->getWindowNPObject(objectID)) 5195ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark return KERN_FAILURE; 5205ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 5215ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark *outObjectID = objectID; 5225ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark return KERN_SUCCESS; 5235ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark} 5245ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 525563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkkern_return_t WKPCGetPluginElementNPObject(mach_port_t clientPort, uint32_t pluginID, uint32_t* outObjectID) 526563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{ 527563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark NetscapePluginHostProxy* hostProxy = pluginProxyMap().get(clientPort); 528563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (!hostProxy) 529563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return KERN_FAILURE; 530563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 531563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark NetscapePluginInstanceProxy* instanceProxy = hostProxy->pluginInstance(pluginID); 532563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (!instanceProxy) 533563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return KERN_FAILURE; 534563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 535563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark uint32_t objectID; 536563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (!instanceProxy->getPluginElementNPObject(objectID)) 537563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return KERN_FAILURE; 538563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 539563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark *outObjectID = objectID; 540563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return KERN_SUCCESS; 541563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 542563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 543692e5dbf12901edacf14812a6fae25462920af42Steve Blockkern_return_t WKPCForgetBrowserObject(mach_port_t clientPort, uint32_t pluginID, uint32_t objectID) 5445ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark{ 5455ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark NetscapePluginHostProxy* hostProxy = pluginProxyMap().get(clientPort); 5465ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark if (!hostProxy) 5475ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark return KERN_FAILURE; 5485ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 5495ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark NetscapePluginInstanceProxy* instanceProxy = hostProxy->pluginInstance(pluginID); 5505ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark if (!instanceProxy) 5515ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark return KERN_FAILURE; 5525ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 553692e5dbf12901edacf14812a6fae25462920af42Steve Block return instanceProxy->forgetBrowserObjectID(objectID) ? KERN_SUCCESS : KERN_FAILURE; 5545ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark} 5555ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 5560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochkern_return_t WKPCEvaluate(mach_port_t clientPort, uint32_t pluginID, uint32_t requestID, uint32_t objectID, data_t scriptData, mach_msg_type_number_t scriptLength, boolean_t allowPopups) 5575ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark{ 558563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark DataDeallocator deallocator(scriptData, scriptLength); 559563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 5605ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark NetscapePluginHostProxy* hostProxy = pluginProxyMap().get(clientPort); 5615ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark if (!hostProxy) 5625ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark return KERN_FAILURE; 5635ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 5645ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark NetscapePluginInstanceProxy* instanceProxy = hostProxy->pluginInstance(pluginID); 5658a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block if (!instanceProxy) 5668a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block return KERN_FAILURE; 5675ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 568563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark PluginDestroyDeferrer deferrer(instanceProxy); 5695ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 570563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark String script = String::fromUTF8WithLatin1Fallback(scriptData, scriptLength); 5715ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 572563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark data_t resultData = 0; 573563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark mach_msg_type_number_t resultLength = 0; 5740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch boolean_t returnValue = instanceProxy->evaluate(objectID, script, resultData, resultLength, allowPopups); 575dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 576dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block hostProxy = instanceProxy->hostProxy(); 577dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!hostProxy) 578dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return KERN_FAILURE; 579dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 580563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark _WKPHBooleanAndDataReply(hostProxy->port(), instanceProxy->pluginID(), requestID, returnValue, resultData, resultLength); 581563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (resultData) 582563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark mig_deallocate(reinterpret_cast<vm_address_t>(resultData), resultLength); 5835ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 5845ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark return KERN_SUCCESS; 5855ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark} 5865ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 5875ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clarkkern_return_t WKPCGetStringIdentifier(mach_port_t clientPort, data_t name, mach_msg_type_number_t nameCnt, uint64_t* identifier) 5885ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark{ 589563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark DataDeallocator deallocator(name, nameCnt); 590563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 591563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark COMPILE_ASSERT(sizeof(*identifier) == sizeof(IdentifierRep*), identifier_sizes); 5925ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 593563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark *identifier = reinterpret_cast<uint64_t>(IdentifierRep::get(name)); 5945ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark return KERN_SUCCESS; 5955ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark} 5965ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 5975ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clarkkern_return_t WKPCGetIntIdentifier(mach_port_t clientPort, int32_t value, uint64_t* identifier) 5985ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark{ 5995ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark COMPILE_ASSERT(sizeof(*identifier) == sizeof(NPIdentifier), identifier_sizes); 6005ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 601563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark *identifier = reinterpret_cast<uint64_t>(IdentifierRep::get(value)); 6025ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark return KERN_SUCCESS; 6035ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark} 6045ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 605563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkstatic Identifier identifierFromIdentifierRep(IdentifierRep* identifier) 6065ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark{ 607563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark ASSERT(IdentifierRep::isValid(identifier)); 608563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark ASSERT(identifier->isString()); 609563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 610563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark const char* str = identifier->string(); 611dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return Identifier(JSDOMWindow::commonJSGlobalData(), stringToUString(String::fromUTF8WithLatin1Fallback(str, strlen(str)))); 6125ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark} 6135ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 614563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkkern_return_t WKPCInvoke(mach_port_t clientPort, uint32_t pluginID, uint32_t requestID, uint32_t objectID, uint64_t serverIdentifier, 6155ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark data_t argumentsData, mach_msg_type_number_t argumentsLength) 6165ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark{ 617563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark DataDeallocator deallocator(argumentsData, argumentsLength); 618563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 6195ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark NetscapePluginHostProxy* hostProxy = pluginProxyMap().get(clientPort); 6205ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark if (!hostProxy) 6215ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark return KERN_FAILURE; 6225ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 6235ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark NetscapePluginInstanceProxy* instanceProxy = hostProxy->pluginInstance(pluginID); 6248a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block if (!instanceProxy) 6258a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block return KERN_FAILURE; 6265ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 627563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark PluginDestroyDeferrer deferrer(instanceProxy); 6285ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 629563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark IdentifierRep* identifier = reinterpret_cast<IdentifierRep*>(serverIdentifier); 6308a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block if (!IdentifierRep::isValid(identifier)) 6318a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block return KERN_FAILURE; 632563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 633563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark Identifier methodNameIdentifier = identifierFromIdentifierRep(identifier); 634563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 635563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark data_t resultData = 0; 636563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark mach_msg_type_number_t resultLength = 0; 6375ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark boolean_t returnValue = instanceProxy->invoke(objectID, methodNameIdentifier, argumentsData, argumentsLength, resultData, resultLength); 638dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 639dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block hostProxy = instanceProxy->hostProxy(); 640dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!hostProxy) 641dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return KERN_FAILURE; 642dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 643563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark _WKPHBooleanAndDataReply(hostProxy->port(), instanceProxy->pluginID(), requestID, returnValue, resultData, resultLength); 644563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (resultData) 645563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark mig_deallocate(reinterpret_cast<vm_address_t>(resultData), resultLength); 6465ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 6475ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark return KERN_SUCCESS; 6485ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark} 6495ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 650563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkkern_return_t WKPCInvokeDefault(mach_port_t clientPort, uint32_t pluginID, uint32_t requestID, uint32_t objectID, 651563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark data_t argumentsData, mach_msg_type_number_t argumentsLength) 6525ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark{ 653563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark DataDeallocator deallocator(argumentsData, argumentsLength); 654563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 6555ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark NetscapePluginHostProxy* hostProxy = pluginProxyMap().get(clientPort); 6565ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark if (!hostProxy) 6575ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark return KERN_FAILURE; 6585ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 6595ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark NetscapePluginInstanceProxy* instanceProxy = hostProxy->pluginInstance(pluginID); 6608a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block if (!instanceProxy) 6618a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block return KERN_FAILURE; 6625ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 663563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark PluginDestroyDeferrer deferrer(instanceProxy); 664563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 665563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark data_t resultData = 0; 666563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark mach_msg_type_number_t resultLength = 0; 667563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark boolean_t returnValue = instanceProxy->invokeDefault(objectID, argumentsData, argumentsLength, resultData, resultLength); 668dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 669dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block hostProxy = instanceProxy->hostProxy(); 670dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!hostProxy) 671dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return KERN_FAILURE; 672dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 673563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark _WKPHBooleanAndDataReply(hostProxy->port(), instanceProxy->pluginID(), requestID, returnValue, resultData, resultLength); 674563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (resultData) 675563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark mig_deallocate(reinterpret_cast<vm_address_t>(resultData), resultLength); 6765ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 6775ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark return KERN_SUCCESS; 6785ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark} 6795ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 6805ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clarkkern_return_t WKPCConstruct(mach_port_t clientPort, uint32_t pluginID, uint32_t objectID, 6815ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark data_t argumentsData, mach_msg_type_number_t argumentsLength, 682563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark boolean_t* returnValue, data_t* resultData, mach_msg_type_number_t* resultLength) 6835ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark{ 684563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark DataDeallocator deallocator(argumentsData, argumentsLength); 685563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 6865ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark NetscapePluginHostProxy* hostProxy = pluginProxyMap().get(clientPort); 6875ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark if (!hostProxy) 6885ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark return KERN_FAILURE; 6895ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 6905ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark NetscapePluginInstanceProxy* instanceProxy = hostProxy->pluginInstance(pluginID); 6915ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark if (!instanceProxy) 6925ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark return KERN_FAILURE; 6935ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 694563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark PluginDestroyDeferrer deferrer(instanceProxy); 695563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 6965ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark *returnValue = instanceProxy->construct(objectID, argumentsData, argumentsLength, *resultData, *resultLength); 6975ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 6985ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark return KERN_SUCCESS; 6995ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark} 7005ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 701563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkkern_return_t WKPCGetProperty(mach_port_t clientPort, uint32_t pluginID, uint32_t requestID, uint32_t objectID, uint64_t serverIdentifier) 7025ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark{ 7035ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark NetscapePluginHostProxy* hostProxy = pluginProxyMap().get(clientPort); 7045ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark if (!hostProxy) 7055ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark return KERN_FAILURE; 7065ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 7075ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark NetscapePluginInstanceProxy* instanceProxy = hostProxy->pluginInstance(pluginID); 7088a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block if (!instanceProxy) 7098a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block return KERN_FAILURE; 710dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 711563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark IdentifierRep* identifier = reinterpret_cast<IdentifierRep*>(serverIdentifier); 7128a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block if (!IdentifierRep::isValid(identifier)) 7138a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block return KERN_FAILURE; 714563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 715563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark PluginDestroyDeferrer deferrer(instanceProxy); 716563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 717563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark data_t resultData = 0; 718563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark mach_msg_type_number_t resultLength = 0; 719563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark boolean_t returnValue; 720563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 721563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (identifier->isString()) { 722563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark Identifier propertyNameIdentifier = identifierFromIdentifierRep(identifier); 723563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark returnValue = instanceProxy->getProperty(objectID, propertyNameIdentifier, resultData, resultLength); 7245ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark } else 725563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark returnValue = instanceProxy->setProperty(objectID, identifier->number(), resultData, resultLength); 726dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 727dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block hostProxy = instanceProxy->hostProxy(); 728dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!hostProxy) 729dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return KERN_FAILURE; 730dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 731563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark _WKPHBooleanAndDataReply(hostProxy->port(), instanceProxy->pluginID(), requestID, returnValue, resultData, resultLength); 732563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (resultData) 733563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark mig_deallocate(reinterpret_cast<vm_address_t>(resultData), resultLength); 7345ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 7355ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark return KERN_SUCCESS; 7365ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark} 7375ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 7388a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Blockkern_return_t WKPCSetProperty(mach_port_t clientPort, uint32_t pluginID, uint32_t requestID, uint32_t objectID, uint64_t serverIdentifier, data_t valueData, mach_msg_type_number_t valueLength) 7395ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark{ 740563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark DataDeallocator deallocator(valueData, valueLength); 741563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 7425ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark NetscapePluginHostProxy* hostProxy = pluginProxyMap().get(clientPort); 7435ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark if (!hostProxy) 7445ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark return KERN_FAILURE; 7455ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 7465ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark NetscapePluginInstanceProxy* instanceProxy = hostProxy->pluginInstance(pluginID); 7475ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark if (!instanceProxy) 7485ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark return KERN_FAILURE; 749563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 750563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark PluginDestroyDeferrer deferrer(instanceProxy); 751563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 752563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark IdentifierRep* identifier = reinterpret_cast<IdentifierRep*>(serverIdentifier); 753563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (!IdentifierRep::isValid(identifier)) 7548a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block return KERN_FAILURE; 7558a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 7568a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block bool result; 757563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (identifier->isString()) { 758563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark Identifier propertyNameIdentifier = identifierFromIdentifierRep(identifier); 7598a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block result = instanceProxy->setProperty(objectID, propertyNameIdentifier, valueData, valueLength); 7605ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark } else 7618a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block result = instanceProxy->setProperty(objectID, identifier->number(), valueData, valueLength); 7628a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 763dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block hostProxy = instanceProxy->hostProxy(); 764dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!hostProxy) 765dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return KERN_FAILURE; 766dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 7678a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block _WKPHBooleanReply(hostProxy->port(), instanceProxy->pluginID(), requestID, result); 7688a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 7695ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark return KERN_SUCCESS; 7705ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark} 7715ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 7728a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Blockkern_return_t WKPCRemoveProperty(mach_port_t clientPort, uint32_t pluginID, uint32_t requestID, uint32_t objectID, uint64_t serverIdentifier) 7735ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark{ 7745ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark NetscapePluginHostProxy* hostProxy = pluginProxyMap().get(clientPort); 7755ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark if (!hostProxy) 7765ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark return KERN_FAILURE; 7775ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 7785ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark NetscapePluginInstanceProxy* instanceProxy = hostProxy->pluginInstance(pluginID); 7795ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark if (!instanceProxy) 7805ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark return KERN_FAILURE; 7815ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 782563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark PluginDestroyDeferrer deferrer(instanceProxy); 783563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 784563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark IdentifierRep* identifier = reinterpret_cast<IdentifierRep*>(serverIdentifier); 785563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (!IdentifierRep::isValid(identifier)) 786563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return KERN_FAILURE; 7878a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 7888a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block bool result; 789563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (identifier->isString()) { 790563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark Identifier propertyNameIdentifier = identifierFromIdentifierRep(identifier); 7918a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block result = instanceProxy->removeProperty(objectID, propertyNameIdentifier); 7925ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark } else 7938a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block result = instanceProxy->removeProperty(objectID, identifier->number()); 7948a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 795dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block hostProxy = instanceProxy->hostProxy(); 796dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!hostProxy) 797dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return KERN_FAILURE; 798dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 7998a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block _WKPHBooleanReply(hostProxy->port(), instanceProxy->pluginID(), requestID, result); 8008a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 8015ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark return KERN_SUCCESS; 8025ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark} 8035ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 804563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkkern_return_t WKPCHasProperty(mach_port_t clientPort, uint32_t pluginID, uint32_t requestID, uint32_t objectID, uint64_t serverIdentifier) 8055ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark{ 8065ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark NetscapePluginHostProxy* hostProxy = pluginProxyMap().get(clientPort); 8075ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark if (!hostProxy) 8085ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark return KERN_FAILURE; 8095ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 8105ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark NetscapePluginInstanceProxy* instanceProxy = hostProxy->pluginInstance(pluginID); 8118a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block if (!instanceProxy) 8128a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block return KERN_FAILURE; 8135ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 814563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark PluginDestroyDeferrer deferrer(instanceProxy); 815563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 816563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark IdentifierRep* identifier = reinterpret_cast<IdentifierRep*>(serverIdentifier); 8178a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block if (!IdentifierRep::isValid(identifier)) 8188a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block return KERN_FAILURE; 819563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 820563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark boolean_t returnValue; 821563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (identifier->isString()) { 822563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark Identifier propertyNameIdentifier = identifierFromIdentifierRep(identifier); 823563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark returnValue = instanceProxy->hasProperty(objectID, propertyNameIdentifier); 8245ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark } else 825563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark returnValue = instanceProxy->hasProperty(objectID, identifier->number()); 826dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 827dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block hostProxy = instanceProxy->hostProxy(); 828dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!hostProxy) 829dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return KERN_FAILURE; 830dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 831563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark _WKPHBooleanReply(hostProxy->port(), instanceProxy->pluginID(), requestID, returnValue); 8325ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 8335ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark return KERN_SUCCESS; 8345ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark} 8355ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 836563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkkern_return_t WKPCHasMethod(mach_port_t clientPort, uint32_t pluginID, uint32_t requestID, uint32_t objectID, uint64_t serverIdentifier) 8375ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark{ 8385ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark NetscapePluginHostProxy* hostProxy = pluginProxyMap().get(clientPort); 8395ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark if (!hostProxy) 8405ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark return KERN_FAILURE; 8415ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 8425ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark NetscapePluginInstanceProxy* instanceProxy = hostProxy->pluginInstance(pluginID); 8438a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block if (!instanceProxy) 8448a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block return KERN_FAILURE; 8455ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 846563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark PluginDestroyDeferrer deferrer(instanceProxy); 847563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 848563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark IdentifierRep* identifier = reinterpret_cast<IdentifierRep*>(serverIdentifier); 8498a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block if (!IdentifierRep::isValid(identifier)) 8508a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block return KERN_FAILURE; 851563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 852563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark Identifier methodNameIdentifier = identifierFromIdentifierRep(identifier); 853563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark boolean_t returnValue = instanceProxy->hasMethod(objectID, methodNameIdentifier); 854563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 855dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block hostProxy = instanceProxy->hostProxy(); 856dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!hostProxy) 857dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return KERN_FAILURE; 858dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 859563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark _WKPHBooleanReply(hostProxy->port(), instanceProxy->pluginID(), requestID, returnValue); 8605ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 8615ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark return KERN_SUCCESS; 8625ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark} 8635ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 8645ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clarkkern_return_t WKPCIdentifierInfo(mach_port_t clientPort, uint64_t serverIdentifier, data_t* infoData, mach_msg_type_number_t* infoLength) 8655ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark{ 866563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark IdentifierRep* identifier = reinterpret_cast<IdentifierRep*>(serverIdentifier); 867563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (!IdentifierRep::isValid(identifier)) 868563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return KERN_FAILURE; 8695ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 8705ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark id info; 871563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (identifier->isString()) { 872563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark const char* str = identifier->string(); 873563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark info = [NSData dataWithBytesNoCopy:(void*)str length:strlen(str) freeWhenDone:NO]; 8745ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark } else 875563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark info = [NSNumber numberWithInt:identifier->number()]; 8765ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 8775ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark RetainPtr<NSData*> data = [NSPropertyListSerialization dataFromPropertyList:info format:NSPropertyListBinaryFormat_v1_0 errorDescription:0]; 8785ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark ASSERT(data); 8795ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 8805ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark *infoLength = [data.get() length]; 8815ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark mig_allocate(reinterpret_cast<vm_address_t*>(infoData), *infoLength); 8825ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 8835ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark memcpy(*infoData, [data.get() bytes], *infoLength); 8845ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 8855ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark return KERN_SUCCESS; 8865ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark} 8875ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 888563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkkern_return_t WKPCEnumerate(mach_port_t clientPort, uint32_t pluginID, uint32_t requestID, uint32_t objectID) 889563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{ 890563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark NetscapePluginHostProxy* hostProxy = pluginProxyMap().get(clientPort); 891563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (!hostProxy) 892563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return KERN_FAILURE; 893563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 894563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark NetscapePluginInstanceProxy* instanceProxy = hostProxy->pluginInstance(pluginID); 8958a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block if (!instanceProxy) 8968a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block return KERN_FAILURE; 897563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 898563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark data_t resultData = 0; 899563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark mach_msg_type_number_t resultLength = 0; 900563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark boolean_t returnValue = instanceProxy->enumerate(objectID, resultData, resultLength); 901dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 902dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block hostProxy = instanceProxy->hostProxy(); 903dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!hostProxy) 904dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return KERN_FAILURE; 905dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 906563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark _WKPHBooleanAndDataReply(hostProxy->port(), instanceProxy->pluginID(), requestID, returnValue, resultData, resultLength); 907563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 908563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (resultData) 909563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark mig_deallocate(reinterpret_cast<vm_address_t>(resultData), resultLength); 910563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 911563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return KERN_SUCCESS; 912563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 913563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 9145ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clarkkern_return_t WKPCSetMenuBarVisible(mach_port_t clientPort, boolean_t menuBarVisible) 9155ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark{ 9165ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark NetscapePluginHostProxy* hostProxy = pluginProxyMap().get(clientPort); 9175ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark if (!hostProxy) 9185ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark return KERN_FAILURE; 9195ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 9205ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark hostProxy->setMenuBarVisible(menuBarVisible); 921d0825bca7fe65beaee391d30da42e937db621564Steve Block 922d0825bca7fe65beaee391d30da42e937db621564Steve Block return KERN_SUCCESS; 923d0825bca7fe65beaee391d30da42e937db621564Steve Block} 924d0825bca7fe65beaee391d30da42e937db621564Steve Block 925dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockkern_return_t WKPCSetFullscreenWindowIsShowing(mach_port_t clientPort, boolean_t fullscreenWindowIsShowing) 926d0825bca7fe65beaee391d30da42e937db621564Steve Block{ 927d0825bca7fe65beaee391d30da42e937db621564Steve Block NetscapePluginHostProxy* hostProxy = pluginProxyMap().get(clientPort); 928d0825bca7fe65beaee391d30da42e937db621564Steve Block if (!hostProxy) 929d0825bca7fe65beaee391d30da42e937db621564Steve Block return KERN_FAILURE; 930d0825bca7fe65beaee391d30da42e937db621564Steve Block 931dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block hostProxy->setFullscreenWindowIsShowing(fullscreenWindowIsShowing); 932d0825bca7fe65beaee391d30da42e937db621564Steve Block 9335ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark return KERN_SUCCESS; 9345ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark} 9355ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 9365ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clarkkern_return_t WKPCSetModal(mach_port_t clientPort, boolean_t modal) 9375ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark{ 9385ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark NetscapePluginHostProxy* hostProxy = pluginProxyMap().get(clientPort); 9395ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark if (!hostProxy) 9405ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark return KERN_FAILURE; 941dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 942dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!hostProxy->isProcessingRequests()) { 943dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block hostProxy->setModal(modal); 944dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return KERN_SUCCESS; 945dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 946dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 947dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // Defer the work 948dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block CFRunLoopPerformBlock(CFRunLoopGetMain(), kCFRunLoopDefaultMode, ^{ 949dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (NetscapePluginHostProxy* hostProxy = pluginProxyMap().get(clientPort)) 950dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block hostProxy->setModal(modal); 951dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block }); 952dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 9535ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark return KERN_SUCCESS; 9545ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark} 9555ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 9560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochkern_return_t WKPCGetCookies(mach_port_t clientPort, uint32_t pluginID, 9570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch data_t urlData, mach_msg_type_number_t urlLength, 9580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch boolean_t* returnValue, data_t* cookiesData, mach_msg_type_number_t* cookiesLength) 9590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 9600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch *cookiesData = 0; 9610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch *cookiesLength = 0; 9620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 9630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch DataDeallocator deallocator(urlData, urlLength); 9640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 9650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch NetscapePluginHostProxy* hostProxy = pluginProxyMap().get(clientPort); 9660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!hostProxy) 9670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return KERN_FAILURE; 9680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 9690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch NetscapePluginInstanceProxy* instanceProxy = hostProxy->pluginInstance(pluginID); 9700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!instanceProxy) 9710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return KERN_FAILURE; 9720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 9730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch *returnValue = instanceProxy->getCookies(urlData, urlLength, *cookiesData, *cookiesLength); 9740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 9750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return KERN_SUCCESS; 9760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 9770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 9780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochkern_return_t WKPCGetProxy(mach_port_t clientPort, uint32_t pluginID, 9790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch data_t urlData, mach_msg_type_number_t urlLength, 9800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch boolean_t* returnValue, data_t* proxyData, mach_msg_type_number_t* proxyLength) 9810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 9820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch *proxyData = 0; 9830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch *proxyLength = 0; 9840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 9850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch DataDeallocator deallocator(urlData, urlLength); 9860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 9870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch NetscapePluginHostProxy* hostProxy = pluginProxyMap().get(clientPort); 9880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!hostProxy) 9890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return KERN_FAILURE; 9900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 9910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch NetscapePluginInstanceProxy* instanceProxy = hostProxy->pluginInstance(pluginID); 9920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!instanceProxy) 9930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return KERN_FAILURE; 9940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 9950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch *returnValue = instanceProxy->getProxy(urlData, urlLength, *proxyData, *proxyLength); 9960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 9970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return KERN_SUCCESS; 9980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 9990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 10000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochkern_return_t WKPCSetCookies(mach_port_t clientPort, uint32_t pluginID, 10010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch data_t urlData, mach_msg_type_number_t urlLength, 10020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch data_t cookiesData, mach_msg_type_number_t cookiesLength, 10030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch boolean_t* returnValue) 10040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 10050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch DataDeallocator urlDeallocator(urlData, urlLength); 10060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch DataDeallocator cookiesDeallocator(cookiesData, cookiesLength); 10070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 10080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch NetscapePluginHostProxy* hostProxy = pluginProxyMap().get(clientPort); 10090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!hostProxy) 10100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return KERN_FAILURE; 10110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 10120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch NetscapePluginInstanceProxy* instanceProxy = hostProxy->pluginInstance(pluginID); 10130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!instanceProxy) 10140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return KERN_FAILURE; 10150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 10160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch *returnValue = instanceProxy->setCookies(urlData, urlLength, cookiesData, cookiesLength); 10170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return KERN_SUCCESS; 10180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 10190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 10200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochkern_return_t WKPCGetAuthenticationInfo(mach_port_t clientPort, uint32_t pluginID, 10210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch data_t protocolData, mach_msg_type_number_t protocolLength, 10220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch data_t hostData, mach_msg_type_number_t hostLength, 10230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch uint32_t port, 10240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch data_t schemeData, mach_msg_type_number_t schemeLength, 10250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch data_t realmData, mach_msg_type_number_t realmLength, 10260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch boolean_t* returnValue, 10270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch data_t* usernameData, mach_msg_type_number_t *usernameLength, 10280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch data_t* passwordData, mach_msg_type_number_t *passwordLength) 10290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 10300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch DataDeallocator protocolDeallocator(protocolData, protocolLength); 10310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch DataDeallocator hostDeallocator(hostData, hostLength); 10320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch DataDeallocator schemeDeallocator(schemeData, schemeLength); 10330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch DataDeallocator realmDeallocator(realmData, realmLength); 10340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 10350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch *usernameData = 0; 10360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch *usernameLength = 0; 10370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch *passwordData = 0; 10380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch *passwordLength = 0; 10390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 10400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch NetscapePluginHostProxy* hostProxy = pluginProxyMap().get(clientPort); 10410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!hostProxy) 10420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return KERN_FAILURE; 10430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 10440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch NetscapePluginInstanceProxy* instanceProxy = hostProxy->pluginInstance(pluginID); 10450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!instanceProxy) 10460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return KERN_FAILURE; 10470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 10480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch *returnValue = instanceProxy->getAuthenticationInfo(protocolData, hostData, port, schemeData, realmData, *usernameData, *usernameLength, *passwordData, *passwordLength); 10490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 10500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return KERN_SUCCESS; 10510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 10520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 10530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochkern_return_t WKPCConvertPoint(mach_port_t clientPort, uint32_t pluginID, 10540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch double sourceX, double sourceY, uint32_t sourceSpace, 10550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch uint32_t destSpace, boolean_t *returnValue, double *destX, double *destY) 10560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 10570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch NetscapePluginHostProxy* hostProxy = pluginProxyMap().get(clientPort); 10580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!hostProxy) 10590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return KERN_FAILURE; 10600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 10610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch NetscapePluginInstanceProxy* instanceProxy = hostProxy->pluginInstance(pluginID); 10620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!instanceProxy) 10630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return KERN_FAILURE; 10640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 10650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch *returnValue = instanceProxy->convertPoint(sourceX, sourceY, static_cast<NPCoordinateSpace>(sourceSpace), 10660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch *destX, *destY, static_cast<NPCoordinateSpace>(destSpace)); 10670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return KERN_SUCCESS; 10680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 10690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 10700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochkern_return_t WKPCCheckIfAllowedToLoadURL(mach_port_t clientPort, uint32_t pluginID, data_t urlData, mach_msg_type_number_t urlLength, 10710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch data_t targetData, mach_msg_type_number_t targetLength, uint32_t *checkID) 10720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 10730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch DataDeallocator urlDeallocator(urlData, urlLength); 10740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch DataDeallocator targetDeallocator(targetData, targetLength); 10750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 10760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch NetscapePluginHostProxy* hostProxy = pluginProxyMap().get(clientPort); 10770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!hostProxy) 10780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return KERN_FAILURE; 10790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 10800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch NetscapePluginInstanceProxy* instanceProxy = hostProxy->pluginInstance(pluginID); 10810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!instanceProxy) 10820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return KERN_FAILURE; 10830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 10840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch *checkID = instanceProxy->checkIfAllowedToLoadURL(urlData, targetData); 10850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return KERN_SUCCESS; 10860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 10870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 10880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochkern_return_t WKPCCancelCheckIfAllowedToLoadURL(mach_port_t clientPort, uint32_t pluginID, uint32_t checkID) 10890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 10900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch NetscapePluginHostProxy* hostProxy = pluginProxyMap().get(clientPort); 10910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!hostProxy) 10920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return KERN_FAILURE; 10930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 10940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch NetscapePluginInstanceProxy* instanceProxy = hostProxy->pluginInstance(pluginID); 10950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!instanceProxy) 10960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return KERN_FAILURE; 10970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 10980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch instanceProxy->cancelCheckIfAllowedToLoadURL(checkID); 10990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return KERN_SUCCESS; 11000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 11010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 11020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochkern_return_t WKPCResolveURL(mach_port_t clientPort, uint32_t pluginID, data_t urlData, mach_msg_type_number_t urlLength, 11030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch data_t targetData, mach_msg_type_number_t targetLength, 11040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch data_t *resolvedURLData, mach_msg_type_number_t *resolvedURLLength) 11050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 11060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch DataDeallocator urlDeallocator(urlData, urlLength); 11070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch DataDeallocator targetDeallocator(targetData, targetLength); 11080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 11090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch *resolvedURLData = 0; 11100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch *resolvedURLLength = 0; 11110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 11120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch NetscapePluginHostProxy* hostProxy = pluginProxyMap().get(clientPort); 11130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!hostProxy) 11140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return KERN_FAILURE; 11150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 11160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch NetscapePluginInstanceProxy* instanceProxy = hostProxy->pluginInstance(pluginID); 11170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!instanceProxy) 11180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return KERN_FAILURE; 11190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 11200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch instanceProxy->resolveURL(urlData, targetData, *resolvedURLData, *resolvedURLLength); 11210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return KERN_SUCCESS; 11220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 11230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 11248a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Blockkern_return_t WKPCSetException(mach_port_t clientPort, data_t message, mach_msg_type_number_t messageCnt) 11258a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block{ 11268a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block DataDeallocator deallocator(message, messageCnt); 11278a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 11288a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block string str(message, messageCnt); 11298a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block NetscapePluginInstanceProxy::setGlobalException(str.c_str()); 11308a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 11318a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block return KERN_SUCCESS; 11328a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block} 11338a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 1134e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block#endif // USE(PLUGIN_HOST_PROCESS) && ENABLE(NETSCAPE_PLUGIN_API) 1135