PluginProcessConnection* PluginProcessConnectionManager::getPluginProcessConnection(const String& pluginPath) { for (size_t i = 0; i < m_pluginProcessConnections.size(); ++i) { if (m_pluginProcessConnections[i]->pluginPath() == pluginPath) return m_pluginProcessConnections[i].get(); } CoreIPC::Attachment encodedConnectionIdentifier; bool supportsAsynchronousInitialization; if (!WebProcess::shared().connection()->sendSync(Messages::WebProcessProxy::GetPluginProcessConnection(pluginPath), Messages::WebProcessProxy::GetPluginProcessConnection::Reply(encodedConnectionIdentifier, supportsAsynchronousInitialization), 0)) return 0; #if PLATFORM(MAC) CoreIPC::Connection::Identifier connectionIdentifier = encodedConnectionIdentifier.port(); if (!connectionIdentifier) return 0; #elif USE(UNIX_DOMAIN_SOCKETS) CoreIPC::Connection::Identifier connectionIdentifier = encodedConnectionIdentifier.fileDescriptor(); if (connectionIdentifier == -1) return 0; #endif RefPtr<PluginProcessConnection> pluginProcessConnection = PluginProcessConnection::create(this, pluginPath, connectionIdentifier, supportsAsynchronousInitialization); m_pluginProcessConnections.append(pluginProcessConnection); { MutexLocker locker(m_pathsAndConnectionsMutex); ASSERT(!m_pathsAndConnections.contains(pluginProcessConnection->pluginPath())); m_pathsAndConnections.set(pluginPath, pluginProcessConnection->connection()); } return pluginProcessConnection.get(); }
bool SharedMemory::Handle::decode(CoreIPC::ArgumentDecoder& decoder, Handle& handle) { ASSERT_ARG(handle, !handle.m_size); ASSERT_ARG(handle, handle.isNull()); CoreIPC::Attachment attachment; if (!decoder.decode(attachment)) return false; handle.adoptFromAttachment(attachment.releaseFileDescriptor(), attachment.size()); return true; }
bool UpdateChunk::decode(CoreIPC::ArgumentDecoder& decoder, UpdateChunk& chunk) { IntRect rect; if (!decoder.decode(rect)) return false; chunk.m_rect = rect; CoreIPC::Attachment attachment; if (!decoder.decode(attachment)) return false; chunk.m_size = attachment.size(); chunk.m_data = reinterpret_cast<uint8_t*>(attachment.address()); return true; }
void NetworkProcessProxy::didCreateNetworkConnectionToWebProcess(const CoreIPC::Attachment& connectionIdentifier) { ASSERT(!m_pendingConnectionReplies.isEmpty()); // Grab the first pending connection reply. RefPtr<Messages::WebProcessProxy::GetNetworkProcessConnection::DelayedReply> reply = m_pendingConnectionReplies.takeFirst(); #if PLATFORM(MAC) reply->send(CoreIPC::Attachment(connectionIdentifier.port(), MACH_MSG_TYPE_MOVE_SEND)); #else notImplemented(); #endif }
void WebProcess::ensureNetworkProcessConnection() { if (!m_usesNetworkProcess) return; if (m_networkProcessConnection) return; CoreIPC::Attachment encodedConnectionIdentifier; if (!connection()->sendSync(Messages::WebProcessProxy::GetNetworkProcessConnection(), Messages::WebProcessProxy::GetNetworkProcessConnection::Reply(encodedConnectionIdentifier), 0)) return; #if PLATFORM(MAC) CoreIPC::Connection::Identifier connectionIdentifier(encodedConnectionIdentifier.port()); if (CoreIPC::Connection::identifierIsNull(connectionIdentifier)) return; #else ASSERT_NOT_REACHED(); #endif m_networkProcessConnection = NetworkProcessConnection::create(connectionIdentifier); }
void SharedWorkerProcessProxy::didCreateWebProcessConnection(const CoreIPC::Attachment& connectionIdentifier) { ASSERT(!m_pendingConnectionReplies.isEmpty()); // Grab the first pending connection reply. RefPtr<Messages::WebProcessProxy::GetSharedWorkerProcessConnection::DelayedReply> reply = m_pendingConnectionReplies.takeFirst(); #if PLATFORM(MAC) reply->send(CoreIPC::Attachment(connectionIdentifier.port(), MACH_MSG_TYPE_MOVE_SEND)); #elif USE(UNIX_DOMAIN_SOCKETS) reply->send(connectionIdentifier); #else notImplemented(); #endif }
void PluginProcessProxy::didCreateWebProcessConnection(const CoreIPC::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(CoreIPC::Attachment(connectionIdentifier.port(), MACH_MSG_TYPE_MOVE_SEND), supportsAsynchronousPluginInitialization); #elif USE(UNIX_DOMAIN_SOCKETS) reply->send(connectionIdentifier, supportsAsynchronousPluginInitialization); #else notImplemented(); #endif }