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 NetworkProcessProxy::didFinishLaunching(ProcessLauncher* launcher, CoreIPC::Connection::Identifier connectionIdentifier) { ChildProcessProxy::didFinishLaunching(launcher, connectionIdentifier); if (CoreIPC::Connection::identifierIsNull(connectionIdentifier)) { // FIXME: Do better cleanup here. return; } for (unsigned i = 0; i < m_numPendingConnectionRequests; ++i) connection()->send(Messages::NetworkProcess::CreateNetworkConnectionToWebProcess(), 0); m_numPendingConnectionRequests = 0; #if PLATFORM(MAC) if (m_webContext->canEnableProcessSuppressionForNetworkProcess()) setProcessSuppressionEnabled(true); #endif }
void SharedWorkerProcessProxy::didFinishLaunching(ProcessLauncher*, CoreIPC::Connection::Identifier connectionIdentifier) { ASSERT(!m_connection); if (CoreIPC::Connection::identifierIsNull(connectionIdentifier)) { sharedWorkerProcessCrashedOrFailedToLaunch(); 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(); SharedWorkerProcessCreationParameters parameters; parameters.minimumLifetime = minimumLifetime; parameters.terminationTimeout = shutdownTimeout; platformInitializeSharedWorkerProcess(parameters); // Initialize the shared worker host process. m_connection->send(Messages::SharedWorkerProcess::InitializeSharedWorkerProcess(parameters), 0); for (unsigned i = 0; i < m_numPendingConnectionRequests; ++i) m_connection->send(Messages::SharedWorkerProcess::CreateWebProcessConnection(), 0); m_numPendingConnectionRequests = 0; #if PLATFORM(MAC) if (WebContext::canEnableProcessSuppressionForGlobalChildProcesses()) setProcessSuppressionEnabled(true); #endif }
void NetworkProcessProxy::didFinishLaunching(ProcessLauncher* launcher, IPC::Connection::Identifier connectionIdentifier) { ChildProcessProxy::didFinishLaunching(launcher, connectionIdentifier); if (IPC::Connection::identifierIsNull(connectionIdentifier)) { // FIXME: Do better cleanup here. return; } for (unsigned i = 0; i < m_numPendingConnectionRequests; ++i) connection()->send(Messages::NetworkProcess::CreateNetworkConnectionToWebProcess(), 0); m_numPendingConnectionRequests = 0; #if PLATFORM(COCOA) if (m_processPool.processSuppressionEnabled()) setProcessSuppressionEnabled(true); #endif #if PLATFORM(IOS) if (xpc_connection_t connection = this->connection()->xpcConnection()) m_throttler.didConnectToProcess(xpc_connection_get_pid(connection)); #endif }