| 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 Apple Inc. All r
ights reserved. | 3 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2012 Apple Inc. All r
ights reserved. |
| 4 * Copyright (C) 2011 Research In Motion Limited. All rights reserved. | 4 * Copyright (C) 2011 Research In Motion Limited. All rights reserved. |
| 5 * | 5 * |
| 6 * This library is free software; you can redistribute it and/or | 6 * This library is free software; you can redistribute it and/or |
| 7 * modify it under the terms of the GNU Library General Public | 7 * modify it under the terms of the GNU Library General Public |
| 8 * License as published by the Free Software Foundation; either | 8 * License as published by the Free Software Foundation; either |
| 9 * version 2 of the License, or (at your option) any later version. | 9 * version 2 of the License, or (at your option) any later version. |
| 10 * | 10 * |
| (...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 165 willMutate(); | 165 willMutate(); |
| 166 | 166 |
| 167 // FIXME: Detect syntax errors and set exceptionState. | 167 // FIXME: Detect syntax errors and set exceptionState. |
| 168 propertySet().parseDeclaration(text, contextStyleSheet()); | 168 propertySet().parseDeclaration(text, contextStyleSheet()); |
| 169 | 169 |
| 170 didMutate(PropertyChanged); | 170 didMutate(PropertyChanged); |
| 171 | 171 |
| 172 mutationScope.enqueueMutationRecord(); | 172 mutationScope.enqueueMutationRecord(); |
| 173 } | 173 } |
| 174 | 174 |
| 175 PassRefPtrWillBeRawPtr<CSSValue> AbstractPropertySetCSSStyleDeclaration::getProp
ertyCSSValue(const String& propertyName) | |
| 176 { | |
| 177 CSSPropertyID propertyID = cssPropertyID(propertyName); | |
| 178 if (!propertyID) | |
| 179 return nullptr; | |
| 180 return cloneAndCacheForCSSOM(propertySet().getPropertyCSSValue(propertyID).g
et()); | |
| 181 } | |
| 182 | |
| 183 String AbstractPropertySetCSSStyleDeclaration::getPropertyValue(const String &pr
opertyName) | 175 String AbstractPropertySetCSSStyleDeclaration::getPropertyValue(const String &pr
opertyName) |
| 184 { | 176 { |
| 185 CSSPropertyID propertyID = cssPropertyID(propertyName); | 177 CSSPropertyID propertyID = cssPropertyID(propertyName); |
| 186 if (!propertyID) | 178 if (!propertyID) |
| 187 return String(); | 179 return String(); |
| 188 return propertySet().getPropertyValue(propertyID); | 180 return propertySet().getPropertyValue(propertyID); |
| 189 } | 181 } |
| 190 | 182 |
| 191 String AbstractPropertySetCSSStyleDeclaration::getPropertyPriority(const String&
propertyName) | 183 String AbstractPropertySetCSSStyleDeclaration::getPropertyPriority(const String&
propertyName) |
| 192 { | 184 { |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 263 willMutate(); | 255 willMutate(); |
| 264 | 256 |
| 265 bool changed = propertySet().setProperty(propertyID, value, important, conte
xtStyleSheet()); | 257 bool changed = propertySet().setProperty(propertyID, value, important, conte
xtStyleSheet()); |
| 266 | 258 |
| 267 didMutate(changed ? PropertyChanged : NoChanges); | 259 didMutate(changed ? PropertyChanged : NoChanges); |
| 268 | 260 |
| 269 if (changed) | 261 if (changed) |
| 270 mutationScope.enqueueMutationRecord(); | 262 mutationScope.enqueueMutationRecord(); |
| 271 } | 263 } |
| 272 | 264 |
| 273 CSSValue* AbstractPropertySetCSSStyleDeclaration::cloneAndCacheForCSSOM(CSSValue
* internalValue) | |
| 274 { | |
| 275 if (!internalValue) | |
| 276 return 0; | |
| 277 | |
| 278 // The map is here to maintain the object identity of the CSSValues over mul
tiple invocations. | |
| 279 // FIXME: It is likely that the identity is not important for web compatibil
ity and this code should be removed. | |
| 280 if (!m_cssomCSSValueClones) | |
| 281 m_cssomCSSValueClones = adoptPtrWillBeNoop(new WillBeHeapHashMap<RawPtrW
illBeMember<CSSValue>, RefPtrWillBeMember<CSSValue> >); | |
| 282 | |
| 283 RefPtrWillBeMember<CSSValue>& clonedValue = m_cssomCSSValueClones->add(inter
nalValue, RefPtrWillBeMember<CSSValue>()).storedValue->value; | |
| 284 if (!clonedValue) | |
| 285 clonedValue = internalValue->cloneForCSSOM(); | |
| 286 return clonedValue.get(); | |
| 287 } | |
| 288 | |
| 289 StyleSheetContents* AbstractPropertySetCSSStyleDeclaration::contextStyleSheet()
const | 265 StyleSheetContents* AbstractPropertySetCSSStyleDeclaration::contextStyleSheet()
const |
| 290 { | 266 { |
| 291 CSSStyleSheet* cssStyleSheet = parentStyleSheet(); | 267 CSSStyleSheet* cssStyleSheet = parentStyleSheet(); |
| 292 return cssStyleSheet ? cssStyleSheet->contents() : 0; | 268 return cssStyleSheet ? cssStyleSheet->contents() : 0; |
| 293 } | 269 } |
| 294 | 270 |
| 295 PassRefPtrWillBeRawPtr<MutableStylePropertySet> AbstractPropertySetCSSStyleDecla
ration::copyProperties() const | 271 PassRefPtrWillBeRawPtr<MutableStylePropertySet> AbstractPropertySetCSSStyleDecla
ration::copyProperties() const |
| 296 { | 272 { |
| 297 return propertySet().mutableCopy(); | 273 return propertySet().mutableCopy(); |
| 298 } | 274 } |
| 299 | 275 |
| 300 bool AbstractPropertySetCSSStyleDeclaration::cssPropertyMatches(CSSPropertyID pr
opertyID, const CSSValue* propertyValue) const | 276 bool AbstractPropertySetCSSStyleDeclaration::cssPropertyMatches(CSSPropertyID pr
opertyID, const CSSValue* propertyValue) const |
| 301 { | 277 { |
| 302 return propertySet().propertyMatches(propertyID, propertyValue); | 278 return propertySet().propertyMatches(propertyID, propertyValue); |
| 303 } | 279 } |
| 304 | 280 |
| 305 void AbstractPropertySetCSSStyleDeclaration::trace(Visitor* visitor) | 281 void AbstractPropertySetCSSStyleDeclaration::trace(Visitor* visitor) |
| 306 { | 282 { |
| 307 #if ENABLE(OILPAN) | |
| 308 visitor->trace(m_cssomCSSValueClones); | |
| 309 #endif | |
| 310 CSSStyleDeclaration::trace(visitor); | 283 CSSStyleDeclaration::trace(visitor); |
| 311 } | 284 } |
| 312 | 285 |
| 313 StyleRuleCSSStyleDeclaration::StyleRuleCSSStyleDeclaration(MutableStylePropertyS
et& propertySetArg, CSSRule* parentRule) | 286 StyleRuleCSSStyleDeclaration::StyleRuleCSSStyleDeclaration(MutableStylePropertyS
et& propertySetArg, CSSRule* parentRule) |
| 314 : PropertySetCSSStyleDeclaration(propertySetArg) | 287 : PropertySetCSSStyleDeclaration(propertySetArg) |
| 315 #if !ENABLE(OILPAN) | 288 #if !ENABLE(OILPAN) |
| 316 , m_refCount(1) | 289 , m_refCount(1) |
| 317 #endif | 290 #endif |
| 318 , m_parentRule(parentRule) | 291 , m_parentRule(parentRule) |
| 319 { | 292 { |
| (...skipping 24 matching lines...) Expand all Loading... |
| 344 #endif | 317 #endif |
| 345 | 318 |
| 346 void StyleRuleCSSStyleDeclaration::willMutate() | 319 void StyleRuleCSSStyleDeclaration::willMutate() |
| 347 { | 320 { |
| 348 if (m_parentRule && m_parentRule->parentStyleSheet()) | 321 if (m_parentRule && m_parentRule->parentStyleSheet()) |
| 349 m_parentRule->parentStyleSheet()->willMutateRules(); | 322 m_parentRule->parentStyleSheet()->willMutateRules(); |
| 350 } | 323 } |
| 351 | 324 |
| 352 void StyleRuleCSSStyleDeclaration::didMutate(MutationType type) | 325 void StyleRuleCSSStyleDeclaration::didMutate(MutationType type) |
| 353 { | 326 { |
| 354 if (type == PropertyChanged) | |
| 355 m_cssomCSSValueClones.clear(); | |
| 356 | |
| 357 // Style sheet mutation needs to be signaled even if the change failed. will
MutateRules/didMutateRules must pair. | 327 // Style sheet mutation needs to be signaled even if the change failed. will
MutateRules/didMutateRules must pair. |
| 358 if (m_parentRule && m_parentRule->parentStyleSheet()) | 328 if (m_parentRule && m_parentRule->parentStyleSheet()) |
| 359 m_parentRule->parentStyleSheet()->didMutateRules(); | 329 m_parentRule->parentStyleSheet()->didMutateRules(); |
| 360 } | 330 } |
| 361 | 331 |
| 362 CSSStyleSheet* StyleRuleCSSStyleDeclaration::parentStyleSheet() const | 332 CSSStyleSheet* StyleRuleCSSStyleDeclaration::parentStyleSheet() const |
| 363 { | 333 { |
| 364 return m_parentRule ? m_parentRule->parentStyleSheet() : 0; | 334 return m_parentRule ? m_parentRule->parentStyleSheet() : 0; |
| 365 } | 335 } |
| 366 | 336 |
| (...skipping 17 matching lines...) Expand all Loading... |
| 384 MutableStylePropertySet& InlineCSSStyleDeclaration::propertySet() const | 354 MutableStylePropertySet& InlineCSSStyleDeclaration::propertySet() const |
| 385 { | 355 { |
| 386 return m_parentElement->ensureMutableInlineStyle(); | 356 return m_parentElement->ensureMutableInlineStyle(); |
| 387 } | 357 } |
| 388 | 358 |
| 389 void InlineCSSStyleDeclaration::didMutate(MutationType type) | 359 void InlineCSSStyleDeclaration::didMutate(MutationType type) |
| 390 { | 360 { |
| 391 if (type == NoChanges) | 361 if (type == NoChanges) |
| 392 return; | 362 return; |
| 393 | 363 |
| 394 m_cssomCSSValueClones.clear(); | |
| 395 | |
| 396 if (!m_parentElement) | 364 if (!m_parentElement) |
| 397 return; | 365 return; |
| 398 | 366 |
| 399 m_parentElement->clearMutableInlineStyleIfEmpty(); | 367 m_parentElement->clearMutableInlineStyleIfEmpty(); |
| 400 m_parentElement->setNeedsStyleRecalc(LocalStyleChange, StyleChangeReasonForT
racing::create(StyleChangeReason::StyleSheetChange)); | 368 m_parentElement->setNeedsStyleRecalc(LocalStyleChange, StyleChangeReasonForT
racing::create(StyleChangeReason::StyleSheetChange)); |
| 401 m_parentElement->invalidateStyleAttribute(); | 369 m_parentElement->invalidateStyleAttribute(); |
| 402 StyleAttributeMutationScope(this).didInvalidateStyleAttr(); | 370 StyleAttributeMutationScope(this).didInvalidateStyleAttr(); |
| 403 } | 371 } |
| 404 | 372 |
| 405 CSSStyleSheet* InlineCSSStyleDeclaration::parentStyleSheet() const | 373 CSSStyleSheet* InlineCSSStyleDeclaration::parentStyleSheet() const |
| (...skipping 13 matching lines...) Expand all Loading... |
| 419 } | 387 } |
| 420 #endif | 388 #endif |
| 421 | 389 |
| 422 void InlineCSSStyleDeclaration::trace(Visitor* visitor) | 390 void InlineCSSStyleDeclaration::trace(Visitor* visitor) |
| 423 { | 391 { |
| 424 visitor->trace(m_parentElement); | 392 visitor->trace(m_parentElement); |
| 425 AbstractPropertySetCSSStyleDeclaration::trace(visitor); | 393 AbstractPropertySetCSSStyleDeclaration::trace(visitor); |
| 426 } | 394 } |
| 427 | 395 |
| 428 } // namespace blink | 396 } // namespace blink |
| OLD | NEW |