tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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>