Home | History | Annotate | Download | only in Hosted
      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 
     46     mach_port_t port() const { return m_pluginHostPort; }
     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 
     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     bool isProcessingRequests() const { return m_processingRequests; }
     66 
     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