WebMessagePortChannelArray WebDOMMessageEvent::releaseChannels() { MessagePortChannelArray* channels = constUnwrap<MessageEvent>()->channels(); WebMessagePortChannelArray webChannels(channels ? channels->size() : 0); if (channels) { for (size_t i = 0; i < channels->size(); ++i) webChannels[i] = (*channels)[i].leakPtr(); } return webChannels; }
void WebWorkerClientImpl::postMessageToWorkerContextTask(ScriptExecutionContext* context, WebWorkerClientImpl* thisPtr, const String& message, PassOwnPtr<MessagePortChannelArray> channels) { WebMessagePortChannelArray webChannels(channels.get() ? channels->size() : 0); for (size_t i = 0; i < webChannels.size(); ++i) { webChannels[i] = (*channels)[i]->channel()->webChannelRelease(); webChannels[i]->setClient(0); } thisPtr->m_webWorker->postMessageToWorkerContext(message, webChannels); }
void WebSharedWorkerImpl::postMessageTask(ScriptExecutionContext* context, WebSharedWorkerImpl* thisPtr, String message, PassOwnPtr<MessagePortChannelArray> channels) { if (!thisPtr->client()) return; WebMessagePortChannelArray webChannels(channels ? channels->size() : 0); for (size_t i = 0; i < webChannels.size(); ++i) { webChannels[i] = (*channels)[i]->channel()->webChannelRelease(); webChannels[i]->setClient(0); } thisPtr->client()->postMessageToWorkerObject(message, webChannels); }
void WebWorkerClientImpl::postMessageToWorkerContext( PassRefPtr<SerializedScriptValue> message, PassOwnPtr<MessagePortChannelArray> channels) { // Worker.terminate() could be called from JS before the context is started. if (m_askedToTerminate) return; ++m_unconfirmedMessageCount; if (!isMainThread()) { WebWorkerBase::dispatchTaskToMainThread(createCallbackTask(&postMessageToWorkerContextTask, AllowCrossThreadAccess(this), message->toWireString(), channels)); return; } WebMessagePortChannelArray webChannels(channels.get() ? channels->size() : 0); for (size_t i = 0; i < webChannels.size(); ++i) { WebMessagePortChannel* webchannel = (*channels)[i]->channel()->webChannelRelease(); webchannel->setClient(0); webChannels[i] = webchannel; } m_webWorker->postMessageToWorkerContext(message->toWireString(), webChannels); }