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 #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" | |
dcheng
2017/03/28 06:52:24
Out of curiosity, why are these includes needed?
Peter Beverloo
2017/03/28 14:07:53
We're calling ReadReferrer() on the DataView on li
| |
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; | |
80 case content::FetchRedirectMode::MANUAL_MODE: | |
81 return FetchRedirectMode::MANUAL; | |
82 } | |
83 | |
84 NOTREACHED(); | |
85 return FetchRedirectMode::ERROR; | |
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: | |
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) | |
dcheng
2017/03/28 06:52:24
I'm OK with this to unblock things. Would you mind
Peter Beverloo
2017/03/28 14:07:53
There's some more interesting differences in these
| |
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 | |
OLD | NEW |