| Index: Source/bindings/v8/custom/V8CSSStyleDeclarationCustom.cpp
|
| diff --git a/Source/bindings/v8/custom/V8CSSStyleDeclarationCustom.cpp b/Source/bindings/v8/custom/V8CSSStyleDeclarationCustom.cpp
|
| index a282c841fed5ba944cec68f62277dca98bdcc29c..d0301efca04a2945332d966b88191095db398688 100644
|
| --- a/Source/bindings/v8/custom/V8CSSStyleDeclarationCustom.cpp
|
| +++ b/Source/bindings/v8/custom/V8CSSStyleDeclarationCustom.cpp
|
| @@ -84,6 +84,50 @@ struct CSSPropertyInfo {
|
| CSSPropertyID propID;
|
| };
|
|
|
| +static CSSPropertyID cssResolvedPropertyID(const String& propertyName)
|
| +{
|
| + unsigned length = propertyName.length();
|
| + if (!length)
|
| + return CSSPropertyInvalid;
|
| +
|
| + StringBuilder builder;
|
| + builder.reserveCapacity(length);
|
| +
|
| + unsigned i = 0;
|
| + bool hasSeenDash = false;
|
| +
|
| + if (hasCSSPropertyNamePrefix(propertyName, "css"))
|
| + i += 3;
|
| + else if (hasCSSPropertyNamePrefix(propertyName, "webkit"))
|
| + builder.append('-');
|
| + else if (isASCIIUpper(propertyName[0]))
|
| + return CSSPropertyInvalid;
|
| +
|
| + bool hasSeenUpper = isASCIIUpper(propertyName[i]);
|
| +
|
| + builder.append(toASCIILower(propertyName[i++]));
|
| +
|
| + for (; i < length; ++i) {
|
| + UChar c = propertyName[i];
|
| + if (!isASCIIUpper(c)) {
|
| + if (c == '-')
|
| + hasSeenDash = true;
|
| + builder.append(c);
|
| + } else {
|
| + hasSeenUpper = true;
|
| + builder.append('-');
|
| + builder.append(toASCIILower(c));
|
| + }
|
| + }
|
| +
|
| + // Reject names containing both dashes and upper-case characters, such as "border-rightColor".
|
| + if (hasSeenDash && hasSeenUpper)
|
| + return CSSPropertyInvalid;
|
| +
|
| + String propName = builder.toString();
|
| + return cssPropertyID(propName);
|
| +}
|
| +
|
| // 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
|
| @@ -100,54 +144,13 @@ static CSSPropertyInfo* cssPropertyInfo(v8::Handle<v8::String> v8PropertyName)
|
| DEFINE_STATIC_LOCAL(CSSPropertyInfoMap, map, ());
|
| CSSPropertyInfo* propInfo = map.get(propertyName);
|
| if (!propInfo) {
|
| - unsigned length = propertyName.length();
|
| - if (!length)
|
| - return 0;
|
| -
|
| - StringBuilder builder;
|
| - builder.reserveCapacity(length);
|
| -
|
| - unsigned i = 0;
|
| - bool hasSeenDash = false;
|
| -
|
| - if (hasCSSPropertyNamePrefix(propertyName, "css"))
|
| - i += 3;
|
| - else if (hasCSSPropertyNamePrefix(propertyName, "webkit"))
|
| - builder.append('-');
|
| - else if (isASCIIUpper(propertyName[0]))
|
| - return 0;
|
| -
|
| - bool hasSeenUpper = isASCIIUpper(propertyName[i]);
|
| -
|
| - builder.append(toASCIILower(propertyName[i++]));
|
| -
|
| - for (; i < length; ++i) {
|
| - UChar c = propertyName[i];
|
| - if (!isASCIIUpper(c)) {
|
| - if (c == '-')
|
| - hasSeenDash = true;
|
| - builder.append(c);
|
| - }
|
| - else {
|
| - hasSeenUpper = true;
|
| - builder.append('-');
|
| - builder.append(toASCIILower(c));
|
| - }
|
| - }
|
| -
|
| - // Reject names containing both dashes and upper-case characters, such as "border-rightColor".
|
| - if (hasSeenDash && hasSeenUpper)
|
| - return 0;
|
| -
|
| - String propName = builder.toString();
|
| - CSSPropertyID propertyID = cssPropertyID(propName);
|
| - if (propertyID && RuntimeCSSEnabled::isCSSPropertyEnabled(propertyID)) {
|
| - propInfo = new CSSPropertyInfo();
|
| - propInfo->propID = propertyID;
|
| - map.add(propertyName, propInfo);
|
| - }
|
| + propInfo = new CSSPropertyInfo();
|
| + propInfo->propID = cssResolvedPropertyID(propertyName);
|
| + map.add(propertyName, propInfo);
|
| }
|
| - return propInfo;
|
| + if (propInfo->propID && RuntimeCSSEnabled::isCSSPropertyEnabled(propInfo->propID))
|
| + return propInfo;
|
| + return 0;
|
| }
|
|
|
| void V8CSSStyleDeclaration::namedPropertyEnumeratorCustom(const v8::PropertyCallbackInfo<v8::Array>& info)
|
|
|