165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch/*
265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * Copyright (C) 2010 Apple Inc. All rights reserved.
365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch *
465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * Redistribution and use in source and binary forms, with or without
565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * modification, are permitted provided that the following conditions
665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * are met:
765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * 1. Redistributions of source code must retain the above copyright
865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch *    notice, this list of conditions and the following disclaimer.
965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * 2. Redistributions in binary form must reproduce the above copyright
1065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch *    notice, this list of conditions and the following disclaimer in the
1165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch *    documentation and/or other materials provided with the distribution.
1265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch *
1365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
1465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
1565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
1665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
1765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
1865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
1965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
2065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
2165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
2265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
2365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * THE POSSIBILITY OF SUCH DAMAGE.
2465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch */
2565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
262fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#include "config.h"
2765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "PluginProcessProxy.h"
2865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
292fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#if ENABLE(PLUGIN_PROCESS)
302fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
3165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "PluginProcessCreationParameters.h"
3265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "PluginProcessManager.h"
3365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "PluginProcessMessages.h"
3465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "RunLoop.h"
3565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebCoreArgumentCoders.h"
3681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#include "WebPluginSiteDataManager.h"
3765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebProcessProxy.h"
3865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
392daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#if PLATFORM(MAC)
402daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#include "MachPort.h"
412daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#endif
422daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
4365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochnamespace WebKit {
4465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
4565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochPassOwnPtr<PluginProcessProxy> PluginProcessProxy::create(PluginProcessManager* PluginProcessManager, const PluginInfoStore::Plugin& pluginInfo)
4665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
4765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return adoptPtr(new PluginProcessProxy(PluginProcessManager, pluginInfo));
4865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
4965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
5065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochPluginProcessProxy::PluginProcessProxy(PluginProcessManager* PluginProcessManager, const PluginInfoStore::Plugin& pluginInfo)
5165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    : m_pluginProcessManager(PluginProcessManager)
5265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    , m_pluginInfo(pluginInfo)
5365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    , m_numPendingConnectionRequests(0)
542bde8e466a4451c7319e3a072d118917957d6554Steve Block#if PLATFORM(MAC)
552bde8e466a4451c7319e3a072d118917957d6554Steve Block    , m_modalWindowIsShowing(false)
562bde8e466a4451c7319e3a072d118917957d6554Steve Block    , m_fullscreenWindowIsShowing(false)
572daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    , m_preFullscreenAppPresentationOptions(0)
582bde8e466a4451c7319e3a072d118917957d6554Steve Block#endif
5965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
6065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    ProcessLauncher::LaunchOptions launchOptions;
6165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    launchOptions.processType = ProcessLauncher::PluginProcess;
6265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#if PLATFORM(MAC)
6365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    launchOptions.architecture = pluginInfo.pluginArchitecture;
642bde8e466a4451c7319e3a072d118917957d6554Steve Block    launchOptions.executableHeap = PluginProcessProxy::pluginNeedsExecutableHeap(pluginInfo);
6565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif
6665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
6765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_processLauncher = ProcessLauncher::create(this, launchOptions);
6865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
6965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
7065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochPluginProcessProxy::~PluginProcessProxy()
7165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
7265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
7365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
7465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch// Asks the plug-in process to create a new connection to a web process. The connection identifier will be
7565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch// encoded in the given argument encoder and sent back to the connection of the given web process.
762daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid PluginProcessProxy::getPluginProcessConnection(PassRefPtr<Messages::WebProcessProxy::GetPluginProcessConnection::DelayedReply> reply)
7765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
782daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    m_pendingConnectionReplies.append(reply);
7965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
8065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (m_processLauncher->isLaunching()) {
8165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        m_numPendingConnectionRequests++;
8265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
8365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    }
842daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
852fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    // Ask the plug-in process to create a connection. Since the plug-in can be waiting for a synchronous reply
862fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    // we need to make sure that this message is always processed, even when the plug-in is waiting for a synchronus reply.
872fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    m_connection->send(Messages::PluginProcess::CreateWebProcessConnection(), 0, CoreIPC::DispatchMessageEvenWhenWaitingForSyncReply);
8865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
8965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
9081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochvoid PluginProcessProxy::getSitesWithData(WebPluginSiteDataManager* webPluginSiteDataManager, uint64_t callbackID)
9181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch{
9281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    ASSERT(!m_pendingGetSitesReplies.contains(callbackID));
9381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    m_pendingGetSitesReplies.set(callbackID, webPluginSiteDataManager);
9481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
9581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    if (m_processLauncher->isLaunching()) {
9681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        m_pendingGetSitesRequests.append(callbackID);
9781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        return;
9881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    }
9981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
10081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    // Ask the plug-in process for the sites with data.
10181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    m_connection->send(Messages::PluginProcess::GetSitesWithData(callbackID), 0);
10281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch}
10381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
10481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochvoid PluginProcessProxy::clearSiteData(WebPluginSiteDataManager* webPluginSiteDataManager, const Vector<String>& sites, uint64_t flags, uint64_t maxAgeInSeconds, uint64_t callbackID)
10581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch{
10681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    ASSERT(!m_pendingClearSiteDataReplies.contains(callbackID));
10781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    m_pendingClearSiteDataReplies.set(callbackID, webPluginSiteDataManager);
10881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
10981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    if (m_processLauncher->isLaunching()) {
11081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        ClearSiteDataRequest request;
11181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        request.sites = sites;
11281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        request.flags = flags;
11381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        request.maxAgeInSeconds = maxAgeInSeconds;
11481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        request.callbackID = callbackID;
11581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        m_pendingClearSiteDataRequests.append(request);
11681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        return;
11781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    }
11881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
11981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    // Ask the plug-in process to clear the site data.
12081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    m_connection->send(Messages::PluginProcess::ClearSiteData(sites, flags, maxAgeInSeconds, callbackID), 0);
12181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch}
12281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
1232daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid PluginProcessProxy::terminate()
1242daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{
1252daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch     m_processLauncher->terminateProcess();
1262daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch}
1272daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
12865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid PluginProcessProxy::pluginProcessCrashedOrFailedToLaunch()
12965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
13065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // The plug-in process must have crashed or exited, send any pending sync replies we might have.
13165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    while (!m_pendingConnectionReplies.isEmpty()) {
1322daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        RefPtr<Messages::WebProcessProxy::GetPluginProcessConnection::DelayedReply> reply = m_pendingConnectionReplies.takeFirst();
13365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
1342daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#if PLATFORM(MAC)
1352daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        reply->send(CoreIPC::MachPort(0, MACH_MSG_TYPE_MOVE_SEND));
1362daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#else
1372daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        // FIXME: Implement.
1382daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        ASSERT_NOT_REACHED();
1392daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#endif
14065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    }
14165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
14281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    while (!m_pendingGetSitesReplies.isEmpty())
14381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        didGetSitesWithData(Vector<String>(), m_pendingGetSitesReplies.begin()->first);
14481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
14581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    while (!m_pendingClearSiteDataReplies.isEmpty())
14681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        didClearSiteData(m_pendingClearSiteDataReplies.begin()->first);
14781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
14865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // Tell the plug-in process manager to forget about this plug-in process proxy.
14965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_pluginProcessManager->removePluginProcessProxy(this);
15065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    delete this;
15165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
15265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
15365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid PluginProcessProxy::didReceiveMessage(CoreIPC::Connection* connection, CoreIPC::MessageID messageID, CoreIPC::ArgumentDecoder* arguments)
15465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
15565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    didReceivePluginProcessProxyMessage(connection, messageID, arguments);
15665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
15765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
15865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid PluginProcessProxy::didClose(CoreIPC::Connection*)
15965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
1602bde8e466a4451c7319e3a072d118917957d6554Steve Block#if PLATFORM(MAC)
1612bde8e466a4451c7319e3a072d118917957d6554Steve Block    if (m_modalWindowIsShowing)
1622bde8e466a4451c7319e3a072d118917957d6554Steve Block        endModal();
1632bde8e466a4451c7319e3a072d118917957d6554Steve Block
1642bde8e466a4451c7319e3a072d118917957d6554Steve Block    if (m_fullscreenWindowIsShowing)
1652bde8e466a4451c7319e3a072d118917957d6554Steve Block        exitFullscreen();
1662bde8e466a4451c7319e3a072d118917957d6554Steve Block#endif
1672bde8e466a4451c7319e3a072d118917957d6554Steve Block
16865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    pluginProcessCrashedOrFailedToLaunch();
16965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
17065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
17165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid PluginProcessProxy::didReceiveInvalidMessage(CoreIPC::Connection*, CoreIPC::MessageID)
17265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
17365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
17465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
1752daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid PluginProcessProxy::syncMessageSendTimedOut(CoreIPC::Connection*)
1762daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{
1772daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch}
1782daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
17965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid PluginProcessProxy::didFinishLaunching(ProcessLauncher*, CoreIPC::Connection::Identifier connectionIdentifier)
18065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
18165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    ASSERT(!m_connection);
18265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
18365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!connectionIdentifier) {
18465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        pluginProcessCrashedOrFailedToLaunch();
18565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
18665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    }
18765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
18865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_connection = CoreIPC::Connection::createServerConnection(connectionIdentifier, this, RunLoop::main());
18965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_connection->open();
19065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
19165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    PluginProcessCreationParameters parameters;
19265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
19365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    parameters.pluginPath = m_pluginInfo.path;
19465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
19565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    platformInitializePluginProcess(parameters);
19665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
19765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // Initialize the plug-in host process.
1982fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    m_connection->send(Messages::PluginProcess::InitializePluginProcess(parameters), 0);
19965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
20065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // Send all our pending requests.
20181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    for (size_t i = 0; i < m_pendingGetSitesRequests.size(); ++i)
20281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        m_connection->send(Messages::PluginProcess::GetSitesWithData(m_pendingGetSitesRequests[i]), 0);
20381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    m_pendingGetSitesRequests.clear();
20481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
20581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    for (size_t i = 0; i < m_pendingClearSiteDataRequests.size(); ++i) {
20681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        const ClearSiteDataRequest& request = m_pendingClearSiteDataRequests[i];
20781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        m_connection->send(Messages::PluginProcess::ClearSiteData(request.sites, request.flags, request.maxAgeInSeconds, request.callbackID), 0);
20881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    }
20981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    m_pendingClearSiteDataRequests.clear();
21081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
21165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    for (unsigned i = 0; i < m_numPendingConnectionRequests; ++i)
21265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        m_connection->send(Messages::PluginProcess::CreateWebProcessConnection(), 0);
21365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
21465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_numPendingConnectionRequests = 0;
21565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
21665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
2172daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#if PLATFORM(MAC)
21865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid PluginProcessProxy::didCreateWebProcessConnection(const CoreIPC::MachPort& machPort)
21965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
22065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    ASSERT(!m_pendingConnectionReplies.isEmpty());
22165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
22265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // Grab the first pending connection reply.
2232daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    RefPtr<Messages::WebProcessProxy::GetPluginProcessConnection::DelayedReply> reply = m_pendingConnectionReplies.takeFirst();
22465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
2252daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    reply->send(CoreIPC::MachPort(machPort.port(), MACH_MSG_TYPE_MOVE_SEND));
22665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
2272daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#endif
22865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
22981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochvoid PluginProcessProxy::didGetSitesWithData(const Vector<String>& sites, uint64_t callbackID)
23081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch{
23181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    RefPtr<WebPluginSiteDataManager> webPluginSiteDataManager = m_pendingGetSitesReplies.take(callbackID);
23281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    ASSERT(webPluginSiteDataManager);
23381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
23481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    webPluginSiteDataManager->didGetSitesWithDataForSinglePlugin(sites, callbackID);
23581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch}
23681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
23781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochvoid PluginProcessProxy::didClearSiteData(uint64_t callbackID)
23881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch{
23981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    RefPtr<WebPluginSiteDataManager> webPluginSiteDataManager = m_pendingClearSiteDataReplies.take(callbackID);
24081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    ASSERT(webPluginSiteDataManager);
24181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
24281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    webPluginSiteDataManager->didClearSiteDataForSinglePlugin(callbackID);
24381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch}
24481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
24565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} // namespace WebKit
24665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
24765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif // ENABLE(PLUGIN_PROCESS)
248