| Index: Source/bindings/scripts/code_generator_v8.pm
|
| diff --git a/Source/bindings/scripts/code_generator_v8.pm b/Source/bindings/scripts/code_generator_v8.pm
|
| index 949a2262119f32bb250e87c8a1dc740f64289c6e..d0e432ec7f81e3f741c9e4cbb065247bbfd9e98a 100644
|
| --- a/Source/bindings/scripts/code_generator_v8.pm
|
| +++ b/Source/bindings/scripts/code_generator_v8.pm
|
| @@ -1426,6 +1426,7 @@ sub GenerateNormalAttributeGetterCallback
|
| $code .= " TRACE_EVENT_SET_SAMPLING_STATE(\"Blink\", \"DOMGetter\");\n";
|
| $code .= GenerateFeatureObservation($attrExt->{"MeasureAs"});
|
| $code .= GenerateDeprecationNotification($attrExt->{"DeprecateAs"});
|
| + $code .= GenerateAttrUsedAsNodeReceiverCheck($interface);
|
| if (HasActivityLogging($forMainWorldSuffix, $attrExt, "Getter")) {
|
| $code .= GenerateActivityLogging("Getter", $interface, "${attrName}");
|
| }
|
| @@ -1888,6 +1889,8 @@ sub GenerateNormalAttributeSetterCallback
|
| $code .= " TRACE_EVENT_SET_SAMPLING_STATE(\"Blink\", \"DOMSetter\");\n";
|
| $code .= GenerateFeatureObservation($attrExt->{"MeasureAs"});
|
| $code .= GenerateDeprecationNotification($attrExt->{"DeprecateAs"});
|
| + $code .= GenerateAttrUsedAsNodeReceiverCheck($interface);
|
| + $code .= GenerateAttrUsedAsNodeParameterCheckForSetter($attribute->type);
|
| if (HasActivityLogging($forMainWorldSuffix, $attrExt, "Setter")) {
|
| $code .= GenerateActivityLogging("Setter", $interface, "${attrName}");
|
| }
|
| @@ -2257,6 +2260,62 @@ sub GenerateFunctionParametersCheck
|
| return ($numMandatoryParams, join(" || ", @orExpression));
|
| }
|
|
|
| +sub GenerateAttrUsedAsNodeReceiverCheck
|
| +{
|
| + my $interface = shift;
|
| +
|
| + if ($interface->name eq "Node") {
|
| + AddToImplIncludes("core/frame/UseCounter.h");
|
| + AddToImplIncludes("V8Attr.h");
|
| + return <<END;
|
| + if (V8DOMWrapper::isWrapperOfType(info.Holder(), &V8Attr::wrapperTypeInfo))
|
| + UseCounter::count(activeExecutionContext(), UseCounter::AttrUsedAsNodeReceiver);
|
| +END
|
| + }
|
| +
|
| + return "";
|
| +}
|
| +
|
| +sub GenerateAttrUsedAsNodeParameterCheck
|
| +{
|
| + my $function = shift;
|
| +
|
| + my $code = "";
|
| + my $paramIndex = 0;
|
| +
|
| + foreach my $parameter (@{$function->parameters}) {
|
| + if ($parameter->type eq "Node") {
|
| + $code .= " if (V8DOMWrapper::isWrapperOfType(info[$paramIndex], &V8Attr::wrapperTypeInfo))\n";
|
| + $code .= " UseCounter::count(activeExecutionContext(), UseCounter::AttrUsedAsNodeParameter);\n";
|
| + }
|
| +
|
| + $paramIndex += 1;
|
| + }
|
| +
|
| + if ($code) {
|
| + AddToImplIncludes("core/frame/UseCounter.h");
|
| + AddToImplIncludes("V8Attr.h");
|
| + }
|
| +
|
| + return $code;
|
| +}
|
| +
|
| +sub GenerateAttrUsedAsNodeParameterCheckForSetter
|
| +{
|
| + my $type = shift;
|
| +
|
| + if ($type eq "Node") {
|
| + AddToImplIncludes("core/frame/UseCounter.h");
|
| + AddToImplIncludes("V8Attr.h");
|
| + return <<END;
|
| + if (V8DOMWrapper::isWrapperOfType(jsValue, &V8Attr::wrapperTypeInfo))
|
| + UseCounter::count(activeExecutionContext(), UseCounter::AttrUsedAsNodeParameter);
|
| +END
|
| + }
|
| +
|
| + return "";
|
| +}
|
| +
|
| sub GenerateOverloadedFunction
|
| {
|
| my $function = shift;
|
| @@ -2284,8 +2343,10 @@ static void ${name}Method${forMainWorldSuffix}(const v8::FunctionCallbackInfo<v8
|
| END
|
| $code .= GenerateFeatureObservation($function->extendedAttributes->{"MeasureAs"});
|
| $code .= GenerateDeprecationNotification($function->extendedAttributes->{"DeprecateAs"});
|
| + $code .= GenerateAttrUsedAsNodeReceiverCheck($interface);
|
|
|
| foreach my $overload (@{$function->{overloads}}) {
|
| + $code .= GenerateAttrUsedAsNodeParameterCheck($overload);
|
| my ($numMandatoryParams, $parametersCheck) = GenerateFunctionParametersCheck($overload);
|
| $leastNumMandatoryParams = $numMandatoryParams if ($numMandatoryParams < $leastNumMandatoryParams);
|
| $code .= " if ($parametersCheck) {\n";
|
| @@ -2339,6 +2400,8 @@ END
|
| $code .= " TRACE_EVENT_SET_SAMPLING_STATE(\"Blink\", \"DOMMethod\");\n";
|
| $code .= GenerateFeatureObservation($function->extendedAttributes->{"MeasureAs"});
|
| $code .= GenerateDeprecationNotification($function->extendedAttributes->{"DeprecateAs"});
|
| + $code .= GenerateAttrUsedAsNodeReceiverCheck($interface);
|
| + $code .= GenerateAttrUsedAsNodeParameterCheck($function);
|
| if (HasActivityLogging($forMainWorldSuffix, $function->extendedAttributes, "Access")) {
|
| $code .= GenerateActivityLogging("Method", $interface, "${name}");
|
| }
|
| @@ -3735,6 +3798,7 @@ sub GenerateImplementationIndexedPropertySetter
|
|
|
| my $code = "static void indexedPropertySetter(uint32_t index, v8::Local<v8::Value> jsValue, const v8::PropertyCallbackInfo<v8::Value>& info)\n";
|
| $code .= "{\n";
|
| + $code .= GenerateAttrUsedAsNodeParameterCheckForSetter($type);
|
|
|
| my $extraArguments = "";
|
| if ($raisesExceptions || IsIntegerType($type)) {
|
| @@ -4045,6 +4109,7 @@ sub GenerateImplementationNamedPropertySetter
|
|
|
| my $code = "static void namedPropertySetter(v8::Local<v8::String> name, v8::Local<v8::Value> jsValue, const v8::PropertyCallbackInfo<v8::Value>& info)\n";
|
| $code .= "{\n";
|
| + $code .= GenerateAttrUsedAsNodeParameterCheckForSetter($type);
|
| if (!$namedSetterFunction->extendedAttributes->{"OverrideBuiltins"}) {
|
| $code .= " if (!info.Holder()->GetRealNamedPropertyInPrototypeChain(name).IsEmpty())\n";
|
| $code .= " return;\n";
|
|
|