disallow-crossorigin.html (3449B)
1 <!DOCTYPE html> 2 <meta charset="utf-8"> 3 <script src="/resources/testharness.js"></script> 4 <script src="/resources/testharnessreport.js"></script> 5 <script src="/cors/support.js?pipe=sub"></script> 6 <link rel="help" href="https://html.spec.whatwg.org/#unhandled-promise-rejections"> 7 <link rel="help" href="https://html.spec.whatwg.org/#muted-errors"> 8 9 <body> 10 <script> 11 'use strict'; 12 13 setup({ 14 allow_uncaught_exception: true 15 }); 16 17 (function() { 18 var resolveLoaded; 19 var loadedPromise = new Promise(function(resolve) { resolveLoaded = resolve; }); 20 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'); 41 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); })); 48 t.step_timeout(function() { 49 resolve(); 50 }, 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 }); 76 })); 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 } 89 90 var scriptEl = document.createElement('script'); 91 scriptEl.src = CROSSDOMAIN + 'support/promise-access-control.py?allow=false'; 92 scriptEl.onload = resolveLoaded; 93 document.body.appendChild(scriptEl); 94 }()); 95 </script> 96 </body>