1 // Copyright 2019 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 #ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_NETWORK_ENCODED_FORM_DATA_ELEMENT_MOJOM_TRAITS_H_
6 #define THIRD_PARTY_BLINK_RENDERER_PLATFORM_NETWORK_ENCODED_FORM_DATA_ELEMENT_MOJOM_TRAITS_H_
7 
8 #include "mojo/public/cpp/bindings/pending_remote.h"
9 #include "services/network/public/mojom/url_loader.mojom-blink-forward.h"
10 #include "third_party/blink/public/mojom/fetch/fetch_api_request.mojom-blink.h"
11 #include "third_party/blink/renderer/platform/network/encoded_form_data.h"
12 
13 namespace mojo {
14 
15 template <>
16 struct PLATFORM_EXPORT StructTraits<blink::mojom::FetchAPIDataElementDataView,
17                                     blink::FormDataElement> {
18   static network::mojom::DataElementType type(
19       const blink::FormDataElement& data);
20 
21   static base::span<const uint8_t> buf(const blink::FormDataElement& data);
22 
23   static base::File file(const blink::FormDataElement& data);
24 
25   static base::FilePath path(const blink::FormDataElement& data);
26 
27   static const WTF::String& blob_uuid(const blink::FormDataElement& data) {
28     return data.blob_uuid_;
29   }
30 
31   static mojo::PendingRemote<network::mojom::blink::DataPipeGetter>
32   data_pipe_getter(const blink::FormDataElement& data);
33 
34   static mojo::PendingRemote<network::mojom::blink::ChunkedDataPipeGetter>
35   chunked_data_pipe_getter(const blink::FormDataElement& data) {
36     return mojo::NullRemote();
37   }
38 
39   static uint64_t offset(const blink::FormDataElement& data) {
40     return data.file_start_;
41   }
42 
43   static uint64_t length(const blink::FormDataElement& data) {
44     if (data.type_ == blink::FormDataElement::kEncodedBlob &&
45         data.optional_blob_data_handle_) {
46       return data.optional_blob_data_handle_->size();
47     }
48     return data.file_length_;
49   }
50 
51   static base::Time expected_modification_time(
52       const blink::FormDataElement& data);
53 
54   static bool Read(blink::mojom::FetchAPIDataElementDataView data,
55                    blink::FormDataElement* out);
56 };
57 
58 }  // namespace mojo
59 
60 #endif  // THIRD_PARTY_BLINK_RENDERER_PLATFORM_NETWORK_ENCODED_FORM_DATA_ELEMENT_MOJOM_TRAITS_H_
61