tor-browser

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

event-handler-idl-attribute-realm.window.js (2498B)


      1 setup({ allow_uncaught_exception: true });
      2 
      3 test(t => {
      4  document.body.append(document.createElement("iframe"), document.createElement("iframe"));
      5  t.add_cleanup(() => document.querySelectorAll("iframe").forEach(iframe => iframe.remove()));
      6 
      7  const frame0Document = frames[0].document.documentElement;
      8  const frame1Body = frames[1].document.body;
      9 
     10  frame1Body.setAttribute("onclick", "void(0)");
     11  frame0Document.appendChild(frame1Body);
     12  const get = Object.getOwnPropertyDescriptor(HTMLElement.prototype, "onclick").get;
     13  const f = get.call(frame1Body);
     14 
     15  assert_equals(f.constructor, frames[0].Function, "The function must be created in the element's document's global");
     16 }, "Event handler IDL attributes must return a function from the element's document's realm");
     17 
     18 test(t => {
     19  document.body.append(document.createElement("iframe"), document.createElement("iframe"));
     20  t.add_cleanup(() => document.querySelectorAll("iframe").forEach(iframe => iframe.remove()));
     21 
     22  const log = [];
     23  window.addEventListener("error", t.step_func(e => {
     24    log.push("error event in top / error object realm = " + getErrorRealm(e));
     25  }, { signal: t.get_signal() }));
     26  frames[0].addEventListener("error", t.step_func(e => {
     27    log.push("error event in frames[0] / error object realm = " + getErrorRealm(e));
     28  }, { signal: t.get_signal() }));
     29  frames[1].addEventListener("error", t.step_func(e => {
     30    log.push("error event in frames[1] / error object realm = " + getErrorRealm(e));
     31  }, { signal: t.get_signal() }));
     32 
     33  const frame0Document = frames[0].document.documentElement;
     34  const frame1Body = frames[1].document.body;
     35 
     36  frame1Body.setAttribute("onmousedown", "1 *-* 'syntax error'");
     37  frame0Document.appendChild(frame1Body);
     38 
     39  assert_array_equals(log, [], "No error events must be fired before calling the getter");
     40 
     41  const get = Object.getOwnPropertyDescriptor(HTMLElement.prototype, "onmousedown").get;
     42  const f = get.call(frame1Body);
     43 
     44  assert_array_equals(log, ["error event in frames[0] / error object realm = frames[0]"]);
     45  assert_equals(f, null, "The returned value must be null");
     46 }, "Event handler IDL attribute compilation errors must be fired on the element's document's global");
     47 
     48 function getErrorRealm(event) {
     49  const { error } = event;
     50 
     51  if (error instanceof SyntaxError) {
     52    return "top";
     53  } if (error instanceof frames[0].SyntaxError) {
     54    return "frames[0]";
     55  } if (error instanceof frames[1].SyntaxError) {
     56    return "frames[1]";
     57  }
     58  return "unknown";
     59 }