OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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/dwrite_font_proxy_win.h" | 5 #include "content/child/dwrite_font_proxy/dwrite_font_proxy_win.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 | 9 |
10 #include <utility> | 10 #include <utility> |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
64 | 64 |
65 auto iter = family_names_.find(name); | 65 auto iter = family_names_.find(name); |
66 if (iter != family_names_.end()) { | 66 if (iter != family_names_.end()) { |
67 *index = iter->second; | 67 *index = iter->second; |
68 *exists = iter->second != UINT_MAX; | 68 *exists = iter->second != UINT_MAX; |
69 return S_OK; | 69 return S_OK; |
70 } | 70 } |
71 | 71 |
72 if (!sender_.Run()->Send( | 72 if (!sender_.Run()->Send( |
73 new DWriteFontProxyMsg_FindFamily(name, &family_index))) { | 73 new DWriteFontProxyMsg_FindFamily(name, &family_index))) { |
| 74 CHECK(false); |
74 return E_FAIL; | 75 return E_FAIL; |
75 } | 76 } |
76 | 77 |
77 if (family_index != UINT32_MAX) { | 78 if (family_index != UINT32_MAX) { |
78 if (!CreateFamily(family_index)) | 79 if (!CreateFamily(family_index)) |
79 return E_FAIL; | 80 return E_FAIL; |
80 *exists = TRUE; | 81 *exists = TRUE; |
81 *index = family_index; | 82 *index = family_index; |
82 families_[family_index]->SetName(name); | 83 families_[family_index]->SetName(name); |
83 } else { | 84 } else { |
(...skipping 24 matching lines...) Expand all Loading... |
108 | 109 |
109 UINT32 DWriteFontCollectionProxy::GetFontFamilyCount() { | 110 UINT32 DWriteFontCollectionProxy::GetFontFamilyCount() { |
110 if (family_count_ != UINT_MAX) | 111 if (family_count_ != UINT_MAX) |
111 return family_count_; | 112 return family_count_; |
112 | 113 |
113 TRACE_EVENT0("dwrite", "FontProxy::GetFontFamilyCount"); | 114 TRACE_EVENT0("dwrite", "FontProxy::GetFontFamilyCount"); |
114 | 115 |
115 uint32_t family_count = 0; | 116 uint32_t family_count = 0; |
116 if (!sender_.Run()->Send( | 117 if (!sender_.Run()->Send( |
117 new DWriteFontProxyMsg_GetFamilyCount(&family_count))) { | 118 new DWriteFontProxyMsg_GetFamilyCount(&family_count))) { |
| 119 CHECK(false); |
118 return 0; | 120 return 0; |
119 } | 121 } |
| 122 CHECK(family_count != 0); |
120 family_count_ = family_count; | 123 family_count_ = family_count; |
121 return family_count; | 124 return family_count; |
122 } | 125 } |
123 | 126 |
124 HRESULT DWriteFontCollectionProxy::GetFontFromFontFace( | 127 HRESULT DWriteFontCollectionProxy::GetFontFromFontFace( |
125 IDWriteFontFace* font_face, | 128 IDWriteFontFace* font_face, |
126 IDWriteFont** font) { | 129 IDWriteFont** font) { |
127 DCHECK(font_face); | 130 DCHECK(font_face); |
128 DCHECK(font); | 131 DCHECK(font); |
129 | 132 |
130 for (const auto& family : families_) { | 133 for (const auto& family : families_) { |
131 if (family && family->GetFontFromFontFace(font_face, font)) | 134 if (family && family->GetFontFromFontFace(font_face, font)) { |
132 return S_OK; | 135 return S_OK; |
| 136 } |
133 } | 137 } |
| 138 // If the font came from our collection, at least one family should match |
| 139 CHECK(false); |
| 140 |
134 return E_FAIL; | 141 return E_FAIL; |
135 } | 142 } |
136 | 143 |
137 HRESULT DWriteFontCollectionProxy::CreateEnumeratorFromKey( | 144 HRESULT DWriteFontCollectionProxy::CreateEnumeratorFromKey( |
138 IDWriteFactory* factory, | 145 IDWriteFactory* factory, |
139 const void* collection_key, | 146 const void* collection_key, |
140 UINT32 collection_key_size, | 147 UINT32 collection_key_size, |
141 IDWriteFontFileEnumerator** font_file_enumerator) { | 148 IDWriteFontFileEnumerator** font_file_enumerator) { |
142 if (!collection_key || collection_key_size != sizeof(uint32_t)) | 149 if (!collection_key || collection_key_size != sizeof(uint32_t)) { |
| 150 CHECK(false); |
143 return E_INVALIDARG; | 151 return E_INVALIDARG; |
| 152 } |
144 | 153 |
145 TRACE_EVENT0("dwrite", "FontProxy::LoadingFontFiles"); | 154 TRACE_EVENT0("dwrite", "FontProxy::LoadingFontFiles"); |
146 | 155 |
147 const uint32_t* family_index = | 156 const uint32_t* family_index = |
148 reinterpret_cast<const uint32_t*>(collection_key); | 157 reinterpret_cast<const uint32_t*>(collection_key); |
149 | 158 |
150 if (*family_index >= GetFontFamilyCount()) | 159 if (*family_index >= GetFontFamilyCount()) { |
151 return E_INVALIDARG; | 160 return E_INVALIDARG; |
| 161 } |
152 | 162 |
153 // If we already loaded the family we should reuse the existing collection. | 163 // If we already loaded the family we should reuse the existing collection. |
154 DCHECK(!families_[*family_index]->IsLoaded()); | 164 DCHECK(!families_[*family_index]->IsLoaded()); |
155 | 165 |
156 std::vector<base::string16> file_names; | 166 std::vector<base::string16> file_names; |
157 if (!sender_.Run()->Send( | 167 if (!sender_.Run()->Send( |
158 new DWriteFontProxyMsg_GetFontFiles(*family_index, &file_names))) { | 168 new DWriteFontProxyMsg_GetFontFiles(*family_index, &file_names))) { |
| 169 CHECK(false); |
159 return E_FAIL; | 170 return E_FAIL; |
160 } | 171 } |
161 | 172 |
162 HRESULT hr = mswr::MakeAndInitialize<FontFileEnumerator>( | 173 HRESULT hr = mswr::MakeAndInitialize<FontFileEnumerator>( |
163 font_file_enumerator, factory, this, &file_names); | 174 font_file_enumerator, factory, this, &file_names); |
164 | 175 |
165 if (!SUCCEEDED(hr)) | 176 if (!SUCCEEDED(hr)) { |
| 177 CHECK(false); |
166 return E_FAIL; | 178 return E_FAIL; |
| 179 } |
167 | 180 |
168 return S_OK; | 181 return S_OK; |
169 } | 182 } |
170 | 183 |
171 HRESULT DWriteFontCollectionProxy::CreateStreamFromKey( | 184 HRESULT DWriteFontCollectionProxy::CreateStreamFromKey( |
172 const void* font_file_reference_key, | 185 const void* font_file_reference_key, |
173 UINT32 font_file_reference_key_size, | 186 UINT32 font_file_reference_key_size, |
174 IDWriteFontFileStream** font_file_stream) { | 187 IDWriteFontFileStream** font_file_stream) { |
175 if (!font_file_reference_key) | 188 if (!font_file_reference_key) { |
| 189 CHECK(false); |
176 return E_FAIL; | 190 return E_FAIL; |
| 191 } |
177 | 192 |
178 const base::char16* file_name = | 193 const base::char16* file_name = |
179 reinterpret_cast<const base::char16*>(font_file_reference_key); | 194 reinterpret_cast<const base::char16*>(font_file_reference_key); |
180 DCHECK_EQ(font_file_reference_key_size % sizeof(base::char16), 0u); | 195 DCHECK_EQ(font_file_reference_key_size % sizeof(base::char16), 0u); |
181 size_t file_name_size = | 196 size_t file_name_size = |
182 static_cast<size_t>(font_file_reference_key_size) / sizeof(base::char16); | 197 static_cast<size_t>(font_file_reference_key_size) / sizeof(base::char16); |
183 | 198 |
184 if (file_name_size == 0 || file_name[file_name_size - 1] != L'\0') | 199 if (file_name_size == 0 || file_name[file_name_size - 1] != L'\0') { |
| 200 CHECK(false); |
185 return E_FAIL; | 201 return E_FAIL; |
| 202 } |
186 | 203 |
187 TRACE_EVENT0("dwrite", "FontFileEnumerator::CreateStreamFromKey"); | 204 TRACE_EVENT0("dwrite", "FontFileEnumerator::CreateStreamFromKey"); |
188 | 205 |
189 mswr::ComPtr<IDWriteFontFileStream> stream; | 206 mswr::ComPtr<IDWriteFontFileStream> stream; |
190 if (!SUCCEEDED(mswr::MakeAndInitialize<FontFileStream>(&stream, file_name))) | 207 if (!SUCCEEDED(mswr::MakeAndInitialize<FontFileStream>(&stream, file_name))) { |
| 208 CHECK(false); |
191 return E_FAIL; | 209 return E_FAIL; |
| 210 } |
192 *font_file_stream = stream.Detach(); | 211 *font_file_stream = stream.Detach(); |
193 return S_OK; | 212 return S_OK; |
194 } | 213 } |
195 | 214 |
196 HRESULT DWriteFontCollectionProxy::RuntimeClassInitialize( | 215 HRESULT DWriteFontCollectionProxy::RuntimeClassInitialize( |
197 IDWriteFactory* factory, | 216 IDWriteFactory* factory, |
198 const base::Callback<IPC::Sender*(void)>& sender) { | 217 const base::Callback<IPC::Sender*(void)>& sender) { |
199 DCHECK(factory); | 218 CHECK(factory); |
200 | 219 |
201 factory_ = factory; | 220 factory_ = factory; |
202 sender_ = sender; | 221 sender_ = sender; |
203 | 222 |
204 HRESULT hr = factory->RegisterFontCollectionLoader(this); | 223 HRESULT hr = factory->RegisterFontCollectionLoader(this); |
205 DCHECK(SUCCEEDED(hr)); | 224 CHECK(SUCCEEDED(hr)); |
206 hr = factory_->RegisterFontFileLoader(this); | 225 hr = factory_->RegisterFontFileLoader(this); |
207 DCHECK(SUCCEEDED(hr)); | 226 CHECK(SUCCEEDED(hr)); |
208 return S_OK; | 227 return S_OK; |
209 } | 228 } |
210 | 229 |
211 void DWriteFontCollectionProxy::Unregister() { | 230 void DWriteFontCollectionProxy::Unregister() { |
212 factory_->UnregisterFontCollectionLoader(this); | 231 factory_->UnregisterFontCollectionLoader(this); |
213 factory_->UnregisterFontFileLoader(this); | 232 factory_->UnregisterFontFileLoader(this); |
214 } | 233 } |
215 | 234 |
216 bool DWriteFontCollectionProxy::LoadFamily( | 235 bool DWriteFontCollectionProxy::LoadFamily( |
217 UINT32 family_index, | 236 UINT32 family_index, |
218 IDWriteFontCollection** containing_collection) { | 237 IDWriteFontCollection** containing_collection) { |
219 TRACE_EVENT0("dwrite", "FontProxy::LoadFamily"); | 238 TRACE_EVENT0("dwrite", "FontProxy::LoadFamily"); |
220 | 239 |
221 uint32_t index = family_index; | 240 uint32_t index = family_index; |
222 // CreateCustomFontCollection ends up calling | 241 // CreateCustomFontCollection ends up calling |
223 // DWriteFontCollectionProxy::CreateEnumeratorFromKey. | 242 // DWriteFontCollectionProxy::CreateEnumeratorFromKey. |
224 HRESULT hr = factory_->CreateCustomFontCollection( | 243 HRESULT hr = factory_->CreateCustomFontCollection( |
225 this /*collectionLoader*/, reinterpret_cast<const void*>(&index), | 244 this /*collectionLoader*/, reinterpret_cast<const void*>(&index), |
226 sizeof(index), containing_collection); | 245 sizeof(index), containing_collection); |
| 246 CHECK(SUCCEEDED(hr)); |
227 | 247 |
228 return SUCCEEDED(hr); | 248 return SUCCEEDED(hr); |
229 } | 249 } |
230 | 250 |
231 bool DWriteFontCollectionProxy::LoadFamilyNames( | 251 bool DWriteFontCollectionProxy::LoadFamilyNames( |
232 UINT32 family_index, | 252 UINT32 family_index, |
233 IDWriteLocalizedStrings** localized_strings) { | 253 IDWriteLocalizedStrings** localized_strings) { |
234 TRACE_EVENT0("dwrite", "FontProxy::LoadFamilyNames"); | 254 TRACE_EVENT0("dwrite", "FontProxy::LoadFamilyNames"); |
235 | 255 |
236 std::vector<std::pair<base::string16, base::string16>> strings; | 256 std::vector<std::pair<base::string16, base::string16>> strings; |
237 if (!sender_.Run()->Send( | 257 if (!sender_.Run()->Send( |
238 new DWriteFontProxyMsg_GetFamilyNames(family_index, &strings))) { | 258 new DWriteFontProxyMsg_GetFamilyNames(family_index, &strings))) { |
| 259 CHECK(false); |
239 return false; | 260 return false; |
240 } | 261 } |
241 | 262 |
242 HRESULT hr = mswr::MakeAndInitialize<DWriteLocalizedStrings>( | 263 HRESULT hr = mswr::MakeAndInitialize<DWriteLocalizedStrings>( |
243 localized_strings, &strings); | 264 localized_strings, &strings); |
244 | 265 |
| 266 CHECK(SUCCEEDED(hr)); |
245 return SUCCEEDED(hr); | 267 return SUCCEEDED(hr); |
246 } | 268 } |
247 | 269 |
248 bool DWriteFontCollectionProxy::CreateFamily(UINT32 family_index) { | 270 bool DWriteFontCollectionProxy::CreateFamily(UINT32 family_index) { |
249 if (family_index < families_.size() && families_[family_index]) | 271 if (family_index < families_.size() && families_[family_index]) |
250 return true; | 272 return true; |
251 | 273 |
252 UINT32 family_count = GetFontFamilyCount(); | 274 UINT32 family_count = GetFontFamilyCount(); |
253 if (family_index >= family_count) | 275 if (family_index >= family_count) { |
254 return false; | 276 return false; |
| 277 } |
255 | 278 |
256 if (families_.size() < family_count) | 279 if (families_.size() < family_count) |
257 families_.resize(family_count); | 280 families_.resize(family_count); |
258 | 281 |
259 mswr::ComPtr<DWriteFontFamilyProxy> family; | 282 mswr::ComPtr<DWriteFontFamilyProxy> family; |
260 HRESULT hr = mswr::MakeAndInitialize<DWriteFontFamilyProxy>(&family, this, | 283 HRESULT hr = mswr::MakeAndInitialize<DWriteFontFamilyProxy>(&family, this, |
261 family_index); | 284 family_index); |
262 DCHECK(SUCCEEDED(hr)); | 285 CHECK(SUCCEEDED(hr)); |
263 DCHECK_LT(family_index, families_.size()); | 286 CHECK_LT(family_index, families_.size()); |
264 | 287 |
265 families_[family_index] = family; | 288 families_[family_index] = family; |
266 return true; | 289 return true; |
267 } | 290 } |
268 | 291 |
269 DWriteFontFamilyProxy::DWriteFontFamilyProxy() = default; | 292 DWriteFontFamilyProxy::DWriteFontFamilyProxy() = default; |
270 | 293 |
271 DWriteFontFamilyProxy::~DWriteFontFamilyProxy() = default; | 294 DWriteFontFamilyProxy::~DWriteFontFamilyProxy() = default; |
272 | 295 |
273 HRESULT DWriteFontFamilyProxy::GetFontCollection( | 296 HRESULT DWriteFontFamilyProxy::GetFontCollection( |
(...skipping 11 matching lines...) Expand all Loading... |
285 // well save an IPC here. | 308 // well save an IPC here. |
286 if (!LoadFamily()) | 309 if (!LoadFamily()) |
287 return 0; | 310 return 0; |
288 | 311 |
289 return family_->GetFontCount(); | 312 return family_->GetFontCount(); |
290 } | 313 } |
291 | 314 |
292 HRESULT DWriteFontFamilyProxy::GetFont(UINT32 index, IDWriteFont** font) { | 315 HRESULT DWriteFontFamilyProxy::GetFont(UINT32 index, IDWriteFont** font) { |
293 DCHECK(font); | 316 DCHECK(font); |
294 | 317 |
295 if (index >= GetFontCount()) | 318 if (index >= GetFontCount()) { |
| 319 CHECK(false); |
296 return E_INVALIDARG; | 320 return E_INVALIDARG; |
| 321 } |
297 if (!LoadFamily()) | 322 if (!LoadFamily()) |
298 return E_FAIL; | 323 return E_FAIL; |
299 | 324 |
300 return family_->GetFont(index, font); | 325 return family_->GetFont(index, font); |
301 } | 326 } |
302 | 327 |
303 HRESULT DWriteFontFamilyProxy::GetFamilyNames(IDWriteLocalizedStrings** names) { | 328 HRESULT DWriteFontFamilyProxy::GetFamilyNames(IDWriteLocalizedStrings** names) { |
304 DCHECK(names); | 329 DCHECK(names); |
305 | 330 |
306 // Prefer the real thing, if available. | 331 // Prefer the real thing, if available. |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
364 bool DWriteFontFamilyProxy::GetFontFromFontFace(IDWriteFontFace* font_face, | 389 bool DWriteFontFamilyProxy::GetFontFromFontFace(IDWriteFontFace* font_face, |
365 IDWriteFont** font) { | 390 IDWriteFont** font) { |
366 DCHECK(font_face); | 391 DCHECK(font_face); |
367 DCHECK(font); | 392 DCHECK(font); |
368 | 393 |
369 if (!family_) | 394 if (!family_) |
370 return false; | 395 return false; |
371 | 396 |
372 mswr::ComPtr<IDWriteFontCollection> collection; | 397 mswr::ComPtr<IDWriteFontCollection> collection; |
373 HRESULT hr = family_->GetFontCollection(&collection); | 398 HRESULT hr = family_->GetFontCollection(&collection); |
374 DCHECK(SUCCEEDED(hr)); | 399 CHECK(SUCCEEDED(hr)); |
375 hr = collection->GetFontFromFontFace(font_face, font); | 400 hr = collection->GetFontFromFontFace(font_face, font); |
376 | 401 |
377 return SUCCEEDED(hr); | 402 return SUCCEEDED(hr); |
378 } | 403 } |
379 | 404 |
380 void DWriteFontFamilyProxy::SetName(const base::string16& family_name) { | 405 void DWriteFontFamilyProxy::SetName(const base::string16& family_name) { |
381 family_name_.assign(family_name); | 406 family_name_.assign(family_name); |
382 } | 407 } |
383 | 408 |
384 bool DWriteFontFamilyProxy::IsLoaded() { | 409 bool DWriteFontFamilyProxy::IsLoaded() { |
(...skipping 22 matching lines...) Expand all Loading... |
407 // Some fonts are packaged in a single file containing multiple families. In | 432 // Some fonts are packaged in a single file containing multiple families. In |
408 // such a case we can find the right family by family name. | 433 // such a case we can find the right family by family name. |
409 DCHECK(!family_name_.empty()); | 434 DCHECK(!family_name_.empty()); |
410 UINT32 family_index = 0; | 435 UINT32 family_index = 0; |
411 BOOL found = FALSE; | 436 BOOL found = FALSE; |
412 hr = | 437 hr = |
413 collection->FindFamilyName(family_name_.c_str(), &family_index, &found); | 438 collection->FindFamilyName(family_name_.c_str(), &family_index, &found); |
414 if (SUCCEEDED(hr) && found) { | 439 if (SUCCEEDED(hr) && found) { |
415 hr = collection->GetFontFamily(family_index, &family_); | 440 hr = collection->GetFontFamily(family_index, &family_); |
416 LogLoadFamilyResult(LOAD_FAMILY_SUCCESS_MATCHED_FAMILY); | 441 LogLoadFamilyResult(LOAD_FAMILY_SUCCESS_MATCHED_FAMILY); |
| 442 CHECK(SUCCEEDED(hr)); |
417 return SUCCEEDED(hr); | 443 return SUCCEEDED(hr); |
418 } | 444 } |
419 } | 445 } |
420 | 446 |
421 DCHECK_LE(family_count, 1u); | 447 DCHECK_LE(family_count, 1u); |
422 | 448 |
423 if (family_count == 0) { | 449 if (family_count == 0) { |
424 // This is really strange, we successfully loaded no fonts?! | 450 // This is really strange, we successfully loaded no fonts?! |
425 LogLoadFamilyResult(LOAD_FAMILY_ERROR_NO_FAMILIES); | 451 LogLoadFamilyResult(LOAD_FAMILY_ERROR_NO_FAMILIES); |
| 452 CHECK(false); |
426 return false; | 453 return false; |
427 } | 454 } |
428 | 455 |
429 LogLoadFamilyResult(family_count == 1 ? LOAD_FAMILY_SUCCESS_SINGLE_FAMILY | 456 LogLoadFamilyResult(family_count == 1 ? LOAD_FAMILY_SUCCESS_SINGLE_FAMILY |
430 : LOAD_FAMILY_ERROR_MULTIPLE_FAMILIES); | 457 : LOAD_FAMILY_ERROR_MULTIPLE_FAMILIES); |
431 | 458 |
432 hr = collection->GetFontFamily(0, &family_); | 459 hr = collection->GetFontFamily(0, &family_); |
433 | 460 |
| 461 CHECK(SUCCEEDED(hr)); |
| 462 |
434 return SUCCEEDED(hr); | 463 return SUCCEEDED(hr); |
435 } | 464 } |
436 | 465 |
437 FontFileEnumerator::FontFileEnumerator() = default; | 466 FontFileEnumerator::FontFileEnumerator() = default; |
438 | 467 |
439 FontFileEnumerator::~FontFileEnumerator() = default; | 468 FontFileEnumerator::~FontFileEnumerator() = default; |
440 | 469 |
441 HRESULT FontFileEnumerator::GetCurrentFontFile(IDWriteFontFile** file) { | 470 HRESULT FontFileEnumerator::GetCurrentFontFile(IDWriteFontFile** file) { |
442 DCHECK(file); | 471 DCHECK(file); |
443 if (current_file_ >= file_names_.size()) | 472 if (current_file_ >= file_names_.size()) { |
| 473 CHECK(false); |
444 return E_FAIL; | 474 return E_FAIL; |
| 475 } |
445 | 476 |
446 TRACE_EVENT0("dwrite", "FontFileEnumerator::GetCurrentFontFile (memmap)"); | 477 TRACE_EVENT0("dwrite", "FontFileEnumerator::GetCurrentFontFile (memmap)"); |
447 // CreateCustomFontFileReference ends up calling | 478 // CreateCustomFontFileReference ends up calling |
448 // DWriteFontCollectionProxy::CreateStreamFromKey. | 479 // DWriteFontCollectionProxy::CreateStreamFromKey. |
449 return factory_->CreateCustomFontFileReference( | 480 HRESULT hr = factory_->CreateCustomFontFileReference( |
450 reinterpret_cast<const void*>(file_names_[current_file_].c_str()), | 481 reinterpret_cast<const void*>(file_names_[current_file_].c_str()), |
451 (file_names_[current_file_].length() + 1) * sizeof(base::char16), | 482 (file_names_[current_file_].length() + 1) * sizeof(base::char16), |
452 loader_.Get() /*IDWriteFontFileLoader*/, file); | 483 loader_.Get() /*IDWriteFontFileLoader*/, file); |
| 484 CHECK(SUCCEEDED(hr)); |
| 485 return hr; |
453 } | 486 } |
454 | 487 |
455 HRESULT FontFileEnumerator::MoveNext(BOOL* has_current_file) { | 488 HRESULT FontFileEnumerator::MoveNext(BOOL* has_current_file) { |
456 DCHECK(has_current_file); | 489 DCHECK(has_current_file); |
457 | 490 |
458 TRACE_EVENT0("dwrite", "FontFileEnumerator::MoveNext"); | 491 TRACE_EVENT0("dwrite", "FontFileEnumerator::MoveNext"); |
459 if (next_file_ >= file_names_.size()) { | 492 if (next_file_ >= file_names_.size()) { |
460 *has_current_file = FALSE; | 493 *has_current_file = FALSE; |
461 current_file_ = UINT_MAX; | 494 current_file_ = UINT_MAX; |
462 return S_OK; | 495 return S_OK; |
(...skipping 27 matching lines...) Expand all Loading... |
490 | 523 |
491 HRESULT FontFileStream::GetLastWriteTime(UINT64* last_write_time) { | 524 HRESULT FontFileStream::GetLastWriteTime(UINT64* last_write_time) { |
492 *last_write_time = 0; | 525 *last_write_time = 0; |
493 return S_OK; | 526 return S_OK; |
494 } | 527 } |
495 | 528 |
496 HRESULT FontFileStream::ReadFileFragment(const void** fragment_start, | 529 HRESULT FontFileStream::ReadFileFragment(const void** fragment_start, |
497 UINT64 fragment_offset, | 530 UINT64 fragment_offset, |
498 UINT64 fragment_size, | 531 UINT64 fragment_size, |
499 void** fragment_context) { | 532 void** fragment_context) { |
500 if (fragment_offset + fragment_size < fragment_offset) | 533 if (fragment_offset + fragment_size < fragment_offset) { |
| 534 CHECK(false); |
501 return E_FAIL; | 535 return E_FAIL; |
502 if (fragment_offset + fragment_size > data_.length()) | 536 } |
| 537 if (fragment_offset + fragment_size > data_.length()) { |
| 538 CHECK(false); |
503 return E_FAIL; | 539 return E_FAIL; |
| 540 } |
504 *fragment_start = data_.data() + fragment_offset; | 541 *fragment_start = data_.data() + fragment_offset; |
505 *fragment_context = nullptr; | 542 *fragment_context = nullptr; |
506 return S_OK; | 543 return S_OK; |
507 } | 544 } |
508 | 545 |
509 HRESULT FontFileStream::RuntimeClassInitialize( | 546 HRESULT FontFileStream::RuntimeClassInitialize( |
510 const base::string16& file_name) { | 547 const base::string16& file_name) { |
511 data_.Initialize(base::FilePath(file_name)); | 548 data_.Initialize(base::FilePath(file_name)); |
512 if (!data_.IsValid()) | 549 if (!data_.IsValid()) { |
| 550 CHECK(false); |
513 return E_FAIL; | 551 return E_FAIL; |
| 552 } |
514 return S_OK; | 553 return S_OK; |
515 } | 554 } |
516 | 555 |
517 } // namespace content | 556 } // namespace content |
OLD | NEW |