imported/w3c/web-platform-tests/html/semantics/scripting-1/the-script-element/module...
authorutatane.tea@gmail.com <utatane.tea@gmail.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 26 Jan 2018 02:42:14 +0000 (02:42 +0000)
committerutatane.tea@gmail.com <utatane.tea@gmail.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 26 Jan 2018 02:42:14 +0000 (02:42 +0000)
https://bugs.webkit.org/show_bug.cgi?id=181980

Reviewed by Ryosuke Niwa.

LayoutTests/imported/w3c:

* web-platform-tests/html/semantics/scripting-1/the-script-element/module/dynamic-import/dynamic-imports-script-error-expected.txt:
* web-platform-tests/html/semantics/scripting-1/the-script-element/module/errorhandling-expected.txt: Added.

Source/JavaScriptCore:

We accidentally failed to propagate errored promise in instantiate and satify phase if entry.{instantiate,satisfy}
promises are set. Since we just returned `entry`, it becomes succeeded promise even if the dependent fetch, instantiate,
and satisfy promises are failed. This patch fixes error propagation by returning `entry.instantiate` and `entry.satisfy`
correctly.

* builtins/ModuleLoaderPrototype.js:
(requestInstantiate):
(requestSatisfy):

LayoutTests:

* TestExpectations:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@227649 268f45cc-cd09-0410-ab3c-d52691b4dbfc

LayoutTests/ChangeLog
LayoutTests/TestExpectations
LayoutTests/imported/w3c/ChangeLog
LayoutTests/imported/w3c/web-platform-tests/html/semantics/scripting-1/the-script-element/module/dynamic-import/dynamic-imports-script-error-expected.txt
LayoutTests/imported/w3c/web-platform-tests/html/semantics/scripting-1/the-script-element/module/errorhandling-expected.txt [new file with mode: 0644]
Source/JavaScriptCore/ChangeLog
Source/JavaScriptCore/builtins/ModuleLoaderPrototype.js

index b8f1de7..94b6949 100644 (file)
@@ -1,3 +1,12 @@
+2018-01-25  Yusuke Suzuki  <utatane.tea@gmail.com>
+
+        imported/w3c/web-platform-tests/html/semantics/scripting-1/the-script-element/module/errorhandling.html crashes
+        https://bugs.webkit.org/show_bug.cgi?id=181980
+
+        Reviewed by Ryosuke Niwa.
+
+        * TestExpectations:
+
 2018-01-25  Jer Noble  <jer.noble@apple.com>
 
         Move ImageDecoderAVFObjC from using AVSampleBufferGenerator to AVAssetReaderOutput for parsing
index 18863b8..bfe0d30 100644 (file)
@@ -1404,8 +1404,6 @@ webkit.org/b/164539 http/tests/security/module-crossorigin-onerror-information.h
 
 webkit.org/b/165764 http/tests/misc/module-script-async.html [ Pass Timeout ]
 
-webkit.org/b/181980 imported/w3c/web-platform-tests/html/semantics/scripting-1/the-script-element/module/errorhandling.html [ Crash ]
-
 # After rebasing WPT, we should investigate deterministic error handling, which is the updated spec.
 imported/w3c/web-platform-tests/html/semantics/scripting-1/the-script-element/module/compilation-error-1.html [ Pass Failure ]
 imported/w3c/web-platform-tests/html/semantics/scripting-1/the-script-element/module/compilation-error-2.html [ Pass Failure ]
index d6b8603..c64fbce 100644 (file)
@@ -1,3 +1,13 @@
+2018-01-25  Yusuke Suzuki  <utatane.tea@gmail.com>
+
+        imported/w3c/web-platform-tests/html/semantics/scripting-1/the-script-element/module/errorhandling.html crashes
+        https://bugs.webkit.org/show_bug.cgi?id=181980
+
+        Reviewed by Ryosuke Niwa.
+
+        * web-platform-tests/html/semantics/scripting-1/the-script-element/module/dynamic-import/dynamic-imports-script-error-expected.txt:
+        * web-platform-tests/html/semantics/scripting-1/the-script-element/module/errorhandling-expected.txt: Added.
+
 2018-01-25  Chris Dumez  <cdumez@apple.com>
 
         Access to service workers / Cache API should be disabled in sandboxed frames without allow-same-origin flag
index 4626cc7..7986ad0 100644 (file)
@@ -1,13 +1,13 @@
 
 PASS import() must reject when there is a parse error 
