| 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 | 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 13 matching lines...) Expand all Loading... |
| 24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | 24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
| 25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | 25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
| 26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| 29 */ | 29 */ |
| 30 | 30 |
| 31 #include "config.h" | 31 #include "config.h" |
| 32 #include "core/css/FontFace.h" | 32 #include "core/css/FontFace.h" |
| 33 | 33 |
| 34 #include "bindings/core/v8/Dictionary.h" | |
| 35 #include "bindings/core/v8/ExceptionState.h" | 34 #include "bindings/core/v8/ExceptionState.h" |
| 36 #include "bindings/core/v8/ScriptPromiseResolver.h" | 35 #include "bindings/core/v8/ScriptPromiseResolver.h" |
| 37 #include "bindings/core/v8/ScriptState.h" | 36 #include "bindings/core/v8/ScriptState.h" |
| 38 #include "core/CSSValueKeywords.h" | 37 #include "core/CSSValueKeywords.h" |
| 39 #include "core/css/BinaryDataFontFaceSource.h" | 38 #include "core/css/BinaryDataFontFaceSource.h" |
| 40 #include "core/css/CSSFontFace.h" | 39 #include "core/css/CSSFontFace.h" |
| 41 #include "core/css/CSSFontFaceSrcValue.h" | 40 #include "core/css/CSSFontFaceSrcValue.h" |
| 42 #include "core/css/CSSFontSelector.h" | 41 #include "core/css/CSSFontSelector.h" |
| 43 #include "core/css/CSSPrimitiveValue.h" | 42 #include "core/css/CSSPrimitiveValue.h" |
| 44 #include "core/css/CSSUnicodeRangeValue.h" | 43 #include "core/css/CSSUnicodeRangeValue.h" |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 96 | 95 |
| 97 static PassRefPtrWillBeRawPtr<CSSValue> parseCSSValue(const Document* document,
const String& s, CSSPropertyID propertyID) | 96 static PassRefPtrWillBeRawPtr<CSSValue> parseCSSValue(const Document* document,
const String& s, CSSPropertyID propertyID) |
| 98 { | 97 { |
| 99 if (s.isEmpty()) | 98 if (s.isEmpty()) |
| 100 return nullptr; | 99 return nullptr; |
| 101 RefPtrWillBeRawPtr<MutableStylePropertySet> parsedStyle = MutableStyleProper
tySet::create(); | 100 RefPtrWillBeRawPtr<MutableStylePropertySet> parsedStyle = MutableStyleProper
tySet::create(); |
| 102 BisonCSSParser::parseValue(parsedStyle.get(), propertyID, s, true, *document
); | 101 BisonCSSParser::parseValue(parsedStyle.get(), propertyID, s, true, *document
); |
| 103 return parsedStyle->getPropertyCSSValue(propertyID); | 102 return parsedStyle->getPropertyCSSValue(propertyID); |
| 104 } | 103 } |
| 105 | 104 |
| 106 static bool initFontFace(FontFace* fontFace, ExecutionContext* context, const At
omicString& family, const Dictionary& descriptors, ExceptionState& exceptionStat
e) | 105 static bool initFontFace(FontFace* fontFace, ExecutionContext* context, const At
omicString& family, const FontFaceDescriptors* descriptors, ExceptionState& exce
ptionState) |
| 107 { | 106 { |
| 108 fontFace->setFamily(context, family, exceptionState); | 107 fontFace->setFamily(context, family, exceptionState); |
| 109 if (exceptionState.hadException()) | 108 if (exceptionState.hadException()) |
| 110 return false; | 109 return false; |
| 111 | 110 |
| 112 String value; | 111 fontFace->setStyle(context, descriptors->style(), exceptionState); |
| 113 if (DictionaryHelper::get(descriptors, "style", value)) { | 112 if (exceptionState.hadException()) |
| 114 fontFace->setStyle(context, value, exceptionState); | 113 return false; |
| 115 if (exceptionState.hadException()) | 114 fontFace->setWeight(context, descriptors->weight(), exceptionState); |
| 116 return false; | 115 if (exceptionState.hadException()) |
| 117 } | 116 return false; |
| 118 if (DictionaryHelper::get(descriptors, "weight", value)) { | 117 fontFace->setStretch(context, descriptors->stretch(), exceptionState); |
| 119 fontFace->setWeight(context, value, exceptionState); | 118 if (exceptionState.hadException()) |
| 120 if (exceptionState.hadException()) | 119 return false; |
| 121 return false; | 120 fontFace->setUnicodeRange(context, descriptors->unicodeRange(), exceptionSta
te); |
| 122 } | 121 if (exceptionState.hadException()) |
| 123 if (DictionaryHelper::get(descriptors, "stretch", value)) { | 122 return false; |
| 124 fontFace->setStretch(context, value, exceptionState); | 123 fontFace->setVariant(context, descriptors->variant(), exceptionState); |
| 125 if (exceptionState.hadException()) | 124 if (exceptionState.hadException()) |
| 126 return false; | 125 return false; |
| 127 } | 126 fontFace->setFeatureSettings(context, descriptors->featureSettings(), except
ionState); |
| 128 if (DictionaryHelper::get(descriptors, "unicodeRange", value)) { | 127 if (exceptionState.hadException()) |
| 129 fontFace->setUnicodeRange(context, value, exceptionState); | 128 return false; |
| 130 if (exceptionState.hadException()) | |
| 131 return false; | |
| 132 } | |
| 133 if (DictionaryHelper::get(descriptors, "variant", value)) { | |
| 134 fontFace->setVariant(context, value, exceptionState); | |
| 135 if (exceptionState.hadException()) | |
| 136 return false; | |
| 137 } | |
| 138 if (DictionaryHelper::get(descriptors, "featureSettings", value)) { | |
| 139 fontFace->setFeatureSettings(context, value, exceptionState); | |
| 140 if (exceptionState.hadException()) | |
| 141 return false; | |
| 142 } | |
| 143 return true; | 129 return true; |
| 144 } | 130 } |
| 145 | 131 |
| 146 PassRefPtrWillBeRawPtr<FontFace> FontFace::create(ExecutionContext* context, con
st AtomicString& family, const String& source, const Dictionary& descriptors, Ex
ceptionState& exceptionState) | 132 PassRefPtrWillBeRawPtr<FontFace> FontFace::create(ExecutionContext* context, con
st AtomicString& family, const String& source, const FontFaceDescriptors* descri
ptors, ExceptionState& exceptionState) |
| 147 { | 133 { |
| 148 RefPtrWillBeRawPtr<CSSValue> src = parseCSSValue(toDocument(context), source
, CSSPropertySrc); | 134 RefPtrWillBeRawPtr<CSSValue> src = parseCSSValue(toDocument(context), source
, CSSPropertySrc); |
| 149 if (!src || !src->isValueList()) { | 135 if (!src || !src->isValueList()) { |
| 150 exceptionState.throwDOMException(SyntaxError, "The source provided ('" +
source + "') could not be parsed as a value list."); | 136 exceptionState.throwDOMException(SyntaxError, "The source provided ('" +
source + "') could not be parsed as a value list."); |
| 151 return nullptr; | 137 return nullptr; |
| 152 } | 138 } |
| 153 | 139 |
| 154 RefPtrWillBeRawPtr<FontFace> fontFace = adoptRefWillBeNoop(new FontFace()); | 140 RefPtrWillBeRawPtr<FontFace> fontFace = adoptRefWillBeNoop(new FontFace()); |
| 155 if (initFontFace(fontFace.get(), context, family, descriptors, exceptionStat
e)) | 141 if (initFontFace(fontFace.get(), context, family, descriptors, exceptionStat
e)) |
| 156 fontFace->initCSSFontFace(toDocument(context), src); | 142 fontFace->initCSSFontFace(toDocument(context), src); |
| 157 return fontFace.release(); | 143 return fontFace.release(); |
| 158 } | 144 } |
| 159 | 145 |
| 160 PassRefPtrWillBeRawPtr<FontFace> FontFace::create(ExecutionContext* context, con
st AtomicString& family, PassRefPtr<ArrayBuffer> source, const Dictionary& descr
iptors, ExceptionState& exceptionState) | 146 PassRefPtrWillBeRawPtr<FontFace> FontFace::create(ExecutionContext* context, con
st AtomicString& family, PassRefPtr<ArrayBuffer> source, const FontFaceDescripto
rs* descriptors, ExceptionState& exceptionState) |
| 161 { | 147 { |
| 162 RefPtrWillBeRawPtr<FontFace> fontFace = adoptRefWillBeNoop(new FontFace()); | 148 RefPtrWillBeRawPtr<FontFace> fontFace = adoptRefWillBeNoop(new FontFace()); |
| 163 if (initFontFace(fontFace.get(), context, family, descriptors, exceptionStat
e)) | 149 if (initFontFace(fontFace.get(), context, family, descriptors, exceptionStat
e)) |
| 164 fontFace->initCSSFontFace(static_cast<const unsigned char*>(source->data
()), source->byteLength()); | 150 fontFace->initCSSFontFace(static_cast<const unsigned char*>(source->data
()), source->byteLength()); |
| 165 return fontFace.release(); | 151 return fontFace.release(); |
| 166 } | 152 } |
| 167 | 153 |
| 168 PassRefPtrWillBeRawPtr<FontFace> FontFace::create(ExecutionContext* context, con
st AtomicString& family, PassRefPtr<ArrayBufferView> source, const Dictionary& d
escriptors, ExceptionState& exceptionState) | 154 PassRefPtrWillBeRawPtr<FontFace> FontFace::create(ExecutionContext* context, con
st AtomicString& family, PassRefPtr<ArrayBufferView> source, const FontFaceDescr
iptors* descriptors, ExceptionState& exceptionState) |
| 169 { | 155 { |
| 170 RefPtrWillBeRawPtr<FontFace> fontFace = adoptRefWillBeNoop(new FontFace()); | 156 RefPtrWillBeRawPtr<FontFace> fontFace = adoptRefWillBeNoop(new FontFace()); |
| 171 if (initFontFace(fontFace.get(), context, family, descriptors, exceptionStat
e)) | 157 if (initFontFace(fontFace.get(), context, family, descriptors, exceptionStat
e)) |
| 172 fontFace->initCSSFontFace(static_cast<const unsigned char*>(source->base
Address()), source->byteLength()); | 158 fontFace->initCSSFontFace(static_cast<const unsigned char*>(source->base
Address()), source->byteLength()); |
| 173 return fontFace.release(); | 159 return fontFace.release(); |
| 174 } | 160 } |
| 175 | 161 |
| 176 PassRefPtrWillBeRawPtr<FontFace> FontFace::create(Document* document, const Styl
eRuleFontFace* fontFaceRule) | 162 PassRefPtrWillBeRawPtr<FontFace> FontFace::create(Document* document, const Styl
eRuleFontFace* fontFaceRule) |
| 177 { | 163 { |
| 178 const StylePropertySet& properties = fontFaceRule->properties(); | 164 const StylePropertySet& properties = fontFaceRule->properties(); |
| (...skipping 452 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 631 visitor->trace(m_cssFontFace); | 617 visitor->trace(m_cssFontFace); |
| 632 visitor->trace(m_callbacks); | 618 visitor->trace(m_callbacks); |
| 633 } | 619 } |
| 634 | 620 |
| 635 bool FontFace::hadBlankText() const | 621 bool FontFace::hadBlankText() const |
| 636 { | 622 { |
| 637 return m_cssFontFace->hadBlankText(); | 623 return m_cssFontFace->hadBlankText(); |
| 638 } | 624 } |
| 639 | 625 |
| 640 } // namespace blink | 626 } // namespace blink |
| OLD | NEW |