Index: third_party/WebKit/Source/core/loader/ThreadableLoadingContext.cpp |
diff --git a/third_party/WebKit/Source/core/loader/ThreadableLoadingContext.cpp b/third_party/WebKit/Source/core/loader/ThreadableLoadingContext.cpp |
index eb485861ba5974f1ce2d9344f16190e81aea1e34..d86aa50199fbefa076901f6983feeb0278eb3368 100644 |
--- a/third_party/WebKit/Source/core/loader/ThreadableLoadingContext.cpp |
+++ b/third_party/WebKit/Source/core/loader/ThreadableLoadingContext.cpp |
@@ -6,6 +6,8 @@ |
#include "core/dom/Document.h" |
#include "core/dom/TaskRunnerHelper.h" |
+#include "core/loader/WorkerFetchContext.h" |
+#include "core/workers/WorkerGlobalScope.h" |
#include "platform/loader/fetch/ResourceFetcher.h" |
namespace blink { |
@@ -68,9 +70,84 @@ class DocumentThreadableLoadingContext final : public ThreadableLoadingContext { |
Member<Document> m_document; |
}; |
+class WorkerThreadableLoadingContext : public ThreadableLoadingContext { |
+ public: |
+ explicit WorkerThreadableLoadingContext(WorkerGlobalScope& workerGlobalScope) |
+ : m_workerGlobalScope(&workerGlobalScope), |
+ m_fetchContext(WorkerFetchContext::from(workerGlobalScope)) {} |
+ |
+ ~WorkerThreadableLoadingContext() override = default; |
+ |
+ bool isContextThread() const override { |
+ DCHECK(m_fetchContext); |
+ DCHECK(m_workerGlobalScope); |
+ return m_workerGlobalScope->isContextThread(); |
+ } |
+ |
+ ResourceFetcher* getResourceFetcher() override { |
+ DCHECK(isContextThread()); |
+ return m_fetchContext->getResourceFetcher(); |
+ } |
+ |
+ SecurityOrigin* getSecurityOrigin() override { |
+ DCHECK(isContextThread()); |
+ return m_workerGlobalScope->getSecurityOrigin(); |
+ } |
+ |
+ bool isSecureContext() const override { |
+ DCHECK(isContextThread()); |
+ String errorMessage; |
+ return m_workerGlobalScope->isSecureContext(errorMessage); |
+ } |
+ |
+ KURL firstPartyForCookies() const override { |
+ DCHECK(isContextThread()); |
+ // TODO |
+ return m_workerGlobalScope->url(); |
+ } |
+ |
+ String userAgent() const override { |
+ DCHECK(isContextThread()); |
+ return m_workerGlobalScope->userAgent(); |
+ } |
+ |
+ Document* getLoadingDocument() override { return nullptr; } |
+ |
+ RefPtr<WebTaskRunner> getTaskRunner(TaskType type) override { |
+ switch (type) { |
+ case TaskType::Timer: |
+ return m_fetchContext->timerTaskRunner(); |
+ case TaskType::UnspecedLoading: |
+ case TaskType::Networking: |
+ return m_fetchContext->loadingTaskRunner(); |
+ default: |
+ return TaskRunnerHelper::get(type, getLoadingDocument()); |
+ } |
+ } |
+ |
+ void recordUseCount(UseCounter::Feature feature) override { |
+ UseCounter::count(m_workerGlobalScope, feature); |
+ } |
+ |
+ DEFINE_INLINE_VIRTUAL_TRACE() { |
+ visitor->trace(m_fetchContext); |
+ visitor->trace(m_workerGlobalScope); |
+ ThreadableLoadingContext::trace(visitor); |
+ } |
+ |
+ private: |
+ Member<WorkerGlobalScope> m_workerGlobalScope; |
+ Member<WorkerFetchContext> m_fetchContext; |
+}; |
+ |
ThreadableLoadingContext* ThreadableLoadingContext::create(Document& document) { |
// For now this is the only default implementation. |
return new DocumentThreadableLoadingContext(document); |
} |
+ThreadableLoadingContext* ThreadableLoadingContext::create( |
+ WorkerGlobalScope& workerGlobalScope) { |
+ return new WorkerThreadableLoadingContext(workerGlobalScope); |
+} |
+ |
} // namespace blink |