Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(268)

Unified Diff: Source/bindings/v8/custom/V8CSSStyleDeclarationCustom.cpp

Issue 15834008: Auto-generate V8CSSStyleDeclaration::namedPropertyGetter (Closed) Base URL: https://chromium.googlesource.com/chromium/blink@master
Patch Set: Created 7 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: Source/bindings/v8/custom/V8CSSStyleDeclarationCustom.cpp
diff --git a/Source/bindings/v8/custom/V8CSSStyleDeclarationCustom.cpp b/Source/bindings/v8/custom/V8CSSStyleDeclarationCustom.cpp
index 252a7f7fb2a116a59bfcb6f0f9136553eb030a70..b76618f72b1f5b524638cc6c3657850dd130923d 100644
--- a/Source/bindings/v8/custom/V8CSSStyleDeclarationCustom.cpp
+++ b/Source/bindings/v8/custom/V8CSSStyleDeclarationCustom.cpp
@@ -54,105 +54,7 @@ using namespace std;
namespace WebCore {
-// FIXME: Next two functions look lifted verbatim from JSCSSStyleDeclarationCustom. Please remove duplication.
-
-// Check for a CSS prefix.
-// Passed prefix is all lowercase.
-// First character of the prefix within the property name may be upper or lowercase.
-// Other characters in the prefix within the property name must be lowercase.
-// The prefix within the property name must be followed by a capital letter.
-static bool hasCSSPropertyNamePrefix(const String& propertyName, const char* prefix)
-{
-#ifndef NDEBUG
- ASSERT(*prefix);
- for (const char* p = prefix; *p; ++p)
- ASSERT(isASCIILower(*p));
- ASSERT(propertyName.length());
-#endif
-
- if (toASCIILower(propertyName[0]) != prefix[0])
- return false;
-
- unsigned length = propertyName.length();
- for (unsigned i = 1; i < length; ++i) {
- if (!prefix[i])
- return isASCIIUpper(propertyName[i]);
- if (propertyName[i] != prefix[i])
- return false;
- }
- 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
-// case characters into lower case characters and inserts dashes to
-// separate words.
-//
-// Example: 'backgroundPositionY' -> 'background-position-y'
-//
-// 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)
-{
- String propertyName = toWebCoreString(v8PropertyName);
- typedef HashMap<String, CSSPropertyInfo*> CSSPropertyInfoMap;
- DEFINE_STATIC_LOCAL(CSSPropertyInfoMap, map, ());
- CSSPropertyInfo* propInfo = map.get(propertyName);
- if (!propInfo) {
- unsigned length = propertyName.length();
- bool hadPixelOrPosPrefix = false;
- if (!length)
- return 0;
-
- StringBuilder builder;
- builder.reserveCapacity(length);
-
- unsigned i = 0;
-
- if (hasCSSPropertyNamePrefix(propertyName, "css"))
- i += 3;
- else if (hasCSSPropertyNamePrefix(propertyName, "pixel")) {
- i += 5;
- hadPixelOrPosPrefix = true;
- } else if (hasCSSPropertyNamePrefix(propertyName, "pos")) {
- i += 3;
- hadPixelOrPosPrefix = true;
- } else if (hasCSSPropertyNamePrefix(propertyName, "webkit"))
- builder.append('-');
- else if (isASCIIUpper(propertyName[0]))
- return 0;
-
- builder.append(toASCIILower(propertyName[i++]));
-
- for (; i < length; ++i) {
- UChar c = propertyName[i];
- if (!isASCIIUpper(c))
- builder.append(c);
- else {
- builder.append('-');
- builder.append(toASCIILower(c));
- }
- }
- String propName = builder.toString();
- CSSPropertyID propertyID = cssPropertyID(propName);
- if (propertyID && RuntimeCSSEnabled::isCSSPropertyEnabled(propertyID)) {
- propInfo = new CSSPropertyInfo();
- propInfo->hadPixelOrPosPrefix = hadPixelOrPosPrefix;
- propInfo->propID = propertyID;
- map.add(propertyName, propInfo);
- }
- }
- return propInfo;
-}
v8::Handle<v8::Array> V8CSSStyleDeclaration::namedPropertyEnumerator(const v8::AccessorInfo& info)
{
@@ -184,47 +86,18 @@ v8::Handle<v8::Integer> V8CSSStyleDeclaration::namedPropertyQuery(v8::Local<v8::
{
// NOTE: cssPropertyInfo lookups incur several mallocs.
// Successful lookups have the same cost the first time, but are cached.
- if (cssPropertyInfo(v8Name))
+ String propertyName = toWebCoreString(v8Name);
+ if (CSSStyleDeclaration::cssPropertyInfo(propertyName))
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();
-
- CSSStyleDeclaration* imp = V8CSSStyleDeclaration::toNative(info.Holder());
- RefPtr<CSSValue> cssValue = imp->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));
- }
- return v8StringOrNull(cssValue->cssText(), info.GetIsolate());
- }
-
- String result = imp->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);
+ String propertyName = toWebCoreString(name);
+ CSSPropertyInfo* propInfo = CSSStyleDeclaration::cssPropertyInfo(propertyName);
if (!propInfo)
return v8Undefined();

Powered by Google App Engine
This is Rietveld 408576698