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 { return m_pluginHostPort; } clientPort()47 mach_port_t clientPort() const { 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 bool isProcessingRequests() const { return m_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 #ifdef USE_LIBDISPATCH 88 dispatch_source_t m_clientPortSource; 89 #else 90 RetainPtr<CFRunLoopSourceRef> m_clientPortSource; 91 #endif 92 mach_port_t m_pluginHostPort; 93 RetainPtr<CFMachPortRef> m_deadNameNotificationPort; 94 95 RetainPtr<id> m_activationObserver; 96 RetainPtr<WebPlaceholderModalWindow *> m_placeholderWindow; 97 unsigned m_isModal; 98 bool m_menuBarIsVisible; 99 bool m_fullScreenWindowIsShowing; 100 const ProcessSerialNumber m_pluginHostPSN; 101 102 unsigned m_processingRequests; 103 104 bool m_shouldCacheMissingPropertiesAndMethods; 105 }; 106 107 } // namespace WebKit 108 109 #endif // NetscapePluginHostProxy_h 110 #endif // USE(PLUGIN_HOST_PROCESS) 111