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 "platform/mojo/FetchAPIRequestStructTraits.h" | |
6 | |
7 #include "mojo/public/cpp/bindings/map_traits_wtf_hash_map.h" | |
8 #include "mojo/public/cpp/bindings/string_traits_wtf.h" | |
9 #include "platform/blob/BlobData.h" | |
10 #include "platform/mojo/KURLStructTraits.h" | |
11 #include "platform/mojo/ReferrerStructTraits.h" | |
12 #include "platform/weborigin/Referrer.h" | |
13 #include "public/platform/WebReferrerPolicy.h" | |
14 | |
15 namespace mojo { | |
16 | |
17 using blink::mojom::FetchCredentialsMode; | |
18 using blink::mojom::FetchRedirectMode; | |
19 using blink::mojom::FetchRequestMode; | |
20 using blink::mojom::RequestContextFrameType; | |
21 using blink::mojom::RequestContextType; | |
22 | |
23 FetchCredentialsMode | |
24 EnumTraits<FetchCredentialsMode, blink::WebURLRequest::FetchCredentialsMode>:: | |
25 ToMojom(blink::WebURLRequest::FetchCredentialsMode input) { | |
26 switch (input) { | |
27 case blink::WebURLRequest::FetchCredentialsModeOmit: | |
28 return FetchCredentialsMode::OMIT; | |
29 case blink::WebURLRequest::FetchCredentialsModeSameOrigin: | |
30 return FetchCredentialsMode::SAME_ORIGIN; | |
31 case blink::WebURLRequest::FetchCredentialsModeInclude: | |
32 return FetchCredentialsMode::INCLUDE; | |
33 case blink::WebURLRequest::FetchCredentialsModePassword: | |
34 return FetchCredentialsMode::PASSWORD; | |
35 } | |
36 | |
37 NOTREACHED(); | |
38 return FetchCredentialsMode::OMIT; | |
39 } | |
40 | |
41 bool EnumTraits<FetchCredentialsMode, | |
42 blink::WebURLRequest::FetchCredentialsMode>:: | |
43 FromMojom(FetchCredentialsMode input, | |
44 blink::WebURLRequest::FetchCredentialsMode* out) { | |
45 switch (input) { | |
46 case FetchCredentialsMode::OMIT: | |
47 *out = blink::WebURLRequest::FetchCredentialsModeOmit; | |
48 return true; | |
49 case FetchCredentialsMode::SAME_ORIGIN: | |
50 *out = blink::WebURLRequest::FetchCredentialsModeSameOrigin; | |
51 return true; | |
52 case FetchCredentialsMode::INCLUDE: | |
53 *out = blink::WebURLRequest::FetchCredentialsModeInclude; | |
54 return true; | |
55 case FetchCredentialsMode::PASSWORD: | |
56 *out = blink::WebURLRequest::FetchCredentialsModePassword; | |
57 return true; | |
58 } | |
59 | |
60 return false; | |
61 } | |
62 | |
63 FetchRedirectMode | |
64 EnumTraits<FetchRedirectMode, blink::WebURLRequest::FetchRedirectMode>::ToMojom( | |
65 blink::WebURLRequest::FetchRedirectMode input) { | |
66 switch (input) { | |
67 case blink::WebURLRequest::FetchRedirectModeFollow: | |
68 return FetchRedirectMode::FOLLOW; | |
69 case blink::WebURLRequest::FetchRedirectModeError: | |
70 return FetchRedirectMode::ERROR; | |
71 case blink::WebURLRequest::FetchRedirectModeManual: | |
72 return FetchRedirectMode::MANUAL; | |
73 } | |
74 | |
75 NOTREACHED(); | |
76 return FetchRedirectMode::ERROR; | |
77 } | |
78 | |
79 bool EnumTraits<FetchRedirectMode, blink::WebURLRequest::FetchRedirectMode>:: | |
80 FromMojom(FetchRedirectMode input, | |
81 blink::WebURLRequest::FetchRedirectMode* out) { | |
82 switch (input) { | |
83 case FetchRedirectMode::FOLLOW: | |
84 *out = blink::WebURLRequest::FetchRedirectModeFollow; | |
85 return true; | |
86 case FetchRedirectMode::ERROR: | |
87 *out = blink::WebURLRequest::FetchRedirectModeError; | |
88 return true; | |
89 case FetchRedirectMode::MANUAL: | |
90 *out = blink::WebURLRequest::FetchRedirectModeManual; | |
91 return true; | |
92 } | |
93 | |
94 return false; | |
95 } | |
96 | |
97 FetchRequestMode | |
98 EnumTraits<FetchRequestMode, blink::WebURLRequest::FetchRequestMode>::ToMojom( | |
99 blink::WebURLRequest::FetchRequestMode input) { | |
100 switch (input) { | |
101 case blink::WebURLRequest::FetchRequestModeSameOrigin: | |
102 return FetchRequestMode::SAME_ORIGIN; | |
103 case blink::WebURLRequest::FetchRequestModeNoCORS: | |
104 return FetchRequestMode::NO_CORS; | |
105 case blink::WebURLRequest::FetchRequestModeCORS: | |
106 return FetchRequestMode::CORS; | |
107 case blink::WebURLRequest::FetchRequestModeCORSWithForcedPreflight: | |
108 return FetchRequestMode::CORS_WITH_FORCED_PREFLIGHT; | |
109 case blink::WebURLRequest::FetchRequestModeNavigate: | |
110 return FetchRequestMode::NAVIGATE; | |
111 } | |
112 | |
113 NOTREACHED(); | |
114 return FetchRequestMode::NO_CORS; | |
115 } | |
116 | |
117 bool EnumTraits<FetchRequestMode, blink::WebURLRequest::FetchRequestMode>:: | |
118 FromMojom(FetchRequestMode input, | |
119 blink::WebURLRequest::FetchRequestMode* out) { | |
120 switch (input) { | |
121 case FetchRequestMode::SAME_ORIGIN: | |
122 *out = blink::WebURLRequest::FetchRequestModeSameOrigin; | |
123 return true; | |
124 case FetchRequestMode::NO_CORS: | |
125 *out = blink::WebURLRequest::FetchRequestModeNoCORS; | |
126 return true; | |
127 case FetchRequestMode::CORS: | |
128 *out = blink::WebURLRequest::FetchRequestModeCORS; | |
129 return true; | |
130 case FetchRequestMode::CORS_WITH_FORCED_PREFLIGHT: | |
131 *out = blink::WebURLRequest::FetchRequestModeCORSWithForcedPreflight; | |
132 return true; | |
133 case FetchRequestMode::NAVIGATE: | |
134 *out = blink::WebURLRequest::FetchRequestModeNavigate; | |
135 return true; | |
136 } | |
137 | |
138 return false; | |
139 } | |
140 | |
141 RequestContextFrameType | |
142 EnumTraits<RequestContextFrameType, blink::WebURLRequest::FrameType>::ToMojom( | |
143 blink::WebURLRequest::FrameType input) { | |
144 switch (input) { | |
145 case blink::WebURLRequest::FrameTypeAuxiliary: | |
146 return RequestContextFrameType::AUXILIARY; | |
147 case blink::WebURLRequest::FrameTypeNested: | |
148 return RequestContextFrameType::NESTED; | |
149 case blink::WebURLRequest::FrameTypeNone: | |
150 return RequestContextFrameType::NONE; | |
151 case blink::WebURLRequest::FrameTypeTopLevel: | |
152 return RequestContextFrameType::TOP_LEVEL; | |
153 } | |
154 | |
155 NOTREACHED(); | |
156 return RequestContextFrameType::NONE; | |
157 } | |
158 | |
159 bool EnumTraits<RequestContextFrameType, blink::WebURLRequest::FrameType>:: | |
160 FromMojom(RequestContextFrameType input, | |
161 blink::WebURLRequest::FrameType* out) { | |
162 switch (input) { | |
163 case RequestContextFrameType::AUXILIARY: | |
164 *out = blink::WebURLRequest::FrameTypeAuxiliary; | |
165 return true; | |
166 case RequestContextFrameType::NESTED: | |
167 *out = blink::WebURLRequest::FrameTypeNested; | |
168 return true; | |
169 case RequestContextFrameType::NONE: | |
170 *out = blink::WebURLRequest::FrameTypeNone; | |
171 return true; | |
172 case RequestContextFrameType::TOP_LEVEL: | |
173 *out = blink::WebURLRequest::FrameTypeTopLevel; | |
174 return true; | |
175 } | |
176 | |
177 return false; | |
178 } | |
179 | |
180 RequestContextType | |
181 EnumTraits<RequestContextType, blink::WebURLRequest::RequestContext>::ToMojom( | |
182 blink::WebURLRequest::RequestContext input) { | |
183 switch (input) { | |
184 case blink::WebURLRequest::RequestContextUnspecified: | |
185 return RequestContextType::UNSPECIFIED; | |
186 case blink::WebURLRequest::RequestContextAudio: | |
187 return RequestContextType::AUDIO; | |
188 case blink::WebURLRequest::RequestContextBeacon: | |
189 return RequestContextType::BEACON; | |
190 case blink::WebURLRequest::RequestContextCSPReport: | |
191 return RequestContextType::CSP_REPORT; | |
192 case blink::WebURLRequest::RequestContextDownload: | |
193 return RequestContextType::DOWNLOAD; | |
194 case blink::WebURLRequest::RequestContextEmbed: | |
195 return RequestContextType::EMBED; | |
196 case blink::WebURLRequest::RequestContextEventSource: | |
197 return RequestContextType::EVENT_SOURCE; | |
198 case blink::WebURLRequest::RequestContextFavicon: | |
199 return RequestContextType::FAVICON; | |
200 case blink::WebURLRequest::RequestContextFetch: | |
201 return RequestContextType::FETCH; | |
202 case blink::WebURLRequest::RequestContextFont: | |
203 return RequestContextType::FONT; | |
204 case blink::WebURLRequest::RequestContextForm: | |
205 return RequestContextType::FORM; | |
206 case blink::WebURLRequest::RequestContextFrame: | |
207 return RequestContextType::FRAME; | |
208 case blink::WebURLRequest::RequestContextHyperlink: | |
209 return RequestContextType::HYPERLINK; | |
210 case blink::WebURLRequest::RequestContextIframe: | |
211 return RequestContextType::IFRAME; | |
212 case blink::WebURLRequest::RequestContextImage: | |
213 return RequestContextType::IMAGE; | |
214 case blink::WebURLRequest::RequestContextImageSet: | |
215 return RequestContextType::IMAGE_SET; | |
216 case blink::WebURLRequest::RequestContextImport: | |
217 return RequestContextType::IMPORT; | |
218 case blink::WebURLRequest::RequestContextInternal: | |
219 return RequestContextType::INTERNAL; | |
220 case blink::WebURLRequest::RequestContextLocation: | |
221 return RequestContextType::LOCATION; | |
222 case blink::WebURLRequest::RequestContextManifest: | |
223 return RequestContextType::MANIFEST; | |
224 case blink::WebURLRequest::RequestContextObject: | |
225 return RequestContextType::OBJECT; | |
226 case blink::WebURLRequest::RequestContextPing: | |
227 return RequestContextType::PING; | |
228 case blink::WebURLRequest::RequestContextPlugin: | |
229 return RequestContextType::PLUGIN; | |
230 case blink::WebURLRequest::RequestContextPrefetch: | |
231 return RequestContextType::PREFETCH; | |
232 case blink::WebURLRequest::RequestContextScript: | |
233 return RequestContextType::SCRIPT; | |
234 case blink::WebURLRequest::RequestContextServiceWorker: | |
235 return RequestContextType::SERVICE_WORKER; | |
236 case blink::WebURLRequest::RequestContextSharedWorker: | |
237 return RequestContextType::SHARED_WORKER; | |
238 case blink::WebURLRequest::RequestContextSubresource: | |
239 return RequestContextType::SUBRESOURCE; | |
240 case blink::WebURLRequest::RequestContextStyle: | |
241 return RequestContextType::STYLE; | |
242 case blink::WebURLRequest::RequestContextTrack: | |
243 return RequestContextType::TRACK; | |
244 case blink::WebURLRequest::RequestContextVideo: | |
245 return RequestContextType::VIDEO; | |
246 case blink::WebURLRequest::RequestContextWorker: | |
247 return RequestContextType::WORKER; | |
248 case blink::WebURLRequest::RequestContextXMLHttpRequest: | |
249 return RequestContextType::XML_HTTP_REQUEST; | |
250 case blink::WebURLRequest::RequestContextXSLT: | |
251 return RequestContextType::XSLT; | |
252 } | |
253 | |
254 NOTREACHED(); | |
255 return RequestContextType::UNSPECIFIED; | |
256 } | |
257 | |
258 bool EnumTraits<RequestContextType, blink::WebURLRequest::RequestContext>:: | |
259 FromMojom(RequestContextType input, | |
260 blink::WebURLRequest::RequestContext* out) { | |
261 switch (input) { | |
262 case RequestContextType::UNSPECIFIED: | |
263 *out = blink::WebURLRequest::RequestContextUnspecified; | |
264 return true; | |
265 case RequestContextType::AUDIO: | |
266 *out = blink::WebURLRequest::RequestContextAudio; | |
267 return true; | |
268 case RequestContextType::BEACON: | |
269 *out = blink::WebURLRequest::RequestContextBeacon; | |
270 return true; | |
271 case RequestContextType::CSP_REPORT: | |
272 *out = blink::WebURLRequest::RequestContextCSPReport; | |
273 return true; | |
274 case RequestContextType::DOWNLOAD: | |
275 *out = blink::WebURLRequest::RequestContextDownload; | |
276 return true; | |
277 case RequestContextType::EMBED: | |
278 *out = blink::WebURLRequest::RequestContextEmbed; | |
279 return true; | |
280 case RequestContextType::EVENT_SOURCE: | |
281 *out = blink::WebURLRequest::RequestContextEventSource; | |
282 return true; | |
283 case RequestContextType::FAVICON: | |
284 *out = blink::WebURLRequest::RequestContextFavicon; | |
285 return true; | |
286 case RequestContextType::FETCH: | |
287 *out = blink::WebURLRequest::RequestContextFetch; | |
288 return true; | |
289 case RequestContextType::FONT: | |
290 *out = blink::WebURLRequest::RequestContextFont; | |
291 return true; | |
292 case RequestContextType::FORM: | |
293 *out = blink::WebURLRequest::RequestContextForm; | |
294 return true; | |
295 case RequestContextType::FRAME: | |
296 *out = blink::WebURLRequest::RequestContextFrame; | |
297 return true; | |
298 case RequestContextType::HYPERLINK: | |
299 *out = blink::WebURLRequest::RequestContextHyperlink; | |
300 return true; | |
301 case RequestContextType::IFRAME: | |
302 *out = blink::WebURLRequest::RequestContextIframe; | |
303 return true; | |
304 case RequestContextType::IMAGE: | |
305 *out = blink::WebURLRequest::RequestContextImage; | |
306 return true; | |
307 case RequestContextType::IMAGE_SET: | |
308 *out = blink::WebURLRequest::RequestContextImageSet; | |
309 return true; | |
310 case RequestContextType::IMPORT: | |
311 *out = blink::WebURLRequest::RequestContextImport; | |
312 return true; | |
313 case RequestContextType::INTERNAL: | |
314 *out = blink::WebURLRequest::RequestContextInternal; | |
315 return true; | |
316 case RequestContextType::LOCATION: | |
317 *out = blink::WebURLRequest::RequestContextLocation; | |
318 return true; | |
319 case RequestContextType::MANIFEST: | |
320 *out = blink::WebURLRequest::RequestContextManifest; | |
321 return true; | |
322 case RequestContextType::OBJECT: | |
323 *out = blink::WebURLRequest::RequestContextObject; | |
324 return true; | |
325 case RequestContextType::PING: | |
326 *out = blink::WebURLRequest::RequestContextPing; | |
327 return true; | |
328 case RequestContextType::PLUGIN: | |
329 *out = blink::WebURLRequest::RequestContextPlugin; | |
330 return true; | |
331 case RequestContextType::PREFETCH: | |
332 *out = blink::WebURLRequest::RequestContextPrefetch; | |
333 return true; | |
334 case RequestContextType::SCRIPT: | |
335 *out = blink::WebURLRequest::RequestContextScript; | |
336 return true; | |
337 case RequestContextType::SERVICE_WORKER: | |
338 *out = blink::WebURLRequest::RequestContextServiceWorker; | |
339 return true; | |
340 case RequestContextType::SHARED_WORKER: | |
341 *out = blink::WebURLRequest::RequestContextSharedWorker; | |
342 return true; | |
343 case RequestContextType::SUBRESOURCE: | |
344 *out = blink::WebURLRequest::RequestContextSubresource; | |
345 return true; | |
346 case RequestContextType::STYLE: | |
347 *out = blink::WebURLRequest::RequestContextStyle; | |
348 return true; | |
349 case RequestContextType::TRACK: | |
350 *out = blink::WebURLRequest::RequestContextTrack; | |
351 return true; | |
352 case RequestContextType::VIDEO: | |
353 *out = blink::WebURLRequest::RequestContextVideo; | |
354 return true; | |
355 case RequestContextType::WORKER: | |
356 *out = blink::WebURLRequest::RequestContextWorker; | |
357 return true; | |
358 case RequestContextType::XML_HTTP_REQUEST: | |
359 *out = blink::WebURLRequest::RequestContextXMLHttpRequest; | |
360 return true; | |
361 case RequestContextType::XSLT: | |
362 *out = blink::WebURLRequest::RequestContextXSLT; | |
363 return true; | |
364 } | |
365 | |
366 return false; | |
367 } | |
368 | |
369 // static | |
370 blink::KURL StructTraits<blink::mojom::FetchAPIRequestDataView, | |
371 blink::WebServiceWorkerRequest>:: | |
372 url(const blink::WebServiceWorkerRequest& request) { | |
373 return request.url(); | |
374 } | |
375 | |
376 // static | |
377 WTF::String StructTraits<blink::mojom::FetchAPIRequestDataView, | |
378 blink::WebServiceWorkerRequest>:: | |
379 method(const blink::WebServiceWorkerRequest& request) { | |
380 return request.method(); | |
dcheng
2017/03/24 05:27:48
Can these return a const ref to avoid copying?
Peter Beverloo
2017/03/24 18:48:42
Yeah, I noticed and dislike this too.
In this cas
| |
381 } | |
382 | |
383 // static | |
384 WTF::HashMap<WTF::String, WTF::String> | |
385 StructTraits<blink::mojom::FetchAPIRequestDataView, | |
386 blink::WebServiceWorkerRequest>:: | |
387 headers(const blink::WebServiceWorkerRequest& request) { | |
388 WTF::HashMap<WTF::String, WTF::String> headers; | |
dcheng
2017/03/24 05:27:47
So this is a little expensive, because we'll call
Peter Beverloo
2017/03/24 18:48:42
Oh that's cool! Done. Do you think it'd be worth d
| |
389 for (const auto& iter : request.headers()) | |
390 headers.insert(iter.key, iter.value); | |
391 | |
392 return headers; | |
393 } | |
394 | |
395 // static | |
396 const blink::Referrer& StructTraits<blink::mojom::FetchAPIRequestDataView, | |
397 blink::WebServiceWorkerRequest>:: | |
398 referrer(const blink::WebServiceWorkerRequest& request) { | |
399 return request.referrer(); | |
400 } | |
401 | |
402 // static | |
403 WTF::String StructTraits<blink::mojom::FetchAPIRequestDataView, | |
404 blink::WebServiceWorkerRequest>:: | |
405 blob_uuid(const blink::WebServiceWorkerRequest& request) { | |
406 if (request.blobDataHandle()) | |
407 return request.blobDataHandle()->uuid(); | |
408 | |
409 return WTF::String(); | |
dcheng
2017/03/24 05:27:47
I guess this can't return a const ref...
Peter Beverloo
2017/03/24 18:48:42
Unfortunately not, because BlobDataHandle returns
| |
410 } | |
411 | |
412 // static | |
413 uint64_t StructTraits<blink::mojom::FetchAPIRequestDataView, | |
414 blink::WebServiceWorkerRequest>:: | |
415 blob_size(const blink::WebServiceWorkerRequest& request) { | |
416 if (request.blobDataHandle()) | |
417 return request.blobDataHandle()->size(); | |
418 | |
419 return 0; | |
420 } | |
421 | |
422 // static | |
423 WTF::String StructTraits<blink::mojom::FetchAPIRequestDataView, | |
424 blink::WebServiceWorkerRequest>:: | |
425 client_id(const blink::WebServiceWorkerRequest& request) { | |
426 return request.clientId(); | |
427 } | |
428 | |
429 // static | |
430 bool StructTraits<blink::mojom::FetchAPIRequestDataView, | |
431 blink::WebServiceWorkerRequest>:: | |
432 Read(blink::mojom::FetchAPIRequestDataView data, | |
433 blink::WebServiceWorkerRequest* out) { | |
434 blink::WebURLRequest::FetchRequestMode mode; | |
435 blink::WebURLRequest::RequestContext requestContext; | |
436 blink::WebURLRequest::FrameType frameType; | |
437 blink::KURL url; | |
438 WTF::String method; | |
439 WTF::HashMap<WTF::String, WTF::String> headers; | |
440 WTF::String blobUuid; | |
441 blink::Referrer referrer; | |
442 blink::WebURLRequest::FetchCredentialsMode credentialsMode; | |
443 blink::WebURLRequest::FetchRedirectMode redirectMode; | |
444 WTF::String clientId; | |
445 | |
446 if (!data.ReadMode(&mode) || !data.ReadRequestContextType(&requestContext) || | |
447 !data.ReadFrameType(&frameType) || !data.ReadUrl(&url) || | |
448 !data.ReadMethod(&method) || !data.ReadHeaders(&headers) || | |
449 !data.ReadBlobUuid(&blobUuid) || !data.ReadReferrer(&referrer) || | |
450 !data.ReadCredentialsMode(&credentialsMode) || | |
451 !data.ReadRedirectMode(&redirectMode) || !data.ReadClientId(&clientId)) { | |
452 return false; | |
453 } | |
454 | |
455 out->setMode(mode); | |
456 out->setIsMainResourceLoad(data.is_main_resource_load()); | |
457 out->setRequestContext(requestContext); | |
458 out->setFrameType(frameType); | |
459 out->setURL(url); | |
460 out->setMethod(method); | |
461 for (const auto& pair : headers) | |
462 out->setHeader(pair.key, pair.value); | |
463 out->setBlob(blobUuid, static_cast<long long>(data.blob_size())); | |
464 out->setReferrer(referrer.referrer, static_cast<blink::WebReferrerPolicy>( | |
465 referrer.referrerPolicy)); | |
466 out->setCredentialsMode(credentialsMode); | |
467 out->setRedirectMode(redirectMode); | |
468 out->setClientId(clientId); | |
469 out->setIsReload(data.is_reload()); | |
470 return true; | |
471 } | |
472 | |
473 } // namespace mojo | |
OLD | NEW |