| Index: third_party/WebKit/Source/core/loader/WorkerFetchContext.h
 | 
| diff --git a/third_party/WebKit/Source/core/loader/WorkerFetchContext.h b/third_party/WebKit/Source/core/loader/WorkerFetchContext.h
 | 
| new file mode 100644
 | 
| index 0000000000000000000000000000000000000000..e031227f63167e45ba989727278a9be94dec3e9d
 | 
| --- /dev/null
 | 
| +++ b/third_party/WebKit/Source/core/loader/WorkerFetchContext.h
 | 
| @@ -0,0 +1,152 @@
 | 
| +// Copyright 2017 The Chromium Authors. All rights reserved.
 | 
| +// Use of this source code is governed by a BSD-style license that can be
 | 
| +// found in the LICENSE file.
 | 
| +
 | 
| +#ifndef WorkerFetchContext_h
 | 
| +#define WorkerFetchContext_h
 | 
| +
 | 
| +#include <memory>
 | 
| +#include "core/CoreExport.h"
 | 
| +#include "core/dom/ExecutionContext.h"
 | 
| +#include "core/workers/WorkerClients.h"
 | 
| +#include "core/workers/WorkerGlobalScope.h"
 | 
| +#include "platform/Supplementable.h"
 | 
| +#include "platform/loader/fetch/FetchContext.h"
 | 
| +#include "wtf/Forward.h"
 | 
| +
 | 
