Home | History | Annotate | Download | only in common
      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