| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2013 Google Inc. All rights reserved. | 2 * Copyright (C) 2013 Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions are met: | 5 * modification, are permitted provided that the following conditions are met: |
| 6 * | 6 * |
| 7 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
| 8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
| 9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
| 10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
| (...skipping 367 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 378 Font font; | 378 Font font; |
| 379 if (!resolveFontStyle(fontString, font)) { | 379 if (!resolveFontStyle(fontString, font)) { |
| 380 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptSt
ate); | 380 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptSt
ate); |
| 381 ScriptPromise promise = resolver->promise(); | 381 ScriptPromise promise = resolver->promise(); |
| 382 resolver->reject(DOMException::create(SyntaxError, "Could not resolve '"
+ fontString + "' as a font.")); | 382 resolver->reject(DOMException::create(SyntaxError, "Could not resolve '"
+ fontString + "' as a font.")); |
| 383 return promise; | 383 return promise; |
| 384 } | 384 } |
| 385 | 385 |
| 386 FontFaceCache* fontFaceCache = document()->styleEngine().fontSelector()->fon
tFaceCache(); | 386 FontFaceCache* fontFaceCache = document()->styleEngine().fontSelector()->fon
tFaceCache(); |
| 387 FontFaceArray faces; | 387 FontFaceArray faces; |
| 388 for (const FontFamily* f = &font.fontDescription().family(); f; f = f->next(
)) { | 388 for (const FontFamily* f = &font.getFontDescription().family(); f; f = f->ne
xt()) { |
| 389 CSSSegmentedFontFace* segmentedFontFace = fontFaceCache->get(font.fontDe
scription(), f->family()); | 389 CSSSegmentedFontFace* segmentedFontFace = fontFaceCache->get(font.getFon
tDescription(), f->family()); |
| 390 if (segmentedFontFace) | 390 if (segmentedFontFace) |
| 391 segmentedFontFace->match(text, faces); | 391 segmentedFontFace->match(text, faces); |
| 392 } | 392 } |
| 393 | 393 |
| 394 RefPtrWillBeRawPtr<LoadFontPromiseResolver> resolver = LoadFontPromiseResolv
er::create(faces, scriptState); | 394 RefPtrWillBeRawPtr<LoadFontPromiseResolver> resolver = LoadFontPromiseResolv
er::create(faces, scriptState); |
| 395 ScriptPromise promise = resolver->promise(); | 395 ScriptPromise promise = resolver->promise(); |
| 396 resolver->loadFonts(getExecutionContext()); // After this, resolver->promise
() may return null. | 396 resolver->loadFonts(getExecutionContext()); // After this, resolver->promise
() may return null. |
| 397 return promise; | 397 return promise; |
| 398 } | 398 } |
| 399 | 399 |
| 400 bool FontFaceSet::check(const String& fontString, const String& text, ExceptionS
tate& exceptionState) | 400 bool FontFaceSet::check(const String& fontString, const String& text, ExceptionS
tate& exceptionState) |
| 401 { | 401 { |
| 402 if (!inActiveDocumentContext()) | 402 if (!inActiveDocumentContext()) |
| 403 return false; | 403 return false; |
| 404 | 404 |
| 405 Font font; | 405 Font font; |
| 406 if (!resolveFontStyle(fontString, font)) { | 406 if (!resolveFontStyle(fontString, font)) { |
| 407 exceptionState.throwDOMException(SyntaxError, "Could not resolve '" + fo
ntString + "' as a font."); | 407 exceptionState.throwDOMException(SyntaxError, "Could not resolve '" + fo
ntString + "' as a font."); |
| 408 return false; | 408 return false; |
| 409 } | 409 } |
| 410 | 410 |
| 411 CSSFontSelector* fontSelector = document()->styleEngine().fontSelector(); | 411 CSSFontSelector* fontSelector = document()->styleEngine().fontSelector(); |
| 412 FontFaceCache* fontFaceCache = fontSelector->fontFaceCache(); | 412 FontFaceCache* fontFaceCache = fontSelector->fontFaceCache(); |
| 413 | 413 |
| 414 bool hasLoadedFaces = false; | 414 bool hasLoadedFaces = false; |
| 415 for (const FontFamily* f = &font.fontDescription().family(); f; f = f->next(
)) { | 415 for (const FontFamily* f = &font.getFontDescription().family(); f; f = f->ne
xt()) { |
| 416 CSSSegmentedFontFace* face = fontFaceCache->get(font.fontDescription(),
f->family()); | 416 CSSSegmentedFontFace* face = fontFaceCache->get(font.getFontDescription(
), f->family()); |
| 417 if (face) { | 417 if (face) { |
| 418 if (!face->checkFont(text)) | 418 if (!face->checkFont(text)) |
| 419 return false; | 419 return false; |
| 420 hasLoadedFaces = true; | 420 hasLoadedFaces = true; |
| 421 } | 421 } |
| 422 } | 422 } |
| 423 if (hasLoadedFaces) | 423 if (hasLoadedFaces) |
| 424 return true; | 424 return true; |
| 425 for (const FontFamily* f = &font.fontDescription().family(); f; f = f->next(
)) { | 425 for (const FontFamily* f = &font.getFontDescription().family(); f; f = f->ne
xt()) { |
| 426 if (fontSelector->isPlatformFontAvailable(font.fontDescription(), f->fam
ily())) | 426 if (fontSelector->isPlatformFontAvailable(font.getFontDescription(), f->
family())) |
| 427 return true; | 427 return true; |
| 428 } | 428 } |
| 429 return false; | 429 return false; |
| 430 } | 430 } |
| 431 | 431 |
| 432 bool FontFaceSet::resolveFontStyle(const String& fontString, Font& font) | 432 bool FontFaceSet::resolveFontStyle(const String& fontString, Font& font) |
| 433 { | 433 { |
| 434 if (fontString.isEmpty()) | 434 if (fontString.isEmpty()) |
| 435 return false; | 435 return false; |
| 436 | 436 |
| (...skipping 12 matching lines...) Expand all Loading... |
| 449 FontFamily fontFamily; | 449 FontFamily fontFamily; |
| 450 fontFamily.setFamily(defaultFontFamily); | 450 fontFamily.setFamily(defaultFontFamily); |
| 451 | 451 |
| 452 FontDescription defaultFontDescription; | 452 FontDescription defaultFontDescription; |
| 453 defaultFontDescription.setFamily(fontFamily); | 453 defaultFontDescription.setFamily(fontFamily); |
| 454 defaultFontDescription.setSpecifiedSize(defaultFontSize); | 454 defaultFontDescription.setSpecifiedSize(defaultFontSize); |
| 455 defaultFontDescription.setComputedSize(defaultFontSize); | 455 defaultFontDescription.setComputedSize(defaultFontSize); |
| 456 | 456 |
| 457 style->setFontDescription(defaultFontDescription); | 457 style->setFontDescription(defaultFontDescription); |
| 458 | 458 |
| 459 style->font().update(style->font().fontSelector()); | 459 style->font().update(style->font().getFontSelector()); |
| 460 | 460 |
| 461 document()->ensureStyleResolver().computeFont(style.get(), *parsedStyle); | 461 document()->ensureStyleResolver().computeFont(style.get(), *parsedStyle); |
| 462 | 462 |
| 463 font = style->font(); | 463 font = style->font(); |
| 464 font.update(document()->styleEngine().fontSelector()); | 464 font.update(document()->styleEngine().fontSelector()); |
| 465 return true; | 465 return true; |
| 466 } | 466 } |
| 467 | 467 |
| 468 void FontFaceSet::FontLoadHistogram::updateStatus(FontFace* fontFace) | 468 void FontFaceSet::FontLoadHistogram::updateStatus(FontFace* fontFace) |
| 469 { | 469 { |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 545 visitor->trace(m_failedFonts); | 545 visitor->trace(m_failedFonts); |
| 546 visitor->trace(m_nonCSSConnectedFaces); | 546 visitor->trace(m_nonCSSConnectedFaces); |
| 547 visitor->trace(m_asyncRunner); | 547 visitor->trace(m_asyncRunner); |
| 548 HeapSupplement<Document>::trace(visitor); | 548 HeapSupplement<Document>::trace(visitor); |
| 549 #endif | 549 #endif |
| 550 EventTargetWithInlineData::trace(visitor); | 550 EventTargetWithInlineData::trace(visitor); |
| 551 ActiveDOMObject::trace(visitor); | 551 ActiveDOMObject::trace(visitor); |
| 552 } | 552 } |
| 553 | 553 |
| 554 } // namespace blink | 554 } // namespace blink |
| OLD | NEW |