Index: Source/core/css/CSSStyleDeclaration.cpp |
diff --git a/Source/bindings/v8/custom/V8CSSStyleDeclarationCustom.cpp b/Source/core/css/CSSStyleDeclaration.cpp |
similarity index 57% |
copy from Source/bindings/v8/custom/V8CSSStyleDeclarationCustom.cpp |
copy to Source/core/css/CSSStyleDeclaration.cpp |
index 252a7f7fb2a116a59bfcb6f0f9136553eb030a70..07f70e0778df7d0a80d569ff609fad92816e5a30 100644 |
--- a/Source/bindings/v8/custom/V8CSSStyleDeclarationCustom.cpp |
+++ b/Source/core/css/CSSStyleDeclaration.cpp |
@@ -1,5 +1,5 @@ |
/* |
- * Copyright (C) 2007-2011 Google Inc. All rights reserved. |
+ * Copyright (C) 2013 Google Inc. All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions are |
@@ -29,29 +29,18 @@ |
*/ |
#include "config.h" |
-#include "V8CSSStyleDeclaration.h" |
+#include "core/css/CSSStyleDeclaration.h" |
-#include "CSSPropertyNames.h" |
#include "core/css/CSSParser.h" |
#include "core/css/CSSPrimitiveValue.h" |
-#include "core/css/CSSStyleDeclaration.h" |
+#include "core/css/CSSStyleSheet.h" |
#include "core/css/CSSValue.h" |
+#include "core/dom/Document.h" |
+#include "core/dom/DocumentStyleSheetCollection.h" |
#include "core/dom/EventTarget.h" |
+#include "core/html/HTMLStyleElement.h" |
#include "core/page/RuntimeCSSEnabled.h" |
-#include "bindings/v8/V8Binding.h" |
- |
-#include "wtf/ASCIICType.h" |
-#include "wtf/PassRefPtr.h" |
-#include "wtf/RefPtr.h" |
-#include "wtf/StdLibExtras.h" |
-#include "wtf/Vector.h" |
-#include "wtf/text/StringBuilder.h" |
-#include "wtf/text/StringConcatenate.h" |
- |
-using namespace WTF; |
-using namespace std; |
- |
namespace WebCore { |
// FIXME: Next two functions look lifted verbatim from JSCSSStyleDeclarationCustom. Please remove duplication. |
@@ -83,15 +72,9 @@ static bool hasCSSPropertyNamePrefix(const String& propertyName, const char* pre |
return false; |
} |
-class CSSPropertyInfo { |
-public: |
- CSSPropertyID propID; |
- bool hadPixelOrPosPrefix; |
-}; |
- |
// When getting properties on CSSStyleDeclarations, the name used from |
// Javascript and the actual name of the property are not the same, so |
-// we have to do the following translation. The translation turns upper |
+// we have to do the following translation. The translation turns upper |
// case characters into lower case characters and inserts dashes to |
// separate words. |
// |
@@ -100,9 +83,8 @@ public: |
// Also, certain prefixes such as 'pos', 'css-' and 'pixel-' are stripped |
// and the hadPixelOrPosPrefix out parameter is used to indicate whether or |
// not the property name was prefixed with 'pos-' or 'pixel-'. |
-static CSSPropertyInfo* cssPropertyInfo(v8::Handle<v8::String> v8PropertyName) |
+CSSPropertyInfo* CSSStyleDeclaration::cssPropertyInfo(const String& propertyName) |
{ |
- String propertyName = toWebCoreString(v8PropertyName); |
typedef HashMap<String, CSSPropertyInfo*> CSSPropertyInfoMap; |
DEFINE_STATIC_LOCAL(CSSPropertyInfoMap, map, ()); |
CSSPropertyInfo* propInfo = map.get(propertyName); |
@@ -154,91 +136,35 @@ static CSSPropertyInfo* cssPropertyInfo(v8::Handle<v8::String> v8PropertyName) |
return propInfo; |
} |
-v8::Handle<v8::Array> V8CSSStyleDeclaration::namedPropertyEnumerator(const v8::AccessorInfo& info) |
-{ |
- typedef Vector<String, numCSSProperties - 1> PreAllocatedPropertyVector; |
- DEFINE_STATIC_LOCAL(PreAllocatedPropertyVector, propertyNames, ()); |
- static unsigned propertyNamesLength = 0; |
- |
- if (propertyNames.isEmpty()) { |
- for (int id = firstCSSProperty; id <= lastCSSProperty; ++id) { |
- CSSPropertyID propertyId = static_cast<CSSPropertyID>(id); |
- if (RuntimeCSSEnabled::isCSSPropertyEnabled(propertyId)) |
- propertyNames.append(getJSPropertyName(propertyId)); |
- } |
- sort(propertyNames.begin(), propertyNames.end(), codePointCompareLessThan); |
- propertyNamesLength = propertyNames.size(); |
- } |
- |
- v8::Handle<v8::Array> properties = v8::Array::New(propertyNamesLength); |
- for (unsigned i = 0; i < propertyNamesLength; ++i) { |
- String key = propertyNames.at(i); |
- ASSERT(!key.isNull()); |
- properties->Set(v8Integer(i, info.GetIsolate()), v8String(key, info.GetIsolate())); |
- } |
- |
- return properties; |
-} |
- |
-v8::Handle<v8::Integer> V8CSSStyleDeclaration::namedPropertyQuery(v8::Local<v8::String> v8Name, const v8::AccessorInfo& info) |
+void CSSStyleDeclaration::anonymousNamedGetter(const AtomicString& name, bool& returnValue1Enabled, String& returnValue1, bool& returnValue2Enabled, float& returnValue2) |
{ |
- // NOTE: cssPropertyInfo lookups incur several mallocs. |
- // Successful lookups have the same cost the first time, but are cached. |
- if (cssPropertyInfo(v8Name)) |
- return v8Integer(0, info.GetIsolate()); |
- |
- return v8::Handle<v8::Integer>(); |
-} |
- |
-v8::Handle<v8::Value> V8CSSStyleDeclaration::namedPropertyGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info) |
-{ |
- // First look for API defined attributes on the style declaration object. |
- if (info.Holder()->HasRealNamedCallbackProperty(name)) |
- return v8Undefined(); |
- |
// Search the style declaration. |
CSSPropertyInfo* propInfo = cssPropertyInfo(name); |
// Do not handle non-property names. |
if (!propInfo) |
- return v8Undefined(); |
+ return; |
- CSSStyleDeclaration* imp = V8CSSStyleDeclaration::toNative(info.Holder()); |
- RefPtr<CSSValue> cssValue = imp->getPropertyCSSValueInternal(static_cast<CSSPropertyID>(propInfo->propID)); |
+ RefPtr<CSSValue> cssValue = getPropertyCSSValueInternal(static_cast<CSSPropertyID>(propInfo->propID)); |
if (cssValue) { |
- if (propInfo->hadPixelOrPosPrefix && |
- cssValue->isPrimitiveValue()) { |
- return v8::Number::New(static_cast<CSSPrimitiveValue*>( |
- cssValue.get())->getFloatValue(CSSPrimitiveValue::CSS_PX)); |
+ if (propInfo->hadPixelOrPosPrefix && cssValue->isPrimitiveValue()) { |
+ returnValue2Enabled = true; |
+ returnValue2 = static_cast<CSSPrimitiveValue*>(cssValue.get())->getFloatValue(CSSPrimitiveValue::CSS_PX); |
+ return; |
} |
- return v8StringOrNull(cssValue->cssText(), info.GetIsolate()); |
+ // TODO support treatnullas |
+// return v8StringOrNull(cssValue->cssText(), info.GetIsolate()); |
haraken
2013/05/24 06:03:05
I think it is already supported by [TreatReturnedN
kojih
2013/05/24 06:11:19
Ah this is just my old memo. I'll remove this.
|
+ returnValue1Enabled = true; |
+ returnValue1 = cssValue->cssText(); |
+ return; |
} |
- String result = imp->getPropertyValueInternal(static_cast<CSSPropertyID>(propInfo->propID)); |
+ String result = getPropertyValueInternal(static_cast<CSSPropertyID>(propInfo->propID)); |
if (result.isNull()) |
- result = ""; // convert null to empty string. |
- |
- return v8String(result, info.GetIsolate()); |
-} |
- |
-v8::Handle<v8::Value> V8CSSStyleDeclaration::namedPropertySetter(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::AccessorInfo& info) |
-{ |
- CSSStyleDeclaration* imp = V8CSSStyleDeclaration::toNative(info.Holder()); |
- CSSPropertyInfo* propInfo = cssPropertyInfo(name); |
- if (!propInfo) |
- return v8Undefined(); |
- |
- String propertyValue = toWebCoreStringWithNullCheck(value); |
- if (propInfo->hadPixelOrPosPrefix) |
- propertyValue.append("px"); |
- |
- ExceptionCode ec = 0; |
- imp->setPropertyInternal(static_cast<CSSPropertyID>(propInfo->propID), propertyValue, false, ec); |
- |
- if (ec) |
- setDOMException(ec, info.GetIsolate()); |
+ result = ""; // convert null to empty string. |
- return value; |
+ returnValue1 = result; |
+ returnValue1Enabled = true; |
} |
} // namespace WebCore |