diff options
author | Ben Murdoch <benm@google.com> | 2011-05-24 11:24:40 +0100 |
---|---|---|
committer | Ben Murdoch <benm@google.com> | 2011-06-02 09:53:15 +0100 |
commit | 81bc750723a18f21cd17d1b173cd2a4dda9cea6e (patch) | |
tree | 7a9e5ed86ff429fd347a25153107221543909b19 /Source/WebCore/css/CSSStyleDeclaration.cpp | |
parent | 94088a6d336c1dd80a1e734af51e96abcbb689a7 (diff) | |
download | external_webkit-81bc750723a18f21cd17d1b173cd2a4dda9cea6e.zip external_webkit-81bc750723a18f21cd17d1b173cd2a4dda9cea6e.tar.gz external_webkit-81bc750723a18f21cd17d1b173cd2a4dda9cea6e.tar.bz2 |
Merge WebKit at r80534: Intial merge by Git
Change-Id: Ia7a83357124c9e1cdb1debf55d9661ec0bd09a61
Diffstat (limited to 'Source/WebCore/css/CSSStyleDeclaration.cpp')
-rw-r--r-- | Source/WebCore/css/CSSStyleDeclaration.cpp | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/Source/WebCore/css/CSSStyleDeclaration.cpp b/Source/WebCore/css/CSSStyleDeclaration.cpp index 422dd0d..0a7aa1c 100644 --- a/Source/WebCore/css/CSSStyleDeclaration.cpp +++ b/Source/WebCore/css/CSSStyleDeclaration.cpp @@ -22,10 +22,13 @@ #include "CSSStyleDeclaration.h" #include "CSSMutableStyleDeclaration.h" +#include "CSSMutableValue.h" #include "CSSParser.h" #include "CSSProperty.h" #include "CSSPropertyNames.h" #include "CSSRule.h" +#include "Node.h" +#include "SVGElement.h" #include <wtf/ASCIICType.h> using namespace WTF; @@ -42,7 +45,28 @@ PassRefPtr<CSSValue> CSSStyleDeclaration::getPropertyCSSValue(const String& prop int propID = cssPropertyID(propertyName); if (!propID) return 0; - return getPropertyCSSValue(propID); + + // Short-cut, not involving any change to the refcount. + if (!isMutableStyleDeclaration()) + return getPropertyCSSValue(propID); + + // Slow path. + RefPtr<CSSValue> value = getPropertyCSSValue(propID); + if (!value || !value->isMutableValue()) + return value.release(); + + Node* node = static_cast<CSSMutableStyleDeclaration*>(this)->node(); + if (!node || !node->isStyledElement()) + return value.release(); + + Node* associatedNode = static_cast<CSSMutableValue*>(value.get())->node(); + if (associatedNode) { + ASSERT(associatedNode == node); + return value.release(); + } + + static_cast<CSSMutableValue*>(value.get())->setNode(node); + return value.release(); } String CSSStyleDeclaration::getPropertyValue(const String &propertyName) |