Index: content/common/dwrite_localized_strings_win.h |
diff --git a/content/common/dwrite_localized_strings_win.h b/content/common/dwrite_localized_strings_win.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..26804f178b6fbc9245fff688a6b6f971e0275232 |
--- /dev/null |
+++ b/content/common/dwrite_localized_strings_win.h |
@@ -0,0 +1,59 @@ |
+// 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. |
+ |
+#ifndef CONTENT_COMMON_DWRITE_LOCALIZED_STRINGS_WIN_H_ |
+#define CONTENT_COMMON_DWRITE_LOCALIZED_STRINGS_WIN_H_ |
+ |
+#include <dwrite.h> |
+#include <wrl.h> |
+#include <utility> |
+#include <vector> |
+ |
+#include "base/strings/string16.h" |
+ |
+namespace mswr = Microsoft::WRL; |
+ |
+namespace content { |
+ |
+// Impements IDWriteLocalizedStrings, backed by a vector of string pairs. |
+class DWriteLocalizedStrings |
+ : public mswr::RuntimeClass<mswr::RuntimeClassFlags<mswr::ClassicCom>, |
+ IDWriteLocalizedStrings> { |
+ public: |
+ HRESULT STDMETHODCALLTYPE FindLocaleName(const WCHAR* localeName, |
+ UINT32* index, |
+ BOOL* exists) override; |
+ |
+ UINT32 STDMETHODCALLTYPE GetCount() override; |
+ |
+ HRESULT STDMETHODCALLTYPE GetLocaleName(UINT32 index, |
+ WCHAR* localeName, |
+ UINT32 size) override; |
+ |
+ HRESULT STDMETHODCALLTYPE GetLocaleNameLength(UINT32 index, |
+ UINT32* length) override; |
+ |
+ HRESULT STDMETHODCALLTYPE GetString(UINT32 index, |
+ WCHAR* stringBuffer, |
+ UINT32 size) override; |
+ |
+ HRESULT STDMETHODCALLTYPE GetStringLength(UINT32 index, |
+ UINT32* length) override; |
+ |
+ HRESULT STDMETHODCALLTYPE RuntimeClassInitialize( |
+ std::vector<std::pair<base::string16, base::string16>>* strings); |
+ |
+ protected: |
+ HRESULT ReturnString(base::string16 string, WCHAR* buffer, UINT32 size); |
+ |
+ private: |
+ // List of strings. First element of each pair is the locale, and the second |
+ // element is the associated value. Use a vector because the expected number |
+ // of pairs is small (typically 1-2, rarely up to a few dozen?) and we need |
+ // index-based access. |
+ std::vector<std::pair<base::string16, base::string16>> strings_; |
+}; |
+ |
+} // namespace content |
+#endif // CONTENT_COMMON_DWRITE_LOCALIZED_STRINGS_WIN_H_ |