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