OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "content/child/dwrite_font_proxy/font_fallback_win.h" | 5 #include "content/child/dwrite_font_proxy/font_fallback_win.h" |
6 | 6 |
7 #include <dwrite.h> | 7 #include <dwrite.h> |
8 #include <shlobj.h> | 8 #include <shlobj.h> |
9 #include <wrl.h> | 9 #include <wrl.h> |
10 | 10 |
11 #include <vector> | 11 #include <vector> |
12 | 12 |
13 #include "base/memory/ref_counted.h" | 13 #include "base/memory/ref_counted.h" |
14 #include "content/child/dwrite_font_proxy/dwrite_font_proxy_win.h" | 14 #include "content/child/dwrite_font_proxy/dwrite_font_proxy_win.h" |
15 #include "content/common/dwrite_text_analysis_source_win.h" | |
16 #include "content/test/dwrite_font_fake_sender_win.h" | 15 #include "content/test/dwrite_font_fake_sender_win.h" |
17 #include "testing/gtest/include/gtest/gtest.h" | 16 #include "testing/gtest/include/gtest/gtest.h" |
| 17 #include "ui/gfx/win/text_analysis_source.h" |
18 | 18 |
19 namespace mswr = Microsoft::WRL; | 19 namespace mswr = Microsoft::WRL; |
20 | 20 |
21 namespace content { | 21 namespace content { |
22 | 22 |
23 namespace { | 23 namespace { |
24 | 24 |
25 class FontFallbackUnitTest : public testing::Test { | 25 class FontFallbackUnitTest : public testing::Test { |
26 public: | 26 public: |
27 FontFallbackUnitTest() { | 27 FontFallbackUnitTest() { |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
71 | 71 |
72 TEST_F(FontFallbackUnitTest, MapCharacters) { | 72 TEST_F(FontFallbackUnitTest, MapCharacters) { |
73 mswr::ComPtr<FontFallback> fallback; | 73 mswr::ComPtr<FontFallback> fallback; |
74 mswr::MakeAndInitialize<FontFallback>(&fallback, collection_.Get(), | 74 mswr::MakeAndInitialize<FontFallback>(&fallback, collection_.Get(), |
75 fake_collection_->GetSender()); | 75 fake_collection_->GetSender()); |
76 | 76 |
77 mswr::ComPtr<IDWriteFont> font; | 77 mswr::ComPtr<IDWriteFont> font; |
78 UINT32 mapped_length = 0; | 78 UINT32 mapped_length = 0; |
79 float scale = 0.0; | 79 float scale = 0.0; |
80 | 80 |
81 mswr::ComPtr<TextAnalysisSource> text; | 81 mswr::ComPtr<gfx::win::TextAnalysisSource> text; |
82 mswr::MakeAndInitialize<TextAnalysisSource>( | 82 mswr::MakeAndInitialize<gfx::win::TextAnalysisSource>( |
83 &text, L"hello", L"en-us", number_substitution_.Get(), | 83 &text, L"hello", L"en-us", number_substitution_.Get(), |
84 DWRITE_READING_DIRECTION_LEFT_TO_RIGHT); | 84 DWRITE_READING_DIRECTION_LEFT_TO_RIGHT); |
85 fallback->MapCharacters(text.Get(), 0, 5, nullptr, nullptr, | 85 fallback->MapCharacters(text.Get(), 0, 5, nullptr, nullptr, |
86 DWRITE_FONT_WEIGHT_NORMAL, DWRITE_FONT_STYLE_NORMAL, | 86 DWRITE_FONT_WEIGHT_NORMAL, DWRITE_FONT_STYLE_NORMAL, |
87 DWRITE_FONT_STRETCH_NORMAL, &mapped_length, &font, | 87 DWRITE_FONT_STRETCH_NORMAL, &mapped_length, &font, |
88 &scale); | 88 &scale); |
89 | 89 |
90 EXPECT_EQ(1u, mapped_length); // The fake sender only maps one character | 90 EXPECT_EQ(1u, mapped_length); // The fake sender only maps one character |
91 EXPECT_NE(nullptr, font.Get()); | 91 EXPECT_NE(nullptr, font.Get()); |
92 } | 92 } |
93 | 93 |
94 TEST_F(FontFallbackUnitTest, DuplicateCallsShouldNotRepeatIPC) { | 94 TEST_F(FontFallbackUnitTest, DuplicateCallsShouldNotRepeatIPC) { |
95 mswr::ComPtr<FontFallback> fallback; | 95 mswr::ComPtr<FontFallback> fallback; |
96 mswr::MakeAndInitialize<FontFallback>(&fallback, collection_.Get(), | 96 mswr::MakeAndInitialize<FontFallback>(&fallback, collection_.Get(), |
97 fake_collection_->GetTrackingSender()); | 97 fake_collection_->GetTrackingSender()); |
98 | 98 |
99 mswr::ComPtr<IDWriteFont> font; | 99 mswr::ComPtr<IDWriteFont> font; |
100 UINT32 mapped_length = 0; | 100 UINT32 mapped_length = 0; |
101 float scale = 0.0; | 101 float scale = 0.0; |
102 | 102 |
103 mswr::ComPtr<TextAnalysisSource> text; | 103 mswr::ComPtr<gfx::win::TextAnalysisSource> text; |
104 mswr::MakeAndInitialize<TextAnalysisSource>( | 104 mswr::MakeAndInitialize<gfx::win::TextAnalysisSource>( |
105 &text, L"hello", L"en-us", number_substitution_.Get(), | 105 &text, L"hello", L"en-us", number_substitution_.Get(), |
106 DWRITE_READING_DIRECTION_LEFT_TO_RIGHT); | 106 DWRITE_READING_DIRECTION_LEFT_TO_RIGHT); |
107 fallback->MapCharacters(text.Get(), 0, 5, nullptr, nullptr, | 107 fallback->MapCharacters(text.Get(), 0, 5, nullptr, nullptr, |
108 DWRITE_FONT_WEIGHT_NORMAL, DWRITE_FONT_STYLE_NORMAL, | 108 DWRITE_FONT_WEIGHT_NORMAL, DWRITE_FONT_STYLE_NORMAL, |
109 DWRITE_FONT_STRETCH_NORMAL, &mapped_length, &font, | 109 DWRITE_FONT_STRETCH_NORMAL, &mapped_length, &font, |
110 &scale); | 110 &scale); |
111 mapped_length = 0; | 111 mapped_length = 0; |
112 fallback->MapCharacters(text.Get(), 0, 5, nullptr, nullptr, | 112 fallback->MapCharacters(text.Get(), 0, 5, nullptr, nullptr, |
113 DWRITE_FONT_WEIGHT_NORMAL, DWRITE_FONT_STYLE_NORMAL, | 113 DWRITE_FONT_WEIGHT_NORMAL, DWRITE_FONT_STYLE_NORMAL, |
114 DWRITE_FONT_STRETCH_NORMAL, &mapped_length, &font, | 114 DWRITE_FONT_STRETCH_NORMAL, &mapped_length, &font, |
115 &scale); | 115 &scale); |
116 | 116 |
117 EXPECT_EQ(1u, fake_collection_->MessageCount()); | 117 EXPECT_EQ(1u, fake_collection_->MessageCount()); |
118 EXPECT_EQ(5u, mapped_length); | 118 EXPECT_EQ(5u, mapped_length); |
119 } | 119 } |
120 | 120 |
121 TEST_F(FontFallbackUnitTest, DifferentFamilyShouldNotReuseCache) { | 121 TEST_F(FontFallbackUnitTest, DifferentFamilyShouldNotReuseCache) { |
122 mswr::ComPtr<FontFallback> fallback; | 122 mswr::ComPtr<FontFallback> fallback; |
123 mswr::MakeAndInitialize<FontFallback>(&fallback, collection_.Get(), | 123 mswr::MakeAndInitialize<FontFallback>(&fallback, collection_.Get(), |
124 fake_collection_->GetTrackingSender()); | 124 fake_collection_->GetTrackingSender()); |
125 | 125 |
126 mswr::ComPtr<IDWriteFont> font; | 126 mswr::ComPtr<IDWriteFont> font; |
127 UINT32 mapped_length = 0; | 127 UINT32 mapped_length = 0; |
128 float scale = 0.0; | 128 float scale = 0.0; |
129 | 129 |
130 mswr::ComPtr<TextAnalysisSource> text; | 130 mswr::ComPtr<gfx::win::TextAnalysisSource> text; |
131 mswr::MakeAndInitialize<TextAnalysisSource>( | 131 mswr::MakeAndInitialize<gfx::win::TextAnalysisSource>( |
132 &text, L"hello", L"en-us", number_substitution_.Get(), | 132 &text, L"hello", L"en-us", number_substitution_.Get(), |
133 DWRITE_READING_DIRECTION_LEFT_TO_RIGHT); | 133 DWRITE_READING_DIRECTION_LEFT_TO_RIGHT); |
134 fallback->MapCharacters(text.Get(), 0, 5, nullptr, L"font1", | 134 fallback->MapCharacters(text.Get(), 0, 5, nullptr, L"font1", |
135 DWRITE_FONT_WEIGHT_NORMAL, DWRITE_FONT_STYLE_NORMAL, | 135 DWRITE_FONT_WEIGHT_NORMAL, DWRITE_FONT_STYLE_NORMAL, |
136 DWRITE_FONT_STRETCH_NORMAL, &mapped_length, &font, | 136 DWRITE_FONT_STRETCH_NORMAL, &mapped_length, &font, |
137 &scale); | 137 &scale); |
138 fallback->MapCharacters(text.Get(), 0, 5, nullptr, L"font2", | 138 fallback->MapCharacters(text.Get(), 0, 5, nullptr, L"font2", |
139 DWRITE_FONT_WEIGHT_NORMAL, DWRITE_FONT_STYLE_NORMAL, | 139 DWRITE_FONT_WEIGHT_NORMAL, DWRITE_FONT_STYLE_NORMAL, |
140 DWRITE_FONT_STRETCH_NORMAL, &mapped_length, &font, | 140 DWRITE_FONT_STRETCH_NORMAL, &mapped_length, &font, |
141 &scale); | 141 &scale); |
142 | 142 |
143 EXPECT_EQ(2u, fake_collection_->MessageCount()); | 143 EXPECT_EQ(2u, fake_collection_->MessageCount()); |
144 } | 144 } |
145 | 145 |
146 TEST_F(FontFallbackUnitTest, CacheMissShouldRepeatIPC) { | 146 TEST_F(FontFallbackUnitTest, CacheMissShouldRepeatIPC) { |
147 mswr::ComPtr<FontFallback> fallback; | 147 mswr::ComPtr<FontFallback> fallback; |
148 mswr::MakeAndInitialize<FontFallback>(&fallback, collection_.Get(), | 148 mswr::MakeAndInitialize<FontFallback>(&fallback, collection_.Get(), |
149 fake_collection_->GetTrackingSender()); | 149 fake_collection_->GetTrackingSender()); |
150 | 150 |
151 mswr::ComPtr<IDWriteFont> font; | 151 mswr::ComPtr<IDWriteFont> font; |
152 UINT32 mapped_length = 0; | 152 UINT32 mapped_length = 0; |
153 float scale = 0.0; | 153 float scale = 0.0; |
154 | 154 |
155 mswr::ComPtr<TextAnalysisSource> text; | 155 mswr::ComPtr<gfx::win::TextAnalysisSource> text; |
156 mswr::MakeAndInitialize<TextAnalysisSource>( | 156 mswr::MakeAndInitialize<gfx::win::TextAnalysisSource>( |
157 &text, L"hello", L"en-us", number_substitution_.Get(), | 157 &text, L"hello", L"en-us", number_substitution_.Get(), |
158 DWRITE_READING_DIRECTION_LEFT_TO_RIGHT); | 158 DWRITE_READING_DIRECTION_LEFT_TO_RIGHT); |
159 mswr::ComPtr<TextAnalysisSource> unmappable_text; | 159 mswr::ComPtr<gfx::win::TextAnalysisSource> unmappable_text; |
160 mswr::MakeAndInitialize<TextAnalysisSource>( | 160 mswr::MakeAndInitialize<gfx::win::TextAnalysisSource>( |
161 &unmappable_text, L"\uffff", L"en-us", number_substitution_.Get(), | 161 &unmappable_text, L"\uffff", L"en-us", number_substitution_.Get(), |
162 DWRITE_READING_DIRECTION_LEFT_TO_RIGHT); | 162 DWRITE_READING_DIRECTION_LEFT_TO_RIGHT); |
163 fallback->MapCharacters(text.Get(), 0, 5, nullptr, nullptr, | 163 fallback->MapCharacters(text.Get(), 0, 5, nullptr, nullptr, |
164 DWRITE_FONT_WEIGHT_NORMAL, DWRITE_FONT_STYLE_NORMAL, | 164 DWRITE_FONT_WEIGHT_NORMAL, DWRITE_FONT_STYLE_NORMAL, |
165 DWRITE_FONT_STRETCH_NORMAL, &mapped_length, &font, | 165 DWRITE_FONT_STRETCH_NORMAL, &mapped_length, &font, |
166 &scale); | 166 &scale); |
167 fallback->MapCharacters(unmappable_text.Get(), 0, 1, nullptr, nullptr, | 167 fallback->MapCharacters(unmappable_text.Get(), 0, 1, nullptr, nullptr, |
168 DWRITE_FONT_WEIGHT_NORMAL, DWRITE_FONT_STYLE_NORMAL, | 168 DWRITE_FONT_WEIGHT_NORMAL, DWRITE_FONT_STYLE_NORMAL, |
169 DWRITE_FONT_STRETCH_NORMAL, &mapped_length, &font, | 169 DWRITE_FONT_STRETCH_NORMAL, &mapped_length, &font, |
170 &scale); | 170 &scale); |
171 | 171 |
172 EXPECT_EQ(2u, fake_collection_->MessageCount()); | 172 EXPECT_EQ(2u, fake_collection_->MessageCount()); |
173 } | 173 } |
174 | 174 |
175 TEST_F(FontFallbackUnitTest, SurrogatePairCacheHit) { | 175 TEST_F(FontFallbackUnitTest, SurrogatePairCacheHit) { |
176 mswr::ComPtr<FontFallback> fallback; | 176 mswr::ComPtr<FontFallback> fallback; |
177 mswr::MakeAndInitialize<FontFallback>(&fallback, collection_.Get(), | 177 mswr::MakeAndInitialize<FontFallback>(&fallback, collection_.Get(), |
178 fake_collection_->GetTrackingSender()); | 178 fake_collection_->GetTrackingSender()); |
179 | 179 |
180 mswr::ComPtr<IDWriteFont> font; | 180 mswr::ComPtr<IDWriteFont> font; |
181 UINT32 mapped_length = 0; | 181 UINT32 mapped_length = 0; |
182 float scale = 0.0; | 182 float scale = 0.0; |
183 | 183 |
184 mswr::ComPtr<TextAnalysisSource> text; | 184 mswr::ComPtr<gfx::win::TextAnalysisSource> text; |
185 mswr::MakeAndInitialize<TextAnalysisSource>( | 185 mswr::MakeAndInitialize<gfx::win::TextAnalysisSource>( |
186 &text, L"hello", L"en-us", number_substitution_.Get(), | 186 &text, L"hello", L"en-us", number_substitution_.Get(), |
187 DWRITE_READING_DIRECTION_LEFT_TO_RIGHT); | 187 DWRITE_READING_DIRECTION_LEFT_TO_RIGHT); |
188 mswr::ComPtr<TextAnalysisSource> surrogate_pair_text; | 188 mswr::ComPtr<gfx::win::TextAnalysisSource> surrogate_pair_text; |
189 mswr::MakeAndInitialize<TextAnalysisSource>( | 189 mswr::MakeAndInitialize<gfx::win::TextAnalysisSource>( |
190 &surrogate_pair_text, L"\U0001d300", L"en-us", number_substitution_.Get(), | 190 &surrogate_pair_text, L"\U0001d300", L"en-us", number_substitution_.Get(), |
191 DWRITE_READING_DIRECTION_LEFT_TO_RIGHT); | 191 DWRITE_READING_DIRECTION_LEFT_TO_RIGHT); |
192 fallback->MapCharacters(text.Get(), 0, 5, nullptr, nullptr, | 192 fallback->MapCharacters(text.Get(), 0, 5, nullptr, nullptr, |
193 DWRITE_FONT_WEIGHT_NORMAL, DWRITE_FONT_STYLE_NORMAL, | 193 DWRITE_FONT_WEIGHT_NORMAL, DWRITE_FONT_STYLE_NORMAL, |
194 DWRITE_FONT_STRETCH_NORMAL, &mapped_length, &font, | 194 DWRITE_FONT_STRETCH_NORMAL, &mapped_length, &font, |
195 &scale); | 195 &scale); |
196 fallback->MapCharacters(surrogate_pair_text.Get(), 0, 2, nullptr, nullptr, | 196 fallback->MapCharacters(surrogate_pair_text.Get(), 0, 2, nullptr, nullptr, |
197 DWRITE_FONT_WEIGHT_NORMAL, DWRITE_FONT_STYLE_NORMAL, | 197 DWRITE_FONT_WEIGHT_NORMAL, DWRITE_FONT_STYLE_NORMAL, |
198 DWRITE_FONT_STRETCH_NORMAL, &mapped_length, &font, | 198 DWRITE_FONT_STRETCH_NORMAL, &mapped_length, &font, |
199 &scale); | 199 &scale); |
200 | 200 |
201 EXPECT_EQ(1u, fake_collection_->MessageCount()); | 201 EXPECT_EQ(1u, fake_collection_->MessageCount()); |
202 EXPECT_EQ(2u, mapped_length); | 202 EXPECT_EQ(2u, mapped_length); |
203 } | 203 } |
204 | 204 |
205 } // namespace | 205 } // namespace |
206 } // namespace content | 206 } // namespace content |
OLD | NEW |