Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(609)

Side by Side Diff: Source/core/css/FontFace.cpp

Issue 1164573002: CSSValue Immediates: Change CSSValue to an object instead of a pointer (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Rebase Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « Source/core/css/FontFace.h ('k') | Source/core/css/PropertySetCSSStyleDeclaration.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
55 #include "core/dom/ExceptionCode.h" 55 #include "core/dom/ExceptionCode.h"
56 #include "core/dom/StyleEngine.h" 56 #include "core/dom/StyleEngine.h"
57 #include "core/frame/LocalFrame.h" 57 #include "core/frame/LocalFrame.h"
58 #include "core/frame/Settings.h" 58 #include "core/frame/Settings.h"
59 #include "core/frame/UseCounter.h" 59 #include "core/frame/UseCounter.h"
60 #include "platform/FontFamilyNames.h" 60 #include "platform/FontFamilyNames.h"
61 #include "platform/SharedBuffer.h" 61 #include "platform/SharedBuffer.h"
62 62
63 namespace blink { 63 namespace blink {
64 64
65 static PassRefPtrWillBeRawPtr<CSSValue> parseCSSValue(const Document* document, const String& value, CSSPropertyID propertyID) 65 static NullableCSSValue parseCSSValue(const Document* document, const String& va lue, CSSPropertyID propertyID)
66 { 66 {
67 CSSParserContext context(*document, UseCounter::getFrom(document)); 67 CSSParserContext context(*document, UseCounter::getFrom(document));
68 return CSSParser::parseFontFaceDescriptor(propertyID, value, context); 68 return CSSParser::parseFontFaceDescriptor(propertyID, value, context);
69 } 69 }
70 70
71 PassRefPtrWillBeRawPtr<FontFace> FontFace::create(ExecutionContext* context, con st AtomicString& family, StringOrArrayBufferOrArrayBufferView& source, const Fon tFaceDescriptors& descriptors) 71 PassRefPtrWillBeRawPtr<FontFace> FontFace::create(ExecutionContext* context, con st AtomicString& family, StringOrArrayBufferOrArrayBufferView& source, const Fon tFaceDescriptors& descriptors)
72 { 72 {
73 if (source.isString()) 73 if (source.isString())
74 return create(context, family, source.getAsString(), descriptors); 74 return create(context, family, source.getAsString(), descriptors);
75 if (source.isArrayBuffer()) 75 if (source.isArrayBuffer())
76 return create(context, family, source.getAsArrayBuffer(), descriptors); 76 return create(context, family, source.getAsArrayBuffer(), descriptors);
77 if (source.isArrayBufferView()) 77 if (source.isArrayBufferView())
78 return create(context, family, source.getAsArrayBufferView(), descriptor s); 78 return create(context, family, source.getAsArrayBufferView(), descriptor s);
79 ASSERT_NOT_REACHED(); 79 ASSERT_NOT_REACHED();
80 return nullptr; 80 return nullptr;
81 } 81 }
82 82
83 PassRefPtrWillBeRawPtr<FontFace> FontFace::create(ExecutionContext* context, con st AtomicString& family, const String& source, const FontFaceDescriptors& descri ptors) 83 PassRefPtrWillBeRawPtr<FontFace> FontFace::create(ExecutionContext* context, con st AtomicString& family, const String& source, const FontFaceDescriptors& descri ptors)
84 { 84 {
85 RefPtrWillBeRawPtr<FontFace> fontFace = adoptRefWillBeNoop(new FontFace(cont ext, family, descriptors)); 85 RefPtrWillBeRawPtr<FontFace> fontFace = adoptRefWillBeNoop(new FontFace(cont ext, family, descriptors));
86 86
87 RefPtrWillBeRawPtr<CSSValue> src = parseCSSValue(toDocument(context), source , CSSPropertySrc); 87 NullableCSSValue src = parseCSSValue(toDocument(context), source, CSSPropert ySrc);
88 if (!src || !src->isValueList()) 88 if (!src || !src->isValueList()) {
89 fontFace->setError(DOMException::create(SyntaxError, "The source provide d ('" + source + "') could not be parsed as a value list.")); 89 fontFace->setError(DOMException::create(SyntaxError, "The source provide d ('" + source + "') could not be parsed as a value list."));
90 return fontFace;
91 }
90 92
91 fontFace->initCSSFontFace(toDocument(context), src); 93 fontFace->initCSSFontFace(toDocument(context), *src);
92 return fontFace.release(); 94 return fontFace.release();
93 } 95 }
94 96
95 PassRefPtrWillBeRawPtr<FontFace> FontFace::create(ExecutionContext* context, con st AtomicString& family, PassRefPtr<DOMArrayBuffer> source, const FontFaceDescri ptors& descriptors) 97 PassRefPtrWillBeRawPtr<FontFace> FontFace::create(ExecutionContext* context, con st AtomicString& family, PassRefPtr<DOMArrayBuffer> source, const FontFaceDescri ptors& descriptors)
96 { 98 {
97 RefPtrWillBeRawPtr<FontFace> fontFace = adoptRefWillBeNoop(new FontFace(cont ext, family, descriptors)); 99 RefPtrWillBeRawPtr<FontFace> fontFace = adoptRefWillBeNoop(new FontFace(cont ext, family, descriptors));
98 fontFace->initCSSFontFace(static_cast<const unsigned char*>(source->data()), source->byteLength()); 100 fontFace->initCSSFontFace(static_cast<const unsigned char*>(source->data()), source->byteLength());
99 return fontFace.release(); 101 return fontFace.release();
100 } 102 }
101 103
102 PassRefPtrWillBeRawPtr<FontFace> FontFace::create(ExecutionContext* context, con st AtomicString& family, PassRefPtr<DOMArrayBufferView> source, const FontFaceDe scriptors& descriptors) 104 PassRefPtrWillBeRawPtr<FontFace> FontFace::create(ExecutionContext* context, con st AtomicString& family, PassRefPtr<DOMArrayBufferView> source, const FontFaceDe scriptors& descriptors)
103 { 105 {
104 RefPtrWillBeRawPtr<FontFace> fontFace = adoptRefWillBeNoop(new FontFace(cont ext, family, descriptors)); 106 RefPtrWillBeRawPtr<FontFace> fontFace = adoptRefWillBeNoop(new FontFace(cont ext, family, descriptors));
105 fontFace->initCSSFontFace(static_cast<const unsigned char*>(source->baseAddr ess()), source->byteLength()); 107 fontFace->initCSSFontFace(static_cast<const unsigned char*>(source->baseAddr ess()), source->byteLength());
106 return fontFace.release(); 108 return fontFace.release();
107 } 109 }
108 110
109 PassRefPtrWillBeRawPtr<FontFace> FontFace::create(Document* document, const Styl eRuleFontFace* fontFaceRule) 111 PassRefPtrWillBeRawPtr<FontFace> FontFace::create(Document* document, const Styl eRuleFontFace* fontFaceRule)
110 { 112 {
111 const StylePropertySet& properties = fontFaceRule->properties(); 113 const StylePropertySet& properties = fontFaceRule->properties();
112 114
113 // Obtain the font-family property and the src property. Both must be define d. 115 // Obtain the font-family property and the src property. Both must be define d.
114 RefPtrWillBeRawPtr<CSSValue> family = properties.getPropertyCSSValue(CSSProp ertyFontFamily); 116 NullableCSSValue family = properties.getPropertyCSSValue(CSSPropertyFontFami ly);
115 if (!family || !family->isValueList()) 117 if (!family || !family->isValueList())
116 return nullptr; 118 return nullptr;
117 RefPtrWillBeRawPtr<CSSValue> src = properties.getPropertyCSSValue(CSSPropert ySrc); 119 NullableCSSValue src = properties.getPropertyCSSValue(CSSPropertySrc);
118 if (!src || !src->isValueList()) 120 if (!src || !src->isValueList())
119 return nullptr; 121 return nullptr;
120 122
121 RefPtrWillBeRawPtr<FontFace> fontFace = adoptRefWillBeNoop(new FontFace(docu ment)); 123 RefPtrWillBeRawPtr<FontFace> fontFace = adoptRefWillBeNoop(new FontFace(docu ment));
122 124
123 if (fontFace->setFamilyValue(toCSSValueList(family.get())) 125 if (fontFace->setFamilyValue(toCSSValueList(family))
124 && fontFace->setPropertyFromStyle(properties, CSSPropertyFontStyle) 126 && fontFace->setPropertyFromStyle(properties, CSSPropertyFontStyle)
125 && fontFace->setPropertyFromStyle(properties, CSSPropertyFontWeight) 127 && fontFace->setPropertyFromStyle(properties, CSSPropertyFontWeight)
126 && fontFace->setPropertyFromStyle(properties, CSSPropertyFontStretch) 128 && fontFace->setPropertyFromStyle(properties, CSSPropertyFontStretch)
127 && fontFace->setPropertyFromStyle(properties, CSSPropertyUnicodeRange) 129 && fontFace->setPropertyFromStyle(properties, CSSPropertyUnicodeRange)
128 && fontFace->setPropertyFromStyle(properties, CSSPropertyFontVariant) 130 && fontFace->setPropertyFromStyle(properties, CSSPropertyFontVariant)
129 && fontFace->setPropertyFromStyle(properties, CSSPropertyWebkitFontFeatu reSettings) 131 && fontFace->setPropertyFromStyle(properties, CSSPropertyWebkitFontFeatu reSettings)
130 && !fontFace->family().isEmpty() 132 && !fontFace->family().isEmpty()
131 && fontFace->traits().bitfield()) { 133 && fontFace->traits().bitfield()) {
132 fontFace->initCSSFontFace(document, src); 134 fontFace->initCSSFontFace(document, *src);
133 return fontFace.release(); 135 return fontFace.release();
134 } 136 }
135 return nullptr; 137 return nullptr;
136 } 138 }
137 139
138 FontFace::FontFace(ExecutionContext* context) 140 FontFace::FontFace(ExecutionContext* context)
139 : ActiveDOMObject(context) 141 : ActiveDOMObject(context)
140 , m_status(Unloaded) 142 , m_status(Unloaded)
141 { 143 {
142 suspendIfNeeded(); 144 suspendIfNeeded();
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
217 setPropertyFromString(toDocument(context), s, CSSPropertyFontVariant, &excep tionState); 219 setPropertyFromString(toDocument(context), s, CSSPropertyFontVariant, &excep tionState);
218 } 220 }
219 221
220 void FontFace::setFeatureSettings(ExecutionContext* context, const String& s, Ex ceptionState& exceptionState) 222 void FontFace::setFeatureSettings(ExecutionContext* context, const String& s, Ex ceptionState& exceptionState)
221 { 223 {
222 setPropertyFromString(toDocument(context), s, CSSPropertyWebkitFontFeatureSe ttings, &exceptionState); 224 setPropertyFromString(toDocument(context), s, CSSPropertyWebkitFontFeatureSe ttings, &exceptionState);
223 } 225 }
224 226
225 void FontFace::setPropertyFromString(const Document* document, const String& s, CSSPropertyID propertyID, ExceptionState* exceptionState) 227 void FontFace::setPropertyFromString(const Document* document, const String& s, CSSPropertyID propertyID, ExceptionState* exceptionState)
226 { 228 {
227 RefPtrWillBeRawPtr<CSSValue> value = parseCSSValue(document, s, propertyID); 229 NullableCSSValue value = parseCSSValue(document, s, propertyID);
228 if (value && setPropertyValue(value, propertyID)) 230 if (value && setPropertyValue(value, propertyID))
229 return; 231 return;
230 232
231 String message = "Failed to set '" + s + "' as a property value."; 233 String message = "Failed to set '" + s + "' as a property value.";
232 if (exceptionState) 234 if (exceptionState)
233 exceptionState->throwDOMException(SyntaxError, message); 235 exceptionState->throwDOMException(SyntaxError, message);
234 else 236 else
235 setError(DOMException::create(SyntaxError, message)); 237 setError(DOMException::create(SyntaxError, message));
236 } 238 }
237 239
238 bool FontFace::setPropertyFromStyle(const StylePropertySet& properties, CSSPrope rtyID propertyID) 240 bool FontFace::setPropertyFromStyle(const StylePropertySet& properties, CSSPrope rtyID propertyID)
239 { 241 {
240 return setPropertyValue(properties.getPropertyCSSValue(propertyID), property ID); 242 return setPropertyValue(properties.getPropertyCSSValue(propertyID), property ID);
241 } 243 }
242 244
243 bool FontFace::setPropertyValue(PassRefPtrWillBeRawPtr<CSSValue> value, CSSPrope rtyID propertyID) 245 bool FontFace::setPropertyValue(NullableCSSValue value, CSSPropertyID propertyID )
244 { 246 {
245 switch (propertyID) { 247 switch (propertyID) {
246 case CSSPropertyFontStyle: 248 case CSSPropertyFontStyle:
247 m_style = value; 249 m_style = value;
248 break; 250 break;
249 case CSSPropertyFontWeight: 251 case CSSPropertyFontWeight:
250 m_weight = value; 252 m_weight = value;
251 break; 253 break;
252 case CSSPropertyFontStretch: 254 case CSSPropertyFontStretch:
253 m_stretch = value; 255 m_stretch = value;
(...skipping 15 matching lines...) Expand all
269 } 271 }
270 return true; 272 return true;
271 } 273 }
272 274
273 bool FontFace::setFamilyValue(CSSValueList* familyList) 275 bool FontFace::setFamilyValue(CSSValueList* familyList)
274 { 276 {
275 // The font-family descriptor has to have exactly one family name. 277 // The font-family descriptor has to have exactly one family name.
276 if (familyList->length() != 1) 278 if (familyList->length() != 1)
277 return false; 279 return false;
278 280
279 CSSPrimitiveValue* familyValue = toCSSPrimitiveValue(familyList->item(0)); 281 CSSPrimitiveValue& familyValue = toCSSPrimitiveValue(familyList->item(0));
280 AtomicString family; 282 AtomicString family;
281 if (familyValue->isCustomIdent()) { 283 if (familyValue.isCustomIdent()) {
282 family = AtomicString(familyValue->getStringValue()); 284 family = AtomicString(familyValue.getStringValue());
283 } else if (familyValue->isValueID()) { 285 } else if (familyValue.isValueID()) {
284 // We need to use the raw text for all the generic family types, since @ font-face is a way of actually 286 // We need to use the raw text for all the generic family types, since @ font-face is a way of actually
285 // defining what font to use for those types. 287 // defining what font to use for those types.
286 switch (familyValue->getValueID()) { 288 switch (familyValue.getValueID()) {
287 case CSSValueSerif: 289 case CSSValueSerif:
288 family = FontFamilyNames::webkit_serif; 290 family = FontFamilyNames::webkit_serif;
289 break; 291 break;
290 case CSSValueSansSerif: 292 case CSSValueSansSerif:
291 family = FontFamilyNames::webkit_sans_serif; 293 family = FontFamilyNames::webkit_sans_serif;
292 break; 294 break;
293 case CSSValueCursive: 295 case CSSValueCursive:
294 family = FontFamilyNames::webkit_cursive; 296 family = FontFamilyNames::webkit_cursive;
295 break; 297 break;
296 case CSSValueFantasy: 298 case CSSValueFantasy:
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
396 toDocument(context)->styleEngine().fontSelector()->fontLoader()->loadPending Fonts(); 398 toDocument(context)->styleEngine().fontSelector()->fontLoader()->loadPending Fonts();
397 } 399 }
398 400
399 FontTraits FontFace::traits() const 401 FontTraits FontFace::traits() const
400 { 402 {
401 FontStyle style = FontStyleNormal; 403 FontStyle style = FontStyleNormal;
402 if (m_style) { 404 if (m_style) {
403 if (!m_style->isPrimitiveValue()) 405 if (!m_style->isPrimitiveValue())
404 return 0; 406 return 0;
405 407
406 switch (toCSSPrimitiveValue(m_style.get())->getValueID()) { 408 switch (toCSSPrimitiveValue(m_style)->getValueID()) {
407 case CSSValueNormal: 409 case CSSValueNormal:
408 style = FontStyleNormal; 410 style = FontStyleNormal;
409 break; 411 break;
410 case CSSValueItalic: 412 case CSSValueItalic:
411 case CSSValueOblique: 413 case CSSValueOblique:
412 style = FontStyleItalic; 414 style = FontStyleItalic;
413 break; 415 break;
414 default: 416 default:
415 break; 417 break;
416 } 418 }
417 } 419 }
418 420
419 FontWeight weight = FontWeight400; 421 FontWeight weight = FontWeight400;
420 if (m_weight) { 422 if (m_weight) {
421 if (!m_weight->isPrimitiveValue()) 423 if (!m_weight->isPrimitiveValue())
422 return 0; 424 return 0;
423 425
424 switch (toCSSPrimitiveValue(m_weight.get())->getValueID()) { 426 switch (toCSSPrimitiveValue(m_weight)->getValueID()) {
425 case CSSValueBold: 427 case CSSValueBold:
426 case CSSValue700: 428 case CSSValue700:
427 weight = FontWeight700; 429 weight = FontWeight700;
428 break; 430 break;
429 case CSSValueNormal: 431 case CSSValueNormal:
430 case CSSValue400: 432 case CSSValue400:
431 weight = FontWeight400; 433 weight = FontWeight400;
432 break; 434 break;
433 case CSSValue900: 435 case CSSValue900:
434 weight = FontWeight900; 436 weight = FontWeight900;
(...skipping 21 matching lines...) Expand all
456 case CSSValueLighter: 458 case CSSValueLighter:
457 case CSSValueBolder: 459 case CSSValueBolder:
458 break; 460 break;
459 default: 461 default:
460 ASSERT_NOT_REACHED(); 462 ASSERT_NOT_REACHED();
461 break; 463 break;
462 } 464 }
463 } 465 }
464 466
465 FontVariant variant = FontVariantNormal; 467 FontVariant variant = FontVariantNormal;
466 if (RefPtrWillBeRawPtr<CSSValue> fontVariant = m_variant) { 468 if (NullableCSSValue fontVariant = m_variant) {
467 // font-variant descriptor can be a value list. 469 // font-variant descriptor can be a value list.
468 if (fontVariant->isPrimitiveValue()) { 470 if (fontVariant->isPrimitiveValue()) {
469 RefPtrWillBeRawPtr<CSSValueList> list = CSSValueList::createCommaSep arated(); 471 RefPtrWillBeRawPtr<CSSValueList> list = CSSValueList::createCommaSep arated();
470 list->append(fontVariant); 472 list->append(*fontVariant);
471 fontVariant = list; 473 fontVariant = list;
472 } else if (!fontVariant->isValueList()) { 474 } else if (!fontVariant->isValueList()) {
473 return 0; 475 return 0;
474 } 476 }
475 477
476 CSSValueList* variantList = toCSSValueList(fontVariant.get()); 478 CSSValueList* variantList = toCSSValueList(fontVariant);
477 unsigned numVariants = variantList->length(); 479 unsigned numVariants = variantList->length();
478 if (!numVariants) 480 if (!numVariants)
479 return 0; 481 return 0;
480 482
481 for (unsigned i = 0; i < numVariants; ++i) { 483 for (unsigned i = 0; i < numVariants; ++i) {
482 switch (toCSSPrimitiveValue(variantList->item(i))->getValueID()) { 484 switch (toCSSPrimitiveValue(variantList->item(i)).getValueID()) {
483 case CSSValueNormal: 485 case CSSValueNormal:
484 variant = FontVariantNormal; 486 variant = FontVariantNormal;
485 break; 487 break;
486 case CSSValueSmallCaps: 488 case CSSValueSmallCaps:
487 variant = FontVariantSmallCaps; 489 variant = FontVariantSmallCaps;
488 break; 490 break;
489 default: 491 default:
490 break; 492 break;
491 } 493 }
492 } 494 }
493 } 495 }
494 496
495 return FontTraits(style, variant, weight, FontStretchNormal); 497 return FontTraits(style, variant, weight, FontStretchNormal);
496 } 498 }
497 499
498 static PassOwnPtrWillBeRawPtr<CSSFontFace> createCSSFontFace(FontFace* fontFace, CSSValue* unicodeRange) 500 static PassOwnPtrWillBeRawPtr<CSSFontFace> createCSSFontFace(FontFace* fontFace, NullableCSSValue unicodeRange)
499 { 501 {
500 Vector<CSSFontFace::UnicodeRange> ranges; 502 Vector<CSSFontFace::UnicodeRange> ranges;
501 if (CSSValueList* rangeList = toCSSValueList(unicodeRange)) { 503 if (CSSValueList* rangeList = toCSSValueList(unicodeRange)) {
502 unsigned numRanges = rangeList->length(); 504 unsigned numRanges = rangeList->length();
503 for (unsigned i = 0; i < numRanges; i++) { 505 for (unsigned i = 0; i < numRanges; i++) {
504 CSSUnicodeRangeValue* range = toCSSUnicodeRangeValue(rangeList->item (i)); 506 CSSUnicodeRangeValue& range = toCSSUnicodeRangeValue(rangeList->item (i));
505 ranges.append(CSSFontFace::UnicodeRange(range->from(), range->to())) ; 507 ranges.append(CSSFontFace::UnicodeRange(range.from(), range.to()));
506 } 508 }
507 } 509 }
508 510
509 return adoptPtrWillBeNoop(new CSSFontFace(fontFace, ranges)); 511 return adoptPtrWillBeNoop(new CSSFontFace(fontFace, ranges));
510 } 512 }
511 513
512 void FontFace::initCSSFontFace(Document* document, PassRefPtrWillBeRawPtr<CSSVal ue> src) 514 void FontFace::initCSSFontFace(Document* document, CSSValue src)
513 { 515 {
514 m_cssFontFace = createCSSFontFace(this, m_unicodeRange.get()); 516 m_cssFontFace = createCSSFontFace(this, m_unicodeRange);
515 if (m_error) 517 if (m_error)
516 return; 518 return;
517 519
518 // Each item in the src property's list is a single CSSFontFaceSource. Put t hem all into a CSSFontFace. 520 // Each item in the src property's list is a single CSSFontFaceSource. Put t hem all into a CSSFontFace.
519 ASSERT(src); 521 ASSERT(src.isValueList());
520 ASSERT(src->isValueList()); 522 CSSValueList& srcList = toCSSValueList(src);
521 CSSValueList* srcList = toCSSValueList(src.get()); 523 int srcLength = srcList.length();
522 int srcLength = srcList->length();
523 524
524 for (int i = 0; i < srcLength; i++) { 525 for (int i = 0; i < srcLength; i++) {
525 // An item in the list either specifies a string (local font name) or a URL (remote font to download). 526 // An item in the list either specifies a string (local font name) or a URL (remote font to download).
526 CSSFontFaceSrcValue* item = toCSSFontFaceSrcValue(srcList->item(i)); 527 CSSFontFaceSrcValue& item = toCSSFontFaceSrcValue(srcList.item(i));
527 OwnPtrWillBeRawPtr<CSSFontFaceSource> source = nullptr; 528 OwnPtrWillBeRawPtr<CSSFontFaceSource> source = nullptr;
528 529
529 if (!item->isLocal()) { 530 if (!item.isLocal()) {
530 Settings* settings = document ? document->frame() ? document->frame( )->settings() : 0 : 0; 531 Settings* settings = document ? document->frame() ? document->frame( )->settings() : 0 : 0;
531 bool allowDownloading = settings && settings->downloadableBinaryFont sEnabled(); 532 bool allowDownloading = settings && settings->downloadableBinaryFont sEnabled();
532 if (allowDownloading && item->isSupportedFormat() && document) { 533 if (allowDownloading && item.isSupportedFormat() && document) {
533 FontResource* fetched = item->fetch(document); 534 FontResource* fetched = item.fetch(document);
534 if (fetched) { 535 if (fetched) {
535 FontLoader* fontLoader = document->styleEngine().fontSelecto r()->fontLoader(); 536 FontLoader* fontLoader = document->styleEngine().fontSelecto r()->fontLoader();
536 source = adoptPtrWillBeNoop(new RemoteFontFaceSource(fetched , fontLoader)); 537 source = adoptPtrWillBeNoop(new RemoteFontFaceSource(fetched , fontLoader));
537 } 538 }
538 } 539 }
539 } else { 540 } else {
540 source = adoptPtrWillBeNoop(new LocalFontFaceSource(item->resource() )); 541 source = adoptPtrWillBeNoop(new LocalFontFaceSource(item.resource()) );
541 } 542 }
542 543
543 if (source) 544 if (source)
544 m_cssFontFace->addSource(source.release()); 545 m_cssFontFace->addSource(source.release());
545 } 546 }
546 } 547 }
547 548
548 void FontFace::initCSSFontFace(const unsigned char* data, unsigned size) 549 void FontFace::initCSSFontFace(const unsigned char* data, unsigned size)
549 { 550 {
550 m_cssFontFace = createCSSFontFace(this, m_unicodeRange.get()); 551 m_cssFontFace = createCSSFontFace(this, m_unicodeRange);
551 if (m_error) 552 if (m_error)
552 return; 553 return;
553 554
554 RefPtr<SharedBuffer> buffer = SharedBuffer::create(data, size); 555 RefPtr<SharedBuffer> buffer = SharedBuffer::create(data, size);
555 OwnPtrWillBeRawPtr<BinaryDataFontFaceSource> source = adoptPtrWillBeNoop(new BinaryDataFontFaceSource(buffer.get(), m_otsParseMessage)); 556 OwnPtrWillBeRawPtr<BinaryDataFontFaceSource> source = adoptPtrWillBeNoop(new BinaryDataFontFaceSource(buffer.get(), m_otsParseMessage));
556 if (source->isValid()) 557 if (source->isValid())
557 setLoadStatus(Loaded); 558 setLoadStatus(Loaded);
558 else 559 else
559 setError(DOMException::create(SyntaxError, "Invalid font data in ArrayBu ffer.")); 560 setError(DOMException::create(SyntaxError, "Invalid font data in ArrayBu ffer."));
560 m_cssFontFace->addSource(source.release()); 561 m_cssFontFace->addSource(source.release());
(...skipping 19 matching lines...) Expand all
580 { 581 {
581 return m_cssFontFace->hadBlankText(); 582 return m_cssFontFace->hadBlankText();
582 } 583 }
583 584
584 bool FontFace::hasPendingActivity() const 585 bool FontFace::hasPendingActivity() const
585 { 586 {
586 return m_status == Loading && executionContext() && !executionContext()->act iveDOMObjectsAreStopped(); 587 return m_status == Loading && executionContext() && !executionContext()->act iveDOMObjectsAreStopped();
587 } 588 }
588 589
589 } // namespace blink 590 } // namespace blink
OLDNEW
« no previous file with comments | « Source/core/css/FontFace.h ('k') | Source/core/css/PropertySetCSSStyleDeclaration.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698