Sat, 03 Jan 2015 20:18:00 +0100
Conditionally enable double key logic according to:
private browsing mode or privacy.thirdparty.isolate preference and
implement in GetCookieStringCommon and FindCookie where it counts...
With some reservations of how to convince FindCookie users to test
condition and pass a nullptr when disabling double key logic.
michael@0 | 1 | // Any copyright is dedicated to the Public Domain. |
michael@0 | 2 | // http://creativecommons.org/licenses/publicdomain/ |
michael@0 | 3 | |
michael@0 | 4 | //----------------------------------------------------------------------------- |
michael@0 | 5 | print("Test for correct implementation of |Date == boolean| and vice versa"); |
michael@0 | 6 | |
michael@0 | 7 | /************** |
michael@0 | 8 | * BEGIN TEST * |
michael@0 | 9 | **************/ |
michael@0 | 10 | |
michael@0 | 11 | Date.prototype.toString = function() { return 1; }; |
michael@0 | 12 | Date.prototype.valueOf = function() { return 0; }; |
michael@0 | 13 | |
michael@0 | 14 | /* |
michael@0 | 15 | * ES5 11.9.3 doesn't directly handle obj == boolean. Instead it translates it |
michael@0 | 16 | * as follows: |
michael@0 | 17 | * |
michael@0 | 18 | * obj == boolean |
michael@0 | 19 | * ↳ obj == ToNumber(boolean), per step 7 |
michael@0 | 20 | * ↳ ToPrimitive(obj) == ToNumber(boolean), per step 9 |
michael@0 | 21 | * |
michael@0 | 22 | * ToPrimitive calls [[DefaultValue]] with no hint. For Date objects this is |
michael@0 | 23 | * treated as if it were instead called with hint String. That calls toString, |
michael@0 | 24 | * which returns 1, so Date objects here should compare equal to true and |
michael@0 | 25 | * unequal to false. |
michael@0 | 26 | */ |
michael@0 | 27 | assertEq(new Date == true, true); |
michael@0 | 28 | assertEq(new Date == false, false); |
michael@0 | 29 | |
michael@0 | 30 | /* == is symmetric. */ |
michael@0 | 31 | assertEq(true == new Date, true); |
michael@0 | 32 | assertEq(false == new Date, false); |
michael@0 | 33 | |
michael@0 | 34 | /******************************************************************************/ |
michael@0 | 35 | |
michael@0 | 36 | if (typeof reportCompare === "function") |
michael@0 | 37 | reportCompare(true, true); |
michael@0 | 38 | |
michael@0 | 39 | print("Tests complete"); |