From 885c6b6678a450f82b7becee3198b7ef350df3de Mon Sep 17 00:00:00 2001 From: Luke Wilde Date: Mon, 27 Jun 2022 19:56:06 +0100 Subject: [PATCH] LibWeb: Return instead of throwing on unknown enums in attribute setters I saw one site relying on this, where they are trying to set XHR.responseType to "text/plain", which is not a valid responseType. However, they also don't expect it to throw. The IDL spec special cases enumerations to make it return instead of throwing in this case. --- .../LibWeb/WrapperGenerator/IDLGenerators.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/Meta/Lagom/Tools/CodeGenerators/LibWeb/WrapperGenerator/IDLGenerators.cpp b/Meta/Lagom/Tools/CodeGenerators/LibWeb/WrapperGenerator/IDLGenerators.cpp index 389344d8cb..df97328603 100644 --- a/Meta/Lagom/Tools/CodeGenerators/LibWeb/WrapperGenerator/IDLGenerators.cpp +++ b/Meta/Lagom/Tools/CodeGenerators/LibWeb/WrapperGenerator/IDLGenerators.cpp @@ -605,10 +605,18 @@ static void generate_to_cpp(SourceGenerator& generator, ParameterType& parameter )~~~"); } - enum_generator.append(R"~~~( + // NOTE: Attribute setters return undefined instead of throwing when the string doesn't match an enum value. + if constexpr (!IsSame>) { + enum_generator.append(R"~~~( @else@ return vm.throw_completion(global_object, JS::ErrorType::InvalidEnumerationValue, @js_name.as_string@, "@parameter.type.name@"); )~~~"); + } else { + enum_generator.append(R"~~~( + @else@ + return JS::js_undefined(); +)~~~"); + } if (optional) { enum_generator.append(R"~~~(