forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			89 lines
		
	
	
	
		
			2.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			89 lines
		
	
	
	
		
			2.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| "use strict";
 | |
| 
 | |
| const TEST_HTTP_URL = "http://example.com";
 | |
| const TEST_HTTPS_URL = "https://example.com";
 | |
| const MAX_EXPIRY = Math.pow(2, 62);
 | |
| 
 | |
| function getSingleCookie() {
 | |
|   let cookies = Array.from(Services.cookies.cookies);
 | |
|   Assert.equal(cookies.length, 1, "expected one cookie");
 | |
|   return cookies[0];
 | |
| }
 | |
| 
 | |
| async function verifyRestore(url, sameSiteSetting) {
 | |
|   Services.cookies.removeAll();
 | |
| 
 | |
|   // Make sure that sessionstore.js can be forced to be created by setting
 | |
|   // the interval pref to 0.
 | |
|   await SpecialPowers.pushPrefEnv({
 | |
|     set: [["browser.sessionstore.interval", 0]],
 | |
|   });
 | |
| 
 | |
|   let tab = BrowserTestUtils.addTab(gBrowser, url);
 | |
|   await BrowserTestUtils.browserLoaded(tab.linkedBrowser);
 | |
| 
 | |
|   // Add a cookie with specific same-site setting.
 | |
|   let r = Math.floor(Math.random() * MAX_EXPIRY);
 | |
|   Services.cookies.add(
 | |
|     url,
 | |
|     "/",
 | |
|     "name" + r,
 | |
|     "value" + r,
 | |
|     false,
 | |
|     false,
 | |
|     true,
 | |
|     MAX_EXPIRY,
 | |
|     {},
 | |
|     sameSiteSetting,
 | |
|     url.startsWith("https:")
 | |
|       ? Ci.nsICookie.SCHEME_HTTPS
 | |
|       : Ci.nsICookie.SCHEME_HTTP
 | |
|   );
 | |
|   await TabStateFlusher.flush(tab.linkedBrowser);
 | |
| 
 | |
|   // Get the sessionstore state for the window.
 | |
|   let state = ss.getBrowserState();
 | |
| 
 | |
|   // Verify our cookie got set.
 | |
|   let cookie = getSingleCookie();
 | |
| 
 | |
|   // Remove the cookie.
 | |
|   Services.cookies.removeAll();
 | |
| 
 | |
|   // Restore the window state.
 | |
|   await setBrowserState(state);
 | |
| 
 | |
|   // At this point, the cookie should be restored.
 | |
|   let cookie2 = getSingleCookie();
 | |
| 
 | |
|   is(
 | |
|     cookie2.sameSite,
 | |
|     cookie.sameSite,
 | |
|     "cookie same-site flag successfully restored"
 | |
|   );
 | |
| 
 | |
|   is(
 | |
|     cookie2.schemeMap,
 | |
|     cookie.schemeMap,
 | |
|     "cookie schemeMap flag successfully restored"
 | |
|   );
 | |
| 
 | |
|   // Clean up.
 | |
|   Services.cookies.removeAll();
 | |
|   BrowserTestUtils.removeTab(gBrowser.tabs[1]);
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Tests that cookie.sameSite flag is stored and restored correctly by
 | |
|  * sessionstore.
 | |
|  */
 | |
| add_task(async function () {
 | |
|   // Test for various possible values of cookie.sameSite and schemeMap.
 | |
|   await verifyRestore(TEST_HTTP_URL, Ci.nsICookie.SAMESITE_NONE);
 | |
|   await verifyRestore(TEST_HTTP_URL, Ci.nsICookie.SAMESITE_LAX);
 | |
|   await verifyRestore(TEST_HTTP_URL, Ci.nsICookie.SAMESITE_STRICT);
 | |
| 
 | |
|   await verifyRestore(TEST_HTTPS_URL, Ci.nsICookie.SAMESITE_NONE);
 | |
|   await verifyRestore(TEST_HTTPS_URL, Ci.nsICookie.SAMESITE_LAX);
 | |
|   await verifyRestore(TEST_HTTPS_URL, Ci.nsICookie.SAMESITE_STRICT);
 | |
| });
 | 
