| 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
 | 
| 
 |