Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(701)

Side by Side Diff: content/browser/service_worker/service_worker_controllee_url_loader_factory.h

Issue 2843043002: network service: Create URLLoader for service worker navigation case
Patch Set: . Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(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_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698