| // Copyright 2017 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "third_party/blink/renderer/platform/mojo/fetch_api_request_struct_traits.h" |
| |
| #include "mojo/public/cpp/bindings/map_traits_wtf_hash_map.h" |
| #include "mojo/public/cpp/bindings/string_traits_wtf.h" |
| #include "services/network/public/mojom/fetch_api.mojom-blink.h" |
| #include "services/network/public/mojom/referrer_policy.mojom-blink.h" |
| #include "third_party/blink/renderer/platform/blob/serialized_blob_struct_traits.h" |
| #include "third_party/blink/renderer/platform/mojo/kurl_struct_traits.h" |
| #include "third_party/blink/renderer/platform/weborigin/referrer.h" |
| |
| namespace mojo { |
| |
| // static |
| blink::KURL StructTraits<blink::mojom::FetchAPIRequestDataView, |
| blink::WebServiceWorkerRequest>:: |
| url(const blink::WebServiceWorkerRequest& request) { |
| return request.Url(); |
| } |
| |
| // static |
| WTF::String StructTraits<blink::mojom::FetchAPIRequestDataView, |
| blink::WebServiceWorkerRequest>:: |
| method(const blink::WebServiceWorkerRequest& request) { |
| return request.Method(); |
| } |
| |
| // static |
| WTF::HashMap<WTF::String, WTF::String> |
| StructTraits<blink::mojom::FetchAPIRequestDataView, |
| blink::WebServiceWorkerRequest>:: |
| headers(const blink::WebServiceWorkerRequest& request) { |
| WTF::HashMap<WTF::String, WTF::String> header_map; |
| for (const auto& pair : request.Headers()) |
| header_map.insert(pair.key, pair.value); |
| return header_map; |
| } |
| |
| // static |
| blink::mojom::blink::ReferrerPtr |
| StructTraits<blink::mojom::FetchAPIRequestDataView, |
| blink::WebServiceWorkerRequest>:: |
| referrer(const blink::WebServiceWorkerRequest& request) { |
| blink::KURL url; |
| const blink::Referrer& referrer = request.GetReferrer(); |
| if (referrer.referrer != blink::Referrer::NoReferrer()) |
| url = blink::KURL(blink::KURL(), referrer.referrer); |
| return blink::mojom::blink::Referrer::New( |
| url, |
| static_cast<network::mojom::ReferrerPolicy>(referrer.referrer_policy)); |
| } |
| |
| // static |
| scoped_refptr<blink::BlobDataHandle> StructTraits< |
| blink::mojom::FetchAPIRequestDataView, |
| blink::WebServiceWorkerRequest>::blob(const blink::WebServiceWorkerRequest& |
| request) { |
| return request.GetBlobDataHandle(); |
| } |
| |
| // static |
| WTF::String StructTraits<blink::mojom::FetchAPIRequestDataView, |
| blink::WebServiceWorkerRequest>:: |
| integrity(const blink::WebServiceWorkerRequest& request) { |
| return request.Integrity(); |
| } |
| |
| // static |
| WTF::String StructTraits<blink::mojom::FetchAPIRequestDataView, |
| blink::WebServiceWorkerRequest>:: |
| client_id(const blink::WebServiceWorkerRequest& request) { |
| return request.ClientId(); |
| } |
| |
| // static |
| bool StructTraits<blink::mojom::FetchAPIRequestDataView, |
| blink::WebServiceWorkerRequest>:: |
| Read(blink::mojom::FetchAPIRequestDataView data, |
| blink::WebServiceWorkerRequest* out) { |
| network::mojom::FetchRequestMode mode; |
| blink::mojom::RequestContextType requestContext; |
| network::mojom::RequestContextFrameType frameType; |
| blink::KURL url; |
| WTF::String method; |
| WTF::HashMap<WTF::String, WTF::String> headers; |
| scoped_refptr<blink::BlobDataHandle> blob; |
| blink::mojom::blink::ReferrerPtr referrer; |
| network::mojom::FetchCredentialsMode credentialsMode; |
| network::mojom::FetchRedirectMode redirectMode; |
| WTF::String integrity; |
| WTF::String clientId; |
| |
| if (!data.ReadMode(&mode) || !data.ReadRequestContextType(&requestContext) || |
| !data.ReadFrameType(&frameType) || !data.ReadUrl(&url) || |
| !data.ReadMethod(&method) || !data.ReadHeaders(&headers) || |
| !data.ReadBlob(&blob) || !data.ReadReferrer(&referrer) || |
| !data.ReadCredentialsMode(&credentialsMode) || |
| !data.ReadRedirectMode(&redirectMode) || !data.ReadClientId(&clientId) || |
| !data.ReadIntegrity(&integrity)) { |
| return false; |
| } |
| |
| out->SetMode(mode); |
| out->SetIsMainResourceLoad(data.is_main_resource_load()); |
| out->SetRequestContext(requestContext); |
| out->SetFrameType(frameType); |
| out->SetURL(url); |
| out->SetMethod(method); |
| for (const auto& pair : headers) |
| out->SetHeader(pair.key, pair.value); |
| out->SetBlobDataHandle(blob); |
| out->SetReferrer(referrer->url.GetString(), referrer->policy); |
| out->SetCredentialsMode(credentialsMode); |
| out->SetCacheMode(data.cache_mode()); |
| out->SetRedirectMode(redirectMode); |
| out->SetIntegrity(integrity); |
| out->SetKeepalive(data.keepalive()); |
| out->SetClientId(clientId); |
| out->SetIsReload(data.is_reload()); |
| out->SetIsHistoryNavigation(data.is_history_navigation()); |
| return true; |
| } |
| |
| } // namespace mojo |