Index: content/child/dwrite_font_proxy/dwrite_localized_strings_win.cc |
diff --git a/content/child/dwrite_font_proxy/dwrite_localized_strings_win.cc b/content/child/dwrite_font_proxy/dwrite_localized_strings_win.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..27f8fa4648fa509872f60f8d7f399373bdac96a2 |
--- /dev/null |
+++ b/content/child/dwrite_font_proxy/dwrite_localized_strings_win.cc |
@@ -0,0 +1,91 @@ |
+// Copyright 2015 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 "content/child/dwrite_font_proxy/dwrite_localized_strings_win.h" |
+ |
+#include "base/logging.h" |
+ |
+namespace content { |
+ |
+DWriteLocalizedStrings::DWriteLocalizedStrings() = default; |
+ |
+DWriteLocalizedStrings::~DWriteLocalizedStrings() = default; |
+ |
+HRESULT DWriteLocalizedStrings::FindLocaleName(const WCHAR* locale_name, |
+ UINT32* index, |
+ BOOL* exists) { |
+ for (size_t n = 0; n < strings_.size(); ++n) { |
+ if (_wcsicmp(strings_[n].first.data(), locale_name) == 0) { |
+ *index = n; |
+ *exists = TRUE; |
+ return S_OK; |
+ } |
+ } |
+ |
+ *index = UINT_MAX; |
+ *exists = FALSE; |
+ return S_OK; |
+} |
+ |
+UINT32 DWriteLocalizedStrings::GetCount() { |
+ return strings_.size(); |
+} |
+ |
+HRESULT DWriteLocalizedStrings::GetLocaleName(UINT32 index, |
+ WCHAR* locale_name, |
+ UINT32 size) { |
+ if (index >= strings_.size()) |
+ return E_INVALIDARG; |
+ // string16::size does not count the null terminator as part of the string, |
+ // but GetLocaleName requires the caller to reserve space for the null |
+ // terminator, so we need to ensure |size| is greater than the count of |
+ // characters. |
+ if (size <= strings_[index].first.size()) |
+ return E_INVALIDARG; |
+ wcsncpy(locale_name, strings_[index].first.c_str(), size); |
+ return S_OK; |
+} |
+ |
+HRESULT DWriteLocalizedStrings::GetLocaleNameLength(UINT32 index, |
+ UINT32* length) { |
+ if (index >= strings_.size()) |
+ return E_INVALIDARG; |
+ // Oddly, GetLocaleNameLength requires the length to not count the null |
+ // terminator, even though GetLocaleName requires the output to be null |
+ // terminated. |
+ *length = strings_[index].first.size(); |
+ return S_OK; |
+} |
+ |
+HRESULT DWriteLocalizedStrings::GetString(UINT32 index, |
+ WCHAR* string_buffer, |
+ UINT32 size) { |
+ if (index >= strings_.size()) |
+ return E_INVALIDARG; |
+ // string16::size does not count the null terminator as part of the string, |
+ // but GetString requires the caller to reserve space for the null terminator, |
+ // so we need to ensure |size| is greater than the count of characters. |
+ if (size <= strings_[index].second.size()) |
+ return E_INVALIDARG; |
+ wcsncpy(string_buffer, strings_[index].second.c_str(), size); |
+ return S_OK; |
+} |
+ |
+HRESULT DWriteLocalizedStrings::GetStringLength(UINT32 index, UINT32* length) { |
+ if (index >= strings_.size()) |
+ return E_INVALIDARG; |
+ // Oddly, GetStringLength requires the length to not count the null |
+ // terminator, even though GetString requires the output to be null |
+ // terminated. |
+ *length = strings_[index].second.size(); |
+ return S_OK; |
+} |
+ |
+HRESULT DWriteLocalizedStrings::RuntimeClassInitialize( |
+ std::vector<std::pair<base::string16, base::string16>>* strings) { |
+ strings_.swap(*strings); |
+ return S_OK; |
+} |
+ |
+} // namespace content |