void ThreadedMessagingProxyBase::initializeWorkerThread( std::unique_ptr<WorkerThreadStartupData> startupData) { DCHECK(isParentContextThread()); Document* document = toDocument(getExecutionContext()); double originTime = document->loader() ? document->loader()->timing().referenceMonotonicTime() : monotonicallyIncreasingTime(); m_loaderProxy = WorkerLoaderProxy::create(this); m_workerThread = createWorkerThread(originTime); m_workerThread->start(std::move(startupData)); workerThreadCreated(); }
void WorkerMessagingProxy::startWorkerGlobalScope(const KURL& scriptURL, const String& userAgent, const String& sourceCode, WorkerThreadStartMode startMode) { // FIXME: This need to be revisited when we support nested worker one day ASSERT(m_executionContext->isDocument()); if (m_askedToTerminate) { // Worker.terminate() could be called from JS before the thread was created. return; } Document* document = toDocument(m_executionContext.get()); SecurityOrigin* starterOrigin = document->securityOrigin(); ContentSecurityPolicy* csp = m_workerObject->contentSecurityPolicy() ? m_workerObject->contentSecurityPolicy() : document->contentSecurityPolicy(); ASSERT(csp); OwnPtr<WorkerThreadStartupData> startupData = WorkerThreadStartupData::create(scriptURL, userAgent, sourceCode, nullptr, startMode, csp->headers(), starterOrigin, m_workerClients.release()); double originTime = document->loader() ? document->loader()->timing().referenceMonotonicTime() : monotonicallyIncreasingTime(); m_loaderProxy = WorkerLoaderProxy::create(this); RefPtr<WorkerThread> thread = createWorkerThread(originTime); thread->start(startupData.release()); workerThreadCreated(thread); m_workerInspectorProxy->workerThreadCreated(m_executionContext.get(), m_workerThread.get(), scriptURL); }