소스 검색

LibWeb: Add missing promise rejection in `execute_async_script`

stelar7 2 년 전
부모
커밋
434d95ef55
1개의 변경된 파일6개의 추가작업 그리고 2개의 파일을 삭제
  1. 6 2
      Userland/Libraries/LibWeb/WebDriver/ExecuteScript.cpp

+ 6 - 2
Userland/Libraries/LibWeb/WebDriver/ExecuteScript.cpp

@@ -358,8 +358,10 @@ ExecuteScriptResultSerialized execute_async_script(Web::Page& page, DeprecatedSt
         // NOTE: Prior revisions of this specification did not recognize the return value of the provided script.
         //       In order to preserve legacy behavior, the return value only influences the command if it is a
         //       "thenable"  object or if determining this produces an exception.
-        if (script_result.is_throw_completion())
+        if (script_result.is_throw_completion()) {
+            promise->reject(*script_result.throw_completion().value());
             return;
+        }
 
         // 5. If Type(scriptResult.[[Value]]) is not Object, then abort these steps.
         if (!script_result.value().is_object())
@@ -369,8 +371,10 @@ ExecuteScriptResultSerialized execute_async_script(Web::Page& page, DeprecatedSt
         auto then = script_result.value().as_object().get(vm.names.then);
 
         // 7. If then.[[Type]] is not normal, then reject promise with value then.[[Value]], and abort these steps.
-        if (then.is_throw_completion())
+        if (then.is_throw_completion()) {
+            promise->reject(*then.throw_completion().value());
             return;
+        }
 
         // 8. If IsCallable(then.[[Type]]) is false, then abort these steps.
         if (!then.value().is_function())