PluginProcessProxy.cpp revision 81bc750723a18f21cd17d1b173cd2a4dda9cea6e
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 "MachPort.h" 3265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "PluginProcessCreationParameters.h" 3365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "PluginProcessManager.h" 3465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "PluginProcessMessages.h" 3565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "RunLoop.h" 3665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebCoreArgumentCoders.h" 3781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#include "WebPluginSiteDataManager.h" 3865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebProcessProxy.h" 3965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 4065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochnamespace WebKit { 4181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 4281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#if PLATFORM(MAC) 4381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochstatic bool pluginNeedsExecutableHeap(const PluginInfoStore::Plugin& pluginInfo) 4481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch{ 4581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch if (pluginInfo.bundleIdentifier == "com.apple.QuickTime Plugin.plugin") 4681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch return false; 4781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 4881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch return true; 4981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch} 5081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#endif 5165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 5265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochPassOwnPtr<PluginProcessProxy> PluginProcessProxy::create(PluginProcessManager* PluginProcessManager, const PluginInfoStore::Plugin& pluginInfo) 5365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 5465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return adoptPtr(new PluginProcessProxy(PluginProcessManager, pluginInfo)); 5565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 5665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 5765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochPluginProcessProxy::PluginProcessProxy(PluginProcessManager* PluginProcessManager, const PluginInfoStore::Plugin& pluginInfo) 5865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch : m_pluginProcessManager(PluginProcessManager) 5965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch , m_pluginInfo(pluginInfo) 6065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch , m_numPendingConnectionRequests(0) 6165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 6265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ProcessLauncher::LaunchOptions launchOptions; 6365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch launchOptions.processType = ProcessLauncher::PluginProcess; 6465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#if PLATFORM(MAC) 6565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch launchOptions.architecture = pluginInfo.pluginArchitecture; 6681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch launchOptions.executableHeap = pluginNeedsExecutableHeap(pluginInfo); 6765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif 6865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 6965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_processLauncher = ProcessLauncher::create(this, launchOptions); 7065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 7165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 7265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochPluginProcessProxy::~PluginProcessProxy() 7365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 7465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 7565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 7665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch// Asks the plug-in process to create a new connection to a web process. The connection identifier will be 7765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch// encoded in the given argument encoder and sent back to the connection of the given web process. 7865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid PluginProcessProxy::createWebProcessConnection(WebProcessProxy* webProcessProxy, CoreIPC::ArgumentEncoder* reply) 7965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 8065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_pendingConnectionReplies.append(make_pair(webProcessProxy, reply)); 8165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 8265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (m_processLauncher->isLaunching()) { 8365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_numPendingConnectionRequests++; 8465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 8565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 8665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 872fc2651226baac27029e38c9d6ef883fa32084dbSteve Block // Ask the plug-in process to create a connection. Since the plug-in can be waiting for a synchronous reply 882fc2651226baac27029e38c9d6ef883fa32084dbSteve Block // we need to make sure that this message is always processed, even when the plug-in is waiting for a synchronus reply. 892fc2651226baac27029e38c9d6ef883fa32084dbSteve Block m_connection->send(Messages::PluginProcess::CreateWebProcessConnection(), 0, CoreIPC::DispatchMessageEvenWhenWaitingForSyncReply); 9065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 9165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 9281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochvoid PluginProcessProxy::getSitesWithData(WebPluginSiteDataManager* webPluginSiteDataManager, uint64_t callbackID) 9381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch{ 9481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch ASSERT(!m_pendingGetSitesReplies.contains(callbackID)); 9581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch m_pendingGetSitesReplies.set(callbackID, webPluginSiteDataManager); 9681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 9781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch if (m_processLauncher->isLaunching()) { 9881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch m_pendingGetSitesRequests.append(callbackID); 9981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch return; 10081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch } 10181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 10281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch // Ask the plug-in process for the sites with data. 10381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch m_connection->send(Messages::PluginProcess::GetSitesWithData(callbackID), 0); 10481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch} 10581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 10681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochvoid PluginProcessProxy::clearSiteData(WebPluginSiteDataManager* webPluginSiteDataManager, const Vector<String>& sites, uint64_t flags, uint64_t maxAgeInSeconds, uint64_t callbackID) 10781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch{ 10881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch ASSERT(!m_pendingClearSiteDataReplies.contains(callbackID)); 10981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch m_pendingClearSiteDataReplies.set(callbackID, webPluginSiteDataManager); 11081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 11181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch if (m_processLauncher->isLaunching()) { 11281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch ClearSiteDataRequest request; 11381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch request.sites = sites; 11481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch request.flags = flags; 11581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch request.maxAgeInSeconds = maxAgeInSeconds; 11681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch request.callbackID = callbackID; 11781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch m_pendingClearSiteDataRequests.append(request); 11881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch return; 11981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch } 12081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 12181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch // Ask the plug-in process to clear the site data. 12281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch m_connection->send(Messages::PluginProcess::ClearSiteData(sites, flags, maxAgeInSeconds, callbackID), 0); 12381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch} 12481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 12565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid PluginProcessProxy::pluginProcessCrashedOrFailedToLaunch() 12665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 12765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // The plug-in process must have crashed or exited, send any pending sync replies we might have. 12865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch while (!m_pendingConnectionReplies.isEmpty()) { 12965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch RefPtr<WebProcessProxy> replyWebProcessProxy = m_pendingConnectionReplies.first().first.release(); 13065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch CoreIPC::ArgumentEncoder* reply = m_pendingConnectionReplies.first().second; 13165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_pendingConnectionReplies.removeFirst(); 13265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 13365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // FIXME: This is Mac specific. 13465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch reply->encode(CoreIPC::MachPort(0, MACH_MSG_TYPE_MOVE_SEND)); 13565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch replyWebProcessProxy->connection()->sendSyncReply(reply); 13665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 13765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 13881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch while (!m_pendingGetSitesReplies.isEmpty()) 13981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch didGetSitesWithData(Vector<String>(), m_pendingGetSitesReplies.begin()->first); 14081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 14181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch while (!m_pendingClearSiteDataReplies.isEmpty()) 14281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch didClearSiteData(m_pendingClearSiteDataReplies.begin()->first); 14381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 14465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Tell the plug-in process manager to forget about this plug-in process proxy. 14565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_pluginProcessManager->removePluginProcessProxy(this); 14665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch delete this; 14765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 14865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 14965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid PluginProcessProxy::didReceiveMessage(CoreIPC::Connection* connection, CoreIPC::MessageID messageID, CoreIPC::ArgumentDecoder* arguments) 15065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 15165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch didReceivePluginProcessProxyMessage(connection, messageID, arguments); 15265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 15365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 15465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid PluginProcessProxy::didClose(CoreIPC::Connection*) 15565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 15665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch pluginProcessCrashedOrFailedToLaunch(); 15765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 15865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 15965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid PluginProcessProxy::didReceiveInvalidMessage(CoreIPC::Connection*, CoreIPC::MessageID) 16065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 16165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 16265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 16365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid PluginProcessProxy::didFinishLaunching(ProcessLauncher*, CoreIPC::Connection::Identifier connectionIdentifier) 16465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 16565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(!m_connection); 16665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 16765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!connectionIdentifier) { 16865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch pluginProcessCrashedOrFailedToLaunch(); 16965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 17065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 17165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 17265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_connection = CoreIPC::Connection::createServerConnection(connectionIdentifier, this, RunLoop::main()); 17365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_connection->open(); 17465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 17565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch PluginProcessCreationParameters parameters; 17665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 17765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch parameters.pluginPath = m_pluginInfo.path; 17865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 17965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch platformInitializePluginProcess(parameters); 18065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 18165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Initialize the plug-in host process. 1822fc2651226baac27029e38c9d6ef883fa32084dbSteve Block m_connection->send(Messages::PluginProcess::InitializePluginProcess(parameters), 0); 18365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 18465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Send all our pending requests. 18581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch for (size_t i = 0; i < m_pendingGetSitesRequests.size(); ++i) 18681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch m_connection->send(Messages::PluginProcess::GetSitesWithData(m_pendingGetSitesRequests[i]), 0); 18781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch m_pendingGetSitesRequests.clear(); 18881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 18981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch for (size_t i = 0; i < m_pendingClearSiteDataRequests.size(); ++i) { 19081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch const ClearSiteDataRequest& request = m_pendingClearSiteDataRequests[i]; 19181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch m_connection->send(Messages::PluginProcess::ClearSiteData(request.sites, request.flags, request.maxAgeInSeconds, request.callbackID), 0); 19281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch } 19381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch m_pendingClearSiteDataRequests.clear(); 19481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 19565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch for (unsigned i = 0; i < m_numPendingConnectionRequests; ++i) 19665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_connection->send(Messages::PluginProcess::CreateWebProcessConnection(), 0); 19765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 19865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_numPendingConnectionRequests = 0; 19965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 20065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 20165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid PluginProcessProxy::didCreateWebProcessConnection(const CoreIPC::MachPort& machPort) 20265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 20365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(!m_pendingConnectionReplies.isEmpty()); 20465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 20565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Grab the first pending connection reply. 20665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch RefPtr<WebProcessProxy> replyWebProcessProxy = m_pendingConnectionReplies.first().first.release(); 20765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch CoreIPC::ArgumentEncoder* reply = m_pendingConnectionReplies.first().second; 20865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_pendingConnectionReplies.removeFirst(); 20965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 21065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // FIXME: This is Mac specific. 21165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch reply->encode(CoreIPC::MachPort(machPort.port(), MACH_MSG_TYPE_MOVE_SEND)); 21265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch replyWebProcessProxy->connection()->sendSyncReply(reply); 21365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 21465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 21581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochvoid PluginProcessProxy::didGetSitesWithData(const Vector<String>& sites, uint64_t callbackID) 21681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch{ 21781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch RefPtr<WebPluginSiteDataManager> webPluginSiteDataManager = m_pendingGetSitesReplies.take(callbackID); 21881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch ASSERT(webPluginSiteDataManager); 21981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 22081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch webPluginSiteDataManager->didGetSitesWithDataForSinglePlugin(sites, callbackID); 22181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch} 22281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 22381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochvoid PluginProcessProxy::didClearSiteData(uint64_t callbackID) 22481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch{ 22581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch RefPtr<WebPluginSiteDataManager> webPluginSiteDataManager = m_pendingClearSiteDataReplies.take(callbackID); 22681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch ASSERT(webPluginSiteDataManager); 22781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 22881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch webPluginSiteDataManager->didClearSiteDataForSinglePlugin(callbackID); 22981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch} 23081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 23165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} // namespace WebKit 23265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 23365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif // ENABLE(PLUGIN_PROCESS) 234