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

Side by Side Diff: third_party/WebKit/Source/platform/mojo/FetchAPIRequestStructTraits.cpp

Issue 2762303002: Enable transmitting Fetch Requests over Mojo (Closed)
Patch Set: Enable transmitting Fetch Requests over Mojo Created 3 years, 9 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 "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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698