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 38namespace WebKit { 39 40class NetscapePluginInstanceProxy; 41 42class NetscapePluginHostProxy { 43public: 44 NetscapePluginHostProxy(mach_port_t clientPort, mach_port_t pluginHostPort, const ProcessSerialNumber& pluginHostPSN, bool shouldCacheMissingPropertiesAndMethods); 45 46 mach_port_t port() const { ASSERT(fastMallocSize(this)); return m_pluginHostPort; } 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 54 bool isMenuBarVisible() const { return m_menuBarIsVisible; } 55 void setMenuBarVisible(bool); 56 57 bool isFullscreenWindowShowing() const { return m_fullscreenWindowIsShowing; } 58 void setFullscreenWindowIsShowing(bool); 59 60 void setModal(bool); 61 62 void applicationDidBecomeActive(); 63 64 bool processRequests(); 65 static bool isProcessingRequests() { return s_processingRequests; } 66 67 bool shouldCacheMissingPropertiesAndMethods() const { return m_shouldCacheMissingPropertiesAndMethods; } 68 69 static void makeCurrentProcessFrontProcess(); 70 void makePluginHostProcessFrontProcess() const; 71 bool isPluginHostProcessFrontProcess() const; 72 73private: 74 75 ~NetscapePluginHostProxy(); 76 void pluginHostDied(); 77 78 void beginModal(); 79 void endModal(); 80 81 void didEnterFullscreen() const; 82 void didExitFullscreen() const; 83 84 static void deadNameNotificationCallback(CFMachPortRef, void *msg, CFIndex size, void *info); 85 86 typedef HashMap<uint32_t, RefPtr<NetscapePluginInstanceProxy>> PluginInstanceMap; 87 PluginInstanceMap m_instances; 88 89 mach_port_t m_clientPort; 90 mach_port_t m_portSet; 91 92 RetainPtr<CFRunLoopSourceRef> m_clientPortSource; 93 mach_port_t m_pluginHostPort; 94 RetainPtr<CFMachPortRef> m_deadNameNotificationPort; 95 96 RetainPtr<id> m_activationObserver; 97 RetainPtr<WebPlaceholderModalWindow *> m_placeholderWindow; 98 unsigned m_isModal; 99 bool m_menuBarIsVisible; 100 bool m_fullscreenWindowIsShowing; 101 const ProcessSerialNumber m_pluginHostPSN; 102 103 static unsigned s_processingRequests; 104 105 bool m_shouldCacheMissingPropertiesAndMethods; 106}; 107 108} // namespace WebKit 109 110#endif // NetscapePluginHostProxy_h 111#endif // USE(PLUGIN_HOST_PROCESS) 112