forked from mirrors/gecko-dev
		
	# ignore-this-changeset Differential Revision: https://phabricator.services.mozilla.com/D36042 --HG-- extra : source : d3afcafdce650a6f36cebbc126ee93b17f13cf52
		
			
				
	
	
		
			81 lines
		
	
	
	
		
			2.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			81 lines
		
	
	
	
		
			2.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
"use strict";
 | 
						|
 | 
						|
function promiseSetCookie(cookie) {
 | 
						|
  info(`Set-Cookie: ${cookie}`);
 | 
						|
  return Promise.all([
 | 
						|
    waitForCookieChanged(),
 | 
						|
    ContentTask.spawn(
 | 
						|
      gBrowser.selectedBrowser,
 | 
						|
      cookie,
 | 
						|
      passedCookie => (content.document.cookie = passedCookie)
 | 
						|
    ),
 | 
						|
  ]);
 | 
						|
}
 | 
						|
 | 
						|
function waitForCookieChanged() {
 | 
						|
  return new Promise(resolve => {
 | 
						|
    Services.obs.addObserver(function observer(subj, topic, data) {
 | 
						|
      Services.obs.removeObserver(observer, topic);
 | 
						|
      resolve();
 | 
						|
    }, "session-cookie-changed");
 | 
						|
  });
 | 
						|
}
 | 
						|
 | 
						|
function cookieExists(host, name, value) {
 | 
						|
  let {
 | 
						|
    cookies: [c],
 | 
						|
  } = JSON.parse(ss.getBrowserState());
 | 
						|
  return c && c.host == host && c.name == name && c.value == value;
 | 
						|
}
 | 
						|
 | 
						|
// Setup and cleanup.
 | 
						|
add_task(async function test_setup() {
 | 
						|
  registerCleanupFunction(() => {
 | 
						|
    Services.cookies.removeAll();
 | 
						|
  });
 | 
						|
});
 | 
						|
 | 
						|
// Test session cookie storage.
 | 
						|
add_task(async function test_run() {
 | 
						|
  Services.cookies.removeAll();
 | 
						|
 | 
						|
  // Add a new tab for testing.
 | 
						|
  gBrowser.selectedTab = BrowserTestUtils.addTab(
 | 
						|
    gBrowser,
 | 
						|
    "http://example.com/"
 | 
						|
  );
 | 
						|
  await promiseBrowserLoaded(gBrowser.selectedBrowser);
 | 
						|
 | 
						|
  // Add a session cookie.
 | 
						|
  await promiseSetCookie("foo=bar");
 | 
						|
  ok(cookieExists("example.com", "foo", "bar"), "cookie was added");
 | 
						|
 | 
						|
  // Modify a session cookie.
 | 
						|
  await promiseSetCookie("foo=baz");
 | 
						|
  ok(cookieExists("example.com", "foo", "baz"), "cookie was modified");
 | 
						|
 | 
						|
  // Turn the session cookie into a normal one.
 | 
						|
  let expiry = new Date();
 | 
						|
  expiry.setDate(expiry.getDate() + 2);
 | 
						|
  await promiseSetCookie(`foo=baz; Expires=${expiry.toUTCString()}`);
 | 
						|
  ok(!cookieExists("example.com", "foo", "baz"), "no longer a session cookie");
 | 
						|
 | 
						|
  // Turn it back into a session cookie.
 | 
						|
  await promiseSetCookie("foo=bar");
 | 
						|
  ok(cookieExists("example.com", "foo", "bar"), "again a session cookie");
 | 
						|
 | 
						|
  // Remove the session cookie.
 | 
						|
  await promiseSetCookie("foo=; Expires=Thu, 01 Jan 1970 00:00:00 GMT");
 | 
						|
  ok(!cookieExists("example.com", "foo", ""), "cookie was removed");
 | 
						|
 | 
						|
  // Add a session cookie.
 | 
						|
  await promiseSetCookie("foo=bar");
 | 
						|
  ok(cookieExists("example.com", "foo", "bar"), "cookie was added");
 | 
						|
 | 
						|
  // Clear all session cookies.
 | 
						|
  Services.cookies.removeAll();
 | 
						|
  ok(!cookieExists("example.com", "foo", "bar"), "cookies were cleared");
 | 
						|
 | 
						|
  // Cleanup.
 | 
						|
  BrowserTestUtils.removeTab(gBrowser.selectedTab);
 | 
						|
});
 |