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 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(); }
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 CompositingManager::establishConnection(WebPage& webPage) { IPC::Attachment connectionHandle; webPage.sendSync(Messages::CompositingManagerProxy::EstablishConnection(), Messages::CompositingManagerProxy::EstablishConnection::Reply(connectionHandle)); m_connectionFd = connectionHandle.releaseFileDescriptor(); }
bool SharedMemory::Handle::decode(IPC::ArgumentDecoder& decoder, Handle& handle) { ASSERT_ARG(handle, !handle.m_size); ASSERT_ARG(handle, handle.isNull()); IPC::Attachment attachment; if (!decoder.decode(attachment)) return false; handle.adoptFromAttachment(attachment.releaseFileDescriptor(), attachment.size()); return true; }
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 }
void CompositingManagerProxy::commitBuffer(const IPC::Attachment& fd, const IPC::DataReference& bufferData) { m_view.viewBackend().commitBuffer(fd.fileDescriptor(), bufferData.data(), bufferData.size()); }
void CompositingManagerProxy::establishConnection(IPC::Attachment encodedConnectionIdentifier) { IPC::Connection::Identifier connectionIdentifier(encodedConnectionIdentifier.releaseFileDescriptor()); m_connection = IPC::Connection::createClientConnection(connectionIdentifier, *this, RunLoop::main()); m_connection->open(); }