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 265ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark#if USE(PLUGIN_HOST_PROCESS) 275ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 285ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark#ifndef NetscapePluginHostProxy_h 295ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark#define NetscapePluginHostProxy_h 305ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 315ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark#include <dispatch/dispatch.h> 325ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark#include <wtf/HashMap.h> 335ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark#include <wtf/RetainPtr.h> 345ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark#include <wtf/PassRefPtr.h> 355ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch@class WebPlaceholderModalWindow; 370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 385ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clarknamespace WebKit { 395ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 405ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clarkclass NetscapePluginInstanceProxy; 415ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 425ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clarkclass NetscapePluginHostProxy { 435ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clarkpublic: 440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch NetscapePluginHostProxy(mach_port_t clientPort, mach_port_t pluginHostPort, const ProcessSerialNumber& pluginHostPSN, bool shouldCacheMissingPropertiesAndMethods); 455ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 46dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block mach_port_t port() const { ASSERT(fastMallocSize(this)); return m_pluginHostPort; } 47dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block mach_port_t clientPort() const { ASSERT(fastMallocSize(this)); return m_clientPort; } 485ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 495ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark void addPluginInstance(NetscapePluginInstanceProxy*); 505ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark void removePluginInstance(NetscapePluginInstanceProxy*); 515ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 525ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark NetscapePluginInstanceProxy* pluginInstance(uint32_t pluginID); 53d0825bca7fe65beaee391d30da42e937db621564Steve Block 540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch bool isMenuBarVisible() const { return m_menuBarIsVisible; } 555ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark void setMenuBarVisible(bool); 56d0825bca7fe65beaee391d30da42e937db621564Steve Block 57dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block bool isFullscreenWindowShowing() const { return m_fullscreenWindowIsShowing; } 58dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block void setFullscreenWindowIsShowing(bool); 59d0825bca7fe65beaee391d30da42e937db621564Steve Block 605ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark void setModal(bool); 615ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 62563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark void applicationDidBecomeActive(); 63563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 64563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark bool processRequests(); 65dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block static bool isProcessingRequests() { return s_processingRequests; } 660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch bool shouldCacheMissingPropertiesAndMethods() const { return m_shouldCacheMissingPropertiesAndMethods; } 68563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 695ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clarkprivate: 705ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark ~NetscapePluginHostProxy(); 715ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark void pluginHostDied(); 72563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 73563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark void beginModal(); 74563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark void endModal(); 75d0825bca7fe65beaee391d30da42e937db621564Steve Block 76dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block void didEnterFullscreen() const; 77dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block void didExitFullscreen() const; 78d0825bca7fe65beaee391d30da42e937db621564Steve Block 79d0825bca7fe65beaee391d30da42e937db621564Steve Block static void deadNameNotificationCallback(CFMachPortRef, void *msg, CFIndex size, void *info); 805ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 815ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark typedef HashMap<uint32_t, RefPtr<NetscapePluginInstanceProxy> > PluginInstanceMap; 825ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark PluginInstanceMap m_instances; 835ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 845ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark mach_port_t m_clientPort; 85563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark mach_port_t m_portSet; 86563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 875ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark RetainPtr<CFRunLoopSourceRef> m_clientPortSource; 885ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark mach_port_t m_pluginHostPort; 895ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark RetainPtr<CFMachPortRef> m_deadNameNotificationPort; 905ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 91563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark RetainPtr<id> m_activationObserver; 920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch RetainPtr<WebPlaceholderModalWindow *> m_placeholderWindow; 93563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark unsigned m_isModal; 945ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark bool m_menuBarIsVisible; 95dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block bool m_fullscreenWindowIsShowing; 96563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark const ProcessSerialNumber m_pluginHostPSN; 97d0825bca7fe65beaee391d30da42e937db621564Steve Block 98dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block static unsigned s_processingRequests; 99d0825bca7fe65beaee391d30da42e937db621564Steve Block 1000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch bool m_shouldCacheMissingPropertiesAndMethods; 1015ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark}; 1025ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 1035ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark} // namespace WebKit 1045ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark 1055ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark#endif // NetscapePluginHostProxy_h 1065ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark#endif // USE(PLUGIN_HOST_PROCESS) 107