| // Copyright 2016 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 "mojo/public/cpp/bindings/string_traits_wtf.h" |
| |
| #include <string.h> |
| |
| #include "base/logging.h" |
| #include "mojo/public/cpp/bindings/lib/array_internal.h" |
| #include "third_party/WebKit/Source/platform/wtf/text/StringUTF8Adaptor.h" |
| |
| namespace mojo { |
| namespace { |
| |
| struct UTF8AdaptorInfo { |
| explicit UTF8AdaptorInfo(const WTF::String& input) : utf8_adaptor(input) { |
| #if DCHECK_IS_ON() |
| original_size_in_bytes = input.CharactersSizeInBytes(); |
| #endif |
| } |
| |
| ~UTF8AdaptorInfo() {} |
| |
| WTF::StringUTF8Adaptor utf8_adaptor; |
| |
| #if DCHECK_IS_ON() |
| // For sanity check only. |
| size_t original_size_in_bytes; |
| #endif |
| }; |
| |
| UTF8AdaptorInfo* ToAdaptor(const WTF::String& input, void* context) { |
| UTF8AdaptorInfo* adaptor = static_cast<UTF8AdaptorInfo*>(context); |
| |
| #if DCHECK_IS_ON() |
| DCHECK_EQ(adaptor->original_size_in_bytes, input.CharactersSizeInBytes()); |
| #endif |
| return adaptor; |
| } |
| |
| } // namespace |
| |
| // static |
| void StringTraits<WTF::String>::SetToNull(WTF::String* output) { |
| if (output->IsNull()) |
| return; |
| |
| WTF::String result; |
| output->swap(result); |
| } |
| |
| // static |
| void* StringTraits<WTF::String>::SetUpContext(const WTF::String& input) { |
| return new UTF8AdaptorInfo(input); |
| } |
| |
| // static |
| void StringTraits<WTF::String>::TearDownContext(const WTF::String& input, |
| void* context) { |
| delete ToAdaptor(input, context); |
| } |
| |
| // static |
| size_t StringTraits<WTF::String>::GetSize(const WTF::String& input, |
| void* context) { |
| return ToAdaptor(input, context)->utf8_adaptor.length(); |
| } |
| |
| // static |
| const char* StringTraits<WTF::String>::GetData(const WTF::String& input, |
| void* context) { |
| return ToAdaptor(input, context)->utf8_adaptor.Data(); |
| } |
| |
| // static |
| bool StringTraits<WTF::String>::Read(StringDataView input, |
| WTF::String* output) { |
| WTF::String result = WTF::String::FromUTF8(input.storage(), input.size()); |
| output->swap(result); |
| return true; |
| } |
| |
| } // namespace mojo |