void PluginProcessConnection::didClose(CoreIPC::Connection*) { // The plug-in process must have crashed. for (HashMap<uint64_t, PluginProxy*>::const_iterator::Values it = m_plugins.begin().values(), end = m_plugins.end().values(); it != end; ++it) { PluginProxy* pluginProxy = (*it); pluginProxy->pluginProcessCrashed(); } }
void PluginProcessConnection::didReceiveMessage(IPC::Connection& connection, IPC::Decoder& decoder) { ASSERT(decoder.destinationID()); PluginProxy* pluginProxy = m_plugins.get(decoder.destinationID()); if (!pluginProxy) return; pluginProxy->didReceivePluginProxyMessage(connection, decoder); }
void PluginProcessConnection::didReceiveMessage(CoreIPC::Connection* connection, CoreIPC::MessageID messageID, CoreIPC::MessageDecoder& decoder) { ASSERT(decoder.destinationID()); PluginProxy* pluginProxy = m_plugins.get(decoder.destinationID()); if (!pluginProxy) return; pluginProxy->didReceivePluginProxyMessage(connection, messageID, decoder); }
void PluginProcessConnection::didReceiveSyncMessage(IPC::Connection& connection, IPC::Decoder& decoder, std::unique_ptr<IPC::Encoder>& replyEncoder) { if (decoder.messageReceiverName() == Messages::NPObjectMessageReceiver::messageReceiverName()) { m_npRemoteObjectMap->didReceiveSyncMessage(connection, decoder, replyEncoder); return; } uint64_t destinationID = decoder.destinationID(); if (!destinationID) { didReceiveSyncPluginProcessConnectionMessage(connection, decoder, replyEncoder); return; } PluginProxy* pluginProxy = m_plugins.get(destinationID); if (!pluginProxy) return; pluginProxy->didReceiveSyncPluginProxyMessage(connection, decoder, replyEncoder); }
void PluginProcessConnection::didReceiveSyncMessage(CoreIPC::Connection* connection, CoreIPC::MessageID messageID, CoreIPC::MessageDecoder& decoder, OwnPtr<CoreIPC::MessageEncoder>& replyEncoder) { if (messageID.is<CoreIPC::MessageClassNPObjectMessageReceiver>()) { m_npRemoteObjectMap->didReceiveSyncMessage(connection, messageID, decoder, replyEncoder); return; } uint64_t destinationID = decoder.destinationID(); if (!destinationID) { didReceiveSyncPluginProcessConnectionMessage(connection, messageID, decoder, replyEncoder); return; } PluginProxy* pluginProxy = m_plugins.get(destinationID); if (!pluginProxy) return; pluginProxy->didReceiveSyncPluginProxyMessage(connection, messageID, decoder, replyEncoder); }
PluginProxy* PluginProxy::createNewPluginProxy(const QString &type) { PluginProxy *pp = new PluginProxy(type); QStringList args = QStringList() << pp->m_type; pp->m_process->start(REMOTEPLUGIN_BIN_PATH, args); QByteArray tmp; if (!pp->waitForStarted(PLUGINPROCESS_START_TIMEOUT)) { TRACE() << "The process cannot be started"; delete pp; return NULL; } if (!pp->readOnReady(tmp, PLUGINPROCESS_START_TIMEOUT)) { TRACE() << "The process cannot load plugin"; delete pp; return NULL; } if (debugEnabled()) { QString pluginType = pp->queryType(); if (pluginType != pp->m_type) { BLAME() << QString::fromLatin1("Plugin returned type '%1', " "expected '%2'"). arg(pluginType).arg(pp->m_type); } } pp->m_mechanisms = pp->queryMechanisms(); connect(pp->m_process, SIGNAL(readyRead()), pp, SLOT(onReadStandardOutput())); TRACE() << "The process is started"; return pp; }