-FAIL import() must reject with the same error object for each import when there is a parse error assert_throws: It must reject the second time function "function () { throw e }" threw object "TypeError: Type error" ("TypeError") expected object "SyntaxError" ("SyntaxError")
+PASS import() must reject with the same error object for each import when there is a parse error 
 PASS import() must reject when there is a bad module specifier 
 PASS import() must reject with different error objects for each import when there is a bad module specifier 
 PASS import() must reject when there is a bad module specifier in a dependency 
-FAIL import() must reject with the same error object for each import when there is a bad module specifier in a dependency assert_equals: The error objects must be equal expected object "TypeError: Type error" but got object "TypeError: Module specifier does not start with "/", "./", or "../"."
+PASS import() must reject with the same error object for each import when there is a bad module specifier in a dependency 
 PASS import() must reject when there is a instantiation error 
 PASS import() must reject with the same error object for each import when there is a instantiation error 
 PASS import() must reject when there is a evaluation error 
-FAIL import() must reject with the same error object for each import when there is a evaluation error assert_unreached: Should have rejected: It must reject the first time Reached unreachable code
+FAIL import() must reject with the same error object for each import when there is a evaluation error assert_unreached: Should have rejected: It must reject the second time Reached unreachable code
 PASS import()ing a module with an evaluation error must stop evaluation 
 
diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/scripting-1/the-script-element/module/errorhandling-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/scripting-1/the-script-element/module/errorhandling-expected.txt
new file mode 100644 (file)
index 0000000..a4dd25b
--- /dev/null
@@ -0,0 +1,15 @@
+CONSOLE MESSAGE: TypeError: 'text/plain' is not a valid JavaScript MIME type.
+CONSOLE MESSAGE: TypeError: 'text/plain' is not a valid JavaScript MIME type.
+CONSOLE MESSAGE: line 1: SyntaxError: No identifiers allowed directly after numeric literal
+CONSOLE MESSAGE: line 1: SyntaxError: No identifiers allowed directly after numeric literal
+CONSOLE MESSAGE: line 1: SyntaxError: No identifiers allowed directly after numeric literal
+CONSOLE MESSAGE: line 1: SyntaxError: No identifiers allowed directly after numeric literal
+html-script-module-errorHandling
+
+
+FAIL IFrame test: 'iframe_parseError_Root' assert_equals: Unexpected _errorReported value expected "error" but got ""
+PASS IFrame test: 'iframe_parseError_Dependent' 
+PASS IFrame test: 'iframe_parseError_DependentMultiple' 
+PASS External root module with non-script mimetype 
+PASS Module with imported non-script mimetype 
+
index 22ba298..693ef73 100644 (file)
@@ -1,3 +1,19 @@
+2018-01-25  Yusuke Suzuki  <utatane.tea@gmail.com>
+
+        imported/w3c/web-platform-tests/html/semantics/scripting-1/the-script-element/module/errorhandling.html crashes
+        https://bugs.webkit.org/show_bug.cgi?id=181980
+
+        Reviewed by Ryosuke Niwa.
+
+        We accidentally failed to propagate errored promise in instantiate and satify phase if entry.{instantiate,satisfy}
+        promises are set. Since we just returned `entry`, it becomes succeeded promise even if the dependent fetch, instantiate,
+        and satisfy promises are failed. This patch fixes error propagation by returning `entry.instantiate` and `entry.satisfy`
+        correctly.
+
+        * builtins/ModuleLoaderPrototype.js:
+        (requestInstantiate):
+        (requestSatisfy):
+
 2018-01-25  Mark Lam  <mark.lam@apple.com>
 
         Gardening: fix 32-bit build after r227643.
index 112dab1..ab457ca 100644 (file)
@@ -193,7 +193,7 @@ function requestInstantiate(entry, parameters, fetcher)
         // Now fetching request succeeds. Then even if instantiation fails, we should cache it.
         // Instantiation won't be retried.
         if (entry.instantiate)
-            return entry;
+            return entry.instantiate;
         entry.instantiate = instantiatePromise;
 
         var key = entry.key;
@@ -229,7 +229,7 @@ function requestSatisfy(entry, parameters, fetcher, visited)
     visited.@add(entry);
     var satisfyPromise = this.requestInstantiate(entry, parameters, fetcher).then((entry) => {
         if (entry.satisfy)
-            return entry;
+            return entry.satisfy;
 
         var depLoads = @newArrayWithSize(entry.dependencies.length);
         for (var i = 0, length = entry.dependencies.length; i < length; ++i) {