| Index: third_party/WebKit/Source/modules/csspaint/CSSPaintDefinition.cpp
|
| diff --git a/third_party/WebKit/Source/modules/csspaint/CSSPaintDefinition.cpp b/third_party/WebKit/Source/modules/csspaint/CSSPaintDefinition.cpp
|
| index a252f391b7f1ca66a8341c209607ef5971bf9532..bb8527f43798c813c3ecbcb333837990969a316a 100644
|
| --- a/third_party/WebKit/Source/modules/csspaint/CSSPaintDefinition.cpp
|
| +++ b/third_party/WebKit/Source/modules/csspaint/CSSPaintDefinition.cpp
|
| @@ -9,7 +9,9 @@
|
| #include "bindings/core/v8/V8BindingMacros.h"
|
| #include "bindings/core/v8/V8ObjectConstructor.h"
|
| #include "core/css/CSSComputedStyleDeclaration.h"
|
| +#include "core/css/CSSVariableData.h"
|
| #include "core/css/cssom/FilteredComputedStylePropertyMap.h"
|
| +#include "core/css/cssom/StyleValueFactory.h"
|
| #include "core/dom/ExecutionContext.h"
|
| #include "core/layout/LayoutObject.h"
|
| #include "modules/csspaint/PaintRenderingContext2D.h"
|
| @@ -66,9 +68,11 @@ CSSPaintDefinition::CSSPaintDefinition(
|
|
|
| CSSPaintDefinition::~CSSPaintDefinition() {}
|
|
|
| -PassRefPtr<Image> CSSPaintDefinition::paint(const LayoutObject& layoutObject,
|
| - const IntSize& size,
|
| - float zoom) {
|
| +PassRefPtr<Image> CSSPaintDefinition::paint(
|
| + const LayoutObject& layoutObject,
|
| + const IntSize& size,
|
| + float zoom,
|
| + const Vector<RefPtr<CSSVariableData>>& variableData) {
|
| const IntSize specifiedSize = getSpecifiedSize(size, zoom);
|
|
|
| ScriptState::Scope scope(m_scriptState.get());
|
| @@ -96,10 +100,26 @@ PassRefPtr<Image> CSSPaintDefinition::paint(const LayoutObject& layoutObject,
|
| m_nativeInvalidationProperties, m_customInvalidationProperties,
|
| layoutObject.node());
|
|
|
| + // Parse arguments.
|
| + CSSStyleValueVector paintArguments;
|
| + if (RuntimeEnabledFeatures::cssPaintAPIArgumentsEnabled()) {
|
| + if (variableData.size() != m_inputArgumentTypes.size()) {
|
| + return nullptr;
|
| + }
|
| + for (size_t i = 0; i < variableData.size(); ++i) {
|
| + const CSSValue* parsedValue =
|
| + variableData[i].get()->parseForSyntax(m_inputArgumentTypes[i]);
|
| + if (!parsedValue)
|
| + return nullptr;
|
| + paintArguments.appendVector(
|
| + StyleValueFactory::cssValueToStyleValueVector(*parsedValue));
|
| + }
|
| + }
|
| v8::Local<v8::Value> argv[] = {
|
| ToV8(renderingContext, m_scriptState->context()->Global(), isolate),
|
| ToV8(paintSize, m_scriptState->context()->Global(), isolate),
|
| - ToV8(styleMap, m_scriptState->context()->Global(), isolate)};
|
| + ToV8(styleMap, m_scriptState->context()->Global(), isolate),
|
| + ToV8(paintArguments, m_scriptState->context()->Global(), isolate)};
|
|
|
| v8::Local<v8::Function> paint = m_paint.newLocal(isolate);
|
|
|
| @@ -107,7 +127,7 @@ PassRefPtr<Image> CSSPaintDefinition::paint(const LayoutObject& layoutObject,
|
| block.SetVerbose(true);
|
|
|
| V8ScriptRunner::callFunction(paint, m_scriptState->getExecutionContext(),
|
| - instance, 3, argv, isolate);
|
| + instance, 4, argv, isolate);
|
|
|
| // The paint function may have produced an error, in which case produce an
|
| // invalid image.
|
|
|