Diff
Modified: trunk/Source/WebCore/ChangeLog (236265 => 236266)
--- trunk/Source/WebCore/ChangeLog 2018-09-20 17:07:03 UTC (rev 236265)
+++ trunk/Source/WebCore/ChangeLog 2018-09-20 17:31:43 UTC (rev 236266)
@@ -1,3 +1,34 @@
+2018-09-20 Justin Michaud <[email protected]>
+
+ JS bindings generator should support EnabledAtRuntime for static methods
+ https://bugs.webkit.org/show_bug.cgi?id=189729
+
+ Reviewed by Chris Dumez.
+
+ Add support for EnabledAtRuntime to static methods in the JS bindings
+ code generator.
+
+ * bindings/scripts/CodeGeneratorJS.pm:
+ (GenerateRuntimeEnableConditionalStringForExposed):
+ (GenerateRuntimeEnableConditionalString):
+ (GetRuntimeEnabledStaticProperties):
+ (GenerateConstructorHelperMethods):
+ * bindings/scripts/test/JS/JSTestGlobalObject.cpp:
+ (WebCore::JSTestGlobalObjectConstructor::initializeProperties):
+ (WebCore::JSTestGlobalObject::finishCreation):
+ (WebCore::jsTestGlobalObjectConstructorFunctionEnabledAtRuntimeOperationStaticBody):
+ (WebCore::jsTestGlobalObjectConstructorFunctionEnabledAtRuntimeOperationStatic):
+ * bindings/scripts/test/JS/JSTestObj.cpp:
+ (WebCore::JSTestObjConstructor::initializeProperties):
+ (WebCore::jsTestObjConstructorEnabledAtRuntimeAttributeStaticGetter):
+ (WebCore::jsTestObjConstructorEnabledAtRuntimeAttributeStatic):
+ (WebCore::setJSTestObjConstructorEnabledAtRuntimeAttributeStaticSetter):
+ (WebCore::setJSTestObjConstructorEnabledAtRuntimeAttributeStatic):
+ (WebCore::jsTestObjConstructorFunctionEnabledAtRuntimeOperationStaticBody):
+ (WebCore::jsTestObjConstructorFunctionEnabledAtRuntimeOperationStatic):
+ * bindings/scripts/test/TestGlobalObject.idl:
+ * bindings/scripts/test/TestObj.idl:
+
2018-09-20 Per Arne Vollan <[email protected]>
[WebVTT] Update the parser according to the new region syntax.
Modified: trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm (236265 => 236266)
--- trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm 2018-09-20 17:07:03 UTC (rev 236265)
+++ trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm 2018-09-20 17:31:43 UTC (rev 236266)
@@ -3641,7 +3641,7 @@
sub GenerateRuntimeEnableConditionalStringForExposed
{
- my ($interface, $context, $conjuncts) = @_;
+ my ($interface, $context, $conjuncts, $globalObjectIsParam) = @_;
assert("Must specify value for Exposed.") if $context->extendedAttributes->{Exposed} eq "VALUE_IS_MISSING";
@@ -3655,10 +3655,12 @@
$exposed = @$exposed[0];
}
+ my $globalObjectPtr = $globalObjectIsParam ? "&globalObject" : "globalObject()";
+
if ($exposed eq "Window") {
- push(@$conjuncts, "jsCast<JSDOMGlobalObject*>(globalObject())->scriptExecutionContext()->isDocument()");
+ push(@$conjuncts, "jsCast<JSDOMGlobalObject*>(" . $globalObjectPtr . ")->scriptExecutionContext()->isDocument()");
} elsif ($exposed eq "Worker") {
- push(@$conjuncts, "jsCast<JSDOMGlobalObject*>(globalObject())->scriptExecutionContext()->isWorkerGlobalScope()");
+ push(@$conjuncts, "jsCast<JSDOMGlobalObject*>(" . $globalObjectPtr . ")->scriptExecutionContext()->isWorkerGlobalScope()");
} else {
assert("Unrecognized value '" . Dumper($context->extendedAttributes->{Exposed}) . "' for the Exposed extended attribute on '" . ref($context) . "'.");
}
@@ -3671,15 +3673,17 @@
# (e.g. IDLInterface, IDLAttribute, IDLOperation, IDLIterable, etc.)
sub GenerateRuntimeEnableConditionalString
{
- my ($interface, $context) = @_;
+ my ($interface, $context, $globalObjectIsParam) = @_;
my @conjuncts;
+ my $globalObjectPtr = $globalObjectIsParam ? "&globalObject" : "globalObject()";
if ($context->extendedAttributes->{SecureContext}) {
AddToImplIncludes("ScriptExecutionContext.h");
if ($context->extendedAttributes->{ContextHasServiceWorkerScheme}) {
- push(@conjuncts, "(jsCast<JSDOMGlobalObject*>(globalObject())->scriptExecutionContext()->isSecureContext() || jsCast<JSDOMGlobalObject*>(globalObject())->scriptExecutionContext()->hasServiceWorkerScheme())");
+ push(@conjuncts, "(jsCast<JSDOMGlobalObject*>(" . $globalObjectPtr . ")->scriptExecutionContext()->isSecureContext()"
+ . "|| jsCast<JSDOMGlobalObject*>(" . $globalObjectPtr . ")->scriptExecutionContext()->hasServiceWorkerScheme())");
} else {
push(@conjuncts, "jsCast<JSDOMGlobalObject*>(globalObject())->scriptExecutionContext()->isSecureContext()");
}
@@ -3687,7 +3691,7 @@
if ($context->extendedAttributes->{ContextHasServiceWorkerScheme}) {
AddToImplIncludes("ScriptExecutionContext.h");
- push(@conjuncts, "jsCast<JSDOMGlobalObject*>(globalObject())->scriptExecutionContext()->hasServiceWorkerScheme()");
+ push(@conjuncts, "jsCast<JSDOMGlobalObject*>(" . $globalObjectPtr . ")->scriptExecutionContext()->hasServiceWorkerScheme()");
}
}
@@ -3713,7 +3717,7 @@
my @flags = split(/&/, $context->extendedAttributes->{EnabledBySetting});
foreach my $flag (@flags) {
- push(@conjuncts, "downcast<Document>(jsCast<JSDOMGlobalObject*>(globalObject())->scriptExecutionContext())->settings()." . ToMethodName($flag) . "Enabled()");
+ push(@conjuncts, "downcast<Document>(jsCast<JSDOMGlobalObject*>(" . $globalObjectPtr . ")->scriptExecutionContext())->settings()." . ToMethodName($flag) . "Enabled()");
}
}
@@ -7185,6 +7189,43 @@
return 0;
}
+sub GetRuntimeEnabledStaticProperties
+{
+ my ($interface) = @_;
+
+ my @runtimeEnabledProperties = ();
+
+ my @attributes = @{$interface->attributes};
+ push(@attributes, @{$interface->mapLike->attributes}) if $interface->mapLike;
+
+ foreach my $attribute (@attributes) {
+ next if AttributeShouldBeOnInstance($interface, $attribute) != 0;
+ next if not $attribute->isStatic;
+
+ if (NeedsRuntimeCheck($interface, $attribute)) {
+ push(@runtimeEnabledProperties, $attribute);
+ }
+ }
+
+ my @operations = @{$interface->operations};
+ push(@operations, @{$interface->iterable->operations}) if IsKeyValueIterableInterface($interface);
+ push(@operations, @{$interface->mapLike->operations}) if $interface->mapLike;
+ push(@operations, @{$interface->serializable->operations}) if $interface->serializable;
+ foreach my $operation (@operations) {
+ next if ($operation->extendedAttributes->{PrivateIdentifier} and not $operation->extendedAttributes->{PublicIdentifier});
+ next if $operation->{overloadIndex} && $operation->{overloadIndex} > 1;
+ next if OperationShouldBeOnInstance($interface, $operation) != 0;
+ next if $operation->name eq "[Symbol.Iterator]";
+ next if not $operation->isStatic;
+
+ if (NeedsRuntimeCheck($interface, $operation)) {
+ push(@runtimeEnabledProperties, $operation);
+ }
+ }
+
+ return @runtimeEnabledProperties;
+}
+
sub GenerateConstructorHelperMethods
{
my ($outputArray, $className, $protoClassName, $visibleInterfaceName, $interface, $generatingNamedConstructor) = @_;
@@ -7244,6 +7285,21 @@
}
push(@$outputArray, " reifyStaticProperties(vm, ${classForThis}, ${className}ConstructorTableValues, *this);\n") if ConstructorHasProperties($interface);
+ my @runtimeEnabledProperties = GetRuntimeEnabledStaticProperties($interface);
+
+ foreach my $operationOrAttribute (@runtimeEnabledProperties) {
+ my $conditionalString = $codeGenerator->GenerateConditionalString($operationOrAttribute);
+ push(@$outputArray, "#if ${conditionalString}\n") if $conditionalString;
+ my $runtimeEnableConditionalString = GenerateRuntimeEnableConditionalString($interface, $operationOrAttribute, "true");
+ my $name = $operationOrAttribute->name;
+ push(@$outputArray, " if (!${runtimeEnableConditionalString}) {\n");
+ push(@$outputArray, " auto propertyName = Identifier::fromString(&vm, reinterpret_cast<const LChar*>(\"$name\"), strlen(\"$name\"));\n");
+ push(@$outputArray, " VM::DeletePropertyModeScope scope(vm, VM::DeletePropertyMode::IgnoreConfigurable);\n");
+ push(@$outputArray, " JSObject::deleteProperty(this, globalObject.globalExec(), propertyName);\n");
+ push(@$outputArray, " }\n");
+ push(@$outputArray, "#endif\n") if $conditionalString;
+ }
+
push(@$outputArray, "}\n\n");
if (IsJSBuiltinConstructor($interface)) {
Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestGlobalObject.cpp (236265 => 236266)
--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestGlobalObject.cpp 2018-09-20 17:07:03 UTC (rev 236265)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestGlobalObject.cpp 2018-09-20 17:31:43 UTC (rev 236266)
@@ -56,6 +56,9 @@
#if ENABLE(TEST_FEATURE)
JSC::EncodedJSValue JSC_HOST_CALL jsTestGlobalObjectInstanceFunctionEnabledAtRuntimeOperation(JSC::ExecState*);
#endif
+#if ENABLE(TEST_FEATURE)
+JSC::EncodedJSValue JSC_HOST_CALL jsTestGlobalObjectConstructorFunctionEnabledAtRuntimeOperationStatic(JSC::ExecState*);
+#endif
JSC::EncodedJSValue JSC_HOST_CALL jsTestGlobalObjectInstanceFunctionEnabledInSpecificWorld(JSC::ExecState*);
JSC::EncodedJSValue JSC_HOST_CALL jsTestGlobalObjectInstanceFunctionEnabledInSpecificWorldWhenRuntimeFeatureEnabled(JSC::ExecState*);
JSC::EncodedJSValue JSC_HOST_CALL jsTestGlobalObjectInstanceFunctionEnabledInSpecificWorldWhenRuntimeFeaturesEnabled(JSC::ExecState*);
@@ -122,6 +125,17 @@
};
static const HashTable JSTestGlobalObjectTable = { 4, 15, true, JSTestGlobalObject::info(), JSTestGlobalObjectTableValues, JSTestGlobalObjectTableIndex };
+/* Hash table for constructor */
+
+static const HashTableValue JSTestGlobalObjectConstructorTableValues[] =
+{
+#if ENABLE(TEST_FEATURE)
+ { "enabledAtRuntimeOperationStatic", static_cast<unsigned>(JSC::PropertyAttribute::Function), NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsTestGlobalObjectConstructorFunctionEnabledAtRuntimeOperationStatic), (intptr_t) (1) } },
+#else
+ { 0, 0, NoIntrinsic, { 0, 0 } },
+#endif
+};
+
template<> JSValue JSTestGlobalObjectConstructor::prototypeForStructure(JSC::VM& vm, const JSDOMGlobalObject& globalObject)
{
UNUSED_PARAM(vm);
@@ -133,6 +147,7 @@
putDirect(vm, vm.propertyNames->prototype, globalObject.getPrototypeDirect(vm), JSC::PropertyAttribute::DontDelete | JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontEnum);
putDirect(vm, vm.propertyNames->name, jsNontrivialString(&vm, String("TestGlobalObject"_s)), JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontEnum);
putDirect(vm, vm.propertyNames->length, jsNumber(0), JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontEnum);
+ reifyStaticProperties(vm, JSTestGlobalObject::info(), JSTestGlobalObjectConstructorTableValues, *this);
}
template<> const ClassInfo JSTestGlobalObjectConstructor::s_info = { "TestGlobalObject", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestGlobalObjectConstructor) };
@@ -177,6 +192,10 @@
if (RuntimeEnabledFeatures::sharedFeatures().testFeatureEnabled())
putDirectNativeFunction(vm, this, static_cast<JSVMClientData*>(vm.clientData)->builtinNames().enabledAtRuntimeOperationPublicName(), 1, jsTestGlobalObjectInstanceFunctionEnabledAtRuntimeOperation, NoIntrinsic, attributesForStructure(static_cast<unsigned>(JSC::PropertyAttribute::Function)));
#endif
+#if ENABLE(TEST_FEATURE)
+ if (RuntimeEnabledFeatures::sharedFeatures().testFeatureEnabled())
+ putDirectNativeFunction(vm, this, static_cast<JSVMClientData*>(vm.clientData)->builtinNames().enabledAtRuntimeOperationStaticPublicName(), 1, jsTestGlobalObjectConstructorFunctionEnabledAtRuntimeOperationStatic, NoIntrinsic, attributesForStructure(static_cast<unsigned>(JSC::PropertyAttribute::Function)));
+#endif
if (worldForDOMObject(*this).specificWorld())
putDirectNativeFunction(vm, this, static_cast<JSVMClientData*>(vm.clientData)->builtinNames().enabledInSpecificWorldPublicName(), 1, jsTestGlobalObjectInstanceFunctionEnabledInSpecificWorld, NoIntrinsic, attributesForStructure(static_cast<unsigned>(JSC::PropertyAttribute::Function)));
if ((worldForDOMObject(*this).specificWorld() && RuntimeEnabledFeatures::sharedFeatures().testFeatureEnabled()))
@@ -456,6 +475,26 @@
#endif
+#if ENABLE(TEST_FEATURE)
+static inline JSC::EncodedJSValue jsTestGlobalObjectConstructorFunctionEnabledAtRuntimeOperationStaticBody(JSC::ExecState* state, JSC::ThrowScope& throwScope)
+{
+ UNUSED_PARAM(state);
+ UNUSED_PARAM(throwScope);
+ if (UNLIKELY(state->argumentCount() < 1))
+ return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
+ auto testParam = convert<IDLLong>(*state, state->uncheckedArgument(0));
+ RETURN_IF_EXCEPTION(throwScope, encodedJSValue());
+ TestGlobalObject::enabledAtRuntimeOperationStatic(WTFMove(testParam));
+ return JSValue::encode(jsUndefined());
+}
+
+EncodedJSValue JSC_HOST_CALL jsTestGlobalObjectConstructorFunctionEnabledAtRuntimeOperationStatic(ExecState* state)
+{
+ return IDLOperation<JSTestGlobalObject>::callStatic<jsTestGlobalObjectConstructorFunctionEnabledAtRuntimeOperationStaticBody>(*state, "enabledAtRuntimeOperationStatic");
+}
+
+#endif
+
static inline JSC::EncodedJSValue jsTestGlobalObjectInstanceFunctionEnabledInSpecificWorldBody(JSC::ExecState* state, typename IDLOperation<JSTestGlobalObject>::ClassParameter castedThis, JSC::ThrowScope& throwScope)
{
UNUSED_PARAM(state);
Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp (236265 => 236266)
--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp 2018-09-20 17:07:03 UTC (rev 236265)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp 2018-09-20 17:31:43 UTC (rev 236266)
@@ -1419,6 +1419,9 @@
#if ENABLE(TEST_FEATURE)
JSC::EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionEnabledAtRuntimeOperation(JSC::ExecState*);
#endif
+#if ENABLE(TEST_FEATURE)
+JSC::EncodedJSValue JSC_HOST_CALL jsTestObjConstructorFunctionEnabledAtRuntimeOperationStatic(JSC::ExecState*);
+#endif
JSC::EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionEnabledInSpecificWorldWhenRuntimeFeatureEnabled(JSC::ExecState*);
JSC::EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionWorldSpecificMethod(JSC::ExecState*);
JSC::EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionCalculateSecretResult(JSC::ExecState*);
@@ -1685,6 +1688,10 @@
JSC::EncodedJSValue jsTestObjEnabledAtRuntimeAttribute(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
bool setJSTestObjEnabledAtRuntimeAttribute(JSC::ExecState*, JSC::EncodedJSValue, JSC::EncodedJSValue);
#endif
+#if ENABLE(TEST_FEATURE)
+JSC::EncodedJSValue jsTestObjConstructorEnabledAtRuntimeAttributeStatic(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
+bool setJSTestObjConstructorEnabledAtRuntimeAttributeStatic(JSC::ExecState*, JSC::EncodedJSValue, JSC::EncodedJSValue);
+#endif
JSC::EncodedJSValue jsTestObjTypedArrayAttr(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
bool setJSTestObjTypedArrayAttr(JSC::ExecState*, JSC::EncodedJSValue, JSC::EncodedJSValue);
JSC::EncodedJSValue jsTestObjCustomAttr(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
@@ -1879,6 +1886,16 @@
{ "staticReadOnlyLongAttr", static_cast<unsigned>(JSC::PropertyAttribute::ReadOnly), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjConstructorStaticReadOnlyLongAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
{ "staticStringAttr", static_cast<unsigned>(0), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjConstructorStaticStringAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjConstructorStaticStringAttr) } },
{ "TestSubObj", static_cast<unsigned>(JSC::PropertyAttribute::ReadOnly), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjConstructorTestSubObj), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
+#if ENABLE(TEST_FEATURE)
+ { "enabledAtRuntimeAttributeStatic", static_cast<unsigned>(0), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjConstructorEnabledAtRuntimeAttributeStatic), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjConstructorEnabledAtRuntimeAttributeStatic) } },
+#else
+ { 0, 0, NoIntrinsic, { 0, 0 } },
+#endif
+#if ENABLE(TEST_FEATURE)
+ { "enabledAtRuntimeOperationStatic", static_cast<unsigned>(JSC::PropertyAttribute::Function), NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsTestObjConstructorFunctionEnabledAtRuntimeOperationStatic), (intptr_t) (1) } },
+#else
+ { 0, 0, NoIntrinsic, { 0, 0 } },
+#endif
{ "nullableStringStaticMethod", static_cast<unsigned>(JSC::PropertyAttribute::Function), NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsTestObjConstructorFunctionNullableStringStaticMethod), (intptr_t) (0) } },
{ "staticMethodWithCallbackAndOptionalArg", static_cast<unsigned>(JSC::PropertyAttribute::Function), NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsTestObjConstructorFunctionStaticMethodWithCallbackAndOptionalArg), (intptr_t) (0) } },
{ "staticMethodWithCallbackArg", static_cast<unsigned>(JSC::PropertyAttribute::Function), NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsTestObjConstructorFunctionStaticMethodWithCallbackArg), (intptr_t) (1) } },
@@ -1945,6 +1962,20 @@
putDirect(vm, vm.propertyNames->name, jsNontrivialString(&vm, String("TestObject"_s)), JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontEnum);
putDirect(vm, vm.propertyNames->length, jsNumber(2), JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontEnum);
reifyStaticProperties(vm, JSTestObj::info(), JSTestObjConstructorTableValues, *this);
+#if ENABLE(TEST_FEATURE)
+ if (!RuntimeEnabledFeatures::sharedFeatures().testFeatureEnabled()) {
+ auto propertyName = Identifier::fromString(&vm, reinterpret_cast<const LChar*>("enabledAtRuntimeAttributeStatic"), strlen("enabledAtRuntimeAttributeStatic"));
+ VM::DeletePropertyModeScope scope(vm, VM::DeletePropertyMode::IgnoreConfigurable);
+ JSObject::deleteProperty(this, globalObject.globalExec(), propertyName);
+ }
+#endif
+#if ENABLE(TEST_FEATURE)
+ if (!RuntimeEnabledFeatures::sharedFeatures().testFeatureEnabled()) {
+ auto propertyName = Identifier::fromString(&vm, reinterpret_cast<const LChar*>("enabledAtRuntimeOperationStatic"), strlen("enabledAtRuntimeOperationStatic"));
+ VM::DeletePropertyModeScope scope(vm, VM::DeletePropertyMode::IgnoreConfigurable);
+ JSObject::deleteProperty(this, globalObject.globalExec(), propertyName);
+ }
+#endif
}
template<> const ClassInfo JSTestObjConstructor::s_info = { "TestObject", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestObjConstructor) };
@@ -3946,6 +3977,41 @@
#endif
+#if ENABLE(TEST_FEATURE)
+static inline JSValue jsTestObjConstructorEnabledAtRuntimeAttributeStaticGetter(ExecState& state, ThrowScope& throwScope)
+{
+ UNUSED_PARAM(throwScope);
+ UNUSED_PARAM(state);
+ JSValue result = toJS<IDLDOMString>(state, throwScope, TestObj::enabledAtRuntimeAttributeStatic());
+ return result;
+}
+
+EncodedJSValue jsTestObjConstructorEnabledAtRuntimeAttributeStatic(ExecState* state, EncodedJSValue thisValue, PropertyName)
+{
+ return IDLAttribute<JSTestObj>::getStatic<jsTestObjConstructorEnabledAtRuntimeAttributeStaticGetter>(*state, thisValue, "enabledAtRuntimeAttributeStatic");
+}
+
+#endif
+
+#if ENABLE(TEST_FEATURE)
+static inline bool setJSTestObjConstructorEnabledAtRuntimeAttributeStaticSetter(ExecState& state, JSValue value, ThrowScope& throwScope)
+{
+ UNUSED_PARAM(throwScope);
+ auto nativeValue = convert<IDLDOMString>(state, value);
+ RETURN_IF_EXCEPTION(throwScope, false);
+ AttributeSetter::call(state, throwScope, [&] {
+ return TestObj::setEnabledAtRuntimeAttributeStatic(WTFMove(nativeValue));
+ });
+ return true;
+}
+
+bool setJSTestObjConstructorEnabledAtRuntimeAttributeStatic(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
+{
+ return IDLAttribute<JSTestObj>::setStatic<setJSTestObjConstructorEnabledAtRuntimeAttributeStaticSetter>(*state, thisValue, encodedValue, "enabledAtRuntimeAttributeStatic");
+}
+
+#endif
+
static inline JSValue jsTestObjTypedArrayAttrGetter(ExecState& state, JSTestObj& thisObject, ThrowScope& throwScope)
{
UNUSED_PARAM(throwScope);
@@ -5263,6 +5329,26 @@
#endif
+#if ENABLE(TEST_FEATURE)
+static inline JSC::EncodedJSValue jsTestObjConstructorFunctionEnabledAtRuntimeOperationStaticBody(JSC::ExecState* state, JSC::ThrowScope& throwScope)
+{
+ UNUSED_PARAM(state);
+ UNUSED_PARAM(throwScope);
+ if (UNLIKELY(state->argumentCount() < 1))
+ return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
+ auto testParam = convert<IDLLong>(*state, state->uncheckedArgument(0));
+ RETURN_IF_EXCEPTION(throwScope, encodedJSValue());
+ TestObj::enabledAtRuntimeOperationStatic(WTFMove(testParam));
+ return JSValue::encode(jsUndefined());
+}
+
+EncodedJSValue JSC_HOST_CALL jsTestObjConstructorFunctionEnabledAtRuntimeOperationStatic(ExecState* state)
+{
+ return IDLOperation<JSTestObj>::callStatic<jsTestObjConstructorFunctionEnabledAtRuntimeOperationStaticBody>(*state, "enabledAtRuntimeOperationStatic");
+}
+
+#endif
+
static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionEnabledInSpecificWorldWhenRuntimeFeatureEnabledBody(JSC::ExecState* state, typename IDLOperation<JSTestObj>::ClassParameter castedThis, JSC::ThrowScope& throwScope)
{
UNUSED_PARAM(state);
Modified: trunk/Source/WebCore/bindings/scripts/test/TestGlobalObject.idl (236265 => 236266)
--- trunk/Source/WebCore/bindings/scripts/test/TestGlobalObject.idl 2018-09-20 17:07:03 UTC (rev 236265)
+++ trunk/Source/WebCore/bindings/scripts/test/TestGlobalObject.idl 2018-09-20 17:31:43 UTC (rev 236266)
@@ -34,6 +34,7 @@
void regularOperation(DOMString testParam);
[Conditional=TEST_FEATURE, EnabledAtRuntime=TestFeature] void enabledAtRuntimeOperation(DOMString testParam);
[Conditional=TEST_FEATURE, EnabledAtRuntime=TestFeature] void enabledAtRuntimeOperation(long testParam);
+ [Conditional=TEST_FEATURE, EnabledAtRuntime=TestFeature] static void enabledAtRuntimeOperationStatic(long testParam);
[EnabledForWorld=specificWorld] void enabledInSpecificWorld(long testParam);
Modified: trunk/Source/WebCore/bindings/scripts/test/TestObj.idl (236265 => 236266)
--- trunk/Source/WebCore/bindings/scripts/test/TestObj.idl 2018-09-20 17:07:03 UTC (rev 236265)
+++ trunk/Source/WebCore/bindings/scripts/test/TestObj.idl 2018-09-20 17:31:43 UTC (rev 236266)
@@ -110,6 +110,8 @@
[Conditional=TEST_FEATURE, EnabledAtRuntime=TestFeature&TestFeature1] attribute DOMString enabledAtRuntimeAttribute;
[Conditional=TEST_FEATURE, EnabledAtRuntime=TestFeature] void enabledAtRuntimeOperation(DOMString testParam);
[Conditional=TEST_FEATURE, EnabledAtRuntime=TestFeature] void enabledAtRuntimeOperation(long testParam);
+ [Conditional=TEST_FEATURE, EnabledAtRuntime=TestFeature] static void enabledAtRuntimeOperationStatic(long testParam);
+ [Conditional=TEST_FEATURE, EnabledAtRuntime=TestFeature] static attribute DOMString enabledAtRuntimeAttributeStatic;
[EnabledForWorld=someWorld, EnabledAtRuntime=TestFeature] void enabledInSpecificWorldWhenRuntimeFeatureEnabled(long testParam);
[EnabledForWorld=someWorld] void worldSpecificMethod(long testParam);
@@ -273,7 +275,7 @@
[CachedAttribute] readonly attribute any cachedAttribute1;
[CachedAttribute] readonly attribute any cachedAttribute2;
-
+
attribute any anyAttribute;
attribute object objectAttribute;
@@ -397,7 +399,7 @@
readonly attribute Promise<void> testReadOnlyVoidPromiseAttribute;
readonly attribute Promise<TestNode> testReadOnlyPromiseAttribute;
-
+
// Promise function
Promise<void> testPromiseFunction();
Promise<void> testPromiseFunctionWithFloatArgument(float a);
@@ -431,7 +433,7 @@
serializer = {create, readOnlyStringAttr, enumAttr, longAttr};
void bufferSourceParameter(BufferSource data);
-
+
legacycaller void legacyCallerNamed(long param);
legacycaller long (DOMString param);
legacycaller void ();