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