OLD | NEW |
1 /* | 1 /* |
2 * (C) 1999-2003 Lars Knoll (knoll@kde.org) | 2 * (C) 1999-2003 Lars Knoll (knoll@kde.org) |
3 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2012, 2013 Apple Inc.
All rights reserved. | 3 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2012, 2013 Apple Inc.
All rights reserved. |
4 * Copyright (C) 2011 Research In Motion Limited. All rights reserved. | 4 * Copyright (C) 2011 Research In Motion Limited. All rights reserved. |
5 * Copyright (C) 2013 Intel Corporation. All rights reserved. | 5 * Copyright (C) 2013 Intel Corporation. All rights reserved. |
6 * | 6 * |
7 * This library is free software; you can redistribute it and/or | 7 * This library is free software; you can redistribute it and/or |
8 * modify it under the terms of the GNU Library General Public | 8 * modify it under the terms of the GNU Library General Public |
9 * License as published by the Free Software Foundation; either | 9 * License as published by the Free Software Foundation; either |
10 * version 2 of the License, or (at your option) any later version. | 10 * version 2 of the License, or (at your option) any later version. |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
43 namespace WebCore { | 43 namespace WebCore { |
44 | 44 |
45 static size_t sizeForImmutableStylePropertySetWithPropertyCount(unsigned count) | 45 static size_t sizeForImmutableStylePropertySetWithPropertyCount(unsigned count) |
46 { | 46 { |
47 return sizeof(ImmutableStylePropertySet) - sizeof(void*) + sizeof(CSSValue*)
* count + sizeof(StylePropertyMetadata) * count; | 47 return sizeof(ImmutableStylePropertySet) - sizeof(void*) + sizeof(CSSValue*)
* count + sizeof(StylePropertyMetadata) * count; |
48 } | 48 } |
49 | 49 |
50 PassRefPtr<ImmutableStylePropertySet> ImmutableStylePropertySet::create(const CS
SProperty* properties, unsigned count, CSSParserMode cssParserMode) | 50 PassRefPtr<ImmutableStylePropertySet> ImmutableStylePropertySet::create(const CS
SProperty* properties, unsigned count, CSSParserMode cssParserMode) |
51 { | 51 { |
52 ASSERT(count <= MaxArraySize); | 52 ASSERT(count <= MaxArraySize); |
| 53 #if ENABLE(OILPAN) |
| 54 void* slot = Heap::allocate<StylePropertySet>(sizeForImmutableStylePropertyS
etWithPropertyCount(count)); |
| 55 #else |
53 void* slot = WTF::fastMalloc(sizeForImmutableStylePropertySetWithPropertyCou
nt(count)); | 56 void* slot = WTF::fastMalloc(sizeForImmutableStylePropertySetWithPropertyCou
nt(count)); |
54 return adoptRef(new (slot) ImmutableStylePropertySet(properties, count, cssP
arserMode)); | 57 #endif // ENABLE(OILPAN) |
| 58 return adoptRefWillBeRefCountedGarbageCollected(new (slot) ImmutableStylePro
pertySet(properties, count, cssParserMode)); |
55 } | 59 } |
56 | 60 |
57 PassRefPtr<ImmutableStylePropertySet> StylePropertySet::immutableCopyIfNeeded()
const | 61 PassRefPtr<ImmutableStylePropertySet> StylePropertySet::immutableCopyIfNeeded()
const |
58 { | 62 { |
59 if (!isMutable()) | 63 if (!isMutable()) |
60 return toImmutableStylePropertySet(const_cast<StylePropertySet*>(this)); | 64 return toImmutableStylePropertySet(const_cast<StylePropertySet*>(this)); |
61 const MutableStylePropertySet* mutableThis = toMutableStylePropertySet(this)
; | 65 const MutableStylePropertySet* mutableThis = toMutableStylePropertySet(this)
; |
62 return ImmutableStylePropertySet::create(mutableThis->m_propertyVector.data(
), mutableThis->m_propertyVector.size(), cssParserMode()); | 66 return ImmutableStylePropertySet::create(mutableThis->m_propertyVector.data(
), mutableThis->m_propertyVector.size(), cssParserMode()); |
63 } | 67 } |
64 | 68 |
65 MutableStylePropertySet::MutableStylePropertySet(CSSParserMode cssParserMode) | 69 MutableStylePropertySet::MutableStylePropertySet(CSSParserMode cssParserMode) |
66 : StylePropertySet(cssParserMode) | 70 : StylePropertySet(cssParserMode) |
67 { | 71 { |
68 } | 72 } |
69 | 73 |
70 MutableStylePropertySet::MutableStylePropertySet(const CSSProperty* properties,
unsigned length) | 74 MutableStylePropertySet::MutableStylePropertySet(const CSSProperty* properties,
unsigned length) |
71 : StylePropertySet(HTMLStandardMode) | 75 : StylePropertySet(HTMLStandardMode) |
72 { | 76 { |
73 m_propertyVector.reserveInitialCapacity(length); | 77 m_propertyVector.reserveInitialCapacity(length); |
74 for (unsigned i = 0; i < length; ++i) | 78 for (unsigned i = 0; i < length; ++i) |
75 m_propertyVector.uncheckedAppend(properties[i]); | 79 m_propertyVector.uncheckedAppend(properties[i]); |
76 } | 80 } |
77 | 81 |
78 ImmutableStylePropertySet::ImmutableStylePropertySet(const CSSProperty* properti
es, unsigned length, CSSParserMode cssParserMode) | 82 ImmutableStylePropertySet::ImmutableStylePropertySet(const CSSProperty* properti
es, unsigned length, CSSParserMode cssParserMode) |
79 : StylePropertySet(cssParserMode, length) | 83 : StylePropertySet(cssParserMode, length) |
80 { | 84 { |
81 StylePropertyMetadata* metadataArray = const_cast<StylePropertyMetadata*>(th
is->metadataArray()); | 85 StylePropertyMetadata* metadataArray = const_cast<StylePropertyMetadata*>(th
is->metadataArray()); |
82 CSSValue** valueArray = const_cast<CSSValue**>(this->valueArray()); | 86 RawPtrWillBeMember<CSSValue>* valueArray = const_cast<RawPtrWillBeMember<CSS
Value>*>(this->valueArray()); |
83 for (unsigned i = 0; i < m_arraySize; ++i) { | 87 for (unsigned i = 0; i < m_arraySize; ++i) { |
84 metadataArray[i] = properties[i].metadata(); | 88 metadataArray[i] = properties[i].metadata(); |
85 valueArray[i] = properties[i].value(); | 89 valueArray[i] = properties[i].value(); |
86 valueArray[i]->ref(); | 90 valueArray[i]->ref(); |
87 } | 91 } |
88 } | 92 } |
89 | 93 |
90 ImmutableStylePropertySet::~ImmutableStylePropertySet() | 94 ImmutableStylePropertySet::~ImmutableStylePropertySet() |
91 { | 95 { |
92 CSSValue** valueArray = const_cast<CSSValue**>(this->valueArray()); | 96 #if !ENABLE(OILPAN) |
| 97 RawPtrWillBeMember<CSSValue>* valueArray = const_cast<RawPtrWillBeMember<CSS
Value>*>(this->valueArray()); |
93 for (unsigned i = 0; i < m_arraySize; ++i) | 98 for (unsigned i = 0; i < m_arraySize; ++i) |
94 valueArray[i]->deref(); | 99 valueArray[i]->deref(); |
| 100 #endif |
95 } | 101 } |
96 | 102 |
97 int ImmutableStylePropertySet::findPropertyIndex(CSSPropertyID propertyID) const | 103 int ImmutableStylePropertySet::findPropertyIndex(CSSPropertyID propertyID) const |
98 { | 104 { |
99 // Convert here propertyID into an uint16_t to compare it with the metadata'
s m_propertyID to avoid | 105 // Convert here propertyID into an uint16_t to compare it with the metadata'
s m_propertyID to avoid |
100 // the compiler converting it to an int multiple times in the loop. | 106 // the compiler converting it to an int multiple times in the loop. |
101 uint16_t id = static_cast<uint16_t>(propertyID); | 107 uint16_t id = static_cast<uint16_t>(propertyID); |
102 for (int n = m_arraySize - 1 ; n >= 0; --n) { | 108 for (int n = m_arraySize - 1 ; n >= 0; --n) { |
103 if (metadataArray()[n].m_propertyID == id) { | 109 if (metadataArray()[n].m_propertyID == id) { |
104 // Only enabled or internal properties should be part of the style. | 110 // Only enabled or internal properties should be part of the style. |
105 ASSERT(RuntimeCSSEnabled::isCSSPropertyEnabled(propertyID) || isInte
rnalProperty(propertyID)); | 111 ASSERT(RuntimeCSSEnabled::isCSSPropertyEnabled(propertyID) || isInte
rnalProperty(propertyID)); |
106 return n; | 112 return n; |
107 } | 113 } |
108 } | 114 } |
109 | 115 |
110 return -1; | 116 return -1; |
111 } | 117 } |
112 | 118 |
| 119 void ImmutableStylePropertySet::traceAfterDispatch(Visitor* visitor) |
| 120 { |
| 121 const RawPtrWillBeMember<CSSValue>* values = valueArray(); |
| 122 for (unsigned i = 0; i < m_arraySize; i++) |
| 123 visitor->trace(values[i]); |
| 124 StylePropertySet::traceAfterDispatch(visitor); |
| 125 } |
| 126 |
113 MutableStylePropertySet::MutableStylePropertySet(const StylePropertySet& other) | 127 MutableStylePropertySet::MutableStylePropertySet(const StylePropertySet& other) |
114 : StylePropertySet(other.cssParserMode()) | 128 : StylePropertySet(other.cssParserMode()) |
115 { | 129 { |
116 if (other.isMutable()) { | 130 if (other.isMutable()) { |
117 m_propertyVector = toMutableStylePropertySet(other).m_propertyVector; | 131 m_propertyVector = toMutableStylePropertySet(other).m_propertyVector; |
118 } else { | 132 } else { |
119 m_propertyVector.reserveInitialCapacity(other.propertyCount()); | 133 m_propertyVector.reserveInitialCapacity(other.propertyCount()); |
120 for (unsigned i = 0; i < other.propertyCount(); ++i) | 134 for (unsigned i = 0; i < other.propertyCount(); ++i) |
121 m_propertyVector.uncheckedAppend(other.propertyAt(i).toCSSProperty()
); | 135 m_propertyVector.uncheckedAppend(other.propertyAt(i).toCSSProperty()
); |
122 } | 136 } |
123 } | 137 } |
124 | 138 |
125 String StylePropertySet::getPropertyValue(CSSPropertyID propertyID) const | 139 String StylePropertySet::getPropertyValue(CSSPropertyID propertyID) const |
126 { | 140 { |
127 RefPtrWillBeRawPtr<CSSValue> value = getPropertyCSSValue(propertyID); | 141 RefPtrWillBeRawPtr<CSSValue> value = getPropertyCSSValue(propertyID); |
128 if (value) | 142 if (value) |
129 return value->cssText(); | 143 return value->cssText(); |
130 | 144 |
131 return StylePropertySerializer(*this).getPropertyValue(propertyID); | 145 return StylePropertySerializer(*this).getPropertyValue(propertyID); |
132 } | 146 } |
133 | 147 |
134 PassRefPtrWillBeRawPtr<CSSValue> StylePropertySet::getPropertyCSSValue(CSSProper
tyID propertyID) const | 148 PassRefPtrWillBeRawPtr<CSSValue> StylePropertySet::getPropertyCSSValue(CSSProper
tyID propertyID) const |
135 { | 149 { |
136 int foundPropertyIndex = findPropertyIndex(propertyID); | 150 int foundPropertyIndex = findPropertyIndex(propertyID); |
137 if (foundPropertyIndex == -1) | 151 if (foundPropertyIndex == -1) |
138 return nullptr; | 152 return nullptr; |
139 return propertyAt(foundPropertyIndex).value(); | 153 return propertyAt(foundPropertyIndex).value(); |
140 } | 154 } |
141 | 155 |
| 156 void StylePropertySet::trace(Visitor* visitor) |
| 157 { |
| 158 if (m_isMutable) |
| 159 toMutableStylePropertySet(this)->traceAfterDispatch(visitor); |
| 160 else |
| 161 toImmutableStylePropertySet(this)->traceAfterDispatch(visitor); |
| 162 } |
| 163 |
| 164 void StylePropertySet::finalize() |
| 165 { |
| 166 if (m_isMutable) |
| 167 toMutableStylePropertySet(this)->~MutableStylePropertySet(); |
| 168 else |
| 169 toImmutableStylePropertySet(this)->~ImmutableStylePropertySet(); |
| 170 } |
| 171 |
142 bool MutableStylePropertySet::removeShorthandProperty(CSSPropertyID propertyID) | 172 bool MutableStylePropertySet::removeShorthandProperty(CSSPropertyID propertyID) |
143 { | 173 { |
144 StylePropertyShorthand shorthand = shorthandForProperty(propertyID); | 174 StylePropertyShorthand shorthand = shorthandForProperty(propertyID); |
145 if (!shorthand.length()) | 175 if (!shorthand.length()) |
146 return false; | 176 return false; |
147 | 177 |
148 bool ret = removePropertiesInSet(shorthand.properties(), shorthand.length())
; | 178 bool ret = removePropertiesInSet(shorthand.properties(), shorthand.length())
; |
149 | 179 |
150 CSSPropertyID prefixingVariant = prefixingVariantForPropertyId(propertyID); | 180 CSSPropertyID prefixingVariant = prefixingVariantForPropertyId(propertyID); |
151 if (prefixingVariant == propertyID) | 181 if (prefixingVariant == propertyID) |
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
312 CSSParserContext context(cssParserMode(), UseCounter::getFrom(contextStyleSh
eet)); | 342 CSSParserContext context(cssParserMode(), UseCounter::getFrom(contextStyleSh
eet)); |
313 if (contextStyleSheet) { | 343 if (contextStyleSheet) { |
314 context = contextStyleSheet->parserContext(); | 344 context = contextStyleSheet->parserContext(); |
315 context.setMode(cssParserMode()); | 345 context.setMode(cssParserMode()); |
316 } | 346 } |
317 | 347 |
318 BisonCSSParser parser(context); | 348 BisonCSSParser parser(context); |
319 parser.parseDeclaration(this, styleDeclaration, 0, contextStyleSheet); | 349 parser.parseDeclaration(this, styleDeclaration, 0, contextStyleSheet); |
320 } | 350 } |
321 | 351 |
322 void MutableStylePropertySet::addParsedProperties(const Vector<CSSProperty, 256>
& properties) | 352 void MutableStylePropertySet::addParsedProperties(const WillBeHeapVector<CSSProp
erty, 256>& properties) |
323 { | 353 { |
324 m_propertyVector.reserveCapacity(m_propertyVector.size() + properties.size()
); | 354 m_propertyVector.reserveCapacity(m_propertyVector.size() + properties.size()
); |
325 for (unsigned i = 0; i < properties.size(); ++i) | 355 for (unsigned i = 0; i < properties.size(); ++i) |
326 addParsedProperty(properties[i]); | 356 addParsedProperty(properties[i]); |
327 } | 357 } |
328 | 358 |
329 void MutableStylePropertySet::addParsedProperty(const CSSProperty& property) | 359 void MutableStylePropertySet::addParsedProperty(const CSSProperty& property) |
330 { | 360 { |
331 // Only add properties that have no !important counterpart present | 361 // Only add properties that have no !important counterpart present |
332 if (!propertyIsImportant(property.id()) || property.isImportant()) | 362 if (!propertyIsImportant(property.id()) || property.isImportant()) |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
412 bool MutableStylePropertySet::removePropertiesInSet(const CSSPropertyID* set, un
signed length) | 442 bool MutableStylePropertySet::removePropertiesInSet(const CSSPropertyID* set, un
signed length) |
413 { | 443 { |
414 if (m_propertyVector.isEmpty()) | 444 if (m_propertyVector.isEmpty()) |
415 return false; | 445 return false; |
416 | 446 |
417 // FIXME: This is always used with static sets and in that case constructing
the hash repeatedly is pretty pointless. | 447 // FIXME: This is always used with static sets and in that case constructing
the hash repeatedly is pretty pointless. |
418 HashSet<CSSPropertyID> toRemove; | 448 HashSet<CSSPropertyID> toRemove; |
419 for (unsigned i = 0; i < length; ++i) | 449 for (unsigned i = 0; i < length; ++i) |
420 toRemove.add(set[i]); | 450 toRemove.add(set[i]); |
421 | 451 |
422 Vector<CSSProperty> newProperties; | 452 WillBeHeapVector<CSSProperty> newProperties; |
423 newProperties.reserveInitialCapacity(m_propertyVector.size()); | 453 newProperties.reserveInitialCapacity(m_propertyVector.size()); |
424 | 454 |
425 unsigned size = m_propertyVector.size(); | 455 unsigned size = m_propertyVector.size(); |
426 for (unsigned n = 0; n < size; ++n) { | 456 for (unsigned n = 0; n < size; ++n) { |
427 const CSSProperty& property = m_propertyVector.at(n); | 457 const CSSProperty& property = m_propertyVector.at(n); |
428 // Not quite sure if the isImportant test is needed but it matches the e
xisting behavior. | 458 // Not quite sure if the isImportant test is needed but it matches the e
xisting behavior. |
429 if (!property.isImportant()) { | 459 if (!property.isImportant()) { |
430 if (toRemove.contains(property.id())) | 460 if (toRemove.contains(property.id())) |
431 continue; | 461 continue; |
432 } | 462 } |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
477 if (style->cssPropertyMatches(property.id(), property.value())) | 507 if (style->cssPropertyMatches(property.id(), property.value())) |
478 propertiesToRemove.append(property.id()); | 508 propertiesToRemove.append(property.id()); |
479 } | 509 } |
480 // FIXME: This should use mass removal. | 510 // FIXME: This should use mass removal. |
481 for (unsigned i = 0; i < propertiesToRemove.size(); ++i) | 511 for (unsigned i = 0; i < propertiesToRemove.size(); ++i) |
482 removeProperty(propertiesToRemove[i]); | 512 removeProperty(propertiesToRemove[i]); |
483 } | 513 } |
484 | 514 |
485 PassRefPtr<MutableStylePropertySet> StylePropertySet::mutableCopy() const | 515 PassRefPtr<MutableStylePropertySet> StylePropertySet::mutableCopy() const |
486 { | 516 { |
487 return adoptRef(new MutableStylePropertySet(*this)); | 517 return adoptRefWillBeRefCountedGarbageCollected(new MutableStylePropertySet(
*this)); |
488 } | 518 } |
489 | 519 |
490 PassRefPtr<MutableStylePropertySet> StylePropertySet::copyPropertiesInSet(const
Vector<CSSPropertyID>& properties) const | 520 PassRefPtr<MutableStylePropertySet> StylePropertySet::copyPropertiesInSet(const
Vector<CSSPropertyID>& properties) const |
491 { | 521 { |
492 Vector<CSSProperty, 256> list; | 522 WillBeHeapVector<CSSProperty, 256> list; |
493 list.reserveInitialCapacity(properties.size()); | 523 list.reserveInitialCapacity(properties.size()); |
494 for (unsigned i = 0; i < properties.size(); ++i) { | 524 for (unsigned i = 0; i < properties.size(); ++i) { |
495 RefPtrWillBeRawPtr<CSSValue> value = getPropertyCSSValue(properties[i]); | 525 RefPtrWillBeRawPtr<CSSValue> value = getPropertyCSSValue(properties[i]); |
496 if (value) | 526 if (value) |
497 list.append(CSSProperty(properties[i], value.release(), false)); | 527 list.append(CSSProperty(properties[i], value.release(), false)); |
498 } | 528 } |
499 return MutableStylePropertySet::create(list.data(), list.size()); | 529 return MutableStylePropertySet::create(list.data(), list.size()); |
500 } | 530 } |
501 | 531 |
502 CSSStyleDeclaration* MutableStylePropertySet::ensureCSSStyleDeclaration() | 532 CSSStyleDeclaration* MutableStylePropertySet::ensureCSSStyleDeclaration() |
(...skipping 18 matching lines...) Expand all Loading... |
521 if (m_propertyVector.at(n).metadata().m_propertyID == id) { | 551 if (m_propertyVector.at(n).metadata().m_propertyID == id) { |
522 // Only enabled or internal properties should be part of the style. | 552 // Only enabled or internal properties should be part of the style. |
523 ASSERT(RuntimeCSSEnabled::isCSSPropertyEnabled(propertyID) || isInte
rnalProperty(propertyID)); | 553 ASSERT(RuntimeCSSEnabled::isCSSPropertyEnabled(propertyID) || isInte
rnalProperty(propertyID)); |
524 return n; | 554 return n; |
525 } | 555 } |
526 } | 556 } |
527 | 557 |
528 return -1; | 558 return -1; |
529 } | 559 } |
530 | 560 |
| 561 void MutableStylePropertySet::traceAfterDispatch(Visitor* visitor) |
| 562 { |
| 563 visitor->trace(m_propertyVector); |
| 564 StylePropertySet::traceAfterDispatch(visitor); |
| 565 } |
| 566 |
531 unsigned StylePropertySet::averageSizeInBytes() | 567 unsigned StylePropertySet::averageSizeInBytes() |
532 { | 568 { |
533 // Please update this if the storage scheme changes so that this longer refl
ects the actual size. | 569 // Please update this if the storage scheme changes so that this longer refl
ects the actual size. |
534 return sizeForImmutableStylePropertySetWithPropertyCount(4); | 570 return sizeForImmutableStylePropertySetWithPropertyCount(4); |
535 } | 571 } |
536 | 572 |
537 // See the function above if you need to update this. | 573 // See the function above if you need to update this. |
538 struct SameSizeAsStylePropertySet : public RefCounted<SameSizeAsStylePropertySet
> { | 574 struct SameSizeAsStylePropertySet : public RefCountedWillBeRefCountedGarbageColl
ected<SameSizeAsStylePropertySet> { |
539 unsigned bitfield; | 575 unsigned bitfield; |
540 }; | 576 }; |
541 COMPILE_ASSERT(sizeof(StylePropertySet) == sizeof(SameSizeAsStylePropertySet), s
tyle_property_set_should_stay_small); | 577 COMPILE_ASSERT(sizeof(StylePropertySet) == sizeof(SameSizeAsStylePropertySet), s
tyle_property_set_should_stay_small); |
542 | 578 |
543 #ifndef NDEBUG | 579 #ifndef NDEBUG |
544 void StylePropertySet::showStyle() | 580 void StylePropertySet::showStyle() |
545 { | 581 { |
546 fprintf(stderr, "%s\n", asText().ascii().data()); | 582 fprintf(stderr, "%s\n", asText().ascii().data()); |
547 } | 583 } |
548 #endif | 584 #endif |
549 | 585 |
550 PassRefPtr<MutableStylePropertySet> MutableStylePropertySet::create(CSSParserMod
e cssParserMode) | 586 PassRefPtr<MutableStylePropertySet> MutableStylePropertySet::create(CSSParserMod
e cssParserMode) |
551 { | 587 { |
552 return adoptRef(new MutableStylePropertySet(cssParserMode)); | 588 return adoptRefWillBeRefCountedGarbageCollected(new MutableStylePropertySet(
cssParserMode)); |
553 } | 589 } |
554 | 590 |
555 PassRefPtr<MutableStylePropertySet> MutableStylePropertySet::create(const CSSPro
perty* properties, unsigned count) | 591 PassRefPtr<MutableStylePropertySet> MutableStylePropertySet::create(const CSSPro
perty* properties, unsigned count) |
556 { | 592 { |
557 return adoptRef(new MutableStylePropertySet(properties, count)); | 593 return adoptRefWillBeRefCountedGarbageCollected(new MutableStylePropertySet(
properties, count)); |
558 } | 594 } |
559 | 595 |
560 String StylePropertySet::PropertyReference::cssName() const | 596 String StylePropertySet::PropertyReference::cssName() const |
561 { | 597 { |
562 return getPropertyNameString(id()); | 598 return getPropertyNameString(id()); |
563 } | 599 } |
564 | 600 |
565 String StylePropertySet::PropertyReference::cssText() const | 601 String StylePropertySet::PropertyReference::cssText() const |
566 { | 602 { |
567 StringBuilder result; | 603 StringBuilder result; |
568 result.append(cssName()); | 604 result.append(cssName()); |
569 result.appendLiteral(": "); | 605 result.appendLiteral(": "); |
570 result.append(propertyValue()->cssText()); | 606 result.append(propertyValue()->cssText()); |
571 if (isImportant()) | 607 if (isImportant()) |
572 result.appendLiteral(" !important"); | 608 result.appendLiteral(" !important"); |
573 result.append(';'); | 609 result.append(';'); |
574 return result.toString(); | 610 return result.toString(); |
575 } | 611 } |
576 | 612 |
577 | 613 |
578 } // namespace WebCore | 614 } // namespace WebCore |
OLD | NEW |