Skip to content
This repository was archived by the owner on Mar 19, 2021. It is now read-only.

Commit 8e1304a

Browse files
EdgarChenmoz-wptsync-bot
authored andcommitted
Add WPT for promise rejections event for cross-origin script
Differential Revision: https://phabricator.services.mozilla.com/D49143 bugzilla-url: https://bugzilla.mozilla.org/show_bug.cgi?id=1585068 gecko-commit: 303f2802f3e800b5fb7f3a3ac9437335378bce45 gecko-integration-branch: autoland gecko-reviewers: smaug
1 parent e2ee0f7 commit 8e1304a

File tree

2 files changed

+77
-7
lines changed

2 files changed

+77
-7
lines changed

html/webappapis/scripting/processing-model-2/unhandled-promise-rejections/disallow-crossorigin.html

Lines changed: 68 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,20 +10,82 @@
1010
<script>
1111
'use strict';
1212

13+
setup({
14+
allow_uncaught_exception: true
15+
});
16+
1317
(function() {
1418
var resolveLoaded;
1519
var loadedPromise = new Promise(function(resolve) { resolveLoaded = resolve; });
1620

17-
async_test(function(t) {
18-
addEventListener('unhandledrejection', t.unreached_func('unhandledrejection event should never be triggered'));
19-
addEventListener('rejectionhandled', t.unreached_func('rejectionhandled event should never be triggered'));
21+
promise_test(function(t) {
22+
var unreachedUnhandled = t.unreached_func('unhandledrejection event should never be triggered');
23+
var unreachedHandled = t.unreached_func('rejectionhandled event should never be triggered');
24+
25+
addEventListener('unhandledrejection', unreachedUnhandled);
26+
addEventListener('rejectionhandled', unreachedHandled);
27+
ensureCleanup(t, unreachedUnhandled, unreachedHandled);
28+
29+
return loadedPromise.then(t.step_func(function() {
30+
return new Promise(function(resolve) {
31+
t.step_timeout(function() {
32+
resolve();
33+
}, 1000);
34+
});
35+
}));
36+
}, 'Promise rejection event should be muted for cross-origin non-CORS script');
37+
38+
promise_test(function(t) {
39+
var unreachedUnhandled = t.unreached_func('unhandledrejection event should never be triggered');
40+
var unreachedHandled = t.unreached_func('rejectionhandled event should never be triggered');
2041

21-
loadedPromise.then(t.step_func(function() {
42+
addEventListener('unhandledrejection', unreachedUnhandled);
43+
addEventListener('rejectionhandled', unreachedHandled);
44+
ensureCleanup(t, unreachedUnhandled, unreachedHandled);
45+
46+
return new Promise(function(resolve) {
47+
handleRejectedPromise(new Promise(function(resolve, reject) { reject(42); }));
2248
t.step_timeout(function() {
23-
t.done();
49+
resolve();
2450
}, 1000);
51+
});
52+
}, 'Promise rejection should be muted if the rejected promise is handled in cross-origin non-CORS script');
53+
54+
promise_test(function(t) {
55+
var promise = new Promise(function(resolve, reject) { reject(42); });
56+
var resolveReceived;
57+
var eventPromise = new Promise(function(resolve) { resolveReceived = resolve; });
58+
var unhandled = t.step_func(function(e) {
59+
if (e.promise === promise) {
60+
handleRejectedPromise(promise);
61+
resolveReceived();
62+
}
63+
});
64+
var unreachedHandled = t.unreached_func('rejectionhandled event should never be triggered');
65+
66+
addEventListener('unhandledrejection', unhandled);
67+
addEventListener('rejectionhandled', unreachedHandled);
68+
ensureCleanup(t, unhandled, unreachedHandled);
69+
70+
return eventPromise.then(t.step_func(function() {
71+
return new Promise(function(resolve) {
72+
t.step_timeout(function() {
73+
resolve();
74+
}, 1000);
75+
});
2576
}));
26-
}, 'Promise rejection event should be muted for cross-origin non-CORS script');
77+
}, 'Promise rejection should be muted if the rejected promise is handled in unhandledrejection event handler in cross-origin non-CORS script');
78+
79+
function ensureCleanup(t, unhandled, handled) {
80+
t.add_cleanup(function() {
81+
if (unhandled) {
82+
removeEventListener('unhandledrejection', unhandled);
83+
}
84+
if (handled) {
85+
removeEventListener('rejectionhandled', handled);
86+
}
87+
});
88+
}
2789

2890
var scriptEl = document.createElement('script');
2991
scriptEl.src = CROSSDOMAIN + 'support/promise-access-control.py?allow=false';

html/webappapis/scripting/processing-model-2/unhandled-promise-rejections/support/promise-access-control.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,14 @@ def main(request, response):
55
if allow != "false":
66
headers.append(("Access-Control-Allow-Origin", "*"))
77

8-
body = "new Promise(function(resolve, reject) { reject(42); })"
8+
body = """
9+
function handleRejectedPromise(promise) {
10+
promise.catch(() => {});
11+
}
12+
13+
(function() {
14+
new Promise(function(resolve, reject) { reject(42); });
15+
})();
16+
"""
917

1018
return headers, body

0 commit comments

Comments
 (0)