OLD | NEW |
(Empty) | |
| 1 // Copyright 2017 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. |
| 4 |
| 5 #ifndef CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_CONTROLLEE_URL_LOADER_FACT
ORY_H_ |
| 6 #define CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_CONTROLLEE_URL_LOADER_FACT
ORY_H_ |
| 7 |
| 8 #include "content/browser/service_worker/service_worker_fetch_dispatcher.h" |
| 9 #include "content/browser/service_worker/service_worker_version.h" |
| 10 #include "content/common/service_worker/service_worker_types.h" |
| 11 #include "content/common/url_loader_factory.mojom.h" |
| 12 #include "storage/browser/blob/blob_reader.h" |
| 13 |
| 14 namespace content { |
| 15 |
| 16 class ServiceWorkerControlleeURLLoaderFactory : public mojom::URLLoaderFactory { |
| 17 public: |
| 18 class CONTENT_EXPORT Delegate { |
| 19 public: |
| 20 virtual ~Delegate() {} |
| 21 |
| 22 virtual ServiceWorkerVersion* GetServiceWorkerVersion( |
| 23 ServiceWorkerMetrics::URLRequestJobResult* result) = 0; |
| 24 }; |
| 25 |
| 26 ServiceWorkerControlleeURLLoaderFactory( |
| 27 std::unique_ptr<ServiceWorkerRequestHandler> handler, |
| 28 const std::string& client_id, |
| 29 base::WeakPtr<storage::BlobStorageContext> blob_storage_context, |
| 30 const ResourceContext* resource_context, |
| 31 FetchRequestMode request_mode, |
| 32 FetchCredentialsMode credentials_mode, |
| 33 FetchRedirectMode redirect_mode, |
| 34 ResourceType resource_type, |
| 35 RequestContextType request_context_type, |
| 36 RequestContextFrameType frame_type, |
| 37 scoped_refptr<ResourceRequestBodyImpl> body, |
| 38 ServiceWorkerFetchType fetch_type, |
| 39 const base::Optional<base::TimeDelta>& timeout, |
| 40 Delegate* delegate, |
| 41 NetworkFallbackCallback network_fallback_callback) |
| 42 : handler_(std::move(handler)), |
| 43 response_type_(ResponseType::kNotDetermined), |
| 44 client_id_(client_id), |
| 45 blob_storage_context_(blob_storage_context), |
| 46 resource_context_(resource_context), |
| 47 request_mode_(request_mode), |
| 48 credentials_mode_(credentials_mode), |
| 49 redirect_mode_(redirect_mode), |
| 50 resource_type_(resource_type), |
| 51 request_context_type_(request_context_type), |
| 52 frame_type_(frame_type), |
| 53 body_(body), |
| 54 fetch_type_(fetch_type), |
| 55 timeout_(timeout), |
| 56 delegate_(delegate), |
| 57 network_fallback_callback_(network_fallback_callback), |
| 58 weak_factory_(this) {} |
| 59 ~ServiceWorkerControlleeURLLoaderFactory() override; |
| 60 |
| 61 void CreateLoaderAndStart(mojom::URLLoaderAssociatedRequest request, |
| 62 int32_t routing_id, |
| 63 int32_t request_id, |
| 64 uint32_t options, |
| 65 const ResourceRequest& url_request, |
| 66 mojom::URLLoaderClientPtr client) override; |
| 67 void SyncLoad(int32_t routing_id, |
| 68 int32_t request_id, |
| 69 const ResourceRequest& request, |
| 70 SyncLoadCallback callback) override; |
| 71 |
| 72 void FallbackToNetwork(); |
| 73 bool ShouldFallbackToNetwork(); |
| 74 ui::PageTransition GetPageTransition(); |
| 75 size_t GetURLChainSize(); |
| 76 void ForwardToServiceWorker(); |
| 77 void FallbackToNetworkOrRenderer(); |
| 78 void FailToNetworkOrRenderer(); |
| 79 void FailDueToLostController(); |
| 80 bool WasCanceled() const; |
| 81 |
| 82 private: |
| 83 std::unique_ptr<ServiceWorkerFetchRequest> CreateFetchRequest(); |
| 84 void StartRequest(); |
| 85 |
| 86 // For kForwardToServiceWorker case. |
| 87 void DidPrepareFetchEvent(scoped_refptr<ServiceWorkerVersion> version); |
| 88 void DidDispatchFetchEvent( |
| 89 ServiceWorkerStatusCode status, |
| 90 ServiceWorkerFetchEventResult fetch_result, |
| 91 const ServiceWorkerResponse& response, |
| 92 blink::mojom::ServiceWorkerStreamHandlePtr body_as_stream, |
| 93 const scoped_refptr<ServiceWorkerVersion>& version); |
| 94 void AfterRead(scoped_refptr<net::IOBuffer> buffer, int bytes); |
| 95 |
| 96 enum class ResponseType { |
| 97 kNotDetermined, |
| 98 kFailDueToLostController, |
| 99 kFallbackToNetwork, |
| 100 kFallbackToRenderer, // Use this when falling back with CORS check |
| 101 kForwardToServiceWorker, |
| 102 }; |
| 103 ResponseType response_type_; |
| 104 |
| 105 mojom::URLLoaderAssociatedRequest request_; |
| 106 ResourceRequest url_request_; |
| 107 mojom::URLLoaderClientPtr client_; |
| 108 |
| 109 std::unique_ptr<ServiceWorkerRequestHandler> handler_; |
| 110 std::unique_ptr<ServiceWorkerFetchDispatcher> fetch_dispatcher_; |
| 111 std::string client_id_; |
| 112 base::WeakPtr<storage::BlobStorageContext> blob_storage_context_; |
| 113 const ResourceContext* resource_context_; |
| 114 FetchRequestMode request_mode_; |
| 115 FetchCredentialsMode credentials_mode_; |
| 116 FetchRedirectMode redirect_mode_; |
| 117 const ResourceType resource_type_; |
| 118 RequestContextType request_context_type_; |
| 119 RequestContextFrameType frame_type_; |
| 120 scoped_refptr<ResourceRequestBodyImpl> body_; |
| 121 ServiceWorkerFetchType fetch_type_; |
| 122 base::Optional<base::TimeDelta> timeout_; |
| 123 Delegate* delegate_; |
| 124 std::unique_ptr<storage::BlobReader> blob_reader_; |
| 125 mojo::DataPipe data_pipe_; |
| 126 NetworkFallbackCallback network_fallback_callback_; |
| 127 |
| 128 base::WeakPtrFactory<ServiceWorkerControlleeURLLoaderFactory> weak_factory_; |
| 129 }; |
| 130 |
| 131 } // namespace content |
| 132 |
| 133 #endif // CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_CONTROLLEE_URL_LOADER_F
ACTORY_H_ |
OLD | NEW |