1 /* 2 * Copyright (C) 2008 Apple Inc. All Rights Reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions 6 * are met: 7 * 1. Redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer. 9 * 2. Redistributions in binary form must reproduce the above copyright 10 * notice, this list of conditions and the following disclaimer in the 11 * documentation and/or other materials provided with the distribution. 12 * 13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY 14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR 17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 18 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 19 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 20 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24 */ 25 26 #if USE(PLUGIN_HOST_PROCESS) 27 28 #ifndef NetscapePluginHostProxy_h 29 #define NetscapePluginHostProxy_h 30 31 #include <dispatch/dispatch.h> 32 #include <wtf/HashMap.h> 33 #include <wtf/RetainPtr.h> 34 #include <wtf/PassRefPtr.h> 35 36 @class WebPlaceholderModalWindow; 37 38 namespace WebKit { 39 40 class NetscapePluginInstanceProxy; 41 42 class NetscapePluginHostProxy { 43 public: 44 NetscapePluginHostProxy(mach_port_t clientPort, mach_port_t pluginHostPort, const ProcessSerialNumber& pluginHostPSN, bool shouldCacheMissingPropertiesAndMethods); 45 port()46 mach_port_t port() const { ASSERT(fastMallocSize(this)); return m_pluginHostPort; } clientPort()47 mach_port_t clientPort() const { ASSERT(fastMallocSize(this)); return m_clientPort; } 48 49 void addPluginInstance(NetscapePluginInstanceProxy*); 50 void removePluginInstance(NetscapePluginInstanceProxy*); 51 52 NetscapePluginInstanceProxy* pluginInstance(uint32_t pluginID); 53 isMenuBarVisible()54 bool isMenuBarVisible() const { return m_menuBarIsVisible; } 55 void setMenuBarVisible(bool); 56 isFullscreenWindowShowing()57 bool isFullscreenWindowShowing() const { return m_fullscreenWindowIsShowing; } 58 void setFullscreenWindowIsShowing(bool); 59 60 void setModal(bool); 61 62 void applicationDidBecomeActive(); 63 64 bool processRequests(); isProcessingRequests()65 static bool isProcessingRequests() { return s_processingRequests; } 66 shouldCacheMissingPropertiesAndMethods()67 bool shouldCacheMissingPropertiesAndMethods() const { return m_shouldCacheMissingPropertiesAndMethods; } 68 69 private: 70 ~NetscapePluginHostProxy(); 71 void pluginHostDied(); 72 73 void beginModal(); 74 void endModal(); 75 76 void didEnterFullscreen() const; 77 void didExitFullscreen() const; 78 79 static void deadNameNotificationCallback(CFMachPortRef, void *msg, CFIndex size, void *info); 80 81 typedef HashMap<uint32_t, RefPtr<NetscapePluginInstanceProxy> > PluginInstanceMap; 82 PluginInstanceMap m_instances; 83 84 mach_port_t m_clientPort; 85 mach_port_t m_portSet; 86 87 RetainPtr<CFRunLoopSourceRef> m_clientPortSource; 88 mach_port_t m_pluginHostPort; 89 RetainPtr<CFMachPortRef> m_deadNameNotificationPort; 90 91 RetainPtr<id> m_activationObserver; 92 RetainPtr<WebPlaceholderModalWindow *> m_placeholderWindow; 93 unsigned m_isModal; 94 bool m_menuBarIsVisible; 95 bool m_fullscreenWindowIsShowing; 96 const ProcessSerialNumber m_pluginHostPSN; 97 98 static unsigned s_processingRequests; 99 100 bool m_shouldCacheMissingPropertiesAndMethods; 101 }; 102 103 } // namespace WebKit 104 105 #endif // NetscapePluginHostProxy_h 106 #endif // USE(PLUGIN_HOST_PROCESS) 107