summaryrefslogtreecommitdiffstats
path: root/Source/WebCore/css/CSSStyleDeclaration.cpp
diff options
context:
space:
mode:
authorBen Murdoch <benm@google.com>2011-05-24 11:24:40 +0100
committerBen Murdoch <benm@google.com>2011-06-02 09:53:15 +0100
commit81bc750723a18f21cd17d1b173cd2a4dda9cea6e (patch)
tree7a9e5ed86ff429fd347a25153107221543909b19 /Source/WebCore/css/CSSStyleDeclaration.cpp
parent94088a6d336c1dd80a1e734af51e96abcbb689a7 (diff)
downloadexternal_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.cpp26
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)