1 // Copyright 2016 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 "mojo/common/common_custom_types_struct_traits.h" 6 7 #include "mojo/public/cpp/system/platform_handle.h" 8 9 namespace mojo { 10 11 // static 12 bool StructTraits<common::mojom::String16DataView, base::string16>::Read( 13 common::mojom::String16DataView data, 14 base::string16* out) { 15 ArrayDataView<uint16_t> view; 16 data.GetDataDataView(&view); 17 out->assign(reinterpret_cast<const base::char16*>(view.data()), view.size()); 18 return true; 19 } 20 21 // static 22 const std::vector<uint32_t>& 23 StructTraits<common::mojom::VersionDataView, base::Version>::components( 24 const base::Version& version) { 25 return version.components(); 26 } 27 28 // static 29 bool StructTraits<common::mojom::VersionDataView, base::Version>::Read( 30 common::mojom::VersionDataView data, 31 base::Version* out) { 32 std::vector<uint32_t> components; 33 if (!data.ReadComponents(&components)) 34 return false; 35 36 *out = base::Version(base::Version(std::move(components))); 37 return out->IsValid(); 38 } 39 40 // static 41 bool StructTraits< 42 common::mojom::UnguessableTokenDataView, 43 base::UnguessableToken>::Read(common::mojom::UnguessableTokenDataView data, 44 base::UnguessableToken* out) { 45 uint64_t high = data.high(); 46 uint64_t low = data.low(); 47 48 // Receiving a zeroed UnguessableToken is a security issue. 49 if (high == 0 && low == 0) 50 return false; 51 52 *out = base::UnguessableToken::Deserialize(high, low); 53 return true; 54 } 55 56 mojo::ScopedHandle StructTraits<common::mojom::FileDataView, base::File>::fd( 57 base::File& file) { 58 DCHECK(file.IsValid()); 59 return mojo::WrapPlatformFile(file.TakePlatformFile()); 60 } 61 62 bool StructTraits<common::mojom::FileDataView, base::File>::Read( 63 common::mojom::FileDataView data, 64 base::File* file) { 65 base::PlatformFile platform_handle = base::kInvalidPlatformFile; 66 if (mojo::UnwrapPlatformFile(data.TakeFd(), &platform_handle) != 67 MOJO_RESULT_OK) { 68 return false; 69 } 70 *file = base::File(platform_handle); 71 return true; 72 } 73 74 // static 75 common::mojom::TextDirection 76 EnumTraits<common::mojom::TextDirection, base::i18n::TextDirection>::ToMojom( 77 base::i18n::TextDirection text_direction) { 78 switch (text_direction) { 79 case base::i18n::UNKNOWN_DIRECTION: 80 return common::mojom::TextDirection::UNKNOWN_DIRECTION; 81 case base::i18n::RIGHT_TO_LEFT: 82 return common::mojom::TextDirection::RIGHT_TO_LEFT; 83 case base::i18n::LEFT_TO_RIGHT: 84 return common::mojom::TextDirection::LEFT_TO_RIGHT; 85 } 86 NOTREACHED(); 87 return common::mojom::TextDirection::UNKNOWN_DIRECTION; 88 } 89 90 // static 91 bool EnumTraits<common::mojom::TextDirection, base::i18n::TextDirection>:: 92 FromMojom(common::mojom::TextDirection input, 93 base::i18n::TextDirection* out) { 94 switch (input) { 95 case common::mojom::TextDirection::UNKNOWN_DIRECTION: 96 *out = base::i18n::UNKNOWN_DIRECTION; 97 return true; 98 case common::mojom::TextDirection::RIGHT_TO_LEFT: 99 *out = base::i18n::RIGHT_TO_LEFT; 100 return true; 101 case common::mojom::TextDirection::LEFT_TO_RIGHT: 102 *out = base::i18n::LEFT_TO_RIGHT; 103 return true; 104 } 105 return false; 106 } 107 108 } // namespace mojo 109