| +namespace blink {
 | 
| +
 | 
| +class ExecutionContext;
 | 
| +class ResourceFetcher;
 | 
| +class WebTaskRunner;
 | 
| +class WebURLLoader;
 | 
| +class WebWorkerFetchContext;
 | 
| +class WebWorkerFetchContextInfo;
 | 
| +
 | 
| +class CORE_EXPORT WorkerFetchContextInfo final
 | 
| +    : public GarbageCollectedFinalized<WorkerFetchContextInfo>,
 | 
| +      public Supplement<WorkerClients> {
 | 
| +  USING_GARBAGE_COLLECTED_MIXIN(WorkerFetchContextInfo);
 | 
| +
 | 
| + public:
 | 
| +  static WorkerFetchContextInfo* create(
 | 
| +      std::unique_ptr<WebWorkerFetchContextInfo>);
 | 
| +  static WorkerFetchContextInfo* from(WorkerClients&);
 | 
| +  static const char* supplementName();
 | 
| +  virtual ~WorkerFetchContextInfo();
 | 
| +
 | 
| +  bool isDataSaverEnabled() const { return m_DataSaverEnabled; }
 | 
| +  void setDataSaverEnabled(bool enabled) { m_DataSaverEnabled = enabled; }
 | 
| +  bool isStrictMixedContentCheckingEnabled() const {
 | 
| +    return m_strictMixedContentCheckingEnabled;
 | 
| +  }
 | 
| +  void setStrictMixedContentCheckingEnabled(bool enabled) {
 | 
| +    m_strictMixedContentCheckingEnabled = enabled;
 | 
| +  }
 | 
| +
 | 
| +  std::unique_ptr<WebWorkerFetchContext> CreateContext();
 | 
| +
 | 
| +  DEFINE_INLINE_VIRTUAL_TRACE() { Supplement<WorkerClients>::trace(visitor); }
 | 
| +
 | 
| + private:
 | 
| +  explicit WorkerFetchContextInfo(std::unique_ptr<WebWorkerFetchContextInfo>);
 | 
| +
 | 
| +  std::unique_ptr<WebWorkerFetchContextInfo> m_info;
 | 
| +  bool m_DataSaverEnabled = false;
 | 
| +  bool m_strictMixedContentCheckingEnabled = false;
 | 
| +};
 | 
| +
 | 
| +CORE_EXPORT void provideWorkerFetchContextInfoToWorker(
 | 
| +    WorkerClients*,
 | 
| +    std::unique_ptr<WebWorkerFetchContextInfo>);
 | 
| +
 | 
| +class WorkerFetchContext final : public FetchContext {
 | 
| + public:
 | 
| +  static WorkerFetchContext* create(WorkerGlobalScope&,
 | 
| +                                    WorkerFetchContextInfo*);
 | 
| +  static WorkerFetchContext* from(ExecutionContext&);
 | 
| +
 | 
| +  virtual ~WorkerFetchContext();
 | 
| +
 | 
| +  DECLARE_TRACE();
 | 
| +  bool isControlledByServiceWorker() const override;
 | 
| +  int64_t serviceWorkerID() const override;
 | 
| +  ResourceRequestBlockedReason canRequest(
 | 
| +      Resource::Type,
 | 
| +      const ResourceRequest&,
 | 
| +      const KURL&,
 | 
| +      const ResourceLoaderOptions&,
 | 
| +      SecurityViolationReportingPolicy,
 | 
| +      FetchRequest::OriginRestriction) const override;
 | 
| +
 | 
| +  void addAdditionalRequestHeaders(ResourceRequest&,
 | 
| +                                   FetchResourceType) override;
 | 
| +
 | 
| +  void prepareRequest(ResourceRequest&, RedirectType) override;
 | 
| +  void dispatchWillSendRequest(unsigned long,
 | 
| +                               ResourceRequest&,
 | 
| +                               const ResourceResponse&,
 | 
| +                               const FetchInitiatorInfo&) override;
 | 
| +  void dispatchDidReceiveResponse(unsigned long identifier,
 | 
| +                                  const ResourceResponse&,
 | 
| +                                  WebURLRequest::FrameType,
 | 
| +                                  WebURLRequest::RequestContext,
 | 
| +                                  Resource*,
 | 
| +                                  ResourceResponseType) override;
 | 
| +  void dispatchDidReceiveData(unsigned long identifier,
 | 
| +                              const char* data,
 | 
| +                              int dataLength) override;
 | 
| +  void dispatchDidReceiveEncodedData(unsigned long identifier,
 | 
| +                                     int encodedDataLength) override;
 | 
| +  void dispatchDidFinishLoading(unsigned long identifier,
 | 
| +                                double finishTime,
 | 
| +                                int64_t encodedDataLength,
 | 
| +                                int64_t decodedBodyLength) override;
 | 
| +  void dispatchDidFail(unsigned long identifier,
 | 
| +                       const ResourceError&,
 | 
| +                       int64_t encodedDataLength,
 | 
| +                       bool isInternalRequest) override;
 | 
| +
 | 
| +  ResourceRequestBlockedReason allowResponse(
 | 
| +      Resource::Type,
 | 
| +      const ResourceRequest&,
 | 
| +      const KURL&,
 | 
| +      const ResourceLoaderOptions&) const override;
 | 
| +  void addResourceTiming(const ResourceTimingInfo&) override;
 | 
| +
 | 
| +  WebURLLoader* createURLLoader() override;
 | 
| +  RefPtr<WebTaskRunner> loadingTaskRunner() const override;
 | 
| +  RefPtr<WebTaskRunner> timerTaskRunner() const override;
 | 
| +  Resource::ResourceCallback* resourceCallback() override;
 | 
| +  ResourceFetcher* getResourceFetcher();
 | 
| +
 | 
| + private:
 | 
| +  class WorkerResourceCallback;
 | 
| +  explicit WorkerFetchContext(WorkerGlobalScope&,
 | 
| +                              std::unique_ptr<WebWorkerFetchContext>,
 | 
| +                              bool dataSaverEnabled,
 | 
| +                              bool strictMixedContentCheckingEnabled);
 | 
| +  void initializeOnWorkerThread();
 | 
| +
 | 
| +  ResourceRequestBlockedReason canRequestInternal(
 | 
| +      Resource::Type,
 | 
| +      const ResourceRequest&,
 | 
| +      const KURL&,
 | 
| +      const ResourceLoaderOptions&,
 | 
| +      SecurityViolationReportingPolicy,
 | 
| +      FetchRequest::OriginRestriction,
 | 
| +      ResourceRequest::RedirectStatus) const;
 | 
| +
 | 
| +  Member<WorkerGlobalScope> m_workerGlobalScope;
 | 
| +  Member<ResourceFetcher> m_resourceFetcher;
 | 
| +  std::unique_ptr<WebWorkerFetchContext> m_context;
 | 
| +  RefPtr<WebTaskRunner> m_loadingTaskRunner;
 | 
| +  RefPtr<WebTaskRunner> m_timerTaskRunner;
 | 
| +  const bool m_dataSaverEnabled;
 | 
| +  const bool m_strictMixedContentCheckingEnabled;
 | 
| +  Member<WorkerResourceCallback> m_resourceCallback;
 | 
| +};
 | 
| +
 | 
| +}  // namespace blink
 | 
| +
 | 
| +#endif  // WorkerFetchContext_h
 | 
| 
 |