diff --git a/dom/promise/PromiseCallback.cpp b/dom/promise/PromiseCallback.cpp index d3f9ca72fad9..50dbff091260 100644 --- a/dom/promise/PromiseCallback.cpp +++ b/dom/promise/PromiseCallback.cpp @@ -203,13 +203,13 @@ WrapperPromiseCallback::Call(JSContext* aCx, ErrorResult rv; - // PromiseReactionTask step 6 + // If invoking callback threw an exception, run resolver's reject with the + // thrown exception as argument and the synchronous flag set. JS::Rooted retValue(aCx); mCallback->Call(value, &retValue, rv, CallbackObject::eRethrowExceptions); rv.WouldReportJSException(); - // PromiseReactionTask step 7 if (rv.Failed() && rv.IsJSException()) { JS::Rooted value(aCx); rv.StealJSException(aCx, &value); @@ -219,7 +219,7 @@ WrapperPromiseCallback::Call(JSContext* aCx, return; } - mNextPromise->RejectInternal(aCx, value); + mNextPromise->RejectInternal(aCx, value, Promise::SyncTask); return; } @@ -284,13 +284,14 @@ WrapperPromiseCallback::Call(JSContext* aCx, } } - // Otherwise, run resolver's resolve with value. + // Otherwise, run resolver's resolve with value and the synchronous flag + // set. if (!JS_WrapValue(aCx, &retValue)) { NS_WARNING("Failed to wrap value into the right compartment."); return; } - mNextPromise->ResolveInternal(aCx, retValue); + mNextPromise->ResolveInternal(aCx, retValue, Promise::SyncTask); } // NativePromiseCallback diff --git a/dom/promise/tests/test_promise.html b/dom/promise/tests/test_promise.html index 2b4f52be5184..4d562affd827 100644 --- a/dom/promise/tests/test_promise.html +++ b/dom/promise/tests/test_promise.html @@ -674,45 +674,6 @@ function promiseTestAsyncThenableResolution() }); } -// Bug 1062323 -function promiseWrapperAsyncResolution() -{ - var p = new Promise(function(resolve, reject){ - resolve(); - }); - - var results = []; - var q = p.then(function () { - results.push("1-1"); - }).then(function () { - results.push("1-2"); - }).then(function () { - results.push("1-3"); - }); - - var r = p.then(function () { - results.push("2-1"); - }).then(function () { - results.push("2-2"); - }).then(function () { - results.push("2-3"); - }); - - Promise.all([q, r]).then(function() { - var match = results[0] == "1-1" && - results[1] == "2-1" && - results[2] == "1-2" && - results[3] == "2-2" && - results[4] == "1-3" && - results[5] == "2-3"; - ok(match, "Chained promises should resolve asynchronously."); - runTest(); - }, function() { - ok(false, "promiseWrapperAsyncResolution: One of the promises failed."); - runTest(); - }); -} - var tests = [ promiseResolve, promiseReject, promiseException, promiseGC, promiseAsync, promiseDoubleThen, promiseThenException, @@ -745,7 +706,6 @@ var tests = [ promiseResolve, promiseReject, promiseResolvePromise, promiseResolveThenableCleanStack, promiseTestAsyncThenableResolution, - promiseWrapperAsyncResolution, ]; function runTest() {