virtual void performTask(ExecutionContext* scriptContext) { ASSERT_WITH_SECURITY_IMPLICATION(scriptContext->isWorkerGlobalScope()); DedicatedWorkerGlobalScope* context = static_cast<DedicatedWorkerGlobalScope*>(scriptContext); OwnPtrWillBeRawPtr<MessagePortArray> ports = MessagePort::entanglePorts(*scriptContext, m_channels.release()); context->dispatchEvent(MessageEvent::create(ports.release(), m_message)); context->thread()->workerObjectProxy().confirmMessageFromWorkerObject(context->hasPendingActivity()); }
virtual void performTask(ScriptExecutionContext* scriptContext) { ASSERT_WITH_SECURITY_IMPLICATION(scriptContext->isWorkerGlobalScope()); DedicatedWorkerGlobalScope* context = static_cast<DedicatedWorkerGlobalScope*>(scriptContext); std::unique_ptr<MessagePortArray> ports = MessagePort::entanglePorts(*scriptContext, std::move(m_channels)); context->dispatchEvent(MessageEvent::create(std::move(ports), m_message)); context->thread().workerObjectProxy().confirmMessageFromWorkerObject(context->hasPendingActivity()); }
void WorkerMessagingProxy::postMessageToWorkerGlobalScope(PassRefPtr<SerializedScriptValue> message, std::unique_ptr<MessagePortChannelArray> channels) { if (m_askedToTerminate) return; MessagePortChannelArray* channelsPtr = channels.release(); ScriptExecutionContext::Task task([=] (ScriptExecutionContext* scriptContext) { ASSERT_WITH_SECURITY_IMPLICATION(scriptContext->isWorkerGlobalScope()); DedicatedWorkerGlobalScope* context = static_cast<DedicatedWorkerGlobalScope*>(scriptContext); std::unique_ptr<MessagePortArray> ports = MessagePort::entanglePorts(*scriptContext, std::unique_ptr<MessagePortChannelArray>(channelsPtr)); context->dispatchEvent(MessageEvent::create(std::move(ports), message)); context->thread().workerObjectProxy().confirmMessageFromWorkerObject(context->hasPendingActivity()); }); if (m_workerThread) { ++m_unconfirmedMessageCount; m_workerThread->runLoop().postTask(std::move(task)); } else m_queuedEarlyTasks.append(std::make_unique<ScriptExecutionContext::Task>(std::move(task))); }