tor-browser

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

set.window.js (4259B)


      1 ["localStorage", "sessionStorage"].forEach(function(name) {
      2    [9, "x"].forEach(function(key) {
      3        test(function() {
      4            var expected = "value for " + this.name;
      5            var value = expected;
      6 
      7            var storage = window[name];
      8            storage.clear();
      9 
     10            assert_equals(storage[key], undefined);
     11            assert_equals(storage.getItem(key), null);
     12            assert_equals(storage[key] = value, value);
     13            assert_equals(storage[key], expected);
     14            assert_equals(storage.getItem(key), expected);
     15        }, "Setting property for key " + key + " on " + name);
     16 
     17        test(function() {
     18            var expected = "value for " + this.name;
     19            var value = {
     20                toString: function() { return expected; }
     21            };
     22 
     23            var storage = window[name];
     24            storage.clear();
     25 
     26            assert_equals(storage[key], undefined);
     27            assert_equals(storage.getItem(key), null);
     28            assert_equals(storage[key] = value, value);
     29            assert_equals(storage[key], expected);
     30            assert_equals(storage.getItem(key), expected);
     31        }, "Setting property with toString for key " + key + " on " + name);
     32 
     33        test(function() {
     34            var proto = "proto for " + this.name;
     35            Storage.prototype[key] = proto;
     36            this.add_cleanup(function() { delete Storage.prototype[key]; });
     37 
     38            var value = "value for " + this.name;
     39 
     40            var storage = window[name];
     41            storage.clear();
     42 
     43            assert_equals(storage[key], proto);
     44            assert_equals(storage.getItem(key), null);
     45            assert_equals(storage[key] = value, value);
     46            // Hidden because no [LegacyOverrideBuiltIns].
     47            assert_equals(storage[key], proto);
     48            assert_equals(Object.getOwnPropertyDescriptor(storage, key), undefined);
     49            assert_equals(storage.getItem(key), value);
     50        }, "Setting property for key " + key + " on " + name + " with data property on prototype");
     51 
     52        test(function() {
     53            var proto = "proto for " + this.name;
     54            Storage.prototype[key] = proto;
     55            this.add_cleanup(function() { delete Storage.prototype[key]; });
     56 
     57            var value = "value for " + this.name;
     58            var existing = "existing for " + this.name;
     59 
     60            var storage = window[name];
     61            storage.clear();
     62 
     63            storage.setItem(key, existing);
     64 
     65            // Hidden because no [LegacyOverrideBuiltIns].
     66            assert_equals(storage[key], proto);
     67            assert_equals(Object.getOwnPropertyDescriptor(storage, key), undefined);
     68            assert_equals(storage.getItem(key), existing);
     69            assert_equals(storage[key] = value, value);
     70            assert_equals(storage[key], proto);
     71            assert_equals(Object.getOwnPropertyDescriptor(storage, key), undefined);
     72            assert_equals(storage.getItem(key), value);
     73        }, "Setting property for key " + key + " on " + name + " with data property on prototype and existing item");
     74 
     75        test(function() {
     76            var storage = window[name];
     77            storage.clear();
     78 
     79            var proto = "proto getter for " + this.name;
     80            Object.defineProperty(Storage.prototype, key, {
     81                "get": function() { return proto; },
     82                "set": this.unreached_func("Should not call [[Set]] on prototype"),
     83                "configurable": true,
     84            });
     85            this.add_cleanup(function() {
     86                delete Storage.prototype[key];
     87                delete storage[key];
     88                assert_false(key in storage);
     89            });
     90 
     91            var value = "value for " + this.name;
     92 
     93            assert_equals(storage[key], proto);
     94            assert_equals(storage.getItem(key), null);
     95            assert_equals(storage[key] = value, value);
     96            // Property is hidden because no [LegacyOverrideBuiltIns].
     97            assert_equals(storage[key], proto);
     98            assert_equals(Object.getOwnPropertyDescriptor(storage, key), undefined);
     99            assert_equals(storage.getItem(key), value);
    100        }, "Setting property for key " + key + " on " + name + " with accessor property on prototype");
    101    });
    102 });