PassRefPtrWillBeRawPtr<Worker> Worker::create(ExecutionContext* context, const String& url, ExceptionState& exceptionState) { ASSERT(isMainThread()); Document* document = toDocument(context); UseCounter::count(context, UseCounter::WorkerStart); if (!document->page()) { exceptionState.throwDOMException(InvalidAccessError, "The context provided is invalid."); return nullptr; } WorkerGlobalScopeProxyProvider* proxyProvider = WorkerGlobalScopeProxyProvider::from(*document->page()); ASSERT(proxyProvider); RefPtrWillBeRawPtr<Worker> worker = adoptRefWillBeNoop(new Worker(context)); worker->suspendIfNeeded(); KURL scriptURL = worker->resolveURL(url, exceptionState); if (scriptURL.isEmpty()) return nullptr; worker->m_scriptLoader = WorkerScriptLoader::create(); worker->m_scriptLoader->loadAsynchronously(*context, scriptURL, DenyCrossOriginRequests, worker.get()); worker->m_contextProxy = proxyProvider->createWorkerGlobalScopeProxy(worker.get()); return worker.release(); }
PassRefPtr<Worker> Worker::create(ExecutionContext* context, const String& url, ExceptionState& exceptionState) { ASSERT(isMainThread()); Document* document = toDocument(context); UseCounter::count(context, UseCounter::WorkerStart); if (!document->page()) { exceptionState.throwDOMException(InvalidAccessError, "The context provided is invalid."); return 0; } WorkerGlobalScopeProxyProvider* proxyProvider = WorkerGlobalScopeProxyProvider::from(document->page()); ASSERT(proxyProvider); RefPtr<Worker> worker = adoptRef(new Worker(context)); worker->suspendIfNeeded(); KURL scriptURL = worker->resolveURL(url, exceptionState); if (scriptURL.isEmpty()) return 0; // The worker context does not exist while loading, so we must ensure that the worker object is not collected, nor are its event listeners. worker->setPendingActivity(worker.get()); worker->m_scriptLoader = WorkerScriptLoader::create(); worker->m_scriptLoader->loadAsynchronously(context, scriptURL, DenyCrossOriginRequests, worker.get()); worker->m_contextProxy = proxyProvider->createWorkerGlobalScopeProxy(worker.get()); return worker.release(); }