Index: Source/bindings/core/v8/custom/V8CSSStyleDeclarationCustom.cpp |
diff --git a/Source/bindings/core/v8/custom/V8CSSStyleDeclarationCustom.cpp b/Source/bindings/core/v8/custom/V8CSSStyleDeclarationCustom.cpp |
index 463b889871a2ff290ecf515f6ff490ac2d5435c8..24913e70e449aa5e06574730d3e5127ee37c5279 100644 |
--- a/Source/bindings/core/v8/custom/V8CSSStyleDeclarationCustom.cpp |
+++ b/Source/bindings/core/v8/custom/V8CSSStyleDeclarationCustom.cpp |
@@ -40,6 +40,7 @@ |
#include "core/css/CSSValue.h" |
#include "core/css/parser/CSSParser.h" |
#include "core/events/EventTarget.h" |
+#include "core/frame/UseCounter.h" |
#include "wtf/ASCIICType.h" |
#include "wtf/PassRefPtr.h" |
#include "wtf/RefPtr.h" |
@@ -83,7 +84,7 @@ struct CSSPropertyInfo { |
CSSPropertyID propID; |
}; |
-static CSSPropertyID cssResolvedPropertyID(const String& propertyName) |
+static CSSPropertyID cssResolvedPropertyID(const String& propertyName, v8::Isolate* isolate) |
{ |
unsigned length = propertyName.length(); |
if (!length) |
@@ -95,9 +96,12 @@ static CSSPropertyID cssResolvedPropertyID(const String& propertyName) |
unsigned i = 0; |
bool hasSeenDash = false; |
- if (hasCSSPropertyNamePrefix(propertyName, "css")) |
+ if (hasCSSPropertyNamePrefix(propertyName, "css")) { |
i += 3; |
- else if (hasCSSPropertyNamePrefix(propertyName, "webkit")) |
+ // getComputedStyle(elem).cssX is a non-standard behaviour |
+ // Measure this behaviour as CSSXGetComputedStyleQueries. |
+ UseCounter::count(callingExecutionContext(isolate), UseCounter::CSSXGetComputedStyleQueries); |
+ } else if (hasCSSPropertyNamePrefix(propertyName, "webkit")) |
builder.append('-'); |
else if (isASCIIUpper(propertyName[0])) |
return CSSPropertyInvalid; |
@@ -136,7 +140,7 @@ static CSSPropertyID cssResolvedPropertyID(const String& propertyName) |
// Example: 'backgroundPositionY' -> 'background-position-y' |
// |
// Also, certain prefixes such as 'css-' are stripped. |
-static CSSPropertyInfo* cssPropertyInfo(v8::Handle<v8::String> v8PropertyName) |
+static CSSPropertyInfo* cssPropertyInfo(v8::Handle<v8::String> v8PropertyName, v8::Isolate* isolate) |
{ |
String propertyName = toCoreString(v8PropertyName); |
typedef HashMap<String, CSSPropertyInfo*> CSSPropertyInfoMap; |
@@ -144,7 +148,7 @@ static CSSPropertyInfo* cssPropertyInfo(v8::Handle<v8::String> v8PropertyName) |
CSSPropertyInfo* propInfo = map.get(propertyName); |
if (!propInfo) { |
propInfo = new CSSPropertyInfo(); |
- propInfo->propID = cssResolvedPropertyID(propertyName); |
+ propInfo->propID = cssResolvedPropertyID(propertyName, isolate); |
map.add(propertyName, propInfo); |
} |
if (!propInfo->propID) |
@@ -183,7 +187,7 @@ void V8CSSStyleDeclaration::namedPropertyQueryCustom(v8::Local<v8::String> v8Nam |
{ |
// NOTE: cssPropertyInfo lookups incur several mallocs. |
// Successful lookups have the same cost the first time, but are cached. |
- if (cssPropertyInfo(v8Name)) { |
+ if (cssPropertyInfo(v8Name, info.GetIsolate())) { |
v8SetReturnValueInt(info, 0); |
return; |
} |
@@ -196,7 +200,7 @@ void V8CSSStyleDeclaration::namedPropertyGetterCustom(v8::Local<v8::String> name |
return; |
// Search the style declaration. |
- CSSPropertyInfo* propInfo = cssPropertyInfo(name); |
+ CSSPropertyInfo* propInfo = cssPropertyInfo(name, info.GetIsolate()); |
// Do not handle non-property names. |
if (!propInfo) |
@@ -216,7 +220,7 @@ void V8CSSStyleDeclaration::namedPropertyGetterCustom(v8::Local<v8::String> name |
void V8CSSStyleDeclaration::namedPropertySetterCustom(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::PropertyCallbackInfo<v8::Value>& info) |
{ |
CSSStyleDeclaration* impl = V8CSSStyleDeclaration::toImpl(info.Holder()); |
- CSSPropertyInfo* propInfo = cssPropertyInfo(name); |
+ CSSPropertyInfo* propInfo = cssPropertyInfo(name, info.GetIsolate()); |
if (!propInfo) |
return; |