tor-browser

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

cross-compartment.js (3064B)


      1 // |reftest| skip-if(!this.hasOwnProperty("Intl"))
      2 
      3 var otherGlobal = newGlobal();
      4 
      5 var dateTimeFormat = new Intl.DateTimeFormat();
      6 var ccwDateTimeFormat = new otherGlobal.Intl.DateTimeFormat();
      7 
      8 // Test Intl.DateTimeFormat.prototype.format with a CCW object.
      9 var Intl_DateTimeFormat_format_get = Object.getOwnPropertyDescriptor(Intl.DateTimeFormat.prototype, "format").get;
     10 
     11 assertEq(Intl_DateTimeFormat_format_get.call(ccwDateTimeFormat)(0),
     12         Intl_DateTimeFormat_format_get.call(dateTimeFormat)(0));
     13 
     14 // Test Intl.DateTimeFormat.prototype.formatToParts with a CCW object.
     15 var Intl_DateTimeFormat_formatToParts = Intl.DateTimeFormat.prototype.formatToParts;
     16 
     17 assertEq(deepEqual(Intl_DateTimeFormat_formatToParts.call(ccwDateTimeFormat, 0),
     18                   Intl_DateTimeFormat_formatToParts.call(dateTimeFormat, 0)),
     19         true);
     20 
     21 // Test Intl.DateTimeFormat.prototype.resolvedOptions with a CCW object.
     22 var Intl_DateTimeFormat_resolvedOptions = Intl.DateTimeFormat.prototype.resolvedOptions;
     23 
     24 assertEq(deepEqual(Intl_DateTimeFormat_resolvedOptions.call(ccwDateTimeFormat),
     25                   Intl_DateTimeFormat_resolvedOptions.call(dateTimeFormat)),
     26         true);
     27 
     28 // Special case for Intl.DateTimeFormat: The Intl fallback symbol.
     29 
     30 function fallbackSymbol(global) {
     31    var DTF = global.Intl.DateTimeFormat;
     32    return Object.getOwnPropertySymbols(DTF.call(Object.create(DTF.prototype)))[0];
     33 }
     34 
     35 const intlFallbackSymbol = fallbackSymbol(this);
     36 const otherIntlFallbackSymbol = fallbackSymbol(otherGlobal);
     37 assertEq(intlFallbackSymbol === otherIntlFallbackSymbol, false);
     38 
     39 // Test when the fallback symbol points to a CCW DateTimeFormat object.
     40 var objWithFallbackCCWDateTimeFormat = {
     41    __proto__: Intl.DateTimeFormat.prototype,
     42    [intlFallbackSymbol]: ccwDateTimeFormat,
     43 };
     44 
     45 assertEq(Intl_DateTimeFormat_format_get.call(objWithFallbackCCWDateTimeFormat)(0),
     46         Intl_DateTimeFormat_format_get.call(dateTimeFormat)(0));
     47 
     48 assertEq(deepEqual(Intl_DateTimeFormat_resolvedOptions.call(objWithFallbackCCWDateTimeFormat),
     49                   Intl_DateTimeFormat_resolvedOptions.call(dateTimeFormat)),
     50         true);
     51 
     52 // Ensure the fallback symbol(s) are not accessed for CCW DateTimeFormat objects.
     53 var ccwDateTimeFormatWithPoisonedFallback = new otherGlobal.Intl.DateTimeFormat();
     54 Object.setPrototypeOf(ccwDateTimeFormatWithPoisonedFallback, Intl.DateTimeFormat.prototype);
     55 Object.defineProperty(ccwDateTimeFormatWithPoisonedFallback, intlFallbackSymbol, {
     56    get() { throw new Error(); }
     57 });
     58 Object.defineProperty(ccwDateTimeFormatWithPoisonedFallback, otherIntlFallbackSymbol, {
     59    get() { throw new Error(); }
     60 });
     61 
     62 assertEq(Intl_DateTimeFormat_format_get.call(ccwDateTimeFormatWithPoisonedFallback)(0),
     63         Intl_DateTimeFormat_format_get.call(dateTimeFormat)(0));
     64 
     65 assertEq(deepEqual(Intl_DateTimeFormat_resolvedOptions.call(ccwDateTimeFormatWithPoisonedFallback),
     66                   Intl_DateTimeFormat_resolvedOptions.call(dateTimeFormat)),
     67         true);
     68 
     69 if (typeof reportCompare === "function")
     70    reportCompare(true, true);