Changeset 80463 in webkit
- Timestamp:
- Mar 7, 2011 3:19:12 AM (13 years ago)
- Location:
- trunk
- Files:
-
- 5 added
- 16 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r80462 r80463 1 2011-03-07 Antti Koivisto <antti@apple.com> 2 3 Reviewed by Oliver Hunt. 4 5 REGRESSION (r79574): fast/dom/global-constructors.html failing on Windows 7 Release (Tests) bots 6 https://bugs.webkit.org/show_bug.cgi?id=55166 7 <rdar://problem/9050430> 8 9 * http/tests/security/cross-origin-css-primitive-expected.txt: Added. 10 * http/tests/security/cross-origin-css-primitive.html: Added. 11 * http/tests/security/resources/cross-origin-css-primitive-iframe.html: Added. 12 1 13 2011-03-07 Alejandro G. Castro <alex@igalia.com> 2 14 -
trunk/Source/WebCore/Android.mk
r80210 r80463 51 51 css/CSSParserValues.cpp \ 52 52 css/CSSPrimitiveValue.cpp \ 53 css/CSSPrimitiveValueCache.cpp \ 53 54 css/CSSProperty.cpp \ 54 55 css/CSSPropertyLonghand.cpp \ -
trunk/Source/WebCore/CMakeLists.txt
r80210 r80463 640 640 css/CSSParserValues.cpp 641 641 css/CSSPrimitiveValue.cpp 642 css/CSSPrimitiveValueCache.cpp 642 643 css/CSSProperty.cpp 643 644 css/CSSPropertyLonghand.cpp -
trunk/Source/WebCore/ChangeLog
r80459 r80463 1 2011-03-07 Antti Koivisto <antti@apple.com> 2 3 Reviewed by Oliver Hunt. 4 5 REGRESSION (r79574): fast/dom/global-constructors.html failing on Windows 7 Release (Tests) bots 6 https://bugs.webkit.org/show_bug.cgi?id=55166 7 <rdar://problem/9050430> 8 9 Make CSS primitive value cache per-document. 10 11 Test: http/tests/security/cross-origin-css-primitive.html 12 13 * Android.mk: 14 * CMakeLists.txt: 15 * GNUmakefile.am: 16 * WebCore.gypi: 17 * WebCore.pro: 18 * WebCore.vcproj/WebCore.vcproj: 19 * WebCore.xcodeproj/project.pbxproj: 20 * css/CSSComputedStyleDeclaration.cpp: 21 (WebCore::valueForNinePieceImage): 22 (WebCore::zoomAdjustedPixelValue): 23 (WebCore::zoomAdjustedNumberValue): 24 (WebCore::zoomAdjustedPixelValueForLength): 25 (WebCore::valueForReflection): 26 (WebCore::getPositionOffsetValue): 27 (WebCore::CSSComputedStyleDeclaration::currentColorOrValidColor): 28 (WebCore::getBorderRadiusCornerValue): 29 (WebCore::computedTransform): 30 (WebCore::getDelayValue): 31 (WebCore::getDurationValue): 32 (WebCore::CSSComputedStyleDeclaration::getFontSizeCSSValuePreferringKeyword): 33 (WebCore::CSSComputedStyleDeclaration::valueForShadow): 34 (WebCore::valueForFamily): 35 (WebCore::renderTextDecorationFlagsToCSSValue): 36 (WebCore::fillRepeatToCSSValue): 37 (WebCore::fillSizeToCSSValue): 38 (WebCore::contentToCSSValue): 39 (WebCore::counterToCSSValue): 40 (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue): 41 * css/CSSParser.cpp: 42 (WebCore::CSSParser::parseSheet): 43 (WebCore::CSSParser::parseRule): 44 (WebCore::CSSParser::parseKeyframeRule): 45 (WebCore::CSSParser::parseValue): 46 (WebCore::CSSParser::parseColor): 47 (WebCore::CSSParser::parseSelector): 48 (WebCore::CSSParser::parseDeclaration): 49 (WebCore::CSSParser::setStyleSheet): 50 (WebCore::CSSParser::parseWCSSInputProperty): 51 (WebCore::parseBackgroundClip): 52 (WebCore::CSSParser::parseFillShorthand): 53 (WebCore::CSSParser::parsePage): 54 (WebCore::CSSParser::parseSizeParameter): 55 (WebCore::CSSParser::parseContent): 56 (WebCore::CSSParser::parseAttr): 57 (WebCore::CSSParser::parseBackgroundColor): 58 (WebCore::CSSParser::parseFillPositionXY): 59 (WebCore::CSSParser::parseFillPosition): 60 (WebCore::CSSParser::parseFillRepeat): 61 (WebCore::CSSParser::parseFillSize): 62 (WebCore::CSSParser::parseFillProperty): 63 (WebCore::CSSParser::parseAnimationDelay): 64 (WebCore::CSSParser::parseAnimationDirection): 65 (WebCore::CSSParser::parseAnimationDuration): 66 (WebCore::CSSParser::parseAnimationFillMode): 67 (WebCore::CSSParser::parseAnimationIterationCount): 68 (WebCore::CSSParser::parseAnimationName): 69 (WebCore::CSSParser::parseAnimationPlayState): 70 (WebCore::CSSParser::parseAnimationProperty): 71 (WebCore::CSSParser::parseTransformOriginShorthand): 72 (WebCore::CSSParser::parseAnimationTimingFunction): 73 (WebCore::CSSParser::parseDashboardRegions): 74 (WebCore::CSSParser::parseCounterContent): 75 (WebCore::CSSParser::parseShape): 76 (WebCore::CSSParser::parseFont): 77 (WebCore::CSSParser::parseFontFamily): 78 (WebCore::CSSParser::parseFontStyle): 79 (WebCore::CSSParser::parseFontVariant): 80 (WebCore::CSSParser::parseFontWeight): 81 (WebCore::ShadowParseContext::ShadowParseContext): 82 (WebCore::ShadowParseContext::commitLength): 83 (WebCore::ShadowParseContext::commitStyle): 84 (WebCore::CSSParser::parseShadow): 85 (WebCore::CSSParser::parseReflect): 86 (WebCore::BorderImageParseContext::BorderImageParseContext): 87 (WebCore::BorderImageParseContext::commitNumber): 88 (WebCore::BorderImageParseContext::commitBorderImage): 89 (WebCore::CSSParser::parseBorderImage): 90 (WebCore::CSSParser::parseBorderRadius): 91 (WebCore::CSSParser::parseCounter): 92 (WebCore::parseDeprecatedGradientPoint): 93 (WebCore::parseDeprecatedGradientColorStop): 94 (WebCore::CSSParser::parseDeprecatedGradient): 95 (WebCore::valueFromSideKeyword): 96 (WebCore::parseGradientColorOrKeyword): 97 (WebCore::CSSParser::parseLinearGradient): 98 (WebCore::CSSParser::parseRadialGradient): 99 (WebCore::CSSParser::parseGradientColorStops): 100 (WebCore::CSSParser::parseTransform): 101 (WebCore::CSSParser::parseTransformOrigin): 102 (WebCore::CSSParser::parseTextEmphasisStyle): 103 * css/CSSParser.h: 104 (WebCore::CSSParser::primitiveValueCache): 105 * css/CSSPrimitiveValue.cpp: 106 * css/CSSPrimitiveValue.h: 107 (WebCore::CSSPrimitiveValue::createIdentifier): 108 (WebCore::CSSPrimitiveValue::createColor): 109 (WebCore::CSSPrimitiveValue::create): 110 * css/CSSPrimitiveValueCache.cpp: Added. 111 (WebCore::CSSPrimitiveValueCache::CSSPrimitiveValueCache): 112 (WebCore::CSSPrimitiveValueCache::~CSSPrimitiveValueCache): 113 (WebCore::CSSPrimitiveValueCache::createIdentifierValue): 114 (WebCore::CSSPrimitiveValueCache::createColorValue): 115 (WebCore::CSSPrimitiveValueCache::createValue): 116 * css/CSSPrimitiveValueCache.h: Added. 117 (WebCore::CSSPrimitiveValueCache::create): 118 (WebCore::CSSPrimitiveValueCache::createValue): 119 * dom/Document.cpp: 120 (WebCore::Document::cssPrimitiveValueCache): 121 * dom/Document.h: 122 1 123 2011-03-06 Adam Barth <abarth@webkit.org> 2 124 -
trunk/Source/WebCore/GNUmakefile.am
r80210 r80463 1016 1016 Source/WebCore/css/CSSPrimitiveValue.cpp \ 1017 1017 Source/WebCore/css/CSSPrimitiveValue.h \ 1018 Source/WebCore/css/CSSPrimitiveValueCache.cpp \ 1019 Source/WebCore/css/CSSPrimitiveValueCache.h \ 1018 1020 Source/WebCore/css/CSSPrimitiveValueMappings.h \ 1019 1021 Source/WebCore/css/CSSProperty.cpp \ -
trunk/Source/WebCore/WebCore.gypi
r80459 r80463 1084 1084 'css/CSSPrimitiveValue.cpp', 1085 1085 'css/CSSPrimitiveValue.h', 1086 'css/CSSPrimitiveValueCache.cpp', 1087 'css/CSSPrimitiveValueCache.h', 1086 1088 'css/CSSPrimitiveValueMappings.h', 1087 1089 'css/CSSProperty.cpp', -
trunk/Source/WebCore/WebCore.pro
r80274 r80463 397 397 css/CSSParserValues.cpp \ 398 398 css/CSSPrimitiveValue.cpp \ 399 css/CSSPrimitiveValueCache.cpp \ 399 400 css/CSSProperty.cpp \ 400 401 css/CSSPropertyLonghand.cpp \ … … 1347 1348 css/CSSParserValues.h \ 1348 1349 css/CSSPrimitiveValue.h \ 1350 css/CSSPrimitiveValueCache.h \ 1349 1351 css/CSSProperty.h \ 1350 1352 css/CSSPropertyLonghand.h \ -
trunk/Source/WebCore/WebCore.vcproj/WebCore.vcproj
r80210 r80463 31495 31495 </File> 31496 31496 <File 31497 RelativePath="..\css\CSSPrimitiveValueCache.cpp" 31498 > 31499 </File> 31500 <File 31501 RelativePath="..\css\CSSPrimitiveValueCache.h" 31502 > 31503 </File> 31504 <File 31497 31505 RelativePath="..\css\CSSProperty.cpp" 31498 31506 > -
trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj
r80367 r80463 5568 5568 E47B4BE80E71241600038854 /* CachedResourceHandle.h in Headers */ = {isa = PBXBuildFile; fileRef = E47B4BE60E71241600038854 /* CachedResourceHandle.h */; settings = {ATTRIBUTES = (Private, ); }; }; 5569 5569 E47B4BE90E71241600038854 /* CachedResourceHandle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E47B4BE70E71241600038854 /* CachedResourceHandle.cpp */; }; 5570 E49BD9FA131FD2ED003C56F0 /* CSSPrimitiveValueCache.h in Headers */ = {isa = PBXBuildFile; fileRef = E49BD9F9131FD2ED003C56F0 /* CSSPrimitiveValueCache.h */; }; 5571 E49BDA0B131FD3E5003C56F0 /* CSSPrimitiveValueCache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E49BDA0A131FD3E5003C56F0 /* CSSPrimitiveValueCache.cpp */; }; 5570 5572 E4AFCFA50DAF29A300F5F55C /* UnitBezier.h in Headers */ = {isa = PBXBuildFile; fileRef = E4AFCFA40DAF29A300F5F55C /* UnitBezier.h */; }; 5571 5573 E4AFD00B0DAF335400F5F55C /* SMILTime.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E4AFD0050DAF335400F5F55C /* SMILTime.cpp */; }; … … 11966 11968 E47B4BE60E71241600038854 /* CachedResourceHandle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CachedResourceHandle.h; sourceTree = "<group>"; }; 11967 11969 E47B4BE70E71241600038854 /* CachedResourceHandle.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CachedResourceHandle.cpp; sourceTree = "<group>"; }; 11970 E49BD9F9131FD2ED003C56F0 /* CSSPrimitiveValueCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CSSPrimitiveValueCache.h; sourceTree = "<group>"; }; 11971 E49BDA0A131FD3E5003C56F0 /* CSSPrimitiveValueCache.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CSSPrimitiveValueCache.cpp; sourceTree = "<group>"; }; 11968 11972 E4AFCFA40DAF29A300F5F55C /* UnitBezier.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UnitBezier.h; sourceTree = "<group>"; }; 11969 11973 E4AFD0050DAF335400F5F55C /* SMILTime.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SMILTime.cpp; sourceTree = "<group>"; }; … … 18613 18617 A80E6CBC0A1989CA007FB8C5 /* CSSPrimitiveValue.h */, 18614 18618 9307059009E0C75800B17FE4 /* CSSPrimitiveValue.idl */, 18619 E49BD9F9131FD2ED003C56F0 /* CSSPrimitiveValueCache.h */, 18620 E49BDA0A131FD3E5003C56F0 /* CSSPrimitiveValueCache.cpp */, 18615 18621 E1ED8AC20CC49BE000BFC557 /* CSSPrimitiveValueMappings.h */, 18616 18622 A80E6CCD0A1989CA007FB8C5 /* CSSProperty.cpp */, … … 22522 22528 E1BE512E0CF6C512002EA959 /* XSLTUnicodeSort.h in Headers */, 22523 22529 977E2E0F12F0FC9C00C13379 /* XSSFilter.h in Headers */, 22530 E49BD9FA131FD2ED003C56F0 /* CSSPrimitiveValueCache.h in Headers */, 22524 22531 5A574F25131DB93900471B88 /* RenderQuote.h in Headers */, 22525 22532 5A574F29131DB96D00471B88 /* QuotesData.h in Headers */, … … 25174 25181 E1BE512D0CF6C512002EA959 /* XSLTUnicodeSort.cpp in Sources */, 25175 25182 977E2E0E12F0FC9C00C13379 /* XSSFilter.cpp in Sources */, 25183 E49BDA0B131FD3E5003C56F0 /* CSSPrimitiveValueCache.cpp in Sources */, 25176 25184 5A574F24131DB93900471B88 /* RenderQuote.cpp in Sources */, 25177 25185 5A574F28131DB96D00471B88 /* QuotesData.cpp in Sources */, -
trunk/Source/WebCore/css/CSSComputedStyleDeclaration.cpp
r80438 r80463 32 32 #include "CSSMutableStyleDeclaration.h" 33 33 #include "CSSPrimitiveValue.h" 34 #include "CSSPrimitiveValueCache.h" 34 35 #include "CSSPrimitiveValueMappings.h" 35 36 #include "CSSProperty.h" … … 300 301 } 301 302 302 static PassRefPtr<CSSValue> valueForNinePieceImage(const NinePieceImage& image )303 static PassRefPtr<CSSValue> valueForNinePieceImage(const NinePieceImage& image, CSSPrimitiveValueCache* primitiveValueCache) 303 304 { 304 305 if (!image.hasImage()) 305 return CSSPrimitiveValue::createIdentifier(CSSValueNone);306 return primitiveValueCache->createIdentifierValue(CSSValueNone); 306 307 307 308 // Image first. … … 313 314 RefPtr<CSSPrimitiveValue> top; 314 315 if (image.slices().top().isPercent()) 315 top = CSSPrimitiveValue::create(image.slices().top().value(), CSSPrimitiveValue::CSS_PERCENTAGE);316 top = primitiveValueCache->createValue(image.slices().top().value(), CSSPrimitiveValue::CSS_PERCENTAGE); 316 317 else 317 top = CSSPrimitiveValue::create(image.slices().top().value(), CSSPrimitiveValue::CSS_NUMBER);318 top = primitiveValueCache->createValue(image.slices().top().value(), CSSPrimitiveValue::CSS_NUMBER); 318 319 319 320 RefPtr<CSSPrimitiveValue> right; 320 321 if (image.slices().right().isPercent()) 321 right = CSSPrimitiveValue::create(image.slices().right().value(), CSSPrimitiveValue::CSS_PERCENTAGE);322 right = primitiveValueCache->createValue(image.slices().right().value(), CSSPrimitiveValue::CSS_PERCENTAGE); 322 323 else 323 right = CSSPrimitiveValue::create(image.slices().right().value(), CSSPrimitiveValue::CSS_NUMBER);324 right = primitiveValueCache->createValue(image.slices().right().value(), CSSPrimitiveValue::CSS_NUMBER); 324 325 325 326 RefPtr<CSSPrimitiveValue> bottom; 326 327 if (image.slices().bottom().isPercent()) 327 bottom = CSSPrimitiveValue::create(image.slices().bottom().value(), CSSPrimitiveValue::CSS_PERCENTAGE);328 bottom = primitiveValueCache->createValue(image.slices().bottom().value(), CSSPrimitiveValue::CSS_PERCENTAGE); 328 329 else 329 bottom = CSSPrimitiveValue::create(image.slices().bottom().value(), CSSPrimitiveValue::CSS_NUMBER);330 bottom = primitiveValueCache->createValue(image.slices().bottom().value(), CSSPrimitiveValue::CSS_NUMBER); 330 331 331 332 RefPtr<CSSPrimitiveValue> left; 332 333 if (image.slices().left().isPercent()) 333 left = CSSPrimitiveValue::create(image.slices().left().value(), CSSPrimitiveValue::CSS_PERCENTAGE);334 left = primitiveValueCache->createValue(image.slices().left().value(), CSSPrimitiveValue::CSS_PERCENTAGE); 334 335 else 335 left = CSSPrimitiveValue::create(image.slices().left().value(), CSSPrimitiveValue::CSS_NUMBER);336 left = primitiveValueCache->createValue(image.slices().left().value(), CSSPrimitiveValue::CSS_NUMBER); 336 337 337 338 RefPtr<Rect> rect = Rect::create(); … … 344 345 } 345 346 346 inline static PassRefPtr<CSSPrimitiveValue> zoomAdjustedPixelValue(int value, const RenderStyle* style )347 { 348 return CSSPrimitiveValue::create(adjustForAbsoluteZoom(value, style), CSSPrimitiveValue::CSS_PX);349 } 350 351 inline static PassRefPtr<CSSPrimitiveValue> zoomAdjustedNumberValue(double value, const RenderStyle* style )352 { 353 return CSSPrimitiveValue::create(value / style->effectiveZoom(), CSSPrimitiveValue::CSS_NUMBER);354 } 355 356 static PassRefPtr<CSSValue> zoomAdjustedPixelValueForLength(const Length& length, const RenderStyle* style )347 inline static PassRefPtr<CSSPrimitiveValue> zoomAdjustedPixelValue(int value, const RenderStyle* style, CSSPrimitiveValueCache* primitiveValueCache) 348 { 349 return primitiveValueCache->createValue(adjustForAbsoluteZoom(value, style), CSSPrimitiveValue::CSS_PX); 350 } 351 352 inline static PassRefPtr<CSSPrimitiveValue> zoomAdjustedNumberValue(double value, const RenderStyle* style, CSSPrimitiveValueCache* primitiveValueCache) 353 { 354 return primitiveValueCache->createValue(value / style->effectiveZoom(), CSSPrimitiveValue::CSS_NUMBER); 355 } 356 357 static PassRefPtr<CSSValue> zoomAdjustedPixelValueForLength(const Length& length, const RenderStyle* style, CSSPrimitiveValueCache* primitiveValueCache) 357 358 { 358 359 if (length.isFixed()) 359 return zoomAdjustedPixelValue(length.value(), style );360 return CSSPrimitiveValue::create(length);361 } 362 363 static PassRefPtr<CSSValue> valueForReflection(const StyleReflection* reflection, const RenderStyle* style )360 return zoomAdjustedPixelValue(length.value(), style, primitiveValueCache); 361 return primitiveValueCache->createValue(length); 362 } 363 364 static PassRefPtr<CSSValue> valueForReflection(const StyleReflection* reflection, const RenderStyle* style, CSSPrimitiveValueCache* primitiveValueCache) 364 365 { 365 366 if (!reflection) 366 return CSSPrimitiveValue::createIdentifier(CSSValueNone);367 return primitiveValueCache->createIdentifierValue(CSSValueNone); 367 368 368 369 RefPtr<CSSPrimitiveValue> offset; 369 370 if (reflection->offset().isPercent()) 370 offset = CSSPrimitiveValue::create(reflection->offset().percent(), CSSPrimitiveValue::CSS_PERCENTAGE);371 offset = primitiveValueCache->createValue(reflection->offset().percent(), CSSPrimitiveValue::CSS_PERCENTAGE); 371 372 else 372 offset = zoomAdjustedPixelValue(reflection->offset().value(), style );373 offset = zoomAdjustedPixelValue(reflection->offset().value(), style, primitiveValueCache); 373 374 374 return CSSReflectValue::create(reflection->direction(), offset.release(), valueForNinePieceImage(reflection->mask() ));375 } 376 377 static PassRefPtr<CSSValue> getPositionOffsetValue(RenderStyle* style, int propertyID )375 return CSSReflectValue::create(reflection->direction(), offset.release(), valueForNinePieceImage(reflection->mask(), primitiveValueCache)); 376 } 377 378 static PassRefPtr<CSSValue> getPositionOffsetValue(RenderStyle* style, int propertyID, CSSPrimitiveValueCache* primitiveValueCache) 378 379 { 379 380 if (!style) … … 400 401 if (style->position() == AbsolutePosition || style->position() == FixedPosition) { 401 402 if (l.type() == WebCore::Fixed) 402 return zoomAdjustedPixelValue(l.value(), style );403 return CSSPrimitiveValue::create(l);403 return zoomAdjustedPixelValue(l.value(), style, primitiveValueCache); 404 return primitiveValueCache->createValue(l); 404 405 } 405 406 … … 408 409 // In other words if left is auto and right is not auto, then left's computed value is negative right(). 409 410 // So we should get the opposite length unit and see if it is auto. 410 return CSSPrimitiveValue::create(l);411 412 return CSSPrimitiveValue::createIdentifier(CSSValueAuto);411 return primitiveValueCache->createValue(l); 412 413 return primitiveValueCache->createIdentifierValue(CSSValueAuto); 413 414 } 414 415 … … 416 417 { 417 418 // This function does NOT look at visited information, so that computed style doesn't expose that. 419 CSSPrimitiveValueCache* primitiveValueCache = m_node->document()->cssPrimitiveValueCache().get(); 418 420 if (!color.isValid()) 419 return CSSPrimitiveValue::createColor(style->color().rgb());420 return CSSPrimitiveValue::createColor(color.rgb());421 } 422 423 static PassRefPtr<CSSValue> getBorderRadiusCornerValue(LengthSize radius, const RenderStyle* style )421 return primitiveValueCache->createColorValue(style->color().rgb()); 422 return primitiveValueCache->createColorValue(color.rgb()); 423 } 424 425 static PassRefPtr<CSSValue> getBorderRadiusCornerValue(LengthSize radius, const RenderStyle* style, CSSPrimitiveValueCache* primitiveValueCache) 424 426 { 425 427 RefPtr<CSSValueList> list = CSSValueList::createSpaceSeparated(); 426 428 if (radius.width() == radius.height()) { 427 429 if (radius.width().type() == Percent) 428 return CSSPrimitiveValue::create(radius.width().percent(), CSSPrimitiveValue::CSS_PERCENTAGE);429 return zoomAdjustedPixelValue(radius.width().value(), style );430 return primitiveValueCache->createValue(radius.width().percent(), CSSPrimitiveValue::CSS_PERCENTAGE); 431 return zoomAdjustedPixelValue(radius.width().value(), style, primitiveValueCache); 430 432 } 431 433 if (radius.width().type() == Percent) 432 list->append( CSSPrimitiveValue::create(radius.width().percent(), CSSPrimitiveValue::CSS_PERCENTAGE));434 list->append(primitiveValueCache->createValue(radius.width().percent(), CSSPrimitiveValue::CSS_PERCENTAGE)); 433 435 else 434 list->append(zoomAdjustedPixelValue(radius.width().value(), style ));436 list->append(zoomAdjustedPixelValue(radius.width().value(), style, primitiveValueCache)); 435 437 if (radius.height().type() == Percent) 436 list->append( CSSPrimitiveValue::create(radius.height().percent(), CSSPrimitiveValue::CSS_PERCENTAGE));438 list->append(primitiveValueCache->createValue(radius.height().percent(), CSSPrimitiveValue::CSS_PERCENTAGE)); 437 439 else 438 list->append(zoomAdjustedPixelValue(radius.height().value(), style ));440 list->append(zoomAdjustedPixelValue(radius.height().value(), style, primitiveValueCache)); 439 441 return list.release(); 440 442 } … … 454 456 } 455 457 456 static PassRefPtr<CSSValue> computedTransform(RenderObject* renderer, const RenderStyle* style )458 static PassRefPtr<CSSValue> computedTransform(RenderObject* renderer, const RenderStyle* style, CSSPrimitiveValueCache* primitiveValueCache) 457 459 { 458 460 if (!renderer || style->transform().operations().isEmpty()) 459 return CSSPrimitiveValue::createIdentifier(CSSValueNone);461 return primitiveValueCache->createIdentifierValue(CSSValueNone); 460 462 461 463 IntRect box = sizingBox(renderer); … … 471 473 transformVal = WebKitCSSTransformValue::create(WebKitCSSTransformValue::MatrixTransformOperation); 472 474 473 transformVal->append( CSSPrimitiveValue::create(transform.a(), CSSPrimitiveValue::CSS_NUMBER));474 transformVal->append( CSSPrimitiveValue::create(transform.b(), CSSPrimitiveValue::CSS_NUMBER));475 transformVal->append( CSSPrimitiveValue::create(transform.c(), CSSPrimitiveValue::CSS_NUMBER));476 transformVal->append( CSSPrimitiveValue::create(transform.d(), CSSPrimitiveValue::CSS_NUMBER));477 transformVal->append(zoomAdjustedNumberValue(transform.e(), style ));478 transformVal->append(zoomAdjustedNumberValue(transform.f(), style ));475 transformVal->append(primitiveValueCache->createValue(transform.a(), CSSPrimitiveValue::CSS_NUMBER)); 476 transformVal->append(primitiveValueCache->createValue(transform.b(), CSSPrimitiveValue::CSS_NUMBER)); 477 transformVal->append(primitiveValueCache->createValue(transform.c(), CSSPrimitiveValue::CSS_NUMBER)); 478 transformVal->append(primitiveValueCache->createValue(transform.d(), CSSPrimitiveValue::CSS_NUMBER)); 479 transformVal->append(zoomAdjustedNumberValue(transform.e(), style, primitiveValueCache)); 480 transformVal->append(zoomAdjustedNumberValue(transform.f(), style, primitiveValueCache)); 479 481 } else { 480 482 transformVal = WebKitCSSTransformValue::create(WebKitCSSTransformValue::Matrix3DTransformOperation); 481 483 482 transformVal->append( CSSPrimitiveValue::create(transform.m11(), CSSPrimitiveValue::CSS_NUMBER));483 transformVal->append( CSSPrimitiveValue::create(transform.m12(), CSSPrimitiveValue::CSS_NUMBER));484 transformVal->append( CSSPrimitiveValue::create(transform.m13(), CSSPrimitiveValue::CSS_NUMBER));485 transformVal->append( CSSPrimitiveValue::create(transform.m14(), CSSPrimitiveValue::CSS_NUMBER));486 487 transformVal->append( CSSPrimitiveValue::create(transform.m21(), CSSPrimitiveValue::CSS_NUMBER));488 transformVal->append( CSSPrimitiveValue::create(transform.m22(), CSSPrimitiveValue::CSS_NUMBER));489 transformVal->append( CSSPrimitiveValue::create(transform.m23(), CSSPrimitiveValue::CSS_NUMBER));490 transformVal->append( CSSPrimitiveValue::create(transform.m24(), CSSPrimitiveValue::CSS_NUMBER));491 492 transformVal->append( CSSPrimitiveValue::create(transform.m31(), CSSPrimitiveValue::CSS_NUMBER));493 transformVal->append( CSSPrimitiveValue::create(transform.m32(), CSSPrimitiveValue::CSS_NUMBER));494 transformVal->append( CSSPrimitiveValue::create(transform.m33(), CSSPrimitiveValue::CSS_NUMBER));495 transformVal->append( CSSPrimitiveValue::create(transform.m34(), CSSPrimitiveValue::CSS_NUMBER));496 497 transformVal->append(zoomAdjustedNumberValue(transform.m41(), style ));498 transformVal->append(zoomAdjustedNumberValue(transform.m42(), style ));499 transformVal->append(zoomAdjustedNumberValue(transform.m43(), style ));500 transformVal->append( CSSPrimitiveValue::create(transform.m44(), CSSPrimitiveValue::CSS_NUMBER));484 transformVal->append(primitiveValueCache->createValue(transform.m11(), CSSPrimitiveValue::CSS_NUMBER)); 485 transformVal->append(primitiveValueCache->createValue(transform.m12(), CSSPrimitiveValue::CSS_NUMBER)); 486 transformVal->append(primitiveValueCache->createValue(transform.m13(), CSSPrimitiveValue::CSS_NUMBER)); 487 transformVal->append(primitiveValueCache->createValue(transform.m14(), CSSPrimitiveValue::CSS_NUMBER)); 488 489 transformVal->append(primitiveValueCache->createValue(transform.m21(), CSSPrimitiveValue::CSS_NUMBER)); 490 transformVal->append(primitiveValueCache->createValue(transform.m22(), CSSPrimitiveValue::CSS_NUMBER)); 491 transformVal->append(primitiveValueCache->createValue(transform.m23(), CSSPrimitiveValue::CSS_NUMBER)); 492 transformVal->append(primitiveValueCache->createValue(transform.m24(), CSSPrimitiveValue::CSS_NUMBER)); 493 494 transformVal->append(primitiveValueCache->createValue(transform.m31(), CSSPrimitiveValue::CSS_NUMBER)); 495 transformVal->append(primitiveValueCache->createValue(transform.m32(), CSSPrimitiveValue::CSS_NUMBER)); 496 transformVal->append(primitiveValueCache->createValue(transform.m33(), CSSPrimitiveValue::CSS_NUMBER)); 497 transformVal->append(primitiveValueCache->createValue(transform.m34(), CSSPrimitiveValue::CSS_NUMBER)); 498 499 transformVal->append(zoomAdjustedNumberValue(transform.m41(), style, primitiveValueCache)); 500 transformVal->append(zoomAdjustedNumberValue(transform.m42(), style, primitiveValueCache)); 501 transformVal->append(zoomAdjustedNumberValue(transform.m43(), style, primitiveValueCache)); 502 transformVal->append(primitiveValueCache->createValue(transform.m44(), CSSPrimitiveValue::CSS_NUMBER)); 501 503 } 502 504 … … 507 509 } 508 510 509 static PassRefPtr<CSSValue> getDelayValue(const AnimationList* animList )511 static PassRefPtr<CSSValue> getDelayValue(const AnimationList* animList, CSSPrimitiveValueCache* primitiveValueCache) 510 512 { 511 513 RefPtr<CSSValueList> list = CSSValueList::createCommaSeparated(); 512 514 if (animList) { 513 515 for (size_t i = 0; i < animList->size(); ++i) 514 list->append( CSSPrimitiveValue::create(animList->animation(i)->delay(), CSSPrimitiveValue::CSS_S));516 list->append(primitiveValueCache->createValue(animList->animation(i)->delay(), CSSPrimitiveValue::CSS_S)); 515 517 } else { 516 518 // Note that initialAnimationDelay() is used for both transitions and animations 517 list->append( CSSPrimitiveValue::create(Animation::initialAnimationDelay(), CSSPrimitiveValue::CSS_S));519 list->append(primitiveValueCache->createValue(Animation::initialAnimationDelay(), CSSPrimitiveValue::CSS_S)); 518 520 } 519 521 return list.release(); 520 522 } 521 523 522 static PassRefPtr<CSSValue> getDurationValue(const AnimationList* animList )524 static PassRefPtr<CSSValue> getDurationValue(const AnimationList* animList, CSSPrimitiveValueCache* primitiveValueCache) 523 525 { 524 526 RefPtr<CSSValueList> list = CSSValueList::createCommaSeparated(); 525 527 if (animList) { 526 528 for (size_t i = 0; i < animList->size(); ++i) 527 list->append( CSSPrimitiveValue::create(animList->animation(i)->duration(), CSSPrimitiveValue::CSS_S));529 list->append(primitiveValueCache->createValue(animList->animation(i)->duration(), CSSPrimitiveValue::CSS_S)); 528 530 } else { 529 531 // Note that initialAnimationDuration() is used for both transitions and animations 530 list->append( CSSPrimitiveValue::create(Animation::initialAnimationDuration(), CSSPrimitiveValue::CSS_S));532 list->append(primitiveValueCache->createValue(Animation::initialAnimationDuration(), CSSPrimitiveValue::CSS_S)); 531 533 } 532 534 return list.release(); … … 616 618 if (!style) 617 619 return 0; 620 621 CSSPrimitiveValueCache* primitiveValueCache = m_node->document()->cssPrimitiveValueCache().get(); 618 622 619 623 if (int keywordSize = style->fontDescription().keywordSize()) 620 return CSSPrimitiveValue::createIdentifier(cssIdentifierForFontSizeKeyword(keywordSize));621 622 623 return zoomAdjustedPixelValue(style->fontDescription().computedPixelSize(), style.get() );624 return primitiveValueCache->createIdentifierValue(cssIdentifierForFontSizeKeyword(keywordSize)); 625 626 627 return zoomAdjustedPixelValue(style->fontDescription().computedPixelSize(), style.get(), primitiveValueCache); 624 628 } 625 629 … … 638 642 PassRefPtr<CSSValue> CSSComputedStyleDeclaration::valueForShadow(const ShadowData* shadow, int id, RenderStyle* style) const 639 643 { 644 CSSPrimitiveValueCache* primitiveValueCache = m_node->document()->cssPrimitiveValueCache().get(); 640 645 if (!shadow) 641 return CSSPrimitiveValue::createIdentifier(CSSValueNone);646 return primitiveValueCache->createIdentifierValue(CSSValueNone); 642 647 643 648 CSSPropertyID propertyID = static_cast<CSSPropertyID>(id); … … 645 650 RefPtr<CSSValueList> list = CSSValueList::createCommaSeparated(); 646 651 for (const ShadowData* s = shadow; s; s = s->next()) { 647 RefPtr<CSSPrimitiveValue> x = zoomAdjustedPixelValue(s->x(), style );648 RefPtr<CSSPrimitiveValue> y = zoomAdjustedPixelValue(s->y(), style );649 RefPtr<CSSPrimitiveValue> blur = zoomAdjustedPixelValue(s->blur(), style );650 RefPtr<CSSPrimitiveValue> spread = propertyID == CSSPropertyTextShadow ? 0 : zoomAdjustedPixelValue(s->spread(), style );651 RefPtr<CSSPrimitiveValue> style = propertyID == CSSPropertyTextShadow || s->style() == Normal ? 0 : CSSPrimitiveValue::createIdentifier(CSSValueInset);652 RefPtr<CSSPrimitiveValue> color = CSSPrimitiveValue::createColor(s->color().rgb());652 RefPtr<CSSPrimitiveValue> x = zoomAdjustedPixelValue(s->x(), style, primitiveValueCache); 653 RefPtr<CSSPrimitiveValue> y = zoomAdjustedPixelValue(s->y(), style, primitiveValueCache); 654 RefPtr<CSSPrimitiveValue> blur = zoomAdjustedPixelValue(s->blur(), style, primitiveValueCache); 655 RefPtr<CSSPrimitiveValue> spread = propertyID == CSSPropertyTextShadow ? 0 : zoomAdjustedPixelValue(s->spread(), style, primitiveValueCache); 656 RefPtr<CSSPrimitiveValue> style = propertyID == CSSPropertyTextShadow || s->style() == Normal ? 0 : primitiveValueCache->createIdentifierValue(CSSValueInset); 657 RefPtr<CSSPrimitiveValue> color = primitiveValueCache->createColorValue(s->color().rgb()); 653 658 list->prepend(ShadowValue::create(x.release(), y.release(), blur.release(), spread.release(), style.release(), color.release())); 654 659 } … … 681 686 } 682 687 683 static PassRefPtr<CSSPrimitiveValue> valueForFamily(const AtomicString& family )688 static PassRefPtr<CSSPrimitiveValue> valueForFamily(const AtomicString& family, CSSPrimitiveValueCache* primitiveValueCache) 684 689 { 685 690 if (int familyIdentifier = identifierForFamily(family)) 686 return CSSPrimitiveValue::createIdentifier(familyIdentifier);687 return CSSPrimitiveValue::create(family.string(), CSSPrimitiveValue::CSS_STRING);688 } 689 690 static PassRefPtr<CSSValue> renderTextDecorationFlagsToCSSValue(int textDecoration )691 return primitiveValueCache->createIdentifierValue(familyIdentifier); 692 return primitiveValueCache->createValue(family.string(), CSSPrimitiveValue::CSS_STRING); 693 } 694 695 static PassRefPtr<CSSValue> renderTextDecorationFlagsToCSSValue(int textDecoration, CSSPrimitiveValueCache* primitiveValueCache) 691 696 { 692 697 RefPtr<CSSValueList> list = CSSValueList::createSpaceSeparated(); 693 698 if (textDecoration & UNDERLINE) 694 list->append( CSSPrimitiveValue::createIdentifier(CSSValueUnderline));699 list->append(primitiveValueCache->createIdentifierValue(CSSValueUnderline)); 695 700 if (textDecoration & OVERLINE) 696 list->append( CSSPrimitiveValue::createIdentifier(CSSValueOverline));701 list->append(primitiveValueCache->createIdentifierValue(CSSValueOverline)); 697 702 if (textDecoration & LINE_THROUGH) 698 list->append( CSSPrimitiveValue::createIdentifier(CSSValueLineThrough));703 list->append(primitiveValueCache->createIdentifierValue(CSSValueLineThrough)); 699 704 if (textDecoration & BLINK) 700 list->append( CSSPrimitiveValue::createIdentifier(CSSValueBlink));705 list->append(primitiveValueCache->createIdentifierValue(CSSValueBlink)); 701 706 702 707 if (!list->length()) 703 return CSSPrimitiveValue::createIdentifier(CSSValueNone);708 return primitiveValueCache->createIdentifierValue(CSSValueNone); 704 709 return list; 705 710 } 706 711 707 static PassRefPtr<CSSValue> fillRepeatToCSSValue(EFillRepeat xRepeat, EFillRepeat yRepeat )712 static PassRefPtr<CSSValue> fillRepeatToCSSValue(EFillRepeat xRepeat, EFillRepeat yRepeat, CSSPrimitiveValueCache* primitiveValueCache) 708 713 { 709 714 // For backwards compatibility, if both values are equal, just return one of them. And 710 715 // if the two values are equivalent to repeat-x or repeat-y, just return the shorthand. 711 716 if (xRepeat == yRepeat) 712 return CSSPrimitiveValue::create(xRepeat);717 return primitiveValueCache->createValue(xRepeat); 713 718 if (xRepeat == RepeatFill && yRepeat == NoRepeatFill) 714 return CSSPrimitiveValue::createIdentifier(CSSValueRepeatX);719 return primitiveValueCache->createIdentifierValue(CSSValueRepeatX); 715 720 if (xRepeat == NoRepeatFill && yRepeat == RepeatFill) 716 return CSSPrimitiveValue::createIdentifier(CSSValueRepeatY);721 return primitiveValueCache->createIdentifierValue(CSSValueRepeatY); 717 722 718 723 RefPtr<CSSValueList> list = CSSValueList::createSpaceSeparated(); 719 list->append( CSSPrimitiveValue::create(xRepeat));720 list->append( CSSPrimitiveValue::create(yRepeat));724 list->append(primitiveValueCache->createValue(xRepeat)); 725 list->append(primitiveValueCache->createValue(yRepeat)); 721 726 return list.release(); 722 727 } 723 728 724 static PassRefPtr<CSSValue> fillSizeToCSSValue(const FillSize& fillSize )729 static PassRefPtr<CSSValue> fillSizeToCSSValue(const FillSize& fillSize, CSSPrimitiveValueCache* primitiveValueCache) 725 730 { 726 731 if (fillSize.type == Contain) 727 return CSSPrimitiveValue::createIdentifier(CSSValueContain);732 return primitiveValueCache->createIdentifierValue(CSSValueContain); 728 733 729 734 if (fillSize.type == Cover) 730 return CSSPrimitiveValue::createIdentifier(CSSValueCover);735 return primitiveValueCache->createIdentifierValue(CSSValueCover); 731 736 732 737 RefPtr<CSSValueList> list = CSSValueList::createSpaceSeparated(); 733 list->append( CSSPrimitiveValue::create(fillSize.size.width()));734 list->append( CSSPrimitiveValue::create(fillSize.size.height()));738 list->append(primitiveValueCache->createValue(fillSize.size.width())); 739 list->append(primitiveValueCache->createValue(fillSize.size.height())); 735 740 return list.release(); 736 741 } 737 742 738 static PassRefPtr<CSSValue> contentToCSSValue(const RenderStyle* style )743 static PassRefPtr<CSSValue> contentToCSSValue(const RenderStyle* style, CSSPrimitiveValueCache* primitiveValueCache) 739 744 { 740 745 RefPtr<CSSValueList> list = CSSValueList::createSpaceSeparated(); … … 743 748 const CounterContent* counter = contentData->counter(); 744 749 ASSERT(counter); 745 list->append( CSSPrimitiveValue::create(counter->identifier(), CSSPrimitiveValue::CSS_COUNTER_NAME));750 list->append(primitiveValueCache->createValue(counter->identifier(), CSSPrimitiveValue::CSS_COUNTER_NAME)); 746 751 } else if (contentData->isImage()) { 747 752 const StyleImage* image = contentData->image(); … … 749 754 list->append(image->cssValue()); 750 755 } else if (contentData->isText()) 751 list->append( CSSPrimitiveValue::create(contentData->text(), CSSPrimitiveValue::CSS_STRING));756 list->append(primitiveValueCache->createValue(contentData->text(), CSSPrimitiveValue::CSS_STRING)); 752 757 } 753 758 return list.release(); 754 759 } 755 760 756 static PassRefPtr<CSSValue> counterToCSSValue(const RenderStyle* style, int propertyID )761 static PassRefPtr<CSSValue> counterToCSSValue(const RenderStyle* style, int propertyID, CSSPrimitiveValueCache* primitiveValueCache) 757 762 { 758 763 RefPtr<CSSValueList> list = CSSValueList::createSpaceSeparated(); 759 764 const CounterDirectiveMap* map = style->counterDirectives(); 760 765 for (CounterDirectiveMap::const_iterator it = map->begin(); it != map->end(); ++it) { 761 list->append( CSSPrimitiveValue::create(it->first.get(), CSSPrimitiveValue::CSS_STRING));766 list->append(primitiveValueCache->createValue(it->first.get(), CSSPrimitiveValue::CSS_STRING)); 762 767 short number = propertyID == CSSPropertyCounterIncrement ? it->second.m_incrementValue : it->second.m_resetValue; 763 list->append( CSSPrimitiveValue::create((double)number, CSSPrimitiveValue::CSS_NUMBER));768 list->append(primitiveValueCache->createValue((double)number, CSSPrimitiveValue::CSS_NUMBER)); 764 769 } 765 770 return list.release(); … … 799 804 if (!style) 800 805 return 0; 806 807 CSSPrimitiveValueCache* primitiveValueCache = node->document()->cssPrimitiveValueCache().get(); 801 808 802 809 propertyID = CSSProperty::resolveDirectionAwareProperty(propertyID, style->direction(), style->writingMode()); … … 807 814 808 815 case CSSPropertyBackgroundColor: 809 return CSSPrimitiveValue::createColor(m_allowVisitedStyle? style->visitedDependentColor(CSSPropertyBackgroundColor).rgb() : style->backgroundColor().rgb());816 return primitiveValueCache->createColorValue(m_allowVisitedStyle? style->visitedDependentColor(CSSPropertyBackgroundColor).rgb() : style->backgroundColor().rgb()); 810 817 case CSSPropertyBackgroundImage: 811 818 case CSSPropertyWebkitMaskImage: { 812 819 const FillLayer* layers = propertyID == CSSPropertyWebkitMaskImage ? style->maskLayers() : style->backgroundLayers(); 813 820 if (!layers) 814 return CSSPrimitiveValue::createIdentifier(CSSValueNone);821 return primitiveValueCache->createIdentifierValue(CSSValueNone); 815 822 816 823 if (!layers->next()) { … … 818 825 return layers->image()->cssValue(); 819 826 820 return CSSPrimitiveValue::createIdentifier(CSSValueNone);827 return primitiveValueCache->createIdentifierValue(CSSValueNone); 821 828 } 822 829 … … 826 833 list->append(currLayer->image()->cssValue()); 827 834 else 828 list->append( CSSPrimitiveValue::createIdentifier(CSSValueNone));835 list->append(primitiveValueCache->createIdentifierValue(CSSValueNone)); 829 836 } 830 837 return list.release(); … … 835 842 const FillLayer* layers = propertyID == CSSPropertyWebkitMaskSize ? style->maskLayers() : style->backgroundLayers(); 836 843 if (!layers->next()) 837 return fillSizeToCSSValue(layers->size() );844 return fillSizeToCSSValue(layers->size(), primitiveValueCache); 838 845 839 846 RefPtr<CSSValueList> list = CSSValueList::createCommaSeparated(); 840 847 for (const FillLayer* currLayer = layers; currLayer; currLayer = currLayer->next()) 841 list->append(fillSizeToCSSValue(currLayer->size() ));848 list->append(fillSizeToCSSValue(currLayer->size(), primitiveValueCache)); 842 849 843 850 return list.release(); … … 847 854 const FillLayer* layers = propertyID == CSSPropertyWebkitMaskRepeat ? style->maskLayers() : style->backgroundLayers(); 848 855 if (!layers->next()) 849 return fillRepeatToCSSValue(layers->repeatX(), layers->repeatY() );856 return fillRepeatToCSSValue(layers->repeatX(), layers->repeatY(), primitiveValueCache); 850 857 851 858 RefPtr<CSSValueList> list = CSSValueList::createCommaSeparated(); 852 859 for (const FillLayer* currLayer = layers; currLayer; currLayer = currLayer->next()) 853 list->append(fillRepeatToCSSValue(currLayer->repeatX(), currLayer->repeatY() ));860 list->append(fillRepeatToCSSValue(currLayer->repeatX(), currLayer->repeatY(), primitiveValueCache)); 854 861 855 862 return list.release(); … … 859 866 const FillLayer* layers = propertyID == CSSPropertyWebkitMaskComposite ? style->maskLayers() : style->backgroundLayers(); 860 867 if (!layers->next()) 861 return CSSPrimitiveValue::create(layers->composite());868 return primitiveValueCache->createValue(layers->composite()); 862 869 863 870 RefPtr<CSSValueList> list = CSSValueList::createCommaSeparated(); 864 871 for (const FillLayer* currLayer = layers; currLayer; currLayer = currLayer->next()) 865 list->append( CSSPrimitiveValue::create(currLayer->composite()));872 list->append(primitiveValueCache->createValue(currLayer->composite())); 866 873 867 874 return list.release(); … … 871 878 const FillLayer* layers = propertyID == CSSPropertyWebkitMaskAttachment ? style->maskLayers() : style->backgroundLayers(); 872 879 if (!layers->next()) 873 return CSSPrimitiveValue::create(layers->attachment());880 return primitiveValueCache->createValue(layers->attachment()); 874 881 875 882 RefPtr<CSSValueList> list = CSSValueList::createCommaSeparated(); 876 883 for (const FillLayer* currLayer = layers; currLayer; currLayer = currLayer->next()) 877 list->append( CSSPrimitiveValue::create(currLayer->attachment()));884 list->append(primitiveValueCache->createValue(currLayer->attachment())); 878 885 879 886 return list.release(); … … 889 896 if (!layers->next()) { 890 897 EFillBox box = isClip ? layers->clip() : layers->origin(); 891 return CSSPrimitiveValue::create(box);898 return primitiveValueCache->createValue(box); 892 899 } 893 900 … … 895 902 for (const FillLayer* currLayer = layers; currLayer; currLayer = currLayer->next()) { 896 903 EFillBox box = isClip ? currLayer->clip() : currLayer->origin(); 897 list->append( CSSPrimitiveValue::create(box));904 list->append(primitiveValueCache->createValue(box)); 898 905 } 899 906 … … 905 912 if (!layers->next()) { 906 913 RefPtr<CSSValueList> list = CSSValueList::createSpaceSeparated(); 907 list->append( CSSPrimitiveValue::create(layers->xPosition()));908 list->append( CSSPrimitiveValue::create(layers->yPosition()));914 list->append(primitiveValueCache->createValue(layers->xPosition())); 915 list->append(primitiveValueCache->createValue(layers->yPosition())); 909 916 return list.release(); 910 917 } … … 913 920 for (const FillLayer* currLayer = layers; currLayer; currLayer = currLayer->next()) { 914 921 RefPtr<CSSValueList> positionList = CSSValueList::createSpaceSeparated(); 915 positionList->append( CSSPrimitiveValue::create(currLayer->xPosition()));916 positionList->append( CSSPrimitiveValue::create(currLayer->yPosition()));922 positionList->append(primitiveValueCache->createValue(currLayer->xPosition())); 923 positionList->append(primitiveValueCache->createValue(currLayer->yPosition())); 917 924 list->append(positionList); 918 925 } … … 924 931 const FillLayer* layers = propertyID == CSSPropertyWebkitMaskPositionX ? style->maskLayers() : style->backgroundLayers(); 925 932 if (!layers->next()) 926 return CSSPrimitiveValue::create(layers->xPosition());933 return primitiveValueCache->createValue(layers->xPosition()); 927 934 928 935 RefPtr<CSSValueList> list = CSSValueList::createCommaSeparated(); 929 936 for (const FillLayer* currLayer = layers; currLayer; currLayer = currLayer->next()) 930 list->append( CSSPrimitiveValue::create(currLayer->xPosition()));937 list->append(primitiveValueCache->createValue(currLayer->xPosition())); 931 938 932 939 return list.release(); … … 936 943 const FillLayer* layers = propertyID == CSSPropertyWebkitMaskPositionY ? style->maskLayers() : style->backgroundLayers(); 937 944 if (!layers->next()) 938 return CSSPrimitiveValue::create(layers->yPosition());945 return primitiveValueCache->createValue(layers->yPosition()); 939 946 940 947 RefPtr<CSSValueList> list = CSSValueList::createCommaSeparated(); 941 948 for (const FillLayer* currLayer = layers; currLayer; currLayer = currLayer->next()) 942 list->append( CSSPrimitiveValue::create(currLayer->yPosition()));949 list->append(primitiveValueCache->createValue(currLayer->yPosition())); 943 950 944 951 return list.release(); … … 946 953 case CSSPropertyBorderCollapse: 947 954 if (style->borderCollapse()) 948 return CSSPrimitiveValue::createIdentifier(CSSValueCollapse);949 return CSSPrimitiveValue::createIdentifier(CSSValueSeparate);955 return primitiveValueCache->createIdentifierValue(CSSValueCollapse); 956 return primitiveValueCache->createIdentifierValue(CSSValueSeparate); 950 957 case CSSPropertyBorderSpacing: { 951 958 RefPtr<CSSValueList> list = CSSValueList::createSpaceSeparated(); 952 list->append(zoomAdjustedPixelValue(style->horizontalBorderSpacing(), style.get() ));953 list->append(zoomAdjustedPixelValue(style->verticalBorderSpacing(), style.get() ));959 list->append(zoomAdjustedPixelValue(style->horizontalBorderSpacing(), style.get(), primitiveValueCache)); 960 list->append(zoomAdjustedPixelValue(style->verticalBorderSpacing(), style.get(), primitiveValueCache)); 954 961 return list.release(); 955 962 } 956 963 case CSSPropertyWebkitBorderHorizontalSpacing: 957 return zoomAdjustedPixelValue(style->horizontalBorderSpacing(), style.get() );964 return zoomAdjustedPixelValue(style->horizontalBorderSpacing(), style.get(), primitiveValueCache); 958 965 case CSSPropertyWebkitBorderVerticalSpacing: 959 return zoomAdjustedPixelValue(style->verticalBorderSpacing(), style.get() );966 return zoomAdjustedPixelValue(style->verticalBorderSpacing(), style.get(), primitiveValueCache); 960 967 case CSSPropertyBorderTopColor: 961 return m_allowVisitedStyle ? CSSPrimitiveValue::createColor(style->visitedDependentColor(CSSPropertyBorderTopColor).rgb()) : currentColorOrValidColor(style.get(), style->borderTopColor());968 return m_allowVisitedStyle ? primitiveValueCache->createColorValue(style->visitedDependentColor(CSSPropertyBorderTopColor).rgb()) : currentColorOrValidColor(style.get(), style->borderTopColor()); 962 969 case CSSPropertyBorderRightColor: 963 return m_allowVisitedStyle ? CSSPrimitiveValue::createColor(style->visitedDependentColor(CSSPropertyBorderRightColor).rgb()) : currentColorOrValidColor(style.get(), style->borderRightColor());970 return m_allowVisitedStyle ? primitiveValueCache->createColorValue(style->visitedDependentColor(CSSPropertyBorderRightColor).rgb()) : currentColorOrValidColor(style.get(), style->borderRightColor()); 964 971 case CSSPropertyBorderBottomColor: 965 return m_allowVisitedStyle ? CSSPrimitiveValue::createColor(style->visitedDependentColor(CSSPropertyBorderBottomColor).rgb()) : currentColorOrValidColor(style.get(), style->borderBottomColor());972 return m_allowVisitedStyle ? primitiveValueCache->createColorValue(style->visitedDependentColor(CSSPropertyBorderBottomColor).rgb()) : currentColorOrValidColor(style.get(), style->borderBottomColor()); 966 973 case CSSPropertyBorderLeftColor: 967 return m_allowVisitedStyle ? CSSPrimitiveValue::createColor(style->visitedDependentColor(CSSPropertyBorderLeftColor).rgb()) : currentColorOrValidColor(style.get(), style->borderLeftColor());974 return m_allowVisitedStyle ? primitiveValueCache->createColorValue(style->visitedDependentColor(CSSPropertyBorderLeftColor).rgb()) : currentColorOrValidColor(style.get(), style->borderLeftColor()); 968 975 case CSSPropertyBorderTopStyle: 969 return CSSPrimitiveValue::create(style->borderTopStyle());976 return primitiveValueCache->createValue(style->borderTopStyle()); 970 977 case CSSPropertyBorderRightStyle: 971 return CSSPrimitiveValue::create(style->borderRightStyle());978 return primitiveValueCache->createValue(style->borderRightStyle()); 972 979 case CSSPropertyBorderBottomStyle: 973 return CSSPrimitiveValue::create(style->borderBottomStyle());980 return primitiveValueCache->createValue(style->borderBottomStyle()); 974 981 case CSSPropertyBorderLeftStyle: 975 return CSSPrimitiveValue::create(style->borderLeftStyle());982 return primitiveValueCache->createValue(style->borderLeftStyle()); 976 983 case CSSPropertyBorderTopWidth: 977 return zoomAdjustedPixelValue(style->borderTopWidth(), style.get() );984 return zoomAdjustedPixelValue(style->borderTopWidth(), style.get(), primitiveValueCache); 978 985 case CSSPropertyBorderRightWidth: 979 return zoomAdjustedPixelValue(style->borderRightWidth(), style.get() );986 return zoomAdjustedPixelValue(style->borderRightWidth(), style.get(), primitiveValueCache); 980 987 case CSSPropertyBorderBottomWidth: 981 return zoomAdjustedPixelValue(style->borderBottomWidth(), style.get() );988 return zoomAdjustedPixelValue(style->borderBottomWidth(), style.get(), primitiveValueCache); 982 989 case CSSPropertyBorderLeftWidth: 983 return zoomAdjustedPixelValue(style->borderLeftWidth(), style.get() );990 return zoomAdjustedPixelValue(style->borderLeftWidth(), style.get(), primitiveValueCache); 984 991 case CSSPropertyBottom: 985 return getPositionOffsetValue(style.get(), CSSPropertyBottom );992 return getPositionOffsetValue(style.get(), CSSPropertyBottom, primitiveValueCache); 986 993 case CSSPropertyWebkitBoxAlign: 987 return CSSPrimitiveValue::create(style->boxAlign());994 return primitiveValueCache->createValue(style->boxAlign()); 988 995 case CSSPropertyWebkitBoxDirection: 989 return CSSPrimitiveValue::create(style->boxDirection());996 return primitiveValueCache->createValue(style->boxDirection()); 990 997 case CSSPropertyWebkitBoxFlex: 991 return CSSPrimitiveValue::create(style->boxFlex(), CSSPrimitiveValue::CSS_NUMBER);998 return primitiveValueCache->createValue(style->boxFlex(), CSSPrimitiveValue::CSS_NUMBER); 992 999 case CSSPropertyWebkitBoxFlexGroup: 993 return CSSPrimitiveValue::create(style->boxFlexGroup(), CSSPrimitiveValue::CSS_NUMBER);1000 return primitiveValueCache->createValue(style->boxFlexGroup(), CSSPrimitiveValue::CSS_NUMBER); 994 1001 case CSSPropertyWebkitBoxLines: 995 return CSSPrimitiveValue::create(style->boxLines());1002 return primitiveValueCache->createValue(style->boxLines()); 996 1003 case CSSPropertyWebkitBoxOrdinalGroup: 997 return CSSPrimitiveValue::create(style->boxOrdinalGroup(), CSSPrimitiveValue::CSS_NUMBER);1004 return primitiveValueCache->createValue(style->boxOrdinalGroup(), CSSPrimitiveValue::CSS_NUMBER); 998 1005 case CSSPropertyWebkitBoxOrient: 999 return CSSPrimitiveValue::create(style->boxOrient());1006 return primitiveValueCache->createValue(style->boxOrient()); 1000 1007 case CSSPropertyWebkitBoxPack: { 1001 1008 EBoxAlignment boxPack = style->boxPack(); … … 1004 1011 if (boxPack == BJUSTIFY || boxPack== BBASELINE) 1005 1012 return 0; 1006 return CSSPrimitiveValue::create(boxPack);1013 return primitiveValueCache->createValue(boxPack); 1007 1014 } 1008 1015 case CSSPropertyWebkitBoxReflect: 1009 return valueForReflection(style->boxReflect(), style.get() );1016 return valueForReflection(style->boxReflect(), style.get(), primitiveValueCache); 1010 1017 case CSSPropertyBoxShadow: 1011 1018 case CSSPropertyWebkitBoxShadow: 1012 1019 return valueForShadow(style->boxShadow(), propertyID, style.get()); 1013 1020 case CSSPropertyCaptionSide: 1014 return CSSPrimitiveValue::create(style->captionSide());1021 return primitiveValueCache->createValue(style->captionSide()); 1015 1022 case CSSPropertyClear: 1016 return CSSPrimitiveValue::create(style->clear());1023 return primitiveValueCache->createValue(style->clear()); 1017 1024 case CSSPropertyColor: 1018 return CSSPrimitiveValue::createColor(m_allowVisitedStyle ? style->visitedDependentColor(CSSPropertyColor).rgb() : style->color().rgb());1025 return primitiveValueCache->createColorValue(m_allowVisitedStyle ? style->visitedDependentColor(CSSPropertyColor).rgb() : style->color().rgb()); 1019 1026 case CSSPropertyWebkitColumnCount: 1020 1027 if (style->hasAutoColumnCount()) 1021 return CSSPrimitiveValue::createIdentifier(CSSValueAuto);1022 return CSSPrimitiveValue::create(style->columnCount(), CSSPrimitiveValue::CSS_NUMBER);1028 return primitiveValueCache->createIdentifierValue(CSSValueAuto); 1029 return primitiveValueCache->createValue(style->columnCount(), CSSPrimitiveValue::CSS_NUMBER); 1023 1030 case CSSPropertyWebkitColumnGap: 1024 1031 if (style->hasNormalColumnGap()) 1025 return CSSPrimitiveValue::createIdentifier(CSSValueNormal);1026 return CSSPrimitiveValue::create(style->columnGap(), CSSPrimitiveValue::CSS_NUMBER);1032 return primitiveValueCache->createIdentifierValue(CSSValueNormal); 1033 return primitiveValueCache->createValue(style->columnGap(), CSSPrimitiveValue::CSS_NUMBER); 1027 1034 case CSSPropertyWebkitColumnRuleColor: 1028 return m_allowVisitedStyle ? CSSPrimitiveValue::createColor(style->visitedDependentColor(CSSPropertyOutlineColor).rgb()) : currentColorOrValidColor(style.get(), style->columnRuleColor());1035 return m_allowVisitedStyle ? primitiveValueCache->createColorValue(style->visitedDependentColor(CSSPropertyOutlineColor).rgb()) : currentColorOrValidColor(style.get(), style->columnRuleColor()); 1029 1036 case CSSPropertyWebkitColumnRuleStyle: 1030 return CSSPrimitiveValue::create(style->columnRuleStyle());1037 return primitiveValueCache->createValue(style->columnRuleStyle()); 1031 1038 case CSSPropertyWebkitColumnRuleWidth: 1032 return zoomAdjustedPixelValue(style->columnRuleWidth(), style.get() );1039 return zoomAdjustedPixelValue(style->columnRuleWidth(), style.get(), primitiveValueCache); 1033 1040 case CSSPropertyWebkitColumnSpan: 1034 1041 if (style->columnSpan()) 1035 return CSSPrimitiveValue::createIdentifier(CSSValueAll);1036 return CSSPrimitiveValue::create(1, CSSPrimitiveValue::CSS_NUMBER);1042 return primitiveValueCache->createIdentifierValue(CSSValueAll); 1043 return primitiveValueCache->createValue(1, CSSPrimitiveValue::CSS_NUMBER); 1037 1044 case CSSPropertyWebkitColumnBreakAfter: 1038 return CSSPrimitiveValue::create(style->columnBreakAfter());1045 return primitiveValueCache->createValue(style->columnBreakAfter()); 1039 1046 case CSSPropertyWebkitColumnBreakBefore: 1040 return CSSPrimitiveValue::create(style->columnBreakBefore());1047 return primitiveValueCache->createValue(style->columnBreakBefore()); 1041 1048 case CSSPropertyWebkitColumnBreakInside: 1042 return CSSPrimitiveValue::create(style->columnBreakInside());1049 return primitiveValueCache->createValue(style->columnBreakInside()); 1043 1050 case CSSPropertyWebkitColumnWidth: 1044 1051 if (style->hasAutoColumnWidth()) 1045 return CSSPrimitiveValue::createIdentifier(CSSValueAuto);1046 return CSSPrimitiveValue::create(style->columnWidth(), CSSPrimitiveValue::CSS_NUMBER);1052 return primitiveValueCache->createIdentifierValue(CSSValueAuto); 1053 return primitiveValueCache->createValue(style->columnWidth(), CSSPrimitiveValue::CSS_NUMBER); 1047 1054 case CSSPropertyCursor: { 1048 1055 RefPtr<CSSValueList> list; … … 1054 1061 list->append(image->cssValue()); 1055 1062 } 1056 RefPtr<CSSValue> value = CSSPrimitiveValue::create(style->cursor());1063 RefPtr<CSSValue> value = primitiveValueCache->createValue(style->cursor()); 1057 1064 if (list) { 1058 1065 list->append(value); … … 1062 1069 } 1063 1070 case CSSPropertyDirection: 1064 return CSSPrimitiveValue::create(style->direction());1071 return primitiveValueCache->createValue(style->direction()); 1065 1072 case CSSPropertyDisplay: 1066 return CSSPrimitiveValue::create(style->display());1073 return primitiveValueCache->createValue(style->display()); 1067 1074 case CSSPropertyEmptyCells: 1068 return CSSPrimitiveValue::create(style->emptyCells());1075 return primitiveValueCache->createValue(style->emptyCells()); 1069 1076 case CSSPropertyFloat: 1070 return CSSPrimitiveValue::create(style->floating());1077 return primitiveValueCache->createValue(style->floating()); 1071 1078 case CSSPropertyFontFamily: { 1072 1079 const FontFamily& firstFamily = style->fontDescription().family(); 1073 1080 if (!firstFamily.next()) 1074 return valueForFamily(firstFamily.family() );1081 return valueForFamily(firstFamily.family(), primitiveValueCache); 1075 1082 RefPtr<CSSValueList> list = CSSValueList::createCommaSeparated(); 1076 1083 for (const FontFamily* family = &firstFamily; family; family = family->next()) 1077 list->append(valueForFamily(family->family() ));1084 list->append(valueForFamily(family->family(), primitiveValueCache)); 1078 1085 return list.release(); 1079 1086 } 1080 1087 case CSSPropertyFontSize: 1081 return zoomAdjustedPixelValue(style->fontDescription().computedPixelSize(), style.get() );1088 return zoomAdjustedPixelValue(style->fontDescription().computedPixelSize(), style.get(), primitiveValueCache); 1082 1089 case CSSPropertyFontStyle: 1083 1090 if (style->fontDescription().italic()) 1084 return CSSPrimitiveValue::createIdentifier(CSSValueItalic);1085 return CSSPrimitiveValue::createIdentifier(CSSValueNormal);1091 return primitiveValueCache->createIdentifierValue(CSSValueItalic); 1092 return primitiveValueCache->createIdentifierValue(CSSValueNormal); 1086 1093 case CSSPropertyFontVariant: 1087 1094 if (style->fontDescription().smallCaps()) 1088 return CSSPrimitiveValue::createIdentifier(CSSValueSmallCaps);1089 return CSSPrimitiveValue::createIdentifier(CSSValueNormal);1095 return primitiveValueCache->createIdentifierValue(CSSValueSmallCaps); 1096 return primitiveValueCache->createIdentifierValue(CSSValueNormal); 1090 1097 case CSSPropertyFontWeight: 1091 1098 switch (style->fontDescription().weight()) { 1092 1099 case FontWeight100: 1093 return CSSPrimitiveValue::createIdentifier(CSSValue100);1100 return primitiveValueCache->createIdentifierValue(CSSValue100); 1094 1101 case FontWeight200: 1095 return CSSPrimitiveValue::createIdentifier(CSSValue200);1102 return primitiveValueCache->createIdentifierValue(CSSValue200); 1096 1103 case FontWeight300: 1097 return CSSPrimitiveValue::createIdentifier(CSSValue300);1104 return primitiveValueCache->createIdentifierValue(CSSValue300); 1098 1105 case FontWeightNormal: 1099 return CSSPrimitiveValue::createIdentifier(CSSValueNormal);1106 return primitiveValueCache->createIdentifierValue(CSSValueNormal); 1100 1107 case FontWeight500: 1101 return CSSPrimitiveValue::createIdentifier(CSSValue500);1108 return primitiveValueCache->createIdentifierValue(CSSValue500); 1102 1109 case FontWeight600: 1103 return CSSPrimitiveValue::createIdentifier(CSSValue600);1110 return primitiveValueCache->createIdentifierValue(CSSValue600); 1104 1111 case FontWeightBold: 1105 return CSSPrimitiveValue::createIdentifier(CSSValueBold);1112 return primitiveValueCache->createIdentifierValue(CSSValueBold); 1106 1113 case FontWeight800: 1107 return CSSPrimitiveValue::createIdentifier(CSSValue800);1114 return primitiveValueCache->createIdentifierValue(CSSValue800); 1108 1115 case FontWeight900: 1109 return CSSPrimitiveValue::createIdentifier(CSSValue900);1116 return primitiveValueCache->createIdentifierValue(CSSValue900); 1110 1117 } 1111 1118 ASSERT_NOT_REACHED(); 1112 return CSSPrimitiveValue::createIdentifier(CSSValueNormal);1119 return primitiveValueCache->createIdentifierValue(CSSValueNormal); 1113 1120 case CSSPropertyHeight: 1114 1121 if (renderer) 1115 return zoomAdjustedPixelValue(sizingBox(renderer).height(), style.get() );1116 return zoomAdjustedPixelValueForLength(style->height(), style.get() );1122 return zoomAdjustedPixelValue(sizingBox(renderer).height(), style.get(), primitiveValueCache); 1123 return zoomAdjustedPixelValueForLength(style->height(), style.get(), primitiveValueCache); 1117 1124 case CSSPropertyWebkitHighlight: 1118 1125 if (style->highlight() == nullAtom) 1119 return CSSPrimitiveValue::createIdentifier(CSSValueNone);1120 return CSSPrimitiveValue::create(style->highlight(), CSSPrimitiveValue::CSS_STRING);1126 return primitiveValueCache->createIdentifierValue(CSSValueNone); 1127 return primitiveValueCache->createValue(style->highlight(), CSSPrimitiveValue::CSS_STRING); 1121 1128 case CSSPropertyWebkitHyphens: 1122 return CSSPrimitiveValue::create(style->hyphens());1129 return primitiveValueCache->createValue(style->hyphens()); 1123 1130 case CSSPropertyWebkitHyphenateCharacter: 1124 1131 if (style->hyphenationString().isNull()) 1125 return CSSPrimitiveValue::createIdentifier(CSSValueAuto);1126 return CSSPrimitiveValue::create(style->hyphenationString(), CSSPrimitiveValue::CSS_STRING);1132 return primitiveValueCache->createIdentifierValue(CSSValueAuto); 1133 return primitiveValueCache->createValue(style->hyphenationString(), CSSPrimitiveValue::CSS_STRING); 1127 1134 case CSSPropertyWebkitHyphenateLimitAfter: 1128 1135 if (style->hyphenationLimitAfter() < 0) … … 1135 1142 case CSSPropertyWebkitBorderFit: 1136 1143 if (style->borderFit() == BorderFitBorder) 1137 return CSSPrimitiveValue::createIdentifier(CSSValueBorder);1138 return CSSPrimitiveValue::createIdentifier(CSSValueLines);1144 return primitiveValueCache->createIdentifierValue(CSSValueBorder); 1145 return primitiveValueCache->createIdentifierValue(CSSValueLines); 1139 1146 case CSSPropertyLeft: 1140 return getPositionOffsetValue(style.get(), CSSPropertyLeft );1147 return getPositionOffsetValue(style.get(), CSSPropertyLeft, primitiveValueCache); 1141 1148 case CSSPropertyLetterSpacing: 1142 1149 if (!style->letterSpacing()) 1143 return CSSPrimitiveValue::createIdentifier(CSSValueNormal);1144 return zoomAdjustedPixelValue(style->letterSpacing(), style.get() );1150 return primitiveValueCache->createIdentifierValue(CSSValueNormal); 1151 return zoomAdjustedPixelValue(style->letterSpacing(), style.get(), primitiveValueCache); 1145 1152 case CSSPropertyWebkitLineClamp: 1146 1153 if (style->lineClamp().isNone()) 1147 return CSSPrimitiveValue::createIdentifier(CSSValueNone);1148 return CSSPrimitiveValue::create(style->lineClamp().value(), style->lineClamp().isPercentage() ? CSSPrimitiveValue::CSS_PERCENTAGE : CSSPrimitiveValue::CSS_NUMBER);1154 return primitiveValueCache->createIdentifierValue(CSSValueNone); 1155 return primitiveValueCache->createValue(style->lineClamp().value(), style->lineClamp().isPercentage() ? CSSPrimitiveValue::CSS_PERCENTAGE : CSSPrimitiveValue::CSS_NUMBER); 1149 1156 case CSSPropertyLineHeight: { 1150 1157 Length length = style->lineHeight(); 1151 1158 if (length.isNegative()) 1152 return CSSPrimitiveValue::createIdentifier(CSSValueNormal);1159 return primitiveValueCache->createIdentifierValue(CSSValueNormal); 1153 1160 if (length.isPercent()) 1154 1161 // This is imperfect, because it doesn't include the zoom factor and the real computation … … 1156 1163 // On the other hand, since font-size doesn't include the zoom factor, we really can't do 1157 1164 // that here either. 1158 return zoomAdjustedPixelValue(static_cast<int>(length.percent() * style->fontDescription().specifiedSize()) / 100, style.get() );1159 return zoomAdjustedPixelValue(length.value(), style.get() );1165 return zoomAdjustedPixelValue(static_cast<int>(length.percent() * style->fontDescription().specifiedSize()) / 100, style.get(), primitiveValueCache); 1166 return zoomAdjustedPixelValue(length.value(), style.get(), primitiveValueCache); 1160 1167 } 1161 1168 case CSSPropertyListStyleImage: 1162 1169 if (style->listStyleImage()) 1163 1170 return style->listStyleImage()->cssValue(); 1164 return CSSPrimitiveValue::createIdentifier(CSSValueNone);1171 return primitiveValueCache->createIdentifierValue(CSSValueNone); 1165 1172 case CSSPropertyListStylePosition: 1166 return CSSPrimitiveValue::create(style->listStylePosition());1173 return primitiveValueCache->createValue(style->listStylePosition()); 1167 1174 case CSSPropertyListStyleType: 1168 return CSSPrimitiveValue::create(style->listStyleType());1175 return primitiveValueCache->createValue(style->listStyleType()); 1169 1176 case CSSPropertyWebkitLocale: 1170 1177 if (style->locale().isNull()) 1171 return CSSPrimitiveValue::createIdentifier(CSSValueAuto);1172 return CSSPrimitiveValue::create(style->locale(), CSSPrimitiveValue::CSS_STRING);1178 return primitiveValueCache->createIdentifierValue(CSSValueAuto); 1179 return primitiveValueCache->createValue(style->locale(), CSSPrimitiveValue::CSS_STRING); 1173 1180 case CSSPropertyMarginTop: { 1174 1181 Length marginTop = style->marginTop(); 1175 1182 if (marginTop.isPercent()) 1176 return CSSPrimitiveValue::create(marginTop);1177 return zoomAdjustedPixelValue(marginTop.value(), style.get() );1183 return primitiveValueCache->createValue(marginTop); 1184 return zoomAdjustedPixelValue(marginTop.value(), style.get(), primitiveValueCache); 1178 1185 } 1179 1186 case CSSPropertyMarginRight: { 1180 1187 Length marginRight = style->marginRight(); 1181 1188 if (marginRight.isPercent()) 1182 return CSSPrimitiveValue::create(marginRight);1183 return zoomAdjustedPixelValue(marginRight.value(), style.get() );1189 return primitiveValueCache->createValue(marginRight); 1190 return zoomAdjustedPixelValue(marginRight.value(), style.get(), primitiveValueCache); 1184 1191 } 1185 1192 case CSSPropertyMarginBottom: { 1186 1193 Length marginBottom = style->marginBottom(); 1187 1194 if (marginBottom.isPercent()) 1188 return CSSPrimitiveValue::create(marginBottom);1189 return zoomAdjustedPixelValue(marginBottom.value(), style.get() );1195 return primitiveValueCache->createValue(marginBottom); 1196 return zoomAdjustedPixelValue(marginBottom.value(), style.get(), primitiveValueCache); 1190 1197 } 1191 1198 case CSSPropertyMarginLeft: { 1192 1199 Length marginLeft = style->marginLeft(); 1193 1200 if (marginLeft.isPercent()) 1194 return CSSPrimitiveValue::create(marginLeft);1195 return zoomAdjustedPixelValue(marginLeft.value(), style.get() );1201 return primitiveValueCache->createValue(marginLeft); 1202 return zoomAdjustedPixelValue(marginLeft.value(), style.get(), primitiveValueCache); 1196 1203 } 1197 1204 case CSSPropertyWebkitMarqueeDirection: 1198 return CSSPrimitiveValue::create(style->marqueeDirection());1205 return primitiveValueCache->createValue(style->marqueeDirection()); 1199 1206 case CSSPropertyWebkitMarqueeIncrement: 1200 return CSSPrimitiveValue::create(style->marqueeIncrement());1207 return primitiveValueCache->createValue(style->marqueeIncrement()); 1201 1208 case CSSPropertyWebkitMarqueeRepetition: 1202 1209 if (style->marqueeLoopCount() < 0) 1203 return CSSPrimitiveValue::createIdentifier(CSSValueInfinite);1204 return CSSPrimitiveValue::create(style->marqueeLoopCount(), CSSPrimitiveValue::CSS_NUMBER);1210 return primitiveValueCache->createIdentifierValue(CSSValueInfinite); 1211 return primitiveValueCache->createValue(style->marqueeLoopCount(), CSSPrimitiveValue::CSS_NUMBER); 1205 1212 case CSSPropertyWebkitMarqueeStyle: 1206 return CSSPrimitiveValue::create(style->marqueeBehavior());1213 return primitiveValueCache->createValue(style->marqueeBehavior()); 1207 1214 case CSSPropertyWebkitUserModify: 1208 return CSSPrimitiveValue::create(style->userModify());1215 return primitiveValueCache->createValue(style->userModify()); 1209 1216 case CSSPropertyMaxHeight: { 1210 1217 const Length& maxHeight = style->maxHeight(); 1211 1218 if (maxHeight.isFixed() && maxHeight.value() == undefinedLength) 1212 return CSSPrimitiveValue::createIdentifier(CSSValueNone);1213 return CSSPrimitiveValue::create(maxHeight);1219 return primitiveValueCache->createIdentifierValue(CSSValueNone); 1220 return primitiveValueCache->createValue(maxHeight); 1214 1221 } 1215 1222 case CSSPropertyMaxWidth: { 1216 1223 const Length& maxWidth = style->maxWidth(); 1217 1224 if (maxWidth.isFixed() && maxWidth.value() == undefinedLength) 1218 return CSSPrimitiveValue::createIdentifier(CSSValueNone);1219 return CSSPrimitiveValue::create(maxWidth);1225 return primitiveValueCache->createIdentifierValue(CSSValueNone); 1226 return primitiveValueCache->createValue(maxWidth); 1220 1227 } 1221 1228 case CSSPropertyMinHeight: 1222 return CSSPrimitiveValue::create(style->minHeight());1229 return primitiveValueCache->createValue(style->minHeight()); 1223 1230 case CSSPropertyMinWidth: 1224 return CSSPrimitiveValue::create(style->minWidth());1231 return primitiveValueCache->createValue(style->minWidth()); 1225 1232 case CSSPropertyOpacity: 1226 return CSSPrimitiveValue::create(style->opacity(), CSSPrimitiveValue::CSS_NUMBER);1233 return primitiveValueCache->createValue(style->opacity(), CSSPrimitiveValue::CSS_NUMBER); 1227 1234 case CSSPropertyOrphans: 1228 return CSSPrimitiveValue::create(style->orphans(), CSSPrimitiveValue::CSS_NUMBER);1235 return primitiveValueCache->createValue(style->orphans(), CSSPrimitiveValue::CSS_NUMBER); 1229 1236 case CSSPropertyOutlineColor: 1230 return m_allowVisitedStyle ? CSSPrimitiveValue::createColor(style->visitedDependentColor(CSSPropertyOutlineColor).rgb()) : currentColorOrValidColor(style.get(), style->outlineColor());1237 return m_allowVisitedStyle ? primitiveValueCache->createColorValue(style->visitedDependentColor(CSSPropertyOutlineColor).rgb()) : currentColorOrValidColor(style.get(), style->outlineColor()); 1231 1238 case CSSPropertyOutlineOffset: 1232 return zoomAdjustedPixelValue(style->outlineOffset(), style.get() );1239 return zoomAdjustedPixelValue(style->outlineOffset(), style.get(), primitiveValueCache); 1233 1240 case CSSPropertyOutlineStyle: 1234 1241 if (style->outlineStyleIsAuto()) 1235 return CSSPrimitiveValue::createIdentifier(CSSValueAuto);1236 return CSSPrimitiveValue::create(style->outlineStyle());1242 return primitiveValueCache->createIdentifierValue(CSSValueAuto); 1243 return primitiveValueCache->createValue(style->outlineStyle()); 1237 1244 case CSSPropertyOutlineWidth: 1238 return zoomAdjustedPixelValue(style->outlineWidth(), style.get() );1245 return zoomAdjustedPixelValue(style->outlineWidth(), style.get(), primitiveValueCache); 1239 1246 case CSSPropertyOverflow: 1240 return CSSPrimitiveValue::create(max(style->overflowX(), style->overflowY()));1247 return primitiveValueCache->createValue(max(style->overflowX(), style->overflowY())); 1241 1248 case CSSPropertyOverflowX: 1242 return CSSPrimitiveValue::create(style->overflowX());1249 return primitiveValueCache->createValue(style->overflowX()); 1243 1250 case CSSPropertyOverflowY: 1244 return CSSPrimitiveValue::create(style->overflowY());1251 return primitiveValueCache->createValue(style->overflowY()); 1245 1252 case CSSPropertyPaddingTop: 1246 1253 if (renderer && renderer->isBox()) 1247 return zoomAdjustedPixelValue(toRenderBox(renderer)->paddingTop(false), style.get() );1248 return CSSPrimitiveValue::create(style->paddingTop());1254 return zoomAdjustedPixelValue(toRenderBox(renderer)->paddingTop(false), style.get(), primitiveValueCache); 1255 return primitiveValueCache->createValue(style->paddingTop()); 1249 1256 case CSSPropertyPaddingRight: 1250 1257 if (renderer && renderer->isBox()) 1251 return zoomAdjustedPixelValue(toRenderBox(renderer)->paddingRight(false), style.get() );1252 return CSSPrimitiveValue::create(style->paddingRight());1258 return zoomAdjustedPixelValue(toRenderBox(renderer)->paddingRight(false), style.get(), primitiveValueCache); 1259 return primitiveValueCache->createValue(style->paddingRight()); 1253 1260 case CSSPropertyPaddingBottom: 1254 1261 if (renderer && renderer->isBox()) 1255 return zoomAdjustedPixelValue(toRenderBox(renderer)->paddingBottom(false), style.get() );1256 return CSSPrimitiveValue::create(style->paddingBottom());1262 return zoomAdjustedPixelValue(toRenderBox(renderer)->paddingBottom(false), style.get(), primitiveValueCache); 1263 return primitiveValueCache->createValue(style->paddingBottom()); 1257 1264 case CSSPropertyPaddingLeft: 1258 1265 if (renderer && renderer->isBox()) 1259 return zoomAdjustedPixelValue(toRenderBox(renderer)->paddingLeft(false), style.get() );1260 return CSSPrimitiveValue::create(style->paddingLeft());1266 return zoomAdjustedPixelValue(toRenderBox(renderer)->paddingLeft(false), style.get(), primitiveValueCache); 1267 return primitiveValueCache->createValue(style->paddingLeft()); 1261 1268 case CSSPropertyPageBreakAfter: 1262 return CSSPrimitiveValue::create(style->pageBreakAfter());1269 return primitiveValueCache->createValue(style->pageBreakAfter()); 1263 1270 case CSSPropertyPageBreakBefore: 1264 return CSSPrimitiveValue::create(style->pageBreakBefore());1271 return primitiveValueCache->createValue(style->pageBreakBefore()); 1265 1272 case CSSPropertyPageBreakInside: { 1266 1273 EPageBreak pageBreak = style->pageBreakInside(); … … 1268 1275 if (pageBreak == PBALWAYS) 1269 1276 return 0; 1270 return CSSPrimitiveValue::create(style->pageBreakInside());1277 return primitiveValueCache->createValue(style->pageBreakInside()); 1271 1278 } 1272 1279 case CSSPropertyPosition: 1273 return CSSPrimitiveValue::create(style->position());1280 return primitiveValueCache->createValue(style->position()); 1274 1281 case CSSPropertyRight: 1275 return getPositionOffsetValue(style.get(), CSSPropertyRight );1282 return getPositionOffsetValue(style.get(), CSSPropertyRight, primitiveValueCache); 1276 1283 case CSSPropertyTableLayout: 1277 return CSSPrimitiveValue::create(style->tableLayout());1284 return primitiveValueCache->createValue(style->tableLayout()); 1278 1285 case CSSPropertyTextAlign: 1279 return CSSPrimitiveValue::create(style->textAlign());1286 return primitiveValueCache->createValue(style->textAlign()); 1280 1287 case CSSPropertyTextDecoration: 1281 return renderTextDecorationFlagsToCSSValue(style->textDecoration() );1288 return renderTextDecorationFlagsToCSSValue(style->textDecoration(), primitiveValueCache); 1282 1289 case CSSPropertyWebkitTextDecorationsInEffect: 1283 return renderTextDecorationFlagsToCSSValue(style->textDecorationsInEffect() );1290 return renderTextDecorationFlagsToCSSValue(style->textDecorationsInEffect(), primitiveValueCache); 1284 1291 case CSSPropertyWebkitTextFillColor: 1285 1292 return currentColorOrValidColor(style.get(), style->textFillColor()); … … 1287 1294 return currentColorOrValidColor(style.get(), style->textEmphasisColor()); 1288 1295 case CSSPropertyWebkitTextEmphasisPosition: 1289 return CSSPrimitiveValue::create(style->textEmphasisPosition());1296 return primitiveValueCache->createValue(style->textEmphasisPosition()); 1290 1297 case CSSPropertyWebkitTextEmphasisStyle: 1291 1298 switch (style->textEmphasisMark()) { 1292 1299 case TextEmphasisMarkNone: 1293 return CSSPrimitiveValue::createIdentifier(CSSValueNone);1300 return primitiveValueCache->createIdentifierValue(CSSValueNone); 1294 1301 case TextEmphasisMarkCustom: 1295 return CSSPrimitiveValue::create(style->textEmphasisCustomMark(), CSSPrimitiveValue::CSS_STRING);1302 return primitiveValueCache->createValue(style->textEmphasisCustomMark(), CSSPrimitiveValue::CSS_STRING); 1296 1303 case TextEmphasisMarkAuto: 1297 1304 ASSERT_NOT_REACHED(); … … 1303 1310 case TextEmphasisMarkSesame: { 1304 1311 RefPtr<CSSValueList> list = CSSValueList::createSpaceSeparated(); 1305 list->append( CSSPrimitiveValue::create(style->textEmphasisFill()));1306 list->append( CSSPrimitiveValue::create(style->textEmphasisMark()));1312 list->append(primitiveValueCache->createValue(style->textEmphasisFill())); 1313 list->append(primitiveValueCache->createValue(style->textEmphasisMark())); 1307 1314 return list.release(); 1308 1315 } 1309 1316 } 1310 1317 case CSSPropertyTextIndent: 1311 return CSSPrimitiveValue::create(style->textIndent());1318 return primitiveValueCache->createValue(style->textIndent()); 1312 1319 case CSSPropertyTextShadow: 1313 1320 return valueForShadow(style->textShadow(), propertyID, style.get()); 1314 1321 case CSSPropertyTextRendering: 1315 return CSSPrimitiveValue::create(style->fontDescription().textRenderingMode());1322 return primitiveValueCache->createValue(style->fontDescription().textRenderingMode()); 1316 1323 case CSSPropertyTextOverflow: 1317 1324 if (style->textOverflow()) 1318 return CSSPrimitiveValue::createIdentifier(CSSValueEllipsis);1319 return CSSPrimitiveValue::createIdentifier(CSSValueClip);1325 return primitiveValueCache->createIdentifierValue(CSSValueEllipsis); 1326 return primitiveValueCache->createIdentifierValue(CSSValueClip); 1320 1327 case CSSPropertyWebkitTextSecurity: 1321 return CSSPrimitiveValue::create(style->textSecurity());1328 return primitiveValueCache->createValue(style->textSecurity()); 1322 1329 case CSSPropertyWebkitTextSizeAdjust: 1323 1330 if (style->textSizeAdjust()) 1324 return CSSPrimitiveValue::createIdentifier(CSSValueAuto);1325 return CSSPrimitiveValue::createIdentifier(CSSValueNone);1331 return primitiveValueCache->createIdentifierValue(CSSValueAuto); 1332 return primitiveValueCache->createIdentifierValue(CSSValueNone); 1326 1333 case CSSPropertyWebkitTextStrokeColor: 1327 1334 return currentColorOrValidColor(style.get(), style->textStrokeColor()); 1328 1335 case CSSPropertyWebkitTextStrokeWidth: 1329 return zoomAdjustedPixelValue(style->textStrokeWidth(), style.get() );1336 return zoomAdjustedPixelValue(style->textStrokeWidth(), style.get(), primitiveValueCache); 1330 1337 case CSSPropertyTextTransform: 1331 return CSSPrimitiveValue::create(style->textTransform());1338 return primitiveValueCache->createValue(style->textTransform()); 1332 1339 case CSSPropertyTop: 1333 return getPositionOffsetValue(style.get(), CSSPropertyTop );1340 return getPositionOffsetValue(style.get(), CSSPropertyTop, primitiveValueCache); 1334 1341 case CSSPropertyUnicodeBidi: 1335 return CSSPrimitiveValue::create(style->unicodeBidi());1342 return primitiveValueCache->createValue(style->unicodeBidi()); 1336 1343 case CSSPropertyVerticalAlign: 1337 1344 switch (style->verticalAlign()) { 1338 1345 case BASELINE: 1339 return CSSPrimitiveValue::createIdentifier(CSSValueBaseline);1346 return primitiveValueCache->createIdentifierValue(CSSValueBaseline); 1340 1347 case MIDDLE: 1341 return CSSPrimitiveValue::createIdentifier(CSSValueMiddle);1348 return primitiveValueCache->createIdentifierValue(CSSValueMiddle); 1342 1349 case SUB: 1343 return CSSPrimitiveValue::createIdentifier(CSSValueSub);1350 return primitiveValueCache->createIdentifierValue(CSSValueSub); 1344 1351 case SUPER: 1345 return CSSPrimitiveValue::createIdentifier(CSSValueSuper);1352 return primitiveValueCache->createIdentifierValue(CSSValueSuper); 1346 1353 case TEXT_TOP: 1347 return CSSPrimitiveValue::createIdentifier(CSSValueTextTop);1354 return primitiveValueCache->createIdentifierValue(CSSValueTextTop); 1348 1355 case TEXT_BOTTOM: 1349 return CSSPrimitiveValue::createIdentifier(CSSValueTextBottom);1356 return primitiveValueCache->createIdentifierValue(CSSValueTextBottom); 1350 1357 case TOP: 1351 return CSSPrimitiveValue::createIdentifier(CSSValueTop);1358 return primitiveValueCache->createIdentifierValue(CSSValueTop); 1352 1359 case BOTTOM: 1353 return CSSPrimitiveValue::createIdentifier(CSSValueBottom);1360 return primitiveValueCache->createIdentifierValue(CSSValueBottom); 1354 1361 case BASELINE_MIDDLE: 1355 return CSSPrimitiveValue::createIdentifier(CSSValueWebkitBaselineMiddle);1362 return primitiveValueCache->createIdentifierValue(CSSValueWebkitBaselineMiddle); 1356 1363 case LENGTH: 1357 return CSSPrimitiveValue::create(style->verticalAlignLength());1364 return primitiveValueCache->createValue(style->verticalAlignLength()); 1358 1365 } 1359 1366 ASSERT_NOT_REACHED(); 1360 1367 return 0; 1361 1368 case CSSPropertyVisibility: 1362 return CSSPrimitiveValue::create(style->visibility());1369 return primitiveValueCache->createValue(style->visibility()); 1363 1370 case CSSPropertyWhiteSpace: 1364 return CSSPrimitiveValue::create(style->whiteSpace());1371 return primitiveValueCache->createValue(style->whiteSpace()); 1365 1372 case CSSPropertyWidows: 1366 return CSSPrimitiveValue::create(style->widows(), CSSPrimitiveValue::CSS_NUMBER);1373 return primitiveValueCache->createValue(style->widows(), CSSPrimitiveValue::CSS_NUMBER); 1367 1374 case CSSPropertyWidth: 1368 1375 if (renderer) 1369 return zoomAdjustedPixelValue(sizingBox(renderer).width(), style.get() );1370 return zoomAdjustedPixelValueForLength(style->width(), style.get() );1376 return zoomAdjustedPixelValue(sizingBox(renderer).width(), style.get(), primitiveValueCache); 1377 return zoomAdjustedPixelValueForLength(style->width(), style.get(), primitiveValueCache); 1371 1378 case CSSPropertyWordBreak: 1372 return CSSPrimitiveValue::create(style->wordBreak());1379 return primitiveValueCache->createValue(style->wordBreak()); 1373 1380 case CSSPropertyWordSpacing: 1374 return zoomAdjustedPixelValue(style->wordSpacing(), style.get() );1381 return zoomAdjustedPixelValue(style->wordSpacing(), style.get(), primitiveValueCache); 1375 1382 case CSSPropertyWordWrap: 1376 return CSSPrimitiveValue::create(style->wordWrap());1383 return primitiveValueCache->createValue(style->wordWrap()); 1377 1384 case CSSPropertyWebkitLineBreak: 1378 return CSSPrimitiveValue::create(style->khtmlLineBreak());1385 return primitiveValueCache->createValue(style->khtmlLineBreak()); 1379 1386 case CSSPropertyWebkitNbspMode: 1380 return CSSPrimitiveValue::create(style->nbspMode());1387 return primitiveValueCache->createValue(style->nbspMode()); 1381 1388 case CSSPropertyWebkitMatchNearestMailBlockquoteColor: 1382 return CSSPrimitiveValue::create(style->matchNearestMailBlockquoteColor());1389 return primitiveValueCache->createValue(style->matchNearestMailBlockquoteColor()); 1383 1390 case CSSPropertyResize: 1384 return CSSPrimitiveValue::create(style->resize());1391 return primitiveValueCache->createValue(style->resize()); 1385 1392 case CSSPropertyWebkitFontSmoothing: 1386 return CSSPrimitiveValue::create(style->fontDescription().fontSmoothing());1393 return primitiveValueCache->createValue(style->fontDescription().fontSmoothing()); 1387 1394 case CSSPropertyZIndex: 1388 1395 if (style->hasAutoZIndex()) 1389 return CSSPrimitiveValue::createIdentifier(CSSValueAuto);1390 return CSSPrimitiveValue::create(style->zIndex(), CSSPrimitiveValue::CSS_NUMBER);1396 return primitiveValueCache->createIdentifierValue(CSSValueAuto); 1397 return primitiveValueCache->createValue(style->zIndex(), CSSPrimitiveValue::CSS_NUMBER); 1391 1398 case CSSPropertyZoom: 1392 return CSSPrimitiveValue::create(style->zoom(), CSSPrimitiveValue::CSS_NUMBER);1399 return primitiveValueCache->createValue(style->zoom(), CSSPrimitiveValue::CSS_NUMBER); 1393 1400 case CSSPropertyBoxSizing: 1394 1401 if (style->boxSizing() == CONTENT_BOX) 1395 return CSSPrimitiveValue::createIdentifier(CSSValueContentBox);1396 return CSSPrimitiveValue::createIdentifier(CSSValueBorderBox);1402 return primitiveValueCache->createIdentifierValue(CSSValueContentBox); 1403 return primitiveValueCache->createIdentifierValue(CSSValueBorderBox); 1397 1404 #if ENABLE(DASHBOARD_SUPPORT) 1398 1405 case CSSPropertyWebkitDashboardRegion: … … 1401 1408 unsigned count = regions.size(); 1402 1409 if (count == 1 && regions[0].type == StyleDashboardRegion::None) 1403 return CSSPrimitiveValue::createIdentifier(CSSValueNone);1410 return primitiveValueCache->createIdentifierValue(CSSValueNone); 1404 1411 1405 1412 RefPtr<DashboardRegion> firstRegion; … … 1411 1418 region->m_label = styleRegion.label; 1412 1419 LengthBox offset = styleRegion.offset; 1413 region->setTop(zoomAdjustedPixelValue(offset.top().value(), style.get() ));1414 region->setRight(zoomAdjustedPixelValue(offset.right().value(), style.get() ));1415 region->setBottom(zoomAdjustedPixelValue(offset.bottom().value(), style.get() ));1416 region->setLeft(zoomAdjustedPixelValue(offset.left().value(), style.get() ));1420 region->setTop(zoomAdjustedPixelValue(offset.top().value(), style.get(), primitiveValueCache)); 1421 region->setRight(zoomAdjustedPixelValue(offset.right().value(), style.get(), primitiveValueCache)); 1422 region->setBottom(zoomAdjustedPixelValue(offset.bottom().value(), style.get(), primitiveValueCache)); 1423 region->setLeft(zoomAdjustedPixelValue(offset.left().value(), style.get(), primitiveValueCache)); 1417 1424 region->m_isRectangle = (styleRegion.type == StyleDashboardRegion::Rectangle); 1418 1425 region->m_isCircle = (styleRegion.type == StyleDashboardRegion::Circle); … … 1424 1431 previousRegion = region.get(); 1425 1432 } 1426 return CSSPrimitiveValue::create(firstRegion.release());1433 return primitiveValueCache->createValue(firstRegion.release()); 1427 1434 } 1428 1435 #endif 1429 1436 case CSSPropertyWebkitAnimationDelay: 1430 return getDelayValue(style->animations() );1437 return getDelayValue(style->animations(), primitiveValueCache); 1431 1438 case CSSPropertyWebkitAnimationDirection: { 1432 1439 RefPtr<CSSValueList> list = CSSValueList::createCommaSeparated(); … … 1435 1442 for (size_t i = 0; i < t->size(); ++i) { 1436 1443 if (t->animation(i)->direction()) 1437 list->append( CSSPrimitiveValue::createIdentifier(CSSValueAlternate));1444 list->append(primitiveValueCache->createIdentifierValue(CSSValueAlternate)); 1438 1445 else 1439 list->append( CSSPrimitiveValue::createIdentifier(CSSValueNormal));1446 list->append(primitiveValueCache->createIdentifierValue(CSSValueNormal)); 1440 1447 } 1441 1448 } else 1442 list->append( CSSPrimitiveValue::createIdentifier(CSSValueNormal));1449 list->append(primitiveValueCache->createIdentifierValue(CSSValueNormal)); 1443 1450 return list.release(); 1444 1451 } 1445 1452 case CSSPropertyWebkitAnimationDuration: 1446 return getDurationValue(style->animations() );1453 return getDurationValue(style->animations(), primitiveValueCache); 1447 1454 case CSSPropertyWebkitAnimationFillMode: { 1448 1455 RefPtr<CSSValueList> list = CSSValueList::createCommaSeparated(); … … 1452 1459 switch (t->animation(i)->fillMode()) { 1453 1460 case AnimationFillModeNone: 1454 list->append( CSSPrimitiveValue::createIdentifier(CSSValueNone));1461 list->append(primitiveValueCache->createIdentifierValue(CSSValueNone)); 1455 1462 break; 1456 1463 case AnimationFillModeForwards: 1457 list->append( CSSPrimitiveValue::createIdentifier(CSSValueForwards));1464 list->append(primitiveValueCache->createIdentifierValue(CSSValueForwards)); 1458 1465 break; 1459 1466 case AnimationFillModeBackwards: 1460 list->append( CSSPrimitiveValue::createIdentifier(CSSValueBackwards));1467 list->append(primitiveValueCache->createIdentifierValue(CSSValueBackwards)); 1461 1468 break; 1462 1469 case AnimationFillModeBoth: 1463 list->append( CSSPrimitiveValue::createIdentifier(CSSValueBoth));1470 list->append(primitiveValueCache->createIdentifierValue(CSSValueBoth)); 1464 1471 break; 1465 1472 } 1466 1473 } 1467 1474 } else 1468 list->append( CSSPrimitiveValue::createIdentifier(CSSValueNone));1475 list->append(primitiveValueCache->createIdentifierValue(CSSValueNone)); 1469 1476 return list.release(); 1470 1477 } … … 1476 1483 int iterationCount = t->animation(i)->iterationCount(); 1477 1484 if (iterationCount == Animation::IterationCountInfinite) 1478 list->append( CSSPrimitiveValue::createIdentifier(CSSValueInfinite));1485 list->append(primitiveValueCache->createIdentifierValue(CSSValueInfinite)); 1479 1486 else 1480 list->append( CSSPrimitiveValue::create(iterationCount, CSSPrimitiveValue::CSS_NUMBER));1487 list->append(primitiveValueCache->createValue(iterationCount, CSSPrimitiveValue::CSS_NUMBER)); 1481 1488 } 1482 1489 } else 1483 list->append( CSSPrimitiveValue::create(Animation::initialAnimationIterationCount(), CSSPrimitiveValue::CSS_NUMBER));1490 list->append(primitiveValueCache->createValue(Animation::initialAnimationIterationCount(), CSSPrimitiveValue::CSS_NUMBER)); 1484 1491 return list.release(); 1485 1492 } … … 1489 1496 if (t) { 1490 1497 for (size_t i = 0; i < t->size(); ++i) 1491 list->append( CSSPrimitiveValue::create(t->animation(i)->name(), CSSPrimitiveValue::CSS_STRING));1498 list->append(primitiveValueCache->createValue(t->animation(i)->name(), CSSPrimitiveValue::CSS_STRING)); 1492 1499 } else 1493 list->append( CSSPrimitiveValue::createIdentifier(CSSValueNone));1500 list->append(primitiveValueCache->createIdentifierValue(CSSValueNone)); 1494 1501 return list.release(); 1495 1502 } … … 1501 1508 int prop = t->animation(i)->playState(); 1502 1509 if (prop == AnimPlayStatePlaying) 1503 list->append( CSSPrimitiveValue::createIdentifier(CSSValueRunning));1510 list->append(primitiveValueCache->createIdentifierValue(CSSValueRunning)); 1504 1511 else 1505 list->append( CSSPrimitiveValue::createIdentifier(CSSValuePaused));1512 list->append(primitiveValueCache->createIdentifierValue(CSSValuePaused)); 1506 1513 } 1507 1514 } else 1508 list->append( CSSPrimitiveValue::createIdentifier(CSSValueRunning));1515 list->append(primitiveValueCache->createIdentifierValue(CSSValueRunning)); 1509 1516 return list.release(); 1510 1517 } … … 1512 1519 return getTimingFunctionValue(style->animations()); 1513 1520 case CSSPropertyWebkitAppearance: 1514 return CSSPrimitiveValue::create(style->appearance());1521 return primitiveValueCache->createValue(style->appearance()); 1515 1522 case CSSPropertyWebkitBackfaceVisibility: 1516 return CSSPrimitiveValue::createIdentifier((style->backfaceVisibility() == BackfaceVisibilityHidden) ? CSSValueHidden : CSSValueVisible);1523 return primitiveValueCache->createIdentifierValue((style->backfaceVisibility() == BackfaceVisibilityHidden) ? CSSValueHidden : CSSValueVisible); 1517 1524 case CSSPropertyWebkitBorderImage: 1518 return valueForNinePieceImage(style->borderImage() );1525 return valueForNinePieceImage(style->borderImage(), primitiveValueCache); 1519 1526 case CSSPropertyWebkitMaskBoxImage: 1520 return valueForNinePieceImage(style->maskBoxImage() );1527 return valueForNinePieceImage(style->maskBoxImage(), primitiveValueCache); 1521 1528 case CSSPropertyWebkitFontSizeDelta: 1522 1529 // Not a real style property -- used by the editing engine -- so has no computed value. … … 1524 1531 case CSSPropertyWebkitMarginBottomCollapse: 1525 1532 case CSSPropertyWebkitMarginAfterCollapse: 1526 return CSSPrimitiveValue::create(style->marginAfterCollapse());1533 return primitiveValueCache->createValue(style->marginAfterCollapse()); 1527 1534 case CSSPropertyWebkitMarginTopCollapse: 1528 1535 case CSSPropertyWebkitMarginBeforeCollapse: 1529 return CSSPrimitiveValue::create(style->marginBeforeCollapse());1536 return primitiveValueCache->createValue(style->marginBeforeCollapse()); 1530 1537 case CSSPropertyWebkitPerspective: 1531 1538 if (!style->hasPerspective()) 1532 return CSSPrimitiveValue::createIdentifier(CSSValueNone);1533 return CSSPrimitiveValue::create(style->perspective(), CSSPrimitiveValue::CSS_NUMBER);1539 return primitiveValueCache->createIdentifierValue(CSSValueNone); 1540 return primitiveValueCache->createValue(style->perspective(), CSSPrimitiveValue::CSS_NUMBER); 1534 1541 case CSSPropertyWebkitPerspectiveOrigin: { 1535 1542 RefPtr<CSSValueList> list = CSSValueList::createSpaceSeparated(); 1536 1543 if (renderer) { 1537 1544 IntRect box = sizingBox(renderer); 1538 list->append(zoomAdjustedPixelValue(style->perspectiveOriginX().calcMinValue(box.width()), style.get() ));1539 list->append(zoomAdjustedPixelValue(style->perspectiveOriginY().calcMinValue(box.height()), style.get() ));1545 list->append(zoomAdjustedPixelValue(style->perspectiveOriginX().calcMinValue(box.width()), style.get(), primitiveValueCache)); 1546 list->append(zoomAdjustedPixelValue(style->perspectiveOriginY().calcMinValue(box.height()), style.get(), primitiveValueCache)); 1540 1547 } 1541 1548 else { 1542 list->append(zoomAdjustedPixelValueForLength(style->perspectiveOriginX(), style.get() ));1543 list->append(zoomAdjustedPixelValueForLength(style->perspectiveOriginY(), style.get() ));1549 list->append(zoomAdjustedPixelValueForLength(style->perspectiveOriginX(), style.get(), primitiveValueCache)); 1550 list->append(zoomAdjustedPixelValueForLength(style->perspectiveOriginY(), style.get(), primitiveValueCache)); 1544 1551 1545 1552 } … … 1548 1555 case CSSPropertyWebkitRtlOrdering: 1549 1556 if (style->visuallyOrdered()) 1550 return CSSPrimitiveValue::createIdentifier(CSSValueVisual);1551 return CSSPrimitiveValue::createIdentifier(CSSValueLogical);1557 return primitiveValueCache->createIdentifierValue(CSSValueVisual); 1558 return primitiveValueCache->createIdentifierValue(CSSValueLogical); 1552 1559 case CSSPropertyWebkitUserDrag: 1553 return CSSPrimitiveValue::create(style->userDrag());1560 return primitiveValueCache->createValue(style->userDrag()); 1554 1561 case CSSPropertyWebkitUserSelect: 1555 return CSSPrimitiveValue::create(style->userSelect());1562 return primitiveValueCache->createValue(style->userSelect()); 1556 1563 case CSSPropertyBorderBottomLeftRadius: 1557 return getBorderRadiusCornerValue(style->borderBottomLeftRadius(), style.get() );1564 return getBorderRadiusCornerValue(style->borderBottomLeftRadius(), style.get(), primitiveValueCache); 1558 1565 case CSSPropertyBorderBottomRightRadius: 1559 return getBorderRadiusCornerValue(style->borderBottomRightRadius(), style.get() );1566 return getBorderRadiusCornerValue(style->borderBottomRightRadius(), style.get(), primitiveValueCache); 1560 1567 case CSSPropertyBorderTopLeftRadius: 1561 return getBorderRadiusCornerValue(style->borderTopLeftRadius(), style.get() );1568 return getBorderRadiusCornerValue(style->borderTopLeftRadius(), style.get(), primitiveValueCache); 1562 1569 case CSSPropertyBorderTopRightRadius: 1563 return getBorderRadiusCornerValue(style->borderTopRightRadius(), style.get() );1570 return getBorderRadiusCornerValue(style->borderTopRightRadius(), style.get(), primitiveValueCache); 1564 1571 case CSSPropertyClip: { 1565 1572 if (!style->hasClip()) 1566 return CSSPrimitiveValue::createIdentifier(CSSValueAuto);1573 return primitiveValueCache->createIdentifierValue(CSSValueAuto); 1567 1574 RefPtr<Rect> rect = Rect::create(); 1568 rect->setTop(zoomAdjustedPixelValue(style->clip().top().value(), style.get() ));1569 rect->setRight(zoomAdjustedPixelValue(style->clip().right().value(), style.get() ));1570 rect->setBottom(zoomAdjustedPixelValue(style->clip().bottom().value(), style.get() ));1571 rect->setLeft(zoomAdjustedPixelValue(style->clip().left().value(), style.get() ));1572 return CSSPrimitiveValue::create(rect.release());1575 rect->setTop(zoomAdjustedPixelValue(style->clip().top().value(), style.get(), primitiveValueCache)); 1576 rect->setRight(zoomAdjustedPixelValue(style->clip().right().value(), style.get(), primitiveValueCache)); 1577 rect->setBottom(zoomAdjustedPixelValue(style->clip().bottom().value(), style.get(), primitiveValueCache)); 1578 rect->setLeft(zoomAdjustedPixelValue(style->clip().left().value(), style.get(), primitiveValueCache)); 1579 return primitiveValueCache->createValue(rect.release()); 1573 1580 } 1574 1581 case CSSPropertySpeak: 1575 return CSSPrimitiveValue::create(style->speak());1582 return primitiveValueCache->createValue(style->speak()); 1576 1583 case CSSPropertyWebkitTransform: 1577 return computedTransform(renderer, style.get() );1584 return computedTransform(renderer, style.get(), primitiveValueCache); 1578 1585 case CSSPropertyWebkitTransformOrigin: { 1579 1586 RefPtr<CSSValueList> list = CSSValueList::createSpaceSeparated(); 1580 1587 if (renderer) { 1581 1588 IntRect box = sizingBox(renderer); 1582 list->append(zoomAdjustedPixelValue(style->transformOriginX().calcMinValue(box.width()), style.get() ));1583 list->append(zoomAdjustedPixelValue(style->transformOriginY().calcMinValue(box.height()), style.get() ));1589 list->append(zoomAdjustedPixelValue(style->transformOriginX().calcMinValue(box.width()), style.get(), primitiveValueCache)); 1590 list->append(zoomAdjustedPixelValue(style->transformOriginY().calcMinValue(box.height()), style.get(), primitiveValueCache)); 1584 1591 if (style->transformOriginZ() != 0) 1585 list->append(zoomAdjustedPixelValue(style->transformOriginZ(), style.get() ));1592 list->append(zoomAdjustedPixelValue(style->transformOriginZ(), style.get(), primitiveValueCache)); 1586 1593 } else { 1587 list->append(zoomAdjustedPixelValueForLength(style->transformOriginX(), style.get() ));1588 list->append(zoomAdjustedPixelValueForLength(style->transformOriginY(), style.get() ));1594 list->append(zoomAdjustedPixelValueForLength(style->transformOriginX(), style.get(), primitiveValueCache)); 1595 list->append(zoomAdjustedPixelValueForLength(style->transformOriginY(), style.get(), primitiveValueCache)); 1589 1596 if (style->transformOriginZ() != 0) 1590 list->append(zoomAdjustedPixelValue(style->transformOriginZ(), style.get() ));1597 list->append(zoomAdjustedPixelValue(style->transformOriginZ(), style.get(), primitiveValueCache)); 1591 1598 } 1592 1599 return list.release(); 1593 1600 } 1594 1601 case CSSPropertyWebkitTransformStyle: 1595 return CSSPrimitiveValue::createIdentifier((style->transformStyle3D() == TransformStyle3DPreserve3D) ? CSSValuePreserve3d : CSSValueFlat);1602 return primitiveValueCache->createIdentifierValue((style->transformStyle3D() == TransformStyle3DPreserve3D) ? CSSValuePreserve3d : CSSValueFlat); 1596 1603 case CSSPropertyWebkitTransitionDelay: 1597 return getDelayValue(style->transitions() );1604 return getDelayValue(style->transitions(), primitiveValueCache); 1598 1605 case CSSPropertyWebkitTransitionDuration: 1599 return getDurationValue(style->transitions() );1606 return getDurationValue(style->transitions(), primitiveValueCache); 1600 1607 case CSSPropertyWebkitTransitionProperty: { 1601 1608 RefPtr<CSSValueList> list = CSSValueList::createCommaSeparated(); … … 1606 1613 RefPtr<CSSValue> propertyValue; 1607 1614 if (prop == cAnimateNone) 1608 propertyValue = CSSPrimitiveValue::createIdentifier(CSSValueNone);1615 propertyValue = primitiveValueCache->createIdentifierValue(CSSValueNone); 1609 1616 else if (prop == cAnimateAll) 1610 propertyValue = CSSPrimitiveValue::createIdentifier(CSSValueAll);1617 propertyValue = primitiveValueCache->createIdentifierValue(CSSValueAll); 1611 1618 else 1612 propertyValue = CSSPrimitiveValue::create(getPropertyName(static_cast<CSSPropertyID>(prop)), CSSPrimitiveValue::CSS_STRING);1619 propertyValue = primitiveValueCache->createValue(getPropertyName(static_cast<CSSPropertyID>(prop)), CSSPrimitiveValue::CSS_STRING); 1613 1620 list->append(propertyValue); 1614 1621 } 1615 1622 } else 1616 list->append( CSSPrimitiveValue::createIdentifier(CSSValueAll));1623 list->append(primitiveValueCache->createIdentifierValue(CSSValueAll)); 1617 1624 return list.release(); 1618 1625 } … … 1620 1627 return getTimingFunctionValue(style->transitions()); 1621 1628 case CSSPropertyPointerEvents: 1622 return CSSPrimitiveValue::create(style->pointerEvents());1629 return primitiveValueCache->createValue(style->pointerEvents()); 1623 1630 case CSSPropertyWebkitColorCorrection: 1624 return CSSPrimitiveValue::create(style->colorSpace());1631 return primitiveValueCache->createValue(style->colorSpace()); 1625 1632 case CSSPropertyWebkitWritingMode: 1626 return CSSPrimitiveValue::create(style->writingMode());1633 return primitiveValueCache->createValue(style->writingMode()); 1627 1634 case CSSPropertyWebkitTextCombine: 1628 return CSSPrimitiveValue::create(style->textCombine());1635 return primitiveValueCache->createValue(style->textCombine()); 1629 1636 1630 1637 case CSSPropertyContent: 1631 return contentToCSSValue(style.get() );1638 return contentToCSSValue(style.get(), primitiveValueCache); 1632 1639 case CSSPropertyCounterIncrement: 1633 return counterToCSSValue(style.get(), propertyID );1640 return counterToCSSValue(style.get(), propertyID, primitiveValueCache); 1634 1641 case CSSPropertyCounterReset: 1635 return counterToCSSValue(style.get(), propertyID );1642 return counterToCSSValue(style.get(), propertyID, primitiveValueCache); 1636 1643 1637 1644 /* Shorthand properties, currently not supported see bug 13658*/ -
trunk/Source/WebCore/css/CSSParser.cpp
r80438 r80463 41 41 #include "CSSPageRule.h" 42 42 #include "CSSPrimitiveValue.h" 43 #include "CSSPrimitiveValueCache.h" 43 44 #include "CSSProperty.h" 44 45 #include "CSSPropertyNames.h" … … 222 223 void CSSParser::parseSheet(CSSStyleSheet* sheet, const String& string, int startLineNumber, StyleRuleRangeMap* ruleRangeMap) 223 224 { 224 m_styleSheet = sheet;225 setStyleSheet(sheet); 225 226 m_defaultNamespace = starAtom; // Reset the default namespace. 226 227 m_ruleRangeMap = ruleRangeMap; … … 240 241 PassRefPtr<CSSRule> CSSParser::parseRule(CSSStyleSheet* sheet, const String& string) 241 242 { 242 m_styleSheet = sheet;243 setStyleSheet(sheet); 243 244 m_allowNamespaceDeclarations = false; 244 245 setupParser("@-webkit-rule{", string, "} "); … … 249 250 PassRefPtr<CSSRule> CSSParser::parseKeyframeRule(CSSStyleSheet *sheet, const String &string) 250 251 { 251 m_styleSheet = sheet;252 setStyleSheet(sheet); 252 253 setupParser("@-webkit-keyframe-rule{ ", string, "} "); 253 254 cssyyparse(this); … … 258 259 { 259 260 ASSERT(!declaration->stylesheet() || declaration->stylesheet()->isCSSStyleSheet()); 260 m_styleSheet = static_cast<CSSStyleSheet*>(declaration->stylesheet());261 setStyleSheet(static_cast<CSSStyleSheet*>(declaration->stylesheet())); 261 262 262 263 setupParser("@-webkit-value{", string, "} "); … … 311 312 { 312 313 ASSERT(!declaration->stylesheet() || declaration->stylesheet()->isCSSStyleSheet()); 313 m_styleSheet = static_cast<CSSStyleSheet*>(declaration->stylesheet());314 setStyleSheet(static_cast<CSSStyleSheet*>(declaration->stylesheet())); 314 315 315 316 setupParser("@-webkit-decls{color:", string, "} "); … … 340 341 RefPtr<CSSStyleSheet> dummyStyleSheet = CSSStyleSheet::create(doc); 341 342 342 m_styleSheet = dummyStyleSheet.get();343 setStyleSheet(dummyStyleSheet.get()); 343 344 m_selectorListForParseSelector = &selectorList; 344 345 … … 359 360 360 361 ASSERT(!declaration->stylesheet() || declaration->stylesheet()->isCSSStyleSheet()); 361 m_styleSheet = static_cast<CSSStyleSheet*>(declaration->stylesheet());362 setStyleSheet(static_cast<CSSStyleSheet*>(declaration->stylesheet())); 362 363 if (styleSourceData) { 363 364 m_currentRuleData = CSSRuleSourceData::create(); … … 447 448 m_numParsedPropertiesBeforeMarginBox = INVALID_NUM_PARSED_PROPERTIES; 448 449 m_hasFontFaceOnlyValues = false; 450 } 451 452 void CSSParser::setStyleSheet(CSSStyleSheet* styleSheet) 453 { 454 m_styleSheet = styleSheet; 455 m_primitiveValueCache = document() ? document()->cssPrimitiveValueCache() : CSSPrimitiveValueCache::create(); 449 456 } 450 457 … … 907 914 return false; 908 915 } else if (!m_strict && value->id == CSSValueHand) // MSIE 5 compatibility :/ 909 list->append( CSSPrimitiveValue::createIdentifier(CSSValuePointer));916 list->append(primitiveValueCache()->createIdentifierValue(CSSValuePointer)); 910 917 else if (value && ((value->id >= CSSValueAuto && value->id <= CSSValueWebkitGrabbing) || value->id == CSSValueCopy || value->id == CSSValueNone)) 911 list->append( CSSPrimitiveValue::createIdentifier(value->id));918 list->append(primitiveValueCache()->createIdentifierValue(value->id)); 912 919 m_valueList->next(); 913 920 parsedValue = list.release(); … … 1166 1173 case CSSValueOverline: 1167 1174 case CSSValueLineThrough: 1168 list->append( CSSPrimitiveValue::createIdentifier(value->id));1175 list->append(primitiveValueCache()->createIdentifierValue(value->id)); 1169 1176 break; 1170 1177 default: … … 1225 1232 if (!validPrimitive) 1226 1233 return false; 1227 RefPtr<CSSPrimitiveValue> parsedValue1 = CSSPrimitiveValue::create(value->fValue, (CSSPrimitiveValue::UnitTypes)value->unit);1234 RefPtr<CSSPrimitiveValue> parsedValue1 = primitiveValueCache()->createValue(value->fValue, (CSSPrimitiveValue::UnitTypes)value->unit); 1228 1235 RefPtr<CSSPrimitiveValue> parsedValue2; 1229 1236 if (num == 2) { … … 1232 1239 if (!validPrimitive) 1233 1240 return false; 1234 parsedValue2 = CSSPrimitiveValue::create(value->fValue, (CSSPrimitiveValue::UnitTypes)value->unit);1241 parsedValue2 = primitiveValueCache()->createValue(value->fValue, (CSSPrimitiveValue::UnitTypes)value->unit); 1235 1242 } else 1236 1243 parsedValue2 = parsedValue1; 1237 1244 1238 1245 RefPtr<Pair> pair = Pair::create(parsedValue1.release(), parsedValue2.release()); 1239 RefPtr<CSSPrimitiveValue> val = CSSPrimitiveValue::create(pair.release());1246 RefPtr<CSSPrimitiveValue> val = primitiveValueCache()->createValue(pair.release()); 1240 1247 addProperty(propId, val.release(), important); 1241 1248 return true; … … 1416 1423 // Accepting valueless numbers is a quirk of the -webkit prefixed version of the property. 1417 1424 if (validUnit(value, FNumber | FLength | FNonNeg, m_strict)) { 1418 RefPtr<CSSValue> val = CSSPrimitiveValue::create(value->fValue, (CSSPrimitiveValue::UnitTypes)value->unit);1425 RefPtr<CSSValue> val = primitiveValueCache()->createValue(value->fValue, (CSSPrimitiveValue::UnitTypes)value->unit); 1419 1426 if (val) { 1420 1427 addProperty(propId, val.release(), important); … … 1834 1841 if (validPrimitive) { 1835 1842 if (id != 0) 1836 parsedValue = CSSPrimitiveValue::createIdentifier(id);1843 parsedValue = primitiveValueCache()->createIdentifierValue(id); 1837 1844 else if (value->unit == CSSPrimitiveValue::CSS_STRING) 1838 parsedValue = CSSPrimitiveValue::create(value->string, (CSSPrimitiveValue::UnitTypes) value->unit);1845 parsedValue = primitiveValueCache()->createValue(value->string, (CSSPrimitiveValue::UnitTypes) value->unit); 1839 1846 else if (value->unit >= CSSPrimitiveValue::CSS_NUMBER && value->unit <= CSSPrimitiveValue::CSS_KHZ) 1840 parsedValue = CSSPrimitiveValue::create(value->fValue, (CSSPrimitiveValue::UnitTypes) value->unit);1847 parsedValue = primitiveValueCache()->createValue(value->fValue, (CSSPrimitiveValue::UnitTypes) value->unit); 1841 1848 else if (value->unit >= CSSPrimitiveValue::CSS_TURN && value->unit <= CSSPrimitiveValue::CSS_REMS) 1842 parsedValue = CSSPrimitiveValue::create(value->fValue, (CSSPrimitiveValue::UnitTypes) value->unit);1849 parsedValue = primitiveValueCache()->createValue(value->fValue, (CSSPrimitiveValue::UnitTypes) value->unit); 1843 1850 else if (value->unit >= CSSParserValue::Q_EMS) 1844 1851 parsedValue = CSSQuirkPrimitiveValue::create(value->fValue, CSSPrimitiveValue::CSS_EMS); … … 1864 1871 1865 1872 if (!inputProperty.isEmpty()) 1866 parsedValue = CSSPrimitiveValue::create(inputProperty, CSSPrimitiveValue::CSS_STRING);1873 parsedValue = primitiveValueCache()->createValue(inputProperty, CSSPrimitiveValue::CSS_STRING); 1867 1874 1868 1875 while (m_valueList->next()) { … … 1892 1899 } 1893 1900 1894 static bool parseBackgroundClip(CSSParserValue* parserValue, RefPtr<CSSValue>& cssValue )1901 static bool parseBackgroundClip(CSSParserValue* parserValue, RefPtr<CSSValue>& cssValue, CSSPrimitiveValueCache* primitiveValueCache) 1895 1902 { 1896 1903 if (parserValue->id == CSSValueBorderBox || parserValue->id == CSSValuePaddingBox 1897 1904 || parserValue->id == CSSValueContentBox || parserValue->id == CSSValueWebkitText) { 1898 cssValue = CSSPrimitiveValue::createIdentifier(parserValue->id);1905 cssValue = primitiveValueCache->createIdentifierValue(parserValue->id); 1899 1906 return true; 1900 1907 } … … 1964 1971 if (properties[i] == CSSPropertyBackgroundOrigin || properties[i] == CSSPropertyWebkitMaskOrigin) { 1965 1972 // Reparse the value as a clip, and see if we succeed. 1966 if (parseBackgroundClip(parserValue, val1 ))1973 if (parseBackgroundClip(parserValue, val1, primitiveValueCache())) 1967 1974 addFillValue(clipValue, val1.release()); // The property parsed successfully. 1968 1975 else … … 2281 2288 2282 2289 if (value->id == CSSValueAuto) { 2283 addProperty(propId, CSSPrimitiveValue::createIdentifier(value->id), important);2290 addProperty(propId, primitiveValueCache()->createIdentifierValue(value->id), important); 2284 2291 return true; 2285 2292 } else if (value->id == 0 && value->unit == CSSPrimitiveValue::CSS_IDENT) { 2286 addProperty(propId, CSSPrimitiveValue::create(value->string, CSSPrimitiveValue::CSS_STRING), important);2293 addProperty(propId, primitiveValueCache()->createValue(value->string, CSSPrimitiveValue::CSS_STRING), important); 2287 2294 return true; 2288 2295 } … … 2326 2333 case CSSValueAuto: 2327 2334 if (prevParamType == None) { 2328 parsedValues->append( CSSPrimitiveValue::createIdentifier(value->id));2335 parsedValues->append(primitiveValueCache()->createIdentifierValue(value->id)); 2329 2336 return Auto; 2330 2337 } … … 2333 2340 case CSSValuePortrait: 2334 2341 if (prevParamType == None || prevParamType == PageSize) { 2335 parsedValues->append( CSSPrimitiveValue::createIdentifier(value->id));2342 parsedValues->append(primitiveValueCache()->createIdentifierValue(value->id)); 2336 2343 return Orientation; 2337 2344 } … … 2348 2355 // Normalize to Page Size then Orientation order by prepending. 2349 2356 // This is not specified by the CSS3 Paged Media specification, but for simpler processing later (CSSStyleSelector::applyPageSizeProperty). 2350 parsedValues->prepend( CSSPrimitiveValue::createIdentifier(value->id));2357 parsedValues->prepend(primitiveValueCache()->createIdentifierValue(value->id)); 2351 2358 return PageSize; 2352 2359 } … … 2354 2361 case 0: 2355 2362 if (validUnit(value, FLength | FNonNeg, m_strict) && (prevParamType == None || prevParamType == Length)) { 2356 parsedValues->append( CSSPrimitiveValue::create(value->fValue, static_cast<CSSPrimitiveValue::UnitTypes>(value->unit)));2363 parsedValues->append(primitiveValueCache()->createValue(value->fValue, static_cast<CSSPrimitiveValue::UnitTypes>(value->unit))); 2357 2364 return Length; 2358 2365 } … … 2437 2444 case CSSValueNone: 2438 2445 case CSSValueNormal: 2439 parsedValue = CSSPrimitiveValue::createIdentifier(val->id);2446 parsedValue = primitiveValueCache()->createIdentifierValue(val->id); 2440 2447 } 2441 2448 } else if (val->unit == CSSPrimitiveValue::CSS_STRING) { 2442 parsedValue = CSSPrimitiveValue::create(val->string, CSSPrimitiveValue::CSS_STRING);2449 parsedValue = primitiveValueCache()->createValue(val->string, CSSPrimitiveValue::CSS_STRING); 2443 2450 } 2444 2451 if (!parsedValue) … … 2477 2484 attrName = attrName.lower(); 2478 2485 2479 return CSSPrimitiveValue::create(attrName, CSSPrimitiveValue::CSS_ATTR);2486 return primitiveValueCache()->createValue(attrName, CSSPrimitiveValue::CSS_ATTR); 2480 2487 } 2481 2488 … … 2485 2492 if (id == CSSValueWebkitText || (id >= CSSValueAqua && id <= CSSValueWindowtext) || id == CSSValueMenu || id == CSSValueCurrentcolor || 2486 2493 (id >= CSSValueGrey && id < CSSValueWebkitText && !m_strict)) 2487 return CSSPrimitiveValue::createIdentifier(id);2494 return primitiveValueCache()->createIdentifierValue(id); 2488 2495 return parseColor(); 2489 2496 } … … 2531 2538 // Center is ambiguous, so we're not sure which position we've found yet, an x or a y. 2532 2539 percent = 50; 2533 return CSSPrimitiveValue::create(percent, CSSPrimitiveValue::CSS_PERCENTAGE);2540 return primitiveValueCache()->createValue(percent, CSSPrimitiveValue::CSS_PERCENTAGE); 2534 2541 } 2535 2542 if (validUnit(valueList->current(), FPercent | FLength, m_strict)) 2536 return CSSPrimitiveValue::create(valueList->current()->fValue,2543 return primitiveValueCache()->createValue(valueList->current()->fValue, 2537 2544 (CSSPrimitiveValue::UnitTypes)valueList->current()->unit); 2538 2545 … … 2577 2584 // For keywords, the keyword was either an x-keyword (left/right), a y-keyword (top/bottom), or an ambiguous keyword (center). 2578 2585 // For left/right/center, the default of 50% in the y is still correct. 2579 value2 = CSSPrimitiveValue::create(50, CSSPrimitiveValue::CSS_PERCENTAGE);2586 value2 = primitiveValueCache()->createValue(50, CSSPrimitiveValue::CSS_PERCENTAGE); 2580 2587 2581 2588 if (value1IsY || value2IsX) … … 2590 2597 if (id == CSSValueRepeatX) { 2591 2598 m_implicitShorthand = true; 2592 value1 = CSSPrimitiveValue::createIdentifier(CSSValueRepeat);2593 value2 = CSSPrimitiveValue::createIdentifier(CSSValueNoRepeat);2599 value1 = primitiveValueCache()->createIdentifierValue(CSSValueRepeat); 2600 value2 = primitiveValueCache()->createIdentifierValue(CSSValueNoRepeat); 2594 2601 m_valueList->next(); 2595 2602 return; … … 2597 2604 if (id == CSSValueRepeatY) { 2598 2605 m_implicitShorthand = true; 2599 value1 = CSSPrimitiveValue::createIdentifier(CSSValueNoRepeat);2600 value2 = CSSPrimitiveValue::createIdentifier(CSSValueRepeat);2606 value1 = primitiveValueCache()->createIdentifierValue(CSSValueNoRepeat); 2607 value2 = primitiveValueCache()->createIdentifierValue(CSSValueRepeat); 2601 2608 m_valueList->next(); 2602 2609 return; 2603 2610 } 2604 2611 if (id == CSSValueRepeat || id == CSSValueNoRepeat || id == CSSValueRound || id == CSSValueSpace) 2605 value1 = CSSPrimitiveValue::createIdentifier(id);2612 value1 = primitiveValueCache()->createIdentifierValue(id); 2606 2613 else { 2607 2614 value1 = 0; … … 2619 2626 2620 2627 if (value && (id == CSSValueRepeat || id == CSSValueNoRepeat || id == CSSValueRound || id == CSSValueSpace)) { 2621 value2 = CSSPrimitiveValue::createIdentifier(id);2628 value2 = primitiveValueCache()->createIdentifierValue(id); 2622 2629 m_valueList->next(); 2623 2630 } else { 2624 2631 // If only one value was specified, value2 is the same as value1. 2625 2632 m_implicitShorthand = true; 2626 value2 = CSSPrimitiveValue::createIdentifier(static_cast<CSSPrimitiveValue*>(value1.get())->getIdent());2633 value2 = primitiveValueCache()->createIdentifierValue(static_cast<CSSPrimitiveValue*>(value1.get())->getIdent()); 2627 2634 } 2628 2635 } … … 2634 2641 2635 2642 if (value->id == CSSValueContain || value->id == CSSValueCover) 2636 return CSSPrimitiveValue::createIdentifier(value->id);2643 return primitiveValueCache()->createIdentifierValue(value->id); 2637 2644 2638 2645 RefPtr<CSSPrimitiveValue> parsedValue1; 2639 2646 2640 2647 if (value->id == CSSValueAuto) 2641 parsedValue1 = CSSPrimitiveValue::create(0, CSSPrimitiveValue::CSS_UNKNOWN);2648 parsedValue1 = primitiveValueCache()->createValue(0, CSSPrimitiveValue::CSS_UNKNOWN); 2642 2649 else { 2643 2650 if (!validUnit(value, FLength | FPercent, m_strict)) 2644 2651 return 0; 2645 parsedValue1 = CSSPrimitiveValue::create(value->fValue, (CSSPrimitiveValue::UnitTypes)value->unit);2652 parsedValue1 = primitiveValueCache()->createValue(value->fValue, (CSSPrimitiveValue::UnitTypes)value->unit); 2646 2653 } 2647 2654 … … 2650 2657 if ((value = m_valueList->next())) { 2651 2658 if (value->id == CSSValueAuto) 2652 parsedValue2 = CSSPrimitiveValue::create(0, CSSPrimitiveValue::CSS_UNKNOWN);2659 parsedValue2 = primitiveValueCache()->createValue(0, CSSPrimitiveValue::CSS_UNKNOWN); 2653 2660 else if (value->unit == CSSParserValue::Operator && value->iValue == ',') 2654 2661 allowComma = false; … … 2656 2663 if (!validUnit(value, FLength | FPercent, m_strict)) 2657 2664 return 0; 2658 parsedValue2 = CSSPrimitiveValue::create(value->fValue, (CSSPrimitiveValue::UnitTypes)value->unit);2665 parsedValue2 = primitiveValueCache()->createValue(value->fValue, (CSSPrimitiveValue::UnitTypes)value->unit); 2659 2666 } 2660 2667 } … … 2663 2670 parsedValue2 = parsedValue1; 2664 2671 else 2665 parsedValue2 = CSSPrimitiveValue::create(0, CSSPrimitiveValue::CSS_UNKNOWN);2666 } 2667 2668 return CSSPrimitiveValue::create(Pair::create(parsedValue1.release(), parsedValue2.release()));2672 parsedValue2 = primitiveValueCache()->createValue(0, CSSPrimitiveValue::CSS_UNKNOWN); 2673 } 2674 2675 return primitiveValueCache()->createValue(Pair::create(parsedValue1.release(), parsedValue2.release())); 2669 2676 } 2670 2677 … … 2717 2724 case CSSPropertyWebkitMaskAttachment: 2718 2725 if (val->id == CSSValueScroll || val->id == CSSValueFixed || val->id == CSSValueLocal) { 2719 currValue = CSSPrimitiveValue::createIdentifier(val->id);2726 currValue = primitiveValueCache()->createIdentifierValue(val->id); 2720 2727 m_valueList->next(); 2721 2728 } … … 2736 2743 ((propId == CSSPropertyWebkitBackgroundClip || propId == CSSPropertyWebkitMaskClip) && 2737 2744 (val->id == CSSValueText || val->id == CSSValueWebkitText))) { 2738 currValue = CSSPrimitiveValue::createIdentifier(val->id);2745 currValue = primitiveValueCache()->createIdentifierValue(val->id); 2739 2746 m_valueList->next(); 2740 2747 } 2741 2748 break; 2742 2749 case CSSPropertyBackgroundClip: 2743 if (parseBackgroundClip(val, currValue ))2750 if (parseBackgroundClip(val, currValue, primitiveValueCache())) 2744 2751 m_valueList->next(); 2745 2752 break; 2746 2753 case CSSPropertyBackgroundOrigin: 2747 2754 if (val->id == CSSValueBorderBox || val->id == CSSValuePaddingBox || val->id == CSSValueContentBox) { 2748 currValue = CSSPrimitiveValue::createIdentifier(val->id);2755 currValue = primitiveValueCache()->createIdentifierValue(val->id); 2749 2756 m_valueList->next(); 2750 2757 } … … 2774 2781 case CSSPropertyWebkitMaskComposite: 2775 2782 if ((val->id >= CSSValueClear && val->id <= CSSValuePlusLighter) || val->id == CSSValueHighlight) { 2776 currValue = CSSPrimitiveValue::createIdentifier(val->id);2783 currValue = primitiveValueCache()->createIdentifierValue(val->id); 2777 2784 m_valueList->next(); 2778 2785 } … … 2841 2848 CSSParserValue* value = m_valueList->current(); 2842 2849 if (validUnit(value, FTime, m_strict)) 2843 return CSSPrimitiveValue::create(value->fValue, (CSSPrimitiveValue::UnitTypes)value->unit);2850 return primitiveValueCache()->createValue(value->fValue, (CSSPrimitiveValue::UnitTypes)value->unit); 2844 2851 return 0; 2845 2852 } … … 2849 2856 CSSParserValue* value = m_valueList->current(); 2850 2857 if (value->id == CSSValueNormal || value->id == CSSValueAlternate) 2851 return CSSPrimitiveValue::createIdentifier(value->id);2858 return primitiveValueCache()->createIdentifierValue(value->id); 2852 2859 return 0; 2853 2860 } … … 2857 2864 CSSParserValue* value = m_valueList->current(); 2858 2865 if (validUnit(value, FTime | FNonNeg, m_strict)) 2859 return CSSPrimitiveValue::create(value->fValue, (CSSPrimitiveValue::UnitTypes)value->unit);2866 return primitiveValueCache()->createValue(value->fValue, (CSSPrimitiveValue::UnitTypes)value->unit); 2860 2867 return 0; 2861 2868 } … … 2865 2872 CSSParserValue* value = m_valueList->current(); 2866 2873 if (value->id == CSSValueNone || value->id == CSSValueForwards || value->id == CSSValueBackwards || value->id == CSSValueBoth) 2867 return CSSPrimitiveValue::createIdentifier(value->id);2874 return primitiveValueCache()->createIdentifierValue(value->id); 2868 2875 return 0; 2869 2876 } … … 2873 2880 CSSParserValue* value = m_valueList->current(); 2874 2881 if (value->id == CSSValueInfinite) 2875 return CSSPrimitiveValue::createIdentifier(value->id);2882 return primitiveValueCache()->createIdentifierValue(value->id); 2876 2883 if (validUnit(value, FInteger | FNonNeg, m_strict)) 2877 return CSSPrimitiveValue::create(value->fValue, (CSSPrimitiveValue::UnitTypes)value->unit);2884 return primitiveValueCache()->createValue(value->fValue, (CSSPrimitiveValue::UnitTypes)value->unit); 2878 2885 return 0; 2879 2886 } … … 2884 2891 if (value->unit == CSSPrimitiveValue::CSS_STRING || value->unit == CSSPrimitiveValue::CSS_IDENT) { 2885 2892 if (value->id == CSSValueNone || (value->unit == CSSPrimitiveValue::CSS_STRING && equalIgnoringCase(value->string, "none"))) { 2886 return CSSPrimitiveValue::createIdentifier(CSSValueNone);2893 return primitiveValueCache()->createIdentifierValue(CSSValueNone); 2887 2894 } else { 2888 return CSSPrimitiveValue::create(value->string, CSSPrimitiveValue::CSS_STRING);2895 return primitiveValueCache()->createValue(value->string, CSSPrimitiveValue::CSS_STRING); 2889 2896 } 2890 2897 } … … 2896 2903 CSSParserValue* value = m_valueList->current(); 2897 2904 if (value->id == CSSValueRunning || value->id == CSSValuePaused) 2898 return CSSPrimitiveValue::createIdentifier(value->id);2905 return primitiveValueCache()->createIdentifierValue(value->id); 2899 2906 return 0; 2900 2907 } … … 2907 2914 int result = cssPropertyID(value->string); 2908 2915 if (result) 2909 return CSSPrimitiveValue::createIdentifier(result);2916 return primitiveValueCache()->createIdentifierValue(result); 2910 2917 if (equalIgnoringCase(value->string, "all")) 2911 return CSSPrimitiveValue::createIdentifier(CSSValueAll);2918 return primitiveValueCache()->createIdentifierValue(CSSValueAll); 2912 2919 if (equalIgnoringCase(value->string, "none")) 2913 return CSSPrimitiveValue::createIdentifier(CSSValueNone);2920 return primitiveValueCache()->createIdentifierValue(CSSValueNone); 2914 2921 return 0; 2915 2922 } … … 2922 2929 if (m_valueList->current()) { 2923 2930 if (validUnit(m_valueList->current(), FLength, m_strict)) { 2924 value3 = CSSPrimitiveValue::create(m_valueList->current()->fValue,2931 value3 = primitiveValueCache()->createValue(m_valueList->current()->fValue, 2925 2932 (CSSPrimitiveValue::UnitTypes)m_valueList->current()->unit); 2926 2933 m_valueList->next(); … … 2955 2962 if (value->id == CSSValueEase || value->id == CSSValueLinear || value->id == CSSValueEaseIn || value->id == CSSValueEaseOut 2956 2963 || value->id == CSSValueEaseInOut || value->id == CSSValueStepStart || value->id == CSSValueStepEnd) 2957 return CSSPrimitiveValue::createIdentifier(value->id);2964 return primitiveValueCache()->createIdentifierValue(value->id); 2958 2965 2959 2966 // We must be a function. … … 3145 3152 if (m_valueList->next()) 3146 3153 return false; 3147 addProperty(propId, CSSPrimitiveValue::createIdentifier(value->id), important);3154 addProperty(propId, primitiveValueCache()->createIdentifierValue(value->id), important); 3148 3155 return valid; 3149 3156 } … … 3215 3222 if (numArgs == DASHBOARD_REGION_SHORT_NUM_PARAMETERS || numArgs == (DASHBOARD_REGION_SHORT_NUM_PARAMETERS*2-1)) { 3216 3223 // This originally used CSSValueInvalid by accident. It might be more logical to use something else. 3217 RefPtr<CSSPrimitiveValue> amount = CSSPrimitiveValue::createIdentifier(CSSValueInvalid);3224 RefPtr<CSSPrimitiveValue> amount = primitiveValueCache()->createIdentifierValue(CSSValueInvalid); 3218 3225 3219 3226 region->setTop(amount); … … 3233 3240 3234 3241 RefPtr<CSSPrimitiveValue> amount = arg->id == CSSValueAuto ? 3235 CSSPrimitiveValue::createIdentifier(CSSValueAuto) :3236 CSSPrimitiveValue::create(arg->fValue, (CSSPrimitiveValue::UnitTypes) arg->unit);3242 primitiveValueCache()->createIdentifierValue(CSSValueAuto) : 3243 primitiveValueCache()->createValue(arg->fValue, (CSSPrimitiveValue::UnitTypes) arg->unit); 3237 3244 3238 3245 if (i == 0) … … 3254 3261 3255 3262 if (valid) 3256 addProperty(propId, CSSPrimitiveValue::create(firstRegion.release()), important);3263 addProperty(propId, primitiveValueCache()->createValue(firstRegion.release()), important); 3257 3264 3258 3265 return valid; … … 3272 3279 if (i->unit != CSSPrimitiveValue::CSS_IDENT) 3273 3280 return 0; 3274 RefPtr<CSSPrimitiveValue> identifier = CSSPrimitiveValue::create(i->string, CSSPrimitiveValue::CSS_STRING);3281 RefPtr<CSSPrimitiveValue> identifier = primitiveValueCache()->createValue(i->string, CSSPrimitiveValue::CSS_STRING); 3275 3282 3276 3283 RefPtr<CSSPrimitiveValue> separator; 3277 3284 if (!counters) 3278 separator = CSSPrimitiveValue::create(String(), CSSPrimitiveValue::CSS_STRING);3285 separator = primitiveValueCache()->createValue(String(), CSSPrimitiveValue::CSS_STRING); 3279 3286 else { 3280 3287 i = args->next(); … … 3286 3293 return 0; 3287 3294 3288 separator = CSSPrimitiveValue::create(i->string, (CSSPrimitiveValue::UnitTypes) i->unit);3295 separator = primitiveValueCache()->createValue(i->string, (CSSPrimitiveValue::UnitTypes) i->unit); 3289 3296 } 3290 3297 … … 3292 3299 i = args->next(); 3293 3300 if (!i) // Make the list style default decimal 3294 listStyle = CSSPrimitiveValue::create(CSSValueDecimal - CSSValueDisc, CSSPrimitiveValue::CSS_NUMBER);3301 listStyle = primitiveValueCache()->createValue(CSSValueDecimal - CSSValueDisc, CSSPrimitiveValue::CSS_NUMBER); 3295 3302 else { 3296 3303 if (i->unit != CSSParserValue::Operator || i->iValue != ',') … … 3309 3316 return 0; 3310 3317 3311 listStyle = CSSPrimitiveValue::create(ls, (CSSPrimitiveValue::UnitTypes) i->unit);3312 } 3313 3314 return CSSPrimitiveValue::create(Counter::create(identifier.release(), listStyle.release(), separator.release()));3318 listStyle = primitiveValueCache()->createValue(ls, (CSSPrimitiveValue::UnitTypes) i->unit); 3319 } 3320 3321 return primitiveValueCache()->createValue(Counter::create(identifier.release(), listStyle.release(), separator.release())); 3315 3322 } 3316 3323 … … 3335 3342 break; 3336 3343 RefPtr<CSSPrimitiveValue> length = a->id == CSSValueAuto ? 3337 CSSPrimitiveValue::createIdentifier(CSSValueAuto) :3338 CSSPrimitiveValue::create(a->fValue, (CSSPrimitiveValue::UnitTypes) a->unit);3344 primitiveValueCache()->createIdentifierValue(CSSValueAuto) : 3345 primitiveValueCache()->createValue(a->fValue, (CSSPrimitiveValue::UnitTypes) a->unit); 3339 3346 if (i == 0) 3340 3347 rect->setTop(length); … … 3357 3364 } 3358 3365 if (valid) { 3359 addProperty(propId, CSSPrimitiveValue::create(rect.release()), important);3366 addProperty(propId, primitiveValueCache()->createValue(rect.release()), important); 3360 3367 m_valueList->next(); 3361 3368 return true; … … 3379 3386 if (font->style) 3380 3387 return false; 3381 font->style = CSSPrimitiveValue::createIdentifier(id);3388 font->style = primitiveValueCache()->createIdentifierValue(id); 3382 3389 } else if (id == CSSValueSmallCaps) { 3383 3390 if (font->variant) 3384 3391 return false; 3385 font->variant = CSSPrimitiveValue::createIdentifier(id);3392 font->variant = primitiveValueCache()->createIdentifierValue(id); 3386 3393 } else if (id >= CSSValueBold && id <= CSSValueLighter) { 3387 3394 if (font->weight) 3388 3395 return false; 3389 font->weight = CSSPrimitiveValue::createIdentifier(id);3396 font->weight = primitiveValueCache()->createIdentifierValue(id); 3390 3397 } else { 3391 3398 valid = false; … … 3414 3421 3415 3422 if (val) 3416 font->weight = CSSPrimitiveValue::createIdentifier(val);3423 font->weight = primitiveValueCache()->createIdentifierValue(val); 3417 3424 else 3418 3425 valid = false; … … 3429 3436 // set undefined values to default 3430 3437 if (!font->style) 3431 font->style = CSSPrimitiveValue::createIdentifier(CSSValueNormal);3438 font->style = primitiveValueCache()->createIdentifierValue(CSSValueNormal); 3432 3439 if (!font->variant) 3433 font->variant = CSSPrimitiveValue::createIdentifier(CSSValueNormal);3440 font->variant = primitiveValueCache()->createIdentifierValue(CSSValueNormal); 3434 3441 if (!font->weight) 3435 font->weight = CSSPrimitiveValue::createIdentifier(CSSValueNormal);3442 font->weight = primitiveValueCache()->createIdentifierValue(CSSValueNormal); 3436 3443 3437 3444 // now a font size _must_ come 3438 3445 // <absolute-size> | <relative-size> | <length> | <percentage> | inherit 3439 3446 if (value->id >= CSSValueXxSmall && value->id <= CSSValueLarger) 3440 font->size = CSSPrimitiveValue::createIdentifier(value->id);3447 font->size = primitiveValueCache()->createIdentifierValue(value->id); 3441 3448 else if (validUnit(value, FLength | FPercent | FNonNeg, m_strict)) 3442 font->size = CSSPrimitiveValue::create(value->fValue, (CSSPrimitiveValue::UnitTypes) value->unit);3449 font->size = primitiveValueCache()->createValue(value->fValue, (CSSPrimitiveValue::UnitTypes) value->unit); 3443 3450 value = m_valueList->next(); 3444 3451 if (!font->size || !value) … … 3453 3460 // default value, nothing to do 3454 3461 } else if (validUnit(value, FNumber | FLength | FPercent | FNonNeg, m_strict)) 3455 font->lineHeight = CSSPrimitiveValue::create(value->fValue, (CSSPrimitiveValue::UnitTypes) value->unit);3462 font->lineHeight = primitiveValueCache()->createValue(value->fValue, (CSSPrimitiveValue::UnitTypes) value->unit); 3456 3463 else 3457 3464 return false; … … 3462 3469 3463 3470 if (!font->lineHeight) 3464 font->lineHeight = CSSPrimitiveValue::createIdentifier(CSSValueNormal);3471 font->lineHeight = primitiveValueCache()->createIdentifierValue(CSSValueNormal); 3465 3472 3466 3473 // font family must come now … … 3492 3499 currFamily->appendSpaceSeparated(value->string.characters, value->string.length); 3493 3500 else if (nextValBreaksFont || !nextValIsFontName) 3494 list->append( CSSPrimitiveValue::createIdentifier(value->id));3501 list->append(primitiveValueCache()->createIdentifierValue(value->id)); 3495 3502 else { 3496 3503 RefPtr<FontFamilyValue> newFamily = FontFamilyValue::create(value->string); … … 3545 3552 expectComma = true; 3546 3553 if (val->id == CSSValueNormal || val->id == CSSValueItalic || val->id == CSSValueOblique) 3547 parsedValue = CSSPrimitiveValue::createIdentifier(val->id);3554 parsedValue = primitiveValueCache()->createIdentifierValue(val->id); 3548 3555 else if (val->id == CSSValueAll && !values) { 3549 3556 // 'all' is only allowed in @font-face and with no other values. Make a value list to 3550 3557 // indicate that we are in the @font-face case. 3551 3558 values = CSSValueList::createCommaSeparated(); 3552 parsedValue = CSSPrimitiveValue::createIdentifier(val->id);3559 parsedValue = primitiveValueCache()->createIdentifierValue(val->id); 3553 3560 } 3554 3561 } else if (val->unit == CSSParserValue::Operator && val->iValue == ',') { … … 3592 3599 expectComma = true; 3593 3600 if (val->id == CSSValueNormal || val->id == CSSValueSmallCaps) 3594 parsedValue = CSSPrimitiveValue::createIdentifier(val->id);3601 parsedValue = primitiveValueCache()->createIdentifierValue(val->id); 3595 3602 else if (val->id == CSSValueAll && !values) { 3596 3603 // 'all' is only allowed in @font-face and with no other values. Make a value list to 3597 3604 // indicate that we are in the @font-face case. 3598 3605 values = CSSValueList::createCommaSeparated(); 3599 parsedValue = CSSPrimitiveValue::createIdentifier(val->id);3606 parsedValue = primitiveValueCache()->createIdentifierValue(val->id); 3600 3607 } 3601 3608 } else if (val->unit == CSSParserValue::Operator && val->iValue == ',') { … … 3640 3647 if (val->unit == CSSPrimitiveValue::CSS_IDENT) { 3641 3648 if (val->id >= CSSValueNormal && val->id <= CSSValue900) 3642 parsedValue = CSSPrimitiveValue::createIdentifier(val->id);3649 parsedValue = primitiveValueCache()->createIdentifierValue(val->id); 3643 3650 else if (val->id == CSSValueAll && !values) { 3644 3651 // 'all' is only allowed in @font-face and with no other values. Make a value list to 3645 3652 // indicate that we are in the @font-face case. 3646 3653 values = CSSValueList::createCommaSeparated(); 3647 parsedValue = CSSPrimitiveValue::createIdentifier(val->id);3654 parsedValue = primitiveValueCache()->createIdentifierValue(val->id); 3648 3655 } 3649 3656 } else if (validUnit(val, FInteger | FNonNeg, false)) { 3650 3657 int weight = static_cast<int>(val->fValue); 3651 3658 if (!(weight % 100) && weight >= 100 && weight <= 900) 3652 parsedValue = CSSPrimitiveValue::createIdentifier(CSSValue100 + weight / 100 - 1);3659 parsedValue = primitiveValueCache()->createIdentifierValue(CSSValue100 + weight / 100 - 1); 3653 3660 } 3654 3661 } else if (val->unit == CSSParserValue::Operator && val->iValue == ',') { … … 4141 4148 if (!parseColorFromValue(value ? value : m_valueList->current(), c)) 4142 4149 return 0; 4143 return CSSPrimitiveValue::createColor(c);4150 return primitiveValueCache()->createColorValue(c); 4144 4151 } 4145 4152 … … 4199 4206 // without the allowBreak bit being set, then it will clean up all of the objects and destroy them. 4200 4207 struct ShadowParseContext { 4201 ShadowParseContext(CSSPropertyID prop )4208 ShadowParseContext(CSSPropertyID prop, CSSPrimitiveValueCache* primitiveValueCache) 4202 4209 : property(prop) 4210 , m_primitiveValueCache(primitiveValueCache) 4203 4211 , allowX(true) 4204 4212 , allowY(false) … … 4243 4251 void commitLength(CSSParserValue* v) 4244 4252 { 4245 RefPtr<CSSPrimitiveValue> val = CSSPrimitiveValue::create(v->fValue, (CSSPrimitiveValue::UnitTypes)v->unit);4253 RefPtr<CSSPrimitiveValue> val = m_primitiveValueCache->createValue(v->fValue, (CSSPrimitiveValue::UnitTypes)v->unit); 4246 4254 4247 4255 if (allowX) { … … 4285 4293 void commitStyle(CSSParserValue* v) 4286 4294 { 4287 style = CSSPrimitiveValue::createIdentifier(v->id);4295 style = m_primitiveValueCache->createIdentifierValue(v->id); 4288 4296 allowStyle = false; 4289 4297 if (allowX) … … 4297 4305 4298 4306 CSSPropertyID property; 4307 CSSPrimitiveValueCache* m_primitiveValueCache; 4299 4308 4300 4309 RefPtr<CSSValueList> values; … … 4317 4326 bool CSSParser::parseShadow(int propId, bool important) 4318 4327 { 4319 ShadowParseContext context(static_cast<CSSPropertyID>(propId) );4328 ShadowParseContext context(static_cast<CSSPropertyID>(propId), primitiveValueCache()); 4320 4329 CSSParserValue* val; 4321 4330 while ((val = m_valueList->current())) { … … 4353 4362 if (!context.allowColor) 4354 4363 return false; 4355 parsedColor = CSSPrimitiveValue::createIdentifier(val->id);4364 parsedColor = primitiveValueCache()->createIdentifierValue(val->id); 4356 4365 } 4357 4366 … … 4410 4419 RefPtr<CSSPrimitiveValue> offset; 4411 4420 if (!val) 4412 offset = CSSPrimitiveValue::create(0, CSSPrimitiveValue::CSS_PX);4421 offset = primitiveValueCache()->createValue(0, CSSPrimitiveValue::CSS_PX); 4413 4422 else { 4414 4423 if (!validUnit(val, FLength | FPercent, m_strict)) 4415 4424 return false; 4416 offset = CSSPrimitiveValue::create(val->fValue, static_cast<CSSPrimitiveValue::UnitTypes>(val->unit));4425 offset = primitiveValueCache()->createValue(val->fValue, static_cast<CSSPrimitiveValue::UnitTypes>(val->unit)); 4417 4426 } 4418 4427 … … 4432 4441 4433 4442 struct BorderImageParseContext { 4434 BorderImageParseContext() 4435 : m_allowBreak(false) 4443 BorderImageParseContext(CSSPrimitiveValueCache* primitiveValueCache) 4444 : m_primitiveValueCache(primitiveValueCache) 4445 , m_allowBreak(false) 4436 4446 , m_allowNumber(false) 4437 4447 , m_allowSlash(false) … … 4455 4465 void commitNumber(CSSParserValue* v) 4456 4466 { 4457 PassRefPtr<CSSPrimitiveValue> val = CSSPrimitiveValue::create(v->fValue, (CSSPrimitiveValue::UnitTypes)v->unit);4467 PassRefPtr<CSSPrimitiveValue> val = m_primitiveValueCache->createValue(v->fValue, (CSSPrimitiveValue::UnitTypes)v->unit); 4458 4468 if (!m_top) 4459 4469 m_top = val; … … 4499 4509 // We need to clone and repeat values for any omissions. 4500 4510 if (!m_right) { 4501 m_right = CSSPrimitiveValue::create(m_top->getDoubleValue(), (CSSPrimitiveValue::UnitTypes)m_top->primitiveType());4502 m_bottom = CSSPrimitiveValue::create(m_top->getDoubleValue(), (CSSPrimitiveValue::UnitTypes)m_top->primitiveType());4503 m_left = CSSPrimitiveValue::create(m_top->getDoubleValue(), (CSSPrimitiveValue::UnitTypes)m_top->primitiveType());4511 m_right = m_primitiveValueCache->createValue(m_top->getDoubleValue(), (CSSPrimitiveValue::UnitTypes)m_top->primitiveType()); 4512 m_bottom = m_primitiveValueCache->createValue(m_top->getDoubleValue(), (CSSPrimitiveValue::UnitTypes)m_top->primitiveType()); 4513 m_left = m_primitiveValueCache->createValue(m_top->getDoubleValue(), (CSSPrimitiveValue::UnitTypes)m_top->primitiveType()); 4504 4514 } 4505 4515 if (!m_bottom) { 4506 m_bottom = CSSPrimitiveValue::create(m_top->getDoubleValue(), (CSSPrimitiveValue::UnitTypes)m_top->primitiveType());4507 m_left = CSSPrimitiveValue::create(m_right->getDoubleValue(), (CSSPrimitiveValue::UnitTypes)m_right->primitiveType());4516 m_bottom = m_primitiveValueCache->createValue(m_top->getDoubleValue(), (CSSPrimitiveValue::UnitTypes)m_top->primitiveType()); 4517 m_left = m_primitiveValueCache->createValue(m_right->getDoubleValue(), (CSSPrimitiveValue::UnitTypes)m_right->primitiveType()); 4508 4518 } 4509 4519 if (!m_left) 4510 m_left = CSSPrimitiveValue::create(m_right->getDoubleValue(), (CSSPrimitiveValue::UnitTypes)m_right->primitiveType());4520 m_left = m_primitiveValueCache->createValue(m_right->getDoubleValue(), (CSSPrimitiveValue::UnitTypes)m_right->primitiveType()); 4511 4521 4512 4522 // Now build a rect value to hold all four of our primitive values. … … 4545 4555 return CSSBorderImageValue::create(m_image, rect.release(), m_horizontalRule, m_verticalRule); 4546 4556 } 4557 4558 CSSPrimitiveValueCache* m_primitiveValueCache; 4547 4559 4548 4560 bool m_allowBreak; … … 4571 4583 { 4572 4584 // Look for an image initially. If the first value is not a URI, then we're done. 4573 BorderImageParseContext context ;4585 BorderImageParseContext context(primitiveValueCache()); 4574 4586 CSSParserValue* val = m_valueList->current(); 4575 4587 if (val->unit == CSSPrimitiveValue::CSS_URI && m_styleSheet) { … … 4605 4617 if (context.allowNumber() && propId != CSSPropertyWebkitBorderImage) { 4606 4618 // Allow the slices to be omitted for images that don't fit to a border. We just set the slices to be 0. 4607 context.m_top = CSSPrimitiveValue::create(0, CSSPrimitiveValue::CSS_NUMBER);4619 context.m_top = primitiveValueCache()->createValue(0, CSSPrimitiveValue::CSS_NUMBER); 4608 4620 context.m_allowBreak = true; 4609 4621 } … … 4660 4672 return false; 4661 4673 4662 RefPtr<CSSPrimitiveValue> radius = CSSPrimitiveValue::create(value->fValue, static_cast<CSSPrimitiveValue::UnitTypes>(value->unit));4674 RefPtr<CSSPrimitiveValue> radius = primitiveValueCache()->createValue(value->fValue, static_cast<CSSPrimitiveValue::UnitTypes>(value->unit)); 4663 4675 4664 4676 if (!indexAfterSlash) { … … 4682 4694 4683 4695 m_implicitShorthand = true; 4684 addProperty(CSSPropertyBorderTopLeftRadius, CSSPrimitiveValue::create(Pair::create(radii[0][0].release(), radii[1][0].release())), important);4685 addProperty(CSSPropertyBorderTopRightRadius, CSSPrimitiveValue::create(Pair::create(radii[0][1].release(), radii[1][1].release())), important);4686 addProperty(CSSPropertyBorderBottomRightRadius, CSSPrimitiveValue::create(Pair::create(radii[0][2].release(), radii[1][2].release())), important);4687 addProperty(CSSPropertyBorderBottomLeftRadius, CSSPrimitiveValue::create(Pair::create(radii[0][3].release(), radii[1][3].release())), important);4696 addProperty(CSSPropertyBorderTopLeftRadius, primitiveValueCache()->createValue(Pair::create(radii[0][0].release(), radii[1][0].release())), important); 4697 addProperty(CSSPropertyBorderTopRightRadius, primitiveValueCache()->createValue(Pair::create(radii[0][1].release(), radii[1][1].release())), important); 4698 addProperty(CSSPropertyBorderBottomRightRadius, primitiveValueCache()->createValue(Pair::create(radii[0][2].release(), radii[1][2].release())), important); 4699 addProperty(CSSPropertyBorderBottomLeftRadius, primitiveValueCache()->createValue(Pair::create(radii[0][3].release(), radii[1][3].release())), important); 4688 4700 m_implicitShorthand = false; 4689 4701 return true; … … 4702 4714 case ID: 4703 4715 if (val && val->unit == CSSPrimitiveValue::CSS_IDENT) { 4704 counterName = CSSPrimitiveValue::create(val->string, CSSPrimitiveValue::CSS_STRING);4716 counterName = primitiveValueCache()->createValue(val->string, CSSPrimitiveValue::CSS_STRING); 4705 4717 state = VAL; 4706 4718 m_valueList->next(); … … 4715 4727 } 4716 4728 4717 list->append( CSSPrimitiveValue::create(Pair::create(counterName.release(),4718 CSSPrimitiveValue::create(i, CSSPrimitiveValue::CSS_NUMBER))));4729 list->append(primitiveValueCache()->createValue(Pair::create(counterName.release(), 4730 primitiveValueCache()->createValue(i, CSSPrimitiveValue::CSS_NUMBER)))); 4719 4731 state = ID; 4720 4732 continue; … … 4733 4745 4734 4746 // This should go away once we drop support for -webkit-gradient 4735 static PassRefPtr<CSSPrimitiveValue> parseDeprecatedGradientPoint(CSSParserValue* a, bool horizontal )4747 static PassRefPtr<CSSPrimitiveValue> parseDeprecatedGradientPoint(CSSParserValue* a, bool horizontal, CSSPrimitiveValueCache* primitiveValueCache) 4736 4748 { 4737 4749 RefPtr<CSSPrimitiveValue> result; … … 4739 4751 if ((equalIgnoringCase(a->string, "left") && horizontal) || 4740 4752 (equalIgnoringCase(a->string, "top") && !horizontal)) 4741 result = CSSPrimitiveValue::create(0., CSSPrimitiveValue::CSS_PERCENTAGE);4753 result = primitiveValueCache->createValue(0., CSSPrimitiveValue::CSS_PERCENTAGE); 4742 4754 else if ((equalIgnoringCase(a->string, "right") && horizontal) || 4743 4755 (equalIgnoringCase(a->string, "bottom") && !horizontal)) 4744 result = CSSPrimitiveValue::create(100., CSSPrimitiveValue::CSS_PERCENTAGE);4756 result = primitiveValueCache->createValue(100., CSSPrimitiveValue::CSS_PERCENTAGE); 4745 4757 else if (equalIgnoringCase(a->string, "center")) 4746 result = CSSPrimitiveValue::create(50., CSSPrimitiveValue::CSS_PERCENTAGE);4758 result = primitiveValueCache->createValue(50., CSSPrimitiveValue::CSS_PERCENTAGE); 4747 4759 } else if (a->unit == CSSPrimitiveValue::CSS_NUMBER || a->unit == CSSPrimitiveValue::CSS_PERCENTAGE) 4748 result = CSSPrimitiveValue::create(a->fValue, (CSSPrimitiveValue::UnitTypes)a->unit);4760 result = primitiveValueCache->createValue(a->fValue, (CSSPrimitiveValue::UnitTypes)a->unit); 4749 4761 return result; 4750 4762 } … … 4771 4783 4772 4784 if (equalIgnoringCase(a->function->name, "from(")) 4773 stop.m_position = CSSPrimitiveValue::create(0, CSSPrimitiveValue::CSS_NUMBER);4785 stop.m_position = p->primitiveValueCache()->createValue(0, CSSPrimitiveValue::CSS_NUMBER); 4774 4786 else 4775 stop.m_position = CSSPrimitiveValue::create(1, CSSPrimitiveValue::CSS_NUMBER);4787 stop.m_position = p->primitiveValueCache()->createValue(1, CSSPrimitiveValue::CSS_NUMBER); 4776 4788 4777 4789 int id = args->current()->id; 4778 4790 if (id == CSSValueWebkitText || (id >= CSSValueAqua && id <= CSSValueWindowtext) || id == CSSValueMenu) 4779 stop.m_color = CSSPrimitiveValue::createIdentifier(id);4791 stop.m_color = p->primitiveValueCache()->createIdentifierValue(id); 4780 4792 else 4781 4793 stop.m_color = p->parseColor(args->current()); … … 4791 4803 CSSParserValue* stopArg = args->current(); 4792 4804 if (stopArg->unit == CSSPrimitiveValue::CSS_PERCENTAGE) 4793 stop.m_position = CSSPrimitiveValue::create(stopArg->fValue / 100, CSSPrimitiveValue::CSS_NUMBER);4805 stop.m_position = p->primitiveValueCache()->createValue(stopArg->fValue / 100, CSSPrimitiveValue::CSS_NUMBER); 4794 4806 else if (stopArg->unit == CSSPrimitiveValue::CSS_NUMBER) 4795 stop.m_position = CSSPrimitiveValue::create(stopArg->fValue, CSSPrimitiveValue::CSS_NUMBER);4807 stop.m_position = p->primitiveValueCache()->createValue(stopArg->fValue, CSSPrimitiveValue::CSS_NUMBER); 4796 4808 else 4797 4809 return false; … … 4804 4816 int id = stopArg->id; 4805 4817 if (id == CSSValueWebkitText || (id >= CSSValueAqua && id <= CSSValueWindowtext) || id == CSSValueMenu) 4806 stop.m_color = CSSPrimitiveValue::createIdentifier(id);4818 stop.m_color = p->primitiveValueCache()->createIdentifierValue(id); 4807 4819 else 4808 4820 stop.m_color = p->parseColor(stopArg); … … 4854 4866 if (!a) 4855 4867 return false; 4856 RefPtr<CSSPrimitiveValue> point = parseDeprecatedGradientPoint(a, true );4868 RefPtr<CSSPrimitiveValue> point = parseDeprecatedGradientPoint(a, true, primitiveValueCache()); 4857 4869 if (!point) 4858 4870 return false; … … 4863 4875 if (!a) 4864 4876 return false; 4865 point = parseDeprecatedGradientPoint(a, false );4877 point = parseDeprecatedGradientPoint(a, false, primitiveValueCache()); 4866 4878 if (!point) 4867 4879 return false; … … 4878 4890 if (!a || a->unit != CSSPrimitiveValue::CSS_NUMBER) 4879 4891 return false; 4880 static_cast<CSSRadialGradientValue*>(result.get())->setFirstRadius( CSSPrimitiveValue::create(a->fValue, CSSPrimitiveValue::CSS_NUMBER));4892 static_cast<CSSRadialGradientValue*>(result.get())->setFirstRadius(primitiveValueCache()->createValue(a->fValue, CSSPrimitiveValue::CSS_NUMBER)); 4881 4893 4882 4894 // Comma after the first radius. … … 4891 4903 if (!a) 4892 4904 return false; 4893 point = parseDeprecatedGradientPoint(a, true );4905 point = parseDeprecatedGradientPoint(a, true, primitiveValueCache()); 4894 4906 if (!point) 4895 4907 return false; … … 4900 4912 if (!a) 4901 4913 return false; 4902 point = parseDeprecatedGradientPoint(a, false );4914 point = parseDeprecatedGradientPoint(a, false, primitiveValueCache()); 4903 4915 if (!point) 4904 4916 return false; … … 4915 4927 if (!a || a->unit != CSSPrimitiveValue::CSS_NUMBER) 4916 4928 return false; 4917 static_cast<CSSRadialGradientValue*>(result.get())->setSecondRadius( CSSPrimitiveValue::create(a->fValue, CSSPrimitiveValue::CSS_NUMBER));4929 static_cast<CSSRadialGradientValue*>(result.get())->setSecondRadius(primitiveValueCache()->createValue(a->fValue, CSSPrimitiveValue::CSS_NUMBER)); 4918 4930 } 4919 4931 … … 4944 4956 } 4945 4957 4946 static PassRefPtr<CSSPrimitiveValue> valueFromSideKeyword(CSSParserValue* a, bool& isHorizontal )4958 static PassRefPtr<CSSPrimitiveValue> valueFromSideKeyword(CSSParserValue* a, bool& isHorizontal, CSSPrimitiveValueCache* primitiveValueCache) 4947 4959 { 4948 4960 if (a->unit != CSSPrimitiveValue::CSS_IDENT) … … 4961 4973 return 0; 4962 4974 } 4963 return CSSPrimitiveValue::createIdentifier(a->id);4975 return primitiveValueCache->createIdentifierValue(a->id); 4964 4976 } 4965 4977 … … 4968 4980 int id = value->id; 4969 4981 if (id == CSSValueWebkitText || (id >= CSSValueAqua && id <= CSSValueWindowtext) || id == CSSValueMenu) 4970 return CSSPrimitiveValue::createIdentifier(id);4982 return p->primitiveValueCache()->createIdentifierValue(id); 4971 4983 4972 4984 return p->parseColor(value); … … 4989 5001 // Look for angle. 4990 5002 if (validUnit(a, FAngle, true)) { 4991 result->setAngle( CSSPrimitiveValue::create(a->fValue, (CSSPrimitiveValue::UnitTypes)a->unit));5003 result->setAngle(primitiveValueCache()->createValue(a->fValue, (CSSPrimitiveValue::UnitTypes)a->unit)); 4992 5004 4993 5005 a = args->next(); … … 4999 5011 RefPtr<CSSPrimitiveValue> location; 5000 5012 bool isHorizontal = false; 5001 if ((location = valueFromSideKeyword(a, isHorizontal ))) {5013 if ((location = valueFromSideKeyword(a, isHorizontal, primitiveValueCache()))) { 5002 5014 if (isHorizontal) 5003 5015 startX = location; … … 5007 5019 a = args->next(); 5008 5020 if (a) { 5009 if ((location = valueFromSideKeyword(a, isHorizontal ))) {5021 if ((location = valueFromSideKeyword(a, isHorizontal, primitiveValueCache()))) { 5010 5022 if (isHorizontal) { 5011 5023 if (startX) … … 5026 5038 5027 5039 if (!startX && !startY) 5028 startY = CSSPrimitiveValue::createIdentifier(CSSValueTop);5040 startY = primitiveValueCache()->createIdentifierValue(CSSValueTop); 5029 5041 5030 5042 result->setFirstX(startX.release()); … … 5096 5108 case CSSValueCircle: 5097 5109 case CSSValueEllipse: 5098 shapeValue = CSSPrimitiveValue::createIdentifier(a->id);5110 shapeValue = primitiveValueCache()->createIdentifierValue(a->id); 5099 5111 foundValue = true; 5100 5112 break; … … 5105 5117 case CSSValueContain: 5106 5118 case CSSValueCover: 5107 sizeValue = CSSPrimitiveValue::createIdentifier(a->id);5119 sizeValue = primitiveValueCache()->createIdentifierValue(a->id); 5108 5120 foundValue = true; 5109 5121 break; … … 5128 5140 if (!shapeValue && !sizeValue) { 5129 5141 if (validUnit(a, FLength | FPercent, m_strict)) { 5130 horizontalSize = CSSPrimitiveValue::create(a->fValue, (CSSPrimitiveValue::UnitTypes) a->unit);5142 horizontalSize = primitiveValueCache()->createValue(a->fValue, (CSSPrimitiveValue::UnitTypes) a->unit); 5131 5143 a = args->next(); 5132 5144 if (!a) … … 5137 5149 5138 5150 if (validUnit(a, FLength | FPercent, m_strict)) { 5139 verticalSize = CSSPrimitiveValue::create(a->fValue, (CSSPrimitiveValue::UnitTypes) a->unit);5151 verticalSize = primitiveValueCache()->createValue(a->fValue, (CSSPrimitiveValue::UnitTypes) a->unit); 5140 5152 5141 5153 a = args->next(); … … 5185 5197 if (a) { 5186 5198 if (validUnit(a, FLength | FPercent, m_strict)) { 5187 stop.m_position = CSSPrimitiveValue::create(a->fValue, (CSSPrimitiveValue::UnitTypes)a->unit);5199 stop.m_position = primitiveValueCache()->createValue(a->fValue, (CSSPrimitiveValue::UnitTypes)a->unit); 5188 5200 a = valueList->next(); 5189 5201 } … … 5406 5418 5407 5419 // Add the value to the current transform operation. 5408 transformValue->append( CSSPrimitiveValue::create(a->fValue, (CSSPrimitiveValue::UnitTypes) a->unit));5420 transformValue->append(primitiveValueCache()->createValue(a->fValue, (CSSPrimitiveValue::UnitTypes) a->unit)); 5409 5421 5410 5422 a = args->next(); … … 5455 5467 case CSSPropertyWebkitTransformOriginZ: { 5456 5468 if (validUnit(m_valueList->current(), FLength, m_strict)) 5457 value = CSSPrimitiveValue::create(m_valueList->current()->fValue, (CSSPrimitiveValue::UnitTypes)m_valueList->current()->unit);5469 value = primitiveValueCache()->createValue(m_valueList->current()->fValue, (CSSPrimitiveValue::UnitTypes)m_valueList->current()->unit); 5458 5470 if (value) 5459 5471 m_valueList->next(); … … 5508 5520 if (fill || shape || (valueListSize != 1 && !inShorthand())) 5509 5521 return false; 5510 addProperty(CSSPropertyWebkitTextEmphasisStyle, CSSPrimitiveValue::create(value->string, CSSPrimitiveValue::CSS_STRING), important);5522 addProperty(CSSPropertyWebkitTextEmphasisStyle, primitiveValueCache()->createValue(value->string, CSSPrimitiveValue::CSS_STRING), important); 5511 5523 m_valueList->next(); 5512 5524 return true; … … 5516 5528 if (fill || shape || (valueListSize != 1 && !inShorthand())) 5517 5529 return false; 5518 addProperty(CSSPropertyWebkitTextEmphasisStyle, CSSPrimitiveValue::createIdentifier(CSSValueNone), important);5530 addProperty(CSSPropertyWebkitTextEmphasisStyle, primitiveValueCache()->createIdentifierValue(CSSValueNone), important); 5519 5531 m_valueList->next(); 5520 5532 return true; … … 5524 5536 if (fill) 5525 5537 return false; 5526 fill = CSSPrimitiveValue::createIdentifier(value->id);5538 fill = primitiveValueCache()->createIdentifierValue(value->id); 5527 5539 } else if (value->id == CSSValueDot || value->id == CSSValueCircle || value->id == CSSValueDoubleCircle || value->id == CSSValueTriangle || value->id == CSSValueSesame) { 5528 5540 if (shape) 5529 5541 return false; 5530 shape = CSSPrimitiveValue::createIdentifier(value->id);5542 shape = primitiveValueCache()->createIdentifierValue(value->id); 5531 5543 } else if (!inShorthand()) 5532 5544 return false; -
trunk/Source/WebCore/css/CSSParser.h
r80151 r80463 39 39 class CSSMutableStyleDeclaration; 40 40 class CSSPrimitiveValue; 41 class CSSPrimitiveValueCache; 41 42 class CSSProperty; 42 43 class CSSRule; … … 71 72 72 73 Document* document() const; 74 75 CSSPrimitiveValueCache* primitiveValueCache() const { return m_primitiveValueCache.get(); } 73 76 74 77 void addProperty(int propId, PassRefPtr<CSSValue>, bool important); … … 227 230 CSSProperty** m_parsedProperties; 228 231 CSSSelectorList* m_selectorListForParseSelector; 232 RefPtr<CSSPrimitiveValueCache> m_primitiveValueCache; 229 233 unsigned m_numParsedProperties; 230 234 unsigned m_maxParsedProperties; … … 263 267 264 268 private: 269 void setStyleSheet(CSSStyleSheet*); 270 265 271 void recheckAtKeyword(const UChar* str, int len); 266 272 -
trunk/Source/WebCore/css/CSSPrimitiveValue.cpp
r79733 r80463 86 86 DEFINE_STATIC_LOCAL(CSSTextCache, cache, ()); 87 87 return cache; 88 }89 90 // A more stylish solution than sharing would be to turn CSSPrimitiveValue (or CSSValues in general) into non-virtual,91 // non-refcounted simple type with value semantics. In practice these sharing tricks get similar memory benefits92 // with less need for refactoring.93 94 inline PassRefPtr<CSSPrimitiveValue> CSSPrimitiveValue::createUncachedIdentifier(int identifier)95 {96 return adoptRef(new CSSPrimitiveValue(identifier));97 }98 99 inline PassRefPtr<CSSPrimitiveValue> CSSPrimitiveValue::createUncachedColor(unsigned rgbValue)100 {101 return adoptRef(new CSSPrimitiveValue(rgbValue));102 }103 104 inline PassRefPtr<CSSPrimitiveValue> CSSPrimitiveValue::createUncached(double value, UnitTypes type)105 {106 return adoptRef(new CSSPrimitiveValue(value, type));107 }108 109 PassRefPtr<CSSPrimitiveValue> CSSPrimitiveValue::createIdentifier(int ident)110 {111 static RefPtr<CSSPrimitiveValue>* identValueCache = new RefPtr<CSSPrimitiveValue>[numCSSValueKeywords];112 if (ident >= 0 && ident < numCSSValueKeywords) {113 RefPtr<CSSPrimitiveValue> primitiveValue = identValueCache[ident];114 if (!primitiveValue) {115 primitiveValue = createUncachedIdentifier(ident);116 identValueCache[ident] = primitiveValue;117 }118 return primitiveValue.release();119 }120 return createUncachedIdentifier(ident);121 }122 123 PassRefPtr<CSSPrimitiveValue> CSSPrimitiveValue::createColor(unsigned rgbValue)124 {125 typedef HashMap<unsigned, RefPtr<CSSPrimitiveValue> > ColorValueCache;126 static ColorValueCache* colorValueCache = new ColorValueCache;127 // These are the empty and deleted values of the hash table.128 if (rgbValue == Color::transparent) {129 static CSSPrimitiveValue* colorTransparent = createUncachedColor(Color::transparent).releaseRef();130 #if CPU(ARM) && OS(LINUX)131 // A workaround for gcc bug on ARM.132 if (!colorTransparent)133 return 0;134 #endif135 return colorTransparent;136 }137 if (rgbValue == Color::white) {138 static CSSPrimitiveValue* colorWhite = createUncachedColor(Color::white).releaseRef();139 #if CPU(ARM) && OS(LINUX)140 // A workaround for gcc bug on ARM.141 if (!colorWhite)142 return 0;143 #endif144 return colorWhite;145 }146 RefPtr<CSSPrimitiveValue> primitiveValue = colorValueCache->get(rgbValue);147 if (primitiveValue)148 return primitiveValue.release();149 primitiveValue = createUncachedColor(rgbValue);150 // Just wipe out the cache and start rebuilding when it gets too big.151 const int maxColorCacheSize = 512;152 if (colorValueCache->size() >= maxColorCacheSize)153 colorValueCache->clear();154 colorValueCache->add(rgbValue, primitiveValue);155 156 return primitiveValue.release();157 }158 159 PassRefPtr<CSSPrimitiveValue> CSSPrimitiveValue::create(double value, UnitTypes type)160 {161 // Small integers are very common. Try to share them.162 const int cachedIntegerCount = 128;163 // Other common primitive types have UnitTypes smaller than this.164 const int maxCachedUnitType = CSS_PX;165 typedef RefPtr<CSSPrimitiveValue>(* IntegerValueCache)[maxCachedUnitType + 1];166 static IntegerValueCache integerValueCache = new RefPtr<CSSPrimitiveValue>[cachedIntegerCount][maxCachedUnitType + 1];167 if (type <= maxCachedUnitType && value >= 0 && value < cachedIntegerCount) {168 int intValue = static_cast<int>(value);169 if (value == intValue) {170 RefPtr<CSSPrimitiveValue> primitiveValue = integerValueCache[intValue][type];171 if (!primitiveValue) {172 primitiveValue = createUncached(value, type);173 integerValueCache[intValue][type] = primitiveValue;174 }175 return primitiveValue.release();176 }177 }178 179 return createUncached(value, type);180 }181 182 PassRefPtr<CSSPrimitiveValue> CSSPrimitiveValue::create(const String& value, UnitTypes type)183 {184 return adoptRef(new CSSPrimitiveValue(value, type));185 88 } 186 89 -
trunk/Source/WebCore/css/CSSPrimitiveValue.h
r79574 r80463 111 111 type == CSSPrimitiveValue::CSS_REMS; } 112 112 113 static PassRefPtr<CSSPrimitiveValue> createIdentifier(int ident );114 static PassRefPtr<CSSPrimitiveValue> createColor(unsigned rgbValue) ;115 static PassRefPtr<CSSPrimitiveValue> create(double value, UnitTypes type) ;116 static PassRefPtr<CSSPrimitiveValue> create(const String& value, UnitTypes type) ;113 static PassRefPtr<CSSPrimitiveValue> createIdentifier(int identifier) { return adoptRef(new CSSPrimitiveValue(identifier)); } 114 static PassRefPtr<CSSPrimitiveValue> createColor(unsigned rgbValue) { return adoptRef(new CSSPrimitiveValue(rgbValue)); } 115 static PassRefPtr<CSSPrimitiveValue> create(double value, UnitTypes type) { return adoptRef(new CSSPrimitiveValue(value, type)); } 116 static PassRefPtr<CSSPrimitiveValue> create(const String& value, UnitTypes type) { return adoptRef(new CSSPrimitiveValue(value, type)); } 117 117 118 118 template<typename T> static PassRefPtr<CSSPrimitiveValue> create(T value) -
trunk/Source/WebCore/dom/Document.cpp
r80412 r80463 34 34 #include "Attribute.h" 35 35 #include "CDATASection.h" 36 #include "CSSPrimitiveValueCache.h" 36 37 #include "CSSStyleSelector.h" 37 38 #include "CSSStyleSheet.h" … … 1699 1700 } 1700 1701 1702 PassRefPtr<CSSPrimitiveValueCache> Document::cssPrimitiveValueCache() const 1703 { 1704 if (!m_cssPrimitiveValueCache) 1705 m_cssPrimitiveValueCache = CSSPrimitiveValueCache::create(); 1706 return m_cssPrimitiveValueCache; 1707 } 1708 1701 1709 void Document::createStyleSelector() 1702 1710 { -
trunk/Source/WebCore/dom/Document.h
r80150 r80463 61 61 class CanvasRenderingContext; 62 62 class CharacterData; 63 class CSSPrimitiveValueCache; 63 64 class CSSStyleDeclaration; 64 65 class CSSStyleSelector; … … 435 436 virtual bool isFrameSet() const { return false; } 436 437 438 PassRefPtr<CSSPrimitiveValueCache> cssPrimitiveValueCache() const; 439 437 440 CSSStyleSelector* styleSelectorIfExists() const { return m_styleSelector.get(); } 438 441 … … 1169 1172 bool m_didCalculateStyleSelector; 1170 1173 bool m_hasDirtyStyleSelector; 1174 1175 mutable RefPtr<CSSPrimitiveValueCache> m_cssPrimitiveValueCache; 1171 1176 1172 1177 Frame* m_frame;
Note: See TracChangeset
for help on using the changeset viewer.