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());
 }
Example #2
0
 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)));
}
Example #4
0
DedicatedWorkerGlobalScope* DedicatedWorkerGlobalScope::create(
    DedicatedWorkerThread* thread,
    std::unique_ptr<WorkerThreadStartupData> startupData,
    double timeOrigin) {
  // Note: startupData is finalized on return. After the relevant parts has been
  // passed along to the created 'context'.
  DedicatedWorkerGlobalScope* context = new DedicatedWorkerGlobalScope(
      startupData->m_scriptURL, startupData->m_userAgent, thread, timeOrigin,
      std::move(startupData->m_starterOriginPrivilegeData),
      startupData->m_workerClients);
  context->applyContentSecurityPolicyFromVector(
      *startupData->m_contentSecurityPolicyHeaders);
  context->setWorkerSettings(std::move(startupData->m_workerSettings));
  if (!startupData->m_referrerPolicy.isNull())
    context->parseAndSetReferrerPolicy(startupData->m_referrerPolicy);
  context->setAddressSpace(startupData->m_addressSpace);
  OriginTrialContext::addTokens(context,
                                startupData->m_originTrialTokens.get());
  return context;
}