void WebInspectorUI::establishConnection(IPC::Attachment encodedConnectionIdentifier, uint64_t inspectedPageIdentifier, bool underTest, unsigned inspectionLevel) { #if USE(UNIX_DOMAIN_SOCKETS) IPC::Connection::Identifier connectionIdentifier(encodedConnectionIdentifier.releaseFileDescriptor()); #elif OS(DARWIN) IPC::Connection::Identifier connectionIdentifier(encodedConnectionIdentifier.port()); #else notImplemented(); return; #endif if (IPC::Connection::identifierIsNull(connectionIdentifier)) return; m_inspectedPageIdentifier = inspectedPageIdentifier; m_frontendAPIDispatcher.reset(); m_underTest = underTest; m_inspectionLevel = inspectionLevel; m_frontendController = &m_page.corePage()->inspectorController(); m_frontendController->setInspectorFrontendClient(this); m_backendConnection = IPC::Connection::createClientConnection(connectionIdentifier, *this); m_backendConnection->open(); }
PluginProcessConnection* PluginProcessConnectionManager::getPluginProcessConnection(uint64_t pluginProcessToken) { for (size_t i = 0; i < m_pluginProcessConnections.size(); ++i) { if (m_pluginProcessConnections[i]->pluginProcessToken() == pluginProcessToken) return m_pluginProcessConnections[i].get(); } IPC::Attachment encodedConnectionIdentifier; bool supportsAsynchronousInitialization; if (!WebProcess::shared().parentProcessConnection()->sendSync(Messages::WebProcessProxy::GetPluginProcessConnection(pluginProcessToken), Messages::WebProcessProxy::GetPluginProcessConnection::Reply(encodedConnectionIdentifier, supportsAsynchronousInitialization), 0)) return 0; #if OS(DARWIN) IPC::Connection::Identifier connectionIdentifier(encodedConnectionIdentifier.port()); if (IPC::Connection::identifierIsNull(connectionIdentifier)) return 0; #elif USE(UNIX_DOMAIN_SOCKETS) IPC::Connection::Identifier connectionIdentifier = encodedConnectionIdentifier.fileDescriptor(); if (connectionIdentifier == -1) return 0; #endif RefPtr<PluginProcessConnection> pluginProcessConnection = PluginProcessConnection::create(this, pluginProcessToken, connectionIdentifier, supportsAsynchronousInitialization); m_pluginProcessConnections.append(pluginProcessConnection); { MutexLocker locker(m_tokensAndConnectionsMutex); ASSERT(!m_tokensAndConnections.contains(pluginProcessToken)); m_tokensAndConnections.set(pluginProcessToken, pluginProcessConnection->connection()); } return pluginProcessConnection.get(); }
void WebProcess::ensureNetworkProcessConnection() { if (!m_usesNetworkProcess) return; if (m_networkProcessConnection) return; IPC::Attachment encodedConnectionIdentifier; if (!parentProcessConnection()->sendSync(Messages::WebProcessProxy::GetNetworkProcessConnection(), Messages::WebProcessProxy::GetNetworkProcessConnection::Reply(encodedConnectionIdentifier), 0)) return; #if OS(DARWIN) IPC::Connection::Identifier connectionIdentifier(encodedConnectionIdentifier.port()); #elif USE(UNIX_DOMAIN_SOCKETS) IPC::Connection::Identifier connectionIdentifier = encodedConnectionIdentifier.releaseFileDescriptor(); #else ASSERT_NOT_REACHED(); #endif if (IPC::Connection::identifierIsNull(connectionIdentifier)) return; m_networkProcessConnection = NetworkProcessConnection::create(connectionIdentifier); }
void DatabaseProcessProxy::didCreateDatabaseToWebProcessConnection(const IPC::Attachment& connectionIdentifier) { ASSERT(!m_pendingConnectionReplies.isEmpty()); RefPtr<Messages::WebProcessProxy::GetDatabaseProcessConnection::DelayedReply> reply = m_pendingConnectionReplies.takeFirst(); #if OS(DARWIN) reply->send(IPC::Attachment(connectionIdentifier.port(), MACH_MSG_TYPE_MOVE_SEND)); #elif USE(UNIX_DOMAIN_SOCKETS) reply->send(connectionIdentifier); #else notImplemented(); #endif }
void PluginProcessProxy::didCreateWebProcessConnection(const IPC::Attachment& connectionIdentifier, bool supportsAsynchronousPluginInitialization) { ASSERT(!m_pendingConnectionReplies.isEmpty()); // Grab the first pending connection reply. RefPtr<Messages::WebProcessProxy::GetPluginProcessConnection::DelayedReply> reply = m_pendingConnectionReplies.takeFirst(); #if PLATFORM(MAC) reply->send(IPC::Attachment(connectionIdentifier.port(), MACH_MSG_TYPE_MOVE_SEND), supportsAsynchronousPluginInitialization); #elif USE(UNIX_DOMAIN_SOCKETS) reply->send(connectionIdentifier, supportsAsynchronousPluginInitialization); #else notImplemented(); #endif }