diff --git a/components/script/dom/testbinding.rs b/components/script/dom/testbinding.rs index 26a79a029ff..c318badc1ba 100644 --- a/components/script/dom/testbinding.rs +++ b/components/script/dom/testbinding.rs @@ -660,6 +660,14 @@ impl TestBindingMethods for TestBinding { Promise::Reject(self.global().r(), cx, v) } + fn PromiseResolveNative(&self, cx: *mut JSContext, p: &Promise, v: HandleValue) { + p.maybe_resolve(cx, v); + } + + fn PromiseRejectNative(&self, cx: *mut JSContext, p: &Promise, v: HandleValue) { + p.maybe_reject(cx, v); + } + #[allow(unrooted_must_root)] fn PromiseNativeHandler(&self, resolve: Option>, diff --git a/components/script/dom/webidls/TestBinding.webidl b/components/script/dom/webidls/TestBinding.webidl index 3ecfaf4cdef..65c68514895 100644 --- a/components/script/dom/webidls/TestBinding.webidl +++ b/components/script/dom/webidls/TestBinding.webidl @@ -516,6 +516,8 @@ interface TestBinding { void acceptPromise(Promise string); void acceptNullablePromise(Promise? string); Promise promiseNativeHandler(SimpleCallback? resolve, SimpleCallback? reject); + void promiseResolveNative(Promise p, any value); + void promiseRejectNative(Promise p, any value); void panic(); }; diff --git a/tests/wpt/mozilla/tests/mozilla/promise.html b/tests/wpt/mozilla/tests/mozilla/promise.html index db86bcce106..9e5175ec57a 100644 --- a/tests/wpt/mozilla/tests/mozilla/promise.html +++ b/tests/wpt/mozilla/tests/mozilla/promise.html @@ -23,18 +23,25 @@ promise_test(function(test) { var t = new TestBinding; + var resolved; var p = t.promiseNativeHandler(function(v) { - assert_equals(v, 'success'); + resolved = v; }, null); - return Promise.resolve('success').then(p); + t.promiseResolveNative(p, 'success'); + return p.then(function() { + assert_equals(resolved, 'success') + }); }, 'Native resolve callback gets argument'); promise_test(function(test) { var t = new TestBinding; + var rejected; var p = t.promiseNativeHandler(null, function(v) { - assert_equals(v, 'success'); + rejected = v; }); - p.then(test.unreached_func()); - return Promise.resolve('success').then(p); - }, 'Native resolve callback gets argument'); + t.promiseRejectNative(p, 'success'); + return p.catch(function() { + assert_equals(rejected, 'success') + }); + }, 'Native reject callback gets argument');