void PluginProcessProxy::didFinishLaunching(ProcessLauncher*, CoreIPC::Connection::Identifier connectionIdentifier) { ASSERT(!m_connection); if (!connectionIdentifier) { pluginProcessCrashedOrFailedToLaunch(); return; } m_connection = CoreIPC::Connection::createServerConnection(connectionIdentifier, this, RunLoop::main()); m_connection->open(); PluginProcessCreationParameters parameters; parameters.pluginPath = m_pluginInfo.path; platformInitializePluginProcess(parameters); // Initialize the plug-in host process. m_connection->send(Messages::PluginProcess::Initialize(parameters), 0); // Send all our pending requests. for (unsigned i = 0; i < m_numPendingConnectionRequests; ++i) m_connection->send(Messages::PluginProcess::CreateWebProcessConnection(), 0); m_numPendingConnectionRequests = 0; }
void PluginProcessProxy::didFinishLaunching(ProcessLauncher*, IPC::Connection::Identifier connectionIdentifier) { ASSERT(!m_connection); if (IPC::Connection::identifierIsNull(connectionIdentifier)) { pluginProcessCrashedOrFailedToLaunch(); return; } m_connection = IPC::Connection::createServerConnection(connectionIdentifier, *this); #if PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED <= 101000 m_connection->setShouldCloseConnectionOnMachExceptions(); #endif m_connection->open(); PluginProcessCreationParameters parameters; parameters.processType = m_pluginProcessAttributes.processType; if (parameters.processType == PluginProcessTypeSnapshot) { parameters.minimumLifetime = snapshottingMinimumLifetime; parameters.terminationTimeout = snapshottingShutdownTimeout; } else { parameters.minimumLifetime = minimumLifetime; parameters.terminationTimeout = shutdownTimeout; } platformInitializePluginProcess(parameters); // Initialize the plug-in host process. m_connection->send(Messages::PluginProcess::InitializePluginProcess(parameters), 0); #if PLATFORM(COCOA) m_connection->send(Messages::PluginProcess::SetQOS(pluginProcessLatencyQOS(), pluginProcessThroughputQOS()), 0); #endif for (auto callbackID : m_pendingFetchWebsiteDataRequests) m_connection->send(Messages::PluginProcess::GetSitesWithData(callbackID), 0); m_pendingFetchWebsiteDataRequests.clear(); for (auto& request : m_pendingDeleteWebsiteDataRequests) m_connection->send(Messages::PluginProcess::DeleteWebsiteData(request.modifiedSince, request.callbackID), 0); m_pendingDeleteWebsiteDataRequests.clear(); for (auto& request : m_pendingDeleteWebsiteDataForHostNamesRequests) m_connection->send(Messages::PluginProcess::DeleteWebsiteDataForHostNames(request.hostNames, request.callbackID), 0); m_pendingDeleteWebsiteDataForHostNamesRequests.clear(); for (unsigned i = 0; i < m_numPendingConnectionRequests; ++i) m_connection->send(Messages::PluginProcess::CreateWebProcessConnection(), 0); m_numPendingConnectionRequests = 0; #if PLATFORM(COCOA) if (!PluginProcessManager::singleton().processSuppressionDisabled()) setProcessSuppressionEnabled(true); #endif }
void PluginProcessProxy::didFinishLaunching(ProcessLauncher*, CoreIPC::Connection::Identifier connectionIdentifier) { ASSERT(!m_connection); if (CoreIPC::Connection::identifierIsNull(connectionIdentifier)) { pluginProcessCrashedOrFailedToLaunch(); return; } m_connection = CoreIPC::Connection::createServerConnection(connectionIdentifier, this, RunLoop::main()); #if PLATFORM(MAC) m_connection->setShouldCloseConnectionOnMachExceptions(); #elif PLATFORM(QT) m_connection->setShouldCloseConnectionOnProcessTermination(processIdentifier()); #endif m_connection->open(); PluginProcessCreationParameters parameters; parameters.processType = m_pluginProcessAttributes.processType; if (parameters.processType == PluginProcessTypeSnapshot) { parameters.minimumLifetime = snapshottingMinimumLifetime; parameters.terminationTimeout = snapshottingShutdownTimeout; } else { parameters.minimumLifetime = minimumLifetime; parameters.terminationTimeout = shutdownTimeout; } platformInitializePluginProcess(parameters); // Initialize the plug-in host process. m_connection->send(Messages::PluginProcess::InitializePluginProcess(parameters), 0); // Send all our pending requests. for (size_t i = 0; i < m_pendingGetSitesRequests.size(); ++i) m_connection->send(Messages::PluginProcess::GetSitesWithData(m_pendingGetSitesRequests[i]), 0); m_pendingGetSitesRequests.clear(); for (size_t i = 0; i < m_pendingClearSiteDataRequests.size(); ++i) { const ClearSiteDataRequest& request = m_pendingClearSiteDataRequests[i]; m_connection->send(Messages::PluginProcess::ClearSiteData(request.sites, request.flags, request.maxAgeInSeconds, request.callbackID), 0); } m_pendingClearSiteDataRequests.clear(); for (unsigned i = 0; i < m_numPendingConnectionRequests; ++i) m_connection->send(Messages::PluginProcess::CreateWebProcessConnection(), 0); m_numPendingConnectionRequests = 0; #if PLATFORM(MAC) if (WebContext::canEnableProcessSuppressionForGlobalChildProcesses()) setProcessSuppressionEnabled(true); #endif }
void PluginProcessProxy::didClose(IPC::Connection*) { #if PLATFORM(MAC) if (m_modalWindowIsShowing) endModal(); if (m_fullscreenWindowIsShowing) exitFullscreen(); #endif const Vector<WebContext*>& contexts = WebContext::allContexts(); for (size_t i = 0; i < contexts.size(); ++i) contexts[i]->sendToAllProcesses(Messages::PluginProcessConnectionManager::PluginProcessCrashed(m_pluginProcessToken)); // This will cause us to be deleted. pluginProcessCrashedOrFailedToLaunch(); }
void PluginProcessProxy::didFinishLaunching(ProcessLauncher*, CoreIPC::Connection::Identifier connectionIdentifier) { ASSERT(!m_connection); if (CoreIPC::Connection::identifierIsNull(connectionIdentifier)) { pluginProcessCrashedOrFailedToLaunch(); return; } m_connection = CoreIPC::Connection::createServerConnection(connectionIdentifier, this, RunLoop::main()); #if PLATFORM(MAC) m_connection->setShouldCloseConnectionOnMachExceptions(); #elif PLATFORM(QT) m_connection->setShouldCloseConnectionOnProcessTermination(m_processLauncher->processIdentifier()); #endif m_connection->open(); PluginProcessCreationParameters parameters; parameters.pluginPath = m_pluginInfo.path; parameters.terminationTimeout = shutdownTimeout; platformInitializePluginProcess(parameters); // Initialize the plug-in host process. m_connection->send(Messages::PluginProcess::InitializePluginProcess(parameters), 0); // Send all our pending requests. for (size_t i = 0; i < m_pendingGetSitesRequests.size(); ++i) m_connection->send(Messages::PluginProcess::GetSitesWithData(m_pendingGetSitesRequests[i]), 0); m_pendingGetSitesRequests.clear(); for (size_t i = 0; i < m_pendingClearSiteDataRequests.size(); ++i) { const ClearSiteDataRequest& request = m_pendingClearSiteDataRequests[i]; m_connection->send(Messages::PluginProcess::ClearSiteData(request.sites, request.flags, request.maxAgeInSeconds, request.callbackID), 0); } m_pendingClearSiteDataRequests.clear(); for (unsigned i = 0; i < m_numPendingConnectionRequests; ++i) m_connection->send(Messages::PluginProcess::CreateWebProcessConnection(), 0); m_numPendingConnectionRequests = 0; }
void PluginProcessProxy::didClose(CoreIPC::Connection*) { pluginProcessCrashedOrFailedToLaunch(); }