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

Side by Side Diff: content/common/service_worker/service_worker_fetch_request_struct_traits.cc

Issue 2762303002: Enable transmitting Fetch Requests over Mojo (Closed)
Patch Set: Enable transmitting Fetch Requests over Mojo Created 3 years, 8 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 #include "content/common/service_worker/service_worker_fetch_request_struct_trai ts.h"
6
7 #include "base/logging.h"
8 #include "content/public/common/referrer_struct_traits.h"
9 #include "url/mojo/url_gurl_struct_traits.h"
10
11 namespace mojo {
12
13 namespace {
14
15 // Struct traits context for the FetchAPIRequest type. Since getters are invoked
16 // twice when serializing the type, this reduces the load for heavy members.
17 struct ServiceWorkerFetchRequestStructTraitsContext {
18 ServiceWorkerFetchRequestStructTraitsContext() = default;
19 ~ServiceWorkerFetchRequestStructTraitsContext() = default;
20
21 std::map<std::string, std::string> headers;
22 };
23
24 } // namespace
25
26 using blink::mojom::FetchCredentialsMode;
27 using blink::mojom::FetchRedirectMode;
28 using blink::mojom::FetchRequestMode;
29 using blink::mojom::RequestContextFrameType;
30 using blink::mojom::RequestContextType;
31 using blink::mojom::ServiceWorkerFetchType;
32
33 FetchCredentialsMode
34 EnumTraits<FetchCredentialsMode, content::FetchCredentialsMode>::ToMojom(
35 content::FetchCredentialsMode input) {
36 switch (input) {
37 case content::FETCH_CREDENTIALS_MODE_OMIT:
38 return FetchCredentialsMode::OMIT;
39 case content::FETCH_CREDENTIALS_MODE_SAME_ORIGIN:
40 return FetchCredentialsMode::SAME_ORIGIN;
41 case content::FETCH_CREDENTIALS_MODE_INCLUDE:
42 return FetchCredentialsMode::INCLUDE;
43 case content::FETCH_CREDENTIALS_MODE_PASSWORD:
44 return FetchCredentialsMode::PASSWORD;
45 }
46
47 NOTREACHED();
48 return FetchCredentialsMode::OMIT;
49 }
50
51 bool EnumTraits<FetchCredentialsMode, content::FetchCredentialsMode>::FromMojom(
52 FetchCredentialsMode input,
53 content::FetchCredentialsMode* out) {
54 switch (input) {
55 case FetchCredentialsMode::OMIT:
56 *out = content::FETCH_CREDENTIALS_MODE_OMIT;
57 return true;
58 case FetchCredentialsMode::SAME_ORIGIN:
59 *out = content::FETCH_CREDENTIALS_MODE_SAME_ORIGIN;
60 return true;
61 case FetchCredentialsMode::INCLUDE:
62 *out = content::FETCH_CREDENTIALS_MODE_INCLUDE;
63 return true;
64 case FetchCredentialsMode::PASSWORD:
65 *out = content::FETCH_CREDENTIALS_MODE_PASSWORD;
66 return true;
67 }
68
69 return false;
70 }
71
72 FetchRedirectMode
73 EnumTraits<FetchRedirectMode, content::FetchRedirectMode>::ToMojom(
74 content::FetchRedirectMode input) {
75 switch (input) {
76 case content::FetchRedirectMode::FOLLOW_MODE:
77 return FetchRedirectMode::FOLLOW;
78 case content::FetchRedirectMode::ERROR_MODE:
79 return FetchRedirectMode::ERROR_MODE;
80 case content::FetchRedirectMode::MANUAL_MODE:
81 return FetchRedirectMode::MANUAL;
82 }
83
84 NOTREACHED();
85 return FetchRedirectMode::ERROR_MODE;
86 }
87
88 bool EnumTraits<FetchRedirectMode, content::FetchRedirectMode>::FromMojom(
89 FetchRedirectMode input,
90 content::FetchRedirectMode* out) {
91 switch (input) {
92 case FetchRedirectMode::FOLLOW:
93 *out = content::FetchRedirectMode::FOLLOW_MODE;
94 return true;
95 case FetchRedirectMode::ERROR_MODE:
96 *out = content::FetchRedirectMode::ERROR_MODE;
97 return true;
98 case FetchRedirectMode::MANUAL:
99 *out = content::FetchRedirectMode::MANUAL_MODE;
100 return true;
101 }
102
103 return false;
104 }
105
106 FetchRequestMode
107 EnumTraits<FetchRequestMode, content::FetchRequestMode>::ToMojom(
108 content::FetchRequestMode input) {
109 switch (input) {
110 case content::FETCH_REQUEST_MODE_SAME_ORIGIN:
111 return FetchRequestMode::SAME_ORIGIN;
112 case content::FETCH_REQUEST_MODE_NO_CORS:
113 return FetchRequestMode::NO_CORS;
114 case content::FETCH_REQUEST_MODE_CORS:
115 return FetchRequestMode::CORS;
116 case content::FETCH_REQUEST_MODE_CORS_WITH_FORCED_PREFLIGHT:
117 return FetchRequestMode::CORS_WITH_FORCED_PREFLIGHT;
118 case content::FETCH_REQUEST_MODE_NAVIGATE:
119 return FetchRequestMode::NAVIGATE;
120 }
121
122 NOTREACHED();
123 return FetchRequestMode::NO_CORS;
124 }
125
126 bool EnumTraits<FetchRequestMode, content::FetchRequestMode>::FromMojom(
127 FetchRequestMode input,
128 content::FetchRequestMode* out) {
129 switch (input) {
130 case FetchRequestMode::SAME_ORIGIN:
131 *out = content::FETCH_REQUEST_MODE_SAME_ORIGIN;
132 return true;
133 case FetchRequestMode::NO_CORS:
134 *out = content::FETCH_REQUEST_MODE_NO_CORS;
135 return true;
136 case FetchRequestMode::CORS:
137 *out = content::FETCH_REQUEST_MODE_CORS;
138 return true;
139 case FetchRequestMode::CORS_WITH_FORCED_PREFLIGHT:
140 *out = content::FETCH_REQUEST_MODE_CORS_WITH_FORCED_PREFLIGHT;
141 return true;
142 case FetchRequestMode::NAVIGATE:
143 *out = content::FETCH_REQUEST_MODE_NAVIGATE;
144 return true;
145 }
146
147 return false;
148 }
149
150 RequestContextFrameType
151 EnumTraits<RequestContextFrameType, content::RequestContextFrameType>::ToMojom(
152 content::RequestContextFrameType input) {
153 switch (input) {
154 case content::REQUEST_CONTEXT_FRAME_TYPE_AUXILIARY:
155 return RequestContextFrameType::AUXILIARY;
156 case content::REQUEST_CONTEXT_FRAME_TYPE_NESTED:
157 return RequestContextFrameType::NESTED;
158 case content::REQUEST_CONTEXT_FRAME_TYPE_NONE:
159 return RequestContextFrameType::NONE;
160 case content::REQUEST_CONTEXT_FRAME_TYPE_TOP_LEVEL:
161 return RequestContextFrameType::TOP_LEVEL;
162 }
163
164 NOTREACHED();
165 return RequestContextFrameType::NONE;
166 }
167
168 bool EnumTraits<RequestContextFrameType, content::RequestContextFrameType>::
169 FromMojom(RequestContextFrameType input,
170 content::RequestContextFrameType* out) {
171 switch (input) {
172 case RequestContextFrameType::AUXILIARY:
173 *out = content::REQUEST_CONTEXT_FRAME_TYPE_AUXILIARY;
174 return true;
175 case RequestContextFrameType::NESTED:
176 *out = content::REQUEST_CONTEXT_FRAME_TYPE_NESTED;
177 return true;
178 case RequestContextFrameType::NONE:
179 *out = content::REQUEST_CONTEXT_FRAME_TYPE_NONE;
180 return true;
181 case RequestContextFrameType::TOP_LEVEL:
182 *out = content::REQUEST_CONTEXT_FRAME_TYPE_TOP_LEVEL;
183 return true;
184 }
185
186 return false;
187 }
188
189 RequestContextType
190 EnumTraits<RequestContextType, content::RequestContextType>::ToMojom(
191 content::RequestContextType input) {
192 switch (input) {
193 case content::REQUEST_CONTEXT_TYPE_UNSPECIFIED:
194 return RequestContextType::UNSPECIFIED;
195 case content::REQUEST_CONTEXT_TYPE_AUDIO:
196 return RequestContextType::AUDIO;
197 case content::REQUEST_CONTEXT_TYPE_BEACON:
198 return RequestContextType::BEACON;
199 case content::REQUEST_CONTEXT_TYPE_CSP_REPORT:
200 return RequestContextType::CSP_REPORT;
201 case content::REQUEST_CONTEXT_TYPE_DOWNLOAD:
202 return RequestContextType::DOWNLOAD;
203 case content::REQUEST_CONTEXT_TYPE_EMBED:
204 return RequestContextType::EMBED;
205 case content::REQUEST_CONTEXT_TYPE_EVENT_SOURCE:
206 return RequestContextType::EVENT_SOURCE;
207 case content::REQUEST_CONTEXT_TYPE_FAVICON:
208 return RequestContextType::FAVICON;
209 case content::REQUEST_CONTEXT_TYPE_FETCH:
210 return RequestContextType::FETCH;
211 case content::REQUEST_CONTEXT_TYPE_FONT:
212 return RequestContextType::FONT;
213 case content::REQUEST_CONTEXT_TYPE_FORM:
214 return RequestContextType::FORM;
215 case content::REQUEST_CONTEXT_TYPE_FRAME:
216 return RequestContextType::FRAME;
217 case content::REQUEST_CONTEXT_TYPE_HYPERLINK:
218 return RequestContextType::HYPERLINK;
219 case content::REQUEST_CONTEXT_TYPE_IFRAME:
220 return RequestContextType::IFRAME;
221 case content::REQUEST_CONTEXT_TYPE_IMAGE:
222 return RequestContextType::IMAGE;
223 case content::REQUEST_CONTEXT_TYPE_IMAGE_SET:
224 return RequestContextType::IMAGE_SET;
225 case content::REQUEST_CONTEXT_TYPE_IMPORT:
226 return RequestContextType::IMPORT;
227 case content::REQUEST_CONTEXT_TYPE_INTERNAL:
228 return RequestContextType::INTERNAL;
229 case content::REQUEST_CONTEXT_TYPE_LOCATION:
230 return RequestContextType::LOCATION;
231 case content::REQUEST_CONTEXT_TYPE_MANIFEST:
232 return RequestContextType::MANIFEST;
233 case content::REQUEST_CONTEXT_TYPE_OBJECT:
234 return RequestContextType::OBJECT;
235 case content::REQUEST_CONTEXT_TYPE_PING:
236 return RequestContextType::PING;
237 case content::REQUEST_CONTEXT_TYPE_PLUGIN:
238 return RequestContextType::PLUGIN;
239 case content::REQUEST_CONTEXT_TYPE_PREFETCH:
240 return RequestContextType::PREFETCH;
241 case content::REQUEST_CONTEXT_TYPE_SCRIPT:
242 return RequestContextType::SCRIPT;
243 case content::REQUEST_CONTEXT_TYPE_SERVICE_WORKER:
244 return RequestContextType::SERVICE_WORKER;
245 case content::REQUEST_CONTEXT_TYPE_SHARED_WORKER:
246 return RequestContextType::SHARED_WORKER;
247 case content::REQUEST_CONTEXT_TYPE_SUBRESOURCE:
248 return RequestContextType::SUBRESOURCE;
249 case content::REQUEST_CONTEXT_TYPE_STYLE:
250 return RequestContextType::STYLE;
251 case content::REQUEST_CONTEXT_TYPE_TRACK:
252 return RequestContextType::TRACK;
253 case content::REQUEST_CONTEXT_TYPE_VIDEO:
254 return RequestContextType::VIDEO;
255 case content::REQUEST_CONTEXT_TYPE_WORKER:
256 return RequestContextType::WORKER;
257 case content::REQUEST_CONTEXT_TYPE_XML_HTTP_REQUEST:
258 return RequestContextType::XML_HTTP_REQUEST;
259 case content::REQUEST_CONTEXT_TYPE_XSLT:
260 return RequestContextType::XSLT;
261 }
262
263 NOTREACHED();
264 return RequestContextType::UNSPECIFIED;
265 }
266
267 bool EnumTraits<RequestContextType, content::RequestContextType>::FromMojom(
268 RequestContextType input,
269 content::RequestContextType* out) {
270 switch (input) {
271 case RequestContextType::UNSPECIFIED:
272 *out = content::REQUEST_CONTEXT_TYPE_UNSPECIFIED;
273 return true;
274 case RequestContextType::AUDIO:
275 *out = content::REQUEST_CONTEXT_TYPE_AUDIO;
276 return true;
277 case RequestContextType::BEACON:
278 *out = content::REQUEST_CONTEXT_TYPE_BEACON;
279 return true;
280 case RequestContextType::CSP_REPORT:
281 *out = content::REQUEST_CONTEXT_TYPE_CSP_REPORT;
282 return true;
283 case RequestContextType::DOWNLOAD:
284 *out = content::REQUEST_CONTEXT_TYPE_DOWNLOAD;
285 return true;
286 case RequestContextType::EMBED:
287 *out = content::REQUEST_CONTEXT_TYPE_EMBED;
288 return true;
289 case RequestContextType::EVENT_SOURCE:
290 *out = content::REQUEST_CONTEXT_TYPE_EVENT_SOURCE;
291 return true;
292 case RequestContextType::FAVICON:
293 *out = content::REQUEST_CONTEXT_TYPE_FAVICON;
294 return true;
295 case RequestContextType::FETCH:
296 *out = content::REQUEST_CONTEXT_TYPE_FETCH;
297 return true;
298 case RequestContextType::FONT:
299 *out = content::REQUEST_CONTEXT_TYPE_FONT;
300 return true;
301 case RequestContextType::FORM:
302 *out = content::REQUEST_CONTEXT_TYPE_FORM;
303 return true;
304 case RequestContextType::FRAME:
305 *out = content::REQUEST_CONTEXT_TYPE_FRAME;
306 return true;
307 case RequestContextType::HYPERLINK:
308 *out = content::REQUEST_CONTEXT_TYPE_HYPERLINK;
309 return true;
310 case RequestContextType::IFRAME:
311 *out = content::REQUEST_CONTEXT_TYPE_IFRAME;
312 return true;
313 case RequestContextType::IMAGE:
314 *out = content::REQUEST_CONTEXT_TYPE_IMAGE;
315 return true;
316 case RequestContextType::IMAGE_SET:
317 *out = content::REQUEST_CONTEXT_TYPE_IMAGE_SET;
318 return true;
319 case RequestContextType::IMPORT:
320 *out = content::REQUEST_CONTEXT_TYPE_IMPORT;
321 return true;
322 case RequestContextType::INTERNAL:
323 *out = content::REQUEST_CONTEXT_TYPE_INTERNAL;
324 return true;
325 case RequestContextType::LOCATION:
326 *out = content::REQUEST_CONTEXT_TYPE_LOCATION;
327 return true;
328 case RequestContextType::MANIFEST:
329 *out = content::REQUEST_CONTEXT_TYPE_MANIFEST;
330 return true;
331 case RequestContextType::OBJECT:
332 *out = content::REQUEST_CONTEXT_TYPE_OBJECT;
333 return true;
334 case RequestContextType::PING:
335 *out = content::REQUEST_CONTEXT_TYPE_PING;
336 return true;
337 case RequestContextType::PLUGIN:
338 *out = content::REQUEST_CONTEXT_TYPE_PLUGIN;
339 return true;
340 case RequestContextType::PREFETCH:
341 *out = content::REQUEST_CONTEXT_TYPE_PREFETCH;
342 return true;
343 case RequestContextType::SCRIPT:
344 *out = content::REQUEST_CONTEXT_TYPE_SCRIPT;
345 return true;
346 case RequestContextType::SERVICE_WORKER:
347 *out = content::REQUEST_CONTEXT_TYPE_SERVICE_WORKER;
348 return true;
349 case RequestContextType::SHARED_WORKER:
350 *out = content::REQUEST_CONTEXT_TYPE_SHARED_WORKER;
351 return true;
352 case RequestContextType::SUBRESOURCE:
353 *out = content::REQUEST_CONTEXT_TYPE_SUBRESOURCE;
354 return true;
355 case RequestContextType::STYLE:
356 *out = content::REQUEST_CONTEXT_TYPE_STYLE;
357 return true;
358 case RequestContextType::TRACK:
359 *out = content::REQUEST_CONTEXT_TYPE_TRACK;
360 return true;
361 case RequestContextType::VIDEO:
362 *out = content::REQUEST_CONTEXT_TYPE_VIDEO;
363 return true;
364 case RequestContextType::WORKER:
365 *out = content::REQUEST_CONTEXT_TYPE_WORKER;
366 return true;
367 case RequestContextType::XML_HTTP_REQUEST:
368 *out = content::REQUEST_CONTEXT_TYPE_XML_HTTP_REQUEST;
369 return true;
370 case RequestContextType::XSLT:
371 *out = content::REQUEST_CONTEXT_TYPE_XSLT;
372 return true;
373 }
374
375 return false;
376 }
377
378 ServiceWorkerFetchType
379 EnumTraits<ServiceWorkerFetchType, content::ServiceWorkerFetchType>::ToMojom(
380 content::ServiceWorkerFetchType input) {
381 switch (input) {
382 case content::ServiceWorkerFetchType::FETCH:
383 return ServiceWorkerFetchType::FETCH;
384 case content::ServiceWorkerFetchType::FOREIGN_FETCH:
385 return ServiceWorkerFetchType::FOREIGN_FETCH;
386 }
387
388 NOTREACHED();
389 return ServiceWorkerFetchType::FETCH;
390 }
391
392 bool EnumTraits<ServiceWorkerFetchType, content::ServiceWorkerFetchType>::
393 FromMojom(ServiceWorkerFetchType input,
394 content::ServiceWorkerFetchType* out) {
395 switch (input) {
396 case ServiceWorkerFetchType::FETCH:
397 *out = content::ServiceWorkerFetchType::FETCH;
398 return true;
399 case ServiceWorkerFetchType::FOREIGN_FETCH:
400 *out = content::ServiceWorkerFetchType::FOREIGN_FETCH;
401 return true;
402 }
403
404 return false;
405 }
406
407 void* StructTraits<blink::mojom::FetchAPIRequestDataView,
408 content::ServiceWorkerFetchRequest>::
409 SetUpContext(const content::ServiceWorkerFetchRequest& request) {
410 ServiceWorkerFetchRequestStructTraitsContext* context =
411 new ServiceWorkerFetchRequestStructTraitsContext();
412 context->headers.insert(request.headers.begin(), request.headers.end());
413
414 return context;
415 }
416
417 void StructTraits<blink::mojom::FetchAPIRequestDataView,
418 content::ServiceWorkerFetchRequest>::
419 TearDownContext(const content::ServiceWorkerFetchRequest& request,
420 void* context) {
421 delete static_cast<ServiceWorkerFetchRequestStructTraitsContext*>(context);
422 }
423
424 const std::map<std::string, std::string>&
425 StructTraits<blink::mojom::FetchAPIRequestDataView,
426 content::ServiceWorkerFetchRequest>::
427 headers(const content::ServiceWorkerFetchRequest& request, void* context) {
428 return static_cast<ServiceWorkerFetchRequestStructTraitsContext*>(context)
429 ->headers;
430 }
431
432 bool StructTraits<blink::mojom::FetchAPIRequestDataView,
433 content::ServiceWorkerFetchRequest>::
434 Read(blink::mojom::FetchAPIRequestDataView data,
435 content::ServiceWorkerFetchRequest* out) {
436 std::unordered_map<std::string, std::string> headers;
437 base::Optional<std::string> blob_uuid;
438 if (!data.ReadMode(&out->mode) ||
439 !data.ReadRequestContextType(&out->request_context_type) ||
440 !data.ReadFrameType(&out->frame_type) || !data.ReadUrl(&out->url) ||
441 !data.ReadMethod(&out->method) || !data.ReadHeaders(&headers) ||
442 !data.ReadBlobUuid(&blob_uuid) || !data.ReadReferrer(&out->referrer) ||
443 !data.ReadCredentialsMode(&out->credentials_mode) ||
444 !data.ReadRedirectMode(&out->redirect_mode) ||
445 !data.ReadClientId(&out->client_id) ||
446 !data.ReadFetchType(&out->fetch_type)) {
447 return false;
448 }
449
450 out->is_main_resource_load = data.is_main_resource_load();
451 out->headers.insert(headers.begin(), headers.end());
452 if (blob_uuid) {
453 out->blob_uuid = blob_uuid.value();
454 out->blob_size = data.blob_size();
455 }
456 out->is_reload = data.is_reload();
457 return true;
458 }
459
460 } // namespace mojo
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698