tor-browser

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

put-forwards.html (4723B)


      1 <!doctype html>
      2 <meta charset="utf-8">
      3 <title>[PutForwards] behavior</title>
      4 <script src="/resources/testharness.js"></script>
      5 <script src="/resources/testharnessreport.js"></script>
      6 <link rel="author" title="Jens Widell" href="mailto:jl@opera.com">
      7 <link rel="help" href="https://webidl.spec.whatwg.org/#PutForwards">
      8 
      9 <script>
     10 test(() => {
     11  var getter_called = false;
     12  var element = document.createElement("div");
     13  var element_style = element.style;
     14  var descriptor = Object.getOwnPropertyDescriptor(HTMLElement.prototype, "style");
     15 
     16  Object.defineProperty(element, "style", {
     17    get: function () {
     18      getter_called = true;
     19      return element_style;
     20    },
     21    set: descriptor.set
     22  });
     23 
     24  element.style = "color: green";
     25 
     26  assert_true(getter_called, "Overridden getter should be called");
     27  assert_equals(element_style.color, "green", "Put forwarding still works");
     28 }, "Overriding getter of [PutForwards] attribute");
     29 
     30 test(() => {
     31  var setter_called = false;
     32  var element = document.createElement("div");
     33  var element_style = element.style;
     34  var descriptor = Object.getOwnPropertyDescriptor(CSSStyleDeclaration.prototype, "cssText");
     35 
     36  Object.defineProperty(element_style, "cssText", {
     37    get: descriptor.get,
     38    set: function (v) {
     39      setter_called = true;
     40      descriptor.set.call(this, v);
     41    }
     42  });
     43 
     44  element.style = "color: green";
     45 
     46  assert_true(setter_called, "Overridden setter should be called");
     47  assert_equals(element_style.color, "green", "Put forwarding still works");
     48 }, "Overriding setter of [PutForwards] target attribute");
     49 
     50 test(() => {
     51  var element = document.createElement("div");
     52  var element_style = element.style;
     53  var fake_style = { cssText: "original" };
     54  var descriptor = Object.getOwnPropertyDescriptor(HTMLElement.prototype, "style");
     55 
     56  Object.defineProperty(element, "style", {
     57    get: function () {
     58      return fake_style;
     59    },
     60    set: descriptor.set
     61  });
     62 
     63  element.style = "color: green";
     64 
     65  assert_equals(element_style.cssText, "", "Original value intact");
     66  assert_equals(fake_style.cssText, "color: green", "Fake style object updated");
     67 }, "Overriding target of [PutForwards] attribute");
     68 
     69 test(() => {
     70  var element = document.createElement("div");
     71  var descriptor = Object.getOwnPropertyDescriptor(HTMLElement.prototype, "style");
     72 
     73  Object.defineProperty(element, "style", {
     74    get: function () {
     75      throw new SyntaxError();
     76    },
     77    set: descriptor.set
     78  });
     79 
     80  assert_throws_js(SyntaxError, () => {
     81    element.style = "color: green";
     82  });
     83 }, "Exception propagation from getter of [PutForwards] attribute");
     84 
     85 test(() => {
     86  var element = document.createElement("div");
     87  var element_style = element.style;
     88  var descriptor = Object.getOwnPropertyDescriptor(CSSStyleDeclaration.prototype, "cssText");
     89 
     90  Object.defineProperty(element_style, "cssText", {
     91    get: descriptor.get,
     92    set: function (v) {
     93      throw new SyntaxError();
     94    }
     95  });
     96 
     97  assert_throws_js(SyntaxError, () => {
     98    element.style = "color: green";
     99  });
    100 }, "Exception propagation from setter of [PutForwards] target attribute");
    101 
    102 test(() => {
    103  var element = document.createElement("div");
    104  var descriptor = Object.getOwnPropertyDescriptor(HTMLElement.prototype, "style");
    105 
    106  Object.defineProperty(element, "style", {
    107    get: function () {
    108      return null;
    109    },
    110    set: descriptor.set
    111  });
    112 
    113  assert_throws_js(TypeError, () => {
    114    element.style = "color: green";
    115  });
    116 }, "TypeError when getter of [PutForwards] attribute returns non-object");
    117 
    118 
    119 test(() => {
    120  var element = document.createElement("div");
    121 
    122  var element_style = element.style;
    123  Object.defineProperty(element.style, "cssText", {
    124    value: null,
    125    writable: false,
    126  });
    127 
    128  element.style = "color: green";
    129  assert_equals(element.style, element_style);
    130  assert_equals(element.style.cssText, null);
    131 }, "Does not throw when setter of [PutForwards] attribute returns false");
    132 
    133 function test_token_list(elementName, attribute, target, value) {
    134  test(() => {
    135    var element=document.createElement(elementName);
    136    assert_true(element[attribute] instanceof DOMTokenList,"The attribute is a DOMTokenList");
    137    element[attribute]=value;
    138    assert_equals(element.getAttribute(target),value,"Setting the attribute is reflected in the target");
    139    element[attribute]="";
    140    assert_equals(element.getAttribute(target),"","Clearing the attribute is reflected in the target");
    141  },"Setting "+elementName+"."+attribute+" to "+value+" is reflected in "+target)
    142 }
    143 
    144 test_token_list("a","relList","rel","noreferrer");
    145 test_token_list("area","relList","rel","noreferrer");
    146 test_token_list("form","relList","rel","noreferrer");
    147 test_token_list("link","relList","rel","stylesheet");
    148 </script>