| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2011 Andreas Kling (kling@webkit.org) | 2 * Copyright (C) 2011 Andreas Kling (kling@webkit.org) |
| 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 | 5 * modification, are permitted provided that the following conditions |
| 6 * are met: | 6 * are met: |
| 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 |
| 11 * documentation and/or other materials provided with the distribution. | 11 * documentation and/or other materials provided with the distribution. |
| 12 * | 12 * |
| 13 * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY | 13 * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY |
| 14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | 14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
| 15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR | 15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
| 16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR | 16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR |
| 17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, | 17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, |
| 18 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, | 18 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, |
| 19 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR | 19 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR |
| 20 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY | 20 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY |
| 21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| 22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| 23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| 24 * | 24 * |
| 25 */ | 25 */ |
| 26 | 26 |
| 27 #include "config.h" | 27 #include "config.h" |
| 28 #include "core/css/CSSValue.h" | 28 #include "core/css/CSSValueObject.h" |
| 29 | 29 |
| 30 #include "core/css/CSSBorderImageSliceValue.h" | 30 #include "core/css/CSSBorderImageSliceValue.h" |
| 31 #include "core/css/CSSCalculationValue.h" | 31 #include "core/css/CSSCalculationValue.h" |
| 32 #include "core/css/CSSCanvasValue.h" | 32 #include "core/css/CSSCanvasValue.h" |
| 33 #include "core/css/CSSContentDistributionValue.h" | 33 #include "core/css/CSSContentDistributionValue.h" |
| 34 #include "core/css/CSSCrossfadeValue.h" | 34 #include "core/css/CSSCrossfadeValue.h" |
| 35 #include "core/css/CSSCursorImageValue.h" | 35 #include "core/css/CSSCursorImageValue.h" |
| 36 #include "core/css/CSSFontFaceSrcValue.h" | 36 #include "core/css/CSSFontFaceSrcValue.h" |
| 37 #include "core/css/CSSFontFeatureValue.h" | 37 #include "core/css/CSSFontFeatureValue.h" |
| 38 #include "core/css/CSSFunctionValue.h" | 38 #include "core/css/CSSFunctionValue.h" |
| (...skipping 10 matching lines...) Expand all Loading... |
| 49 #include "core/css/CSSReflectValue.h" | 49 #include "core/css/CSSReflectValue.h" |
| 50 #include "core/css/CSSSVGDocumentValue.h" | 50 #include "core/css/CSSSVGDocumentValue.h" |
| 51 #include "core/css/CSSShadowValue.h" | 51 #include "core/css/CSSShadowValue.h" |
| 52 #include "core/css/CSSTimingFunctionValue.h" | 52 #include "core/css/CSSTimingFunctionValue.h" |
| 53 #include "core/css/CSSUnicodeRangeValue.h" | 53 #include "core/css/CSSUnicodeRangeValue.h" |
| 54 #include "core/css/CSSUnsetValue.h" | 54 #include "core/css/CSSUnsetValue.h" |
| 55 #include "core/css/CSSValueList.h" | 55 #include "core/css/CSSValueList.h" |
| 56 | 56 |
| 57 namespace blink { | 57 namespace blink { |
| 58 | 58 |
| 59 struct SameSizeAsCSSValue : public RefCountedWillBeGarbageCollectedFinalized<Sam
eSizeAsCSSValue> | 59 struct SameSizeAsCSSValueObject : public RefCountedWillBeGarbageCollectedFinaliz
ed<SameSizeAsCSSValueObject> { |
| 60 { | |
| 61 uint32_t bitfields; | 60 uint32_t bitfields; |
| 62 }; | 61 }; |
| 63 | 62 |
| 64 static_assert(sizeof(CSSValue) <= sizeof(SameSizeAsCSSValue), "CSSValue should s
tay small"); | 63 static_assert(sizeof(CSSValueObject) <= sizeof(SameSizeAsCSSValueObject), "CSSVa
lueObject should stay small"); |
| 65 | 64 |
| 66 bool CSSValue::isImplicitInitialValue() const | 65 bool CSSValueObject::isImplicitInitialValue() const |
| 67 { | 66 { |
| 68 return m_classType == InitialClass && toCSSInitialValue(this)->isImplicit(); | 67 return m_classType == InitialClass && toCSSInitialValue(this)->isImplicit(); |
| 69 } | 68 } |
| 70 | 69 |
| 71 bool CSSValue::hasFailedOrCanceledSubresources() const | 70 bool CSSValueObject::hasFailedOrCanceledSubresources() const |
| 72 { | 71 { |
| 73 if (isValueList()) | 72 if (isValueList()) |
| 74 return toCSSValueList(this)->hasFailedOrCanceledSubresources(); | 73 return toCSSValueList(this)->hasFailedOrCanceledSubresources(); |
| 75 if (classType() == FontFaceSrcClass) | 74 if (classType() == FontFaceSrcClass) |
| 76 return toCSSFontFaceSrcValue(this)->hasFailedOrCanceledSubresources(); | 75 return toCSSFontFaceSrcValue(this)->hasFailedOrCanceledSubresources(); |
| 77 if (classType() == ImageClass) | 76 if (classType() == ImageClass) |
| 78 return toCSSImageValue(this)->hasFailedOrCanceledSubresources(); | 77 return toCSSImageValue(this)->hasFailedOrCanceledSubresources(); |
| 79 if (classType() == CrossfadeClass) | 78 if (classType() == CrossfadeClass) |
| 80 return toCSSCrossfadeValue(this)->hasFailedOrCanceledSubresources(); | 79 return toCSSCrossfadeValue(this)->hasFailedOrCanceledSubresources(); |
| 81 if (classType() == ImageSetClass) | 80 if (classType() == ImageSetClass) |
| 82 return toCSSImageSetValue(this)->hasFailedOrCanceledSubresources(); | 81 return toCSSImageSetValue(this)->hasFailedOrCanceledSubresources(); |
| 83 | 82 |
| 84 return false; | 83 return false; |
| 85 } | 84 } |
| 86 | 85 |
| 87 template<class ChildClassType> | 86 template<class ChildClassType> |
| 88 inline static bool compareCSSValues(const CSSValue& first, const CSSValue& secon
d) | 87 inline static bool compareCSSValues(const CSSValueObject& first, const CSSValueO
bject& second) |
| 89 { | 88 { |
| 90 return static_cast<const ChildClassType&>(first).equals(static_cast<const Ch
ildClassType&>(second)); | 89 return static_cast<const ChildClassType&>(first).equals(static_cast<const Ch
ildClassType&>(second)); |
| 91 } | 90 } |
| 92 | 91 |
| 93 bool CSSValue::equals(const CSSValue& other) const | 92 bool CSSValueObject::equals(const CSSValueObject& other) const |
| 94 { | 93 { |
| 95 if (m_classType == other.m_classType) { | 94 if (m_classType == other.m_classType) { |
| 96 switch (m_classType) { | 95 switch (m_classType) { |
| 97 case BorderImageSliceClass: | 96 case BorderImageSliceClass: |
| 98 return compareCSSValues<CSSBorderImageSliceValue>(*this, other); | 97 return compareCSSValues<CSSBorderImageSliceValue>(*this, other); |
| 99 case CanvasClass: | 98 case CanvasClass: |
| 100 return compareCSSValues<CSSCanvasValue>(*this, other); | 99 return compareCSSValues<CSSCanvasValue>(*this, other); |
| 101 case CursorImageClass: | 100 case CursorImageClass: |
| 102 return compareCSSValues<CSSCursorImageValue>(*this, other); | 101 return compareCSSValues<CSSCursorImageValue>(*this, other); |
| 103 case FontFaceSrcClass: | 102 case FontFaceSrcClass: |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 151 case CSSContentDistributionClass: | 150 case CSSContentDistributionClass: |
| 152 return compareCSSValues<CSSContentDistributionValue>(*this, other); | 151 return compareCSSValues<CSSContentDistributionValue>(*this, other); |
| 153 default: | 152 default: |
| 154 ASSERT_NOT_REACHED(); | 153 ASSERT_NOT_REACHED(); |
| 155 return false; | 154 return false; |
| 156 } | 155 } |
| 157 } | 156 } |
| 158 return false; | 157 return false; |
| 159 } | 158 } |
| 160 | 159 |
| 161 String CSSValue::cssText() const | 160 String CSSValueObject::cssText() const |
| 162 { | 161 { |
| 163 switch (classType()) { | 162 switch (classType()) { |
| 164 case BorderImageSliceClass: | 163 case BorderImageSliceClass: |
| 165 return toCSSBorderImageSliceValue(this)->customCSSText(); | 164 return toCSSBorderImageSliceValue(this)->customCSSText(); |
| 166 case CanvasClass: | 165 case CanvasClass: |
| 167 return toCSSCanvasValue(this)->customCSSText(); | 166 return toCSSCanvasValue(this)->customCSSText(); |
| 168 case CursorImageClass: | 167 case CursorImageClass: |
| 169 return toCSSCursorImageValue(this)->customCSSText(); | 168 return toCSSCursorImageValue(this)->customCSSText(); |
| 170 case FontFaceSrcClass: | 169 case FontFaceSrcClass: |
| 171 return toCSSFontFaceSrcValue(this)->customCSSText(); | 170 return toCSSFontFaceSrcValue(this)->customCSSText(); |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 215 return toCSSImageSetValue(this)->customCSSText(); | 214 return toCSSImageSetValue(this)->customCSSText(); |
| 216 case CSSSVGDocumentClass: | 215 case CSSSVGDocumentClass: |
| 217 return toCSSSVGDocumentValue(this)->customCSSText(); | 216 return toCSSSVGDocumentValue(this)->customCSSText(); |
| 218 case CSSContentDistributionClass: | 217 case CSSContentDistributionClass: |
| 219 return toCSSContentDistributionValue(this)->customCSSText(); | 218 return toCSSContentDistributionValue(this)->customCSSText(); |
| 220 } | 219 } |
| 221 ASSERT_NOT_REACHED(); | 220 ASSERT_NOT_REACHED(); |
| 222 return String(); | 221 return String(); |
| 223 } | 222 } |
| 224 | 223 |
| 225 void CSSValue::destroy() | 224 void CSSValueObject::destroy() |
| 226 { | 225 { |
| 227 switch (classType()) { | 226 switch (classType()) { |
| 228 case BorderImageSliceClass: | 227 case BorderImageSliceClass: |
| 229 delete toCSSBorderImageSliceValue(this); | 228 delete toCSSBorderImageSliceValue(this); |
| 230 return; | 229 return; |
| 231 case CanvasClass: | 230 case CanvasClass: |
| 232 delete toCSSCanvasValue(this); | 231 delete toCSSCanvasValue(this); |
| 233 return; | 232 return; |
| 234 case CursorImageClass: | 233 case CursorImageClass: |
| 235 delete toCSSCursorImageValue(this); | 234 delete toCSSCursorImageValue(this); |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 306 case CSSSVGDocumentClass: | 305 case CSSSVGDocumentClass: |
| 307 delete toCSSSVGDocumentValue(this); | 306 delete toCSSSVGDocumentValue(this); |
| 308 return; | 307 return; |
| 309 case CSSContentDistributionClass: | 308 case CSSContentDistributionClass: |
| 310 delete toCSSContentDistributionValue(this); | 309 delete toCSSContentDistributionValue(this); |
| 311 return; | 310 return; |
| 312 } | 311 } |
| 313 ASSERT_NOT_REACHED(); | 312 ASSERT_NOT_REACHED(); |
| 314 } | 313 } |
| 315 | 314 |
| 316 void CSSValue::finalizeGarbageCollectedObject() | 315 void CSSValueObject::finalizeGarbageCollectedObject() |
| 317 { | 316 { |
| 318 switch (classType()) { | 317 switch (classType()) { |
| 319 case BorderImageSliceClass: | 318 case BorderImageSliceClass: |
| 320 toCSSBorderImageSliceValue(this)->~CSSBorderImageSliceValue(); | 319 toCSSBorderImageSliceValue(this)->~CSSBorderImageSliceValue(); |
| 321 return; | 320 return; |
| 322 case CanvasClass: | 321 case CanvasClass: |
| 323 toCSSCanvasValue(this)->~CSSCanvasValue(); | 322 toCSSCanvasValue(this)->~CSSCanvasValue(); |
| 324 return; | 323 return; |
| 325 case CursorImageClass: | 324 case CursorImageClass: |
| 326 toCSSCursorImageValue(this)->~CSSCursorImageValue(); | 325 toCSSCursorImageValue(this)->~CSSCursorImageValue(); |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 397 case CSSSVGDocumentClass: | 396 case CSSSVGDocumentClass: |
| 398 toCSSSVGDocumentValue(this)->~CSSSVGDocumentValue(); | 397 toCSSSVGDocumentValue(this)->~CSSSVGDocumentValue(); |
| 399 return; | 398 return; |
| 400 case CSSContentDistributionClass: | 399 case CSSContentDistributionClass: |
| 401 toCSSContentDistributionValue(this)->~CSSContentDistributionValue(); | 400 toCSSContentDistributionValue(this)->~CSSContentDistributionValue(); |
| 402 return; | 401 return; |
| 403 } | 402 } |
| 404 ASSERT_NOT_REACHED(); | 403 ASSERT_NOT_REACHED(); |
| 405 } | 404 } |
| 406 | 405 |
| 407 DEFINE_TRACE(CSSValue) | 406 DEFINE_TRACE(CSSValueObject) |
| 408 { | 407 { |
| 409 switch (classType()) { | 408 switch (classType()) { |
| 410 case BorderImageSliceClass: | 409 case BorderImageSliceClass: |
| 411 toCSSBorderImageSliceValue(this)->traceAfterDispatch(visitor); | 410 toCSSBorderImageSliceValue(this)->traceAfterDispatch(visitor); |
| 412 return; | 411 return; |
| 413 case CanvasClass: | 412 case CanvasClass: |
| 414 toCSSCanvasValue(this)->traceAfterDispatch(visitor); | 413 toCSSCanvasValue(this)->traceAfterDispatch(visitor); |
| 415 return; | 414 return; |
| 416 case CursorImageClass: | 415 case CursorImageClass: |
| 417 toCSSCursorImageValue(this)->traceAfterDispatch(visitor); | 416 toCSSCursorImageValue(this)->traceAfterDispatch(visitor); |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 489 toCSSSVGDocumentValue(this)->traceAfterDispatch(visitor); | 488 toCSSSVGDocumentValue(this)->traceAfterDispatch(visitor); |
| 490 return; | 489 return; |
| 491 case CSSContentDistributionClass: | 490 case CSSContentDistributionClass: |
| 492 toCSSContentDistributionValue(this)->traceAfterDispatch(visitor); | 491 toCSSContentDistributionValue(this)->traceAfterDispatch(visitor); |
| 493 return; | 492 return; |
| 494 } | 493 } |
| 495 ASSERT_NOT_REACHED(); | 494 ASSERT_NOT_REACHED(); |
| 496 } | 495 } |
| 497 | 496 |
| 498 } | 497 } |
| OLD | NEW |