Index: third_party/WebKit/Source/modules/csspaint/PaintWorkletGlobalScope.cpp |
diff --git a/third_party/WebKit/Source/modules/csspaint/PaintWorkletGlobalScope.cpp b/third_party/WebKit/Source/modules/csspaint/PaintWorkletGlobalScope.cpp |
index d109ce44b898fe112fc6a20069194f3d500ff0b4..eefcb39e774329b57463449d659f11bfc6c2dd13 100644 |
--- a/third_party/WebKit/Source/modules/csspaint/PaintWorkletGlobalScope.cpp |
+++ b/third_party/WebKit/Source/modules/csspaint/PaintWorkletGlobalScope.cpp |
@@ -6,6 +6,8 @@ |
#include "bindings/core/v8/V8BindingMacros.h" |
#include "bindings/core/v8/WorkerOrWorkletScriptController.h" |
+#include "core/CSSPropertyNames.h" |
+#include "core/css/parser/CSSVariableParser.h" |
#include "core/dom/ExceptionCode.h" |
#include "core/inspector/MainThreadDebugger.h" |
#include "modules/csspaint/CSSPaintDefinition.h" |
@@ -62,13 +64,29 @@ void PaintWorkletGlobalScope::registerPaint(const String& name, const ScriptValu |
if (!v8Call(constructor->Get(context, v8String(isolate, "inputProperties")), inputPropertiesValue)) |
return; |
+ Vector<CSSPropertyID> nativeInvalidationProperties; |
+ Vector<AtomicString> customInvalidationProperties; |
+ |
if (!isUndefinedOrNull(inputPropertiesValue)) { |
- toImplArray<Vector<String>>(inputPropertiesValue, 0, isolate, exceptionState); |
+ Vector<String> properties = toImplArray<Vector<String>>(inputPropertiesValue, 0, isolate, exceptionState); |
if (exceptionState.hadException()) |
return; |
- // TODO(ikilpatrick): Hook up invalidation based on these inputProperties. |
+ for (const auto& property : properties) { |
+ CSSPropertyID propertyID = cssPropertyID(property); |
+ if (propertyID == CSSPropertyInvalid) { |
chrishtr
2016/04/27 19:52:40
It seems weird that custom properties are identifi
ikilpatrick
2016/04/28 22:30:16
Right, not sure of the history here. Would have to
chrishtr
2016/04/29 00:24:58
Ok. Please ask him about it.
Timothy Loh
2016/04/29 01:20:25
I don't recall exactly. I think it was so that whi
|
+ if (CSSVariableParser::isValidVariableName(property)) |
+ customInvalidationProperties.append(property); |
+ } else { |
+ // Disallow prefixes. |
+ if (property[0] == '-') { |
+ addConsoleMessage(ConsoleMessage::create(JSMessageSource, WarningMessageLevel, property + " is a prefixed property which is not supported.")); |
+ } else { |
+ nativeInvalidationProperties.append(propertyID); |
+ } |
+ } |
+ } |
} |
v8::Local<v8::Value> prototypeValue; |
@@ -103,7 +121,7 @@ void PaintWorkletGlobalScope::registerPaint(const String& name, const ScriptValu |
v8::Local<v8::Function> paint = v8::Local<v8::Function>::Cast(paintValue); |
- CSSPaintDefinition* definition = CSSPaintDefinition::create(scriptController()->getScriptState(), constructor, paint); |
+ CSSPaintDefinition* definition = CSSPaintDefinition::create(scriptController()->getScriptState(), constructor, paint, nativeInvalidationProperties, customInvalidationProperties); |
m_paintDefinitions.set(name, definition); |
// Set the definition on any pending generators. |