forked from mirrors/gecko-dev
		
	This was done using the following script:
37e3803c7a/processors/chromeutils-import.jsm
MozReview-Commit-ID: 1Nc3XDu0wGl
--HG--
extra : source : 12fc4dee861c812fd2bd032c63ef17af61800c70
extra : intermediate-source : 34c999fa006bffe8705cf50c54708aa21a962e62
extra : histedit_source : b2be2c5e5d226e6c347312456a6ae339c1e634b0
		
	
			
		
			
				
	
	
		
			128 lines
		
	
	
	
		
			5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			128 lines
		
	
	
	
		
			5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
"use strict";
 | 
						|
 | 
						|
const {XPCOMUtils} = ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm", {});
 | 
						|
const {SessionWorker} = ChromeUtils.import("resource:///modules/sessionstore/SessionWorker.jsm", {});
 | 
						|
 | 
						|
var Paths;
 | 
						|
var SessionFile;
 | 
						|
 | 
						|
// We need a XULAppInfo to initialize SessionFile
 | 
						|
ChromeUtils.import("resource://testing-common/AppInfo.jsm", this);
 | 
						|
updateAppInfo({
 | 
						|
  name: "SessionRestoreTest",
 | 
						|
  ID: "{230de50e-4cd1-11dc-8314-0800200c9a66}",
 | 
						|
  version: "1",
 | 
						|
  platformVersion: "",
 | 
						|
});
 | 
						|
 | 
						|
function promise_check_exist(path, shouldExist) {
 | 
						|
  return (async function() {
 | 
						|
    info("Ensuring that " + path + (shouldExist ? " exists" : " does not exist"));
 | 
						|
    if ((await OS.File.exists(path)) != shouldExist) {
 | 
						|
      throw new Error("File " + path + " should " + (shouldExist ? "exist" : "not exist"));
 | 
						|
    }
 | 
						|
  })();
 | 
						|
}
 | 
						|
 | 
						|
function promise_check_contents(path, expect) {
 | 
						|
  return (async function() {
 | 
						|
    info("Checking whether " + path + " has the right contents");
 | 
						|
    let actual = await OS.File.read(path, { encoding: "utf-8", compression: "lz4" });
 | 
						|
    Assert.deepEqual(JSON.parse(actual), expect, `File ${path} contains the expected data.`);
 | 
						|
  })();
 | 
						|
}
 | 
						|
 | 
						|
function generateFileContents(id) {
 | 
						|
  let url = `http://example.com/test_backup_once#${id}_${Math.random()}`;
 | 
						|
  return {windows: [{tabs: [{entries: [{url}], index: 1}]}]};
 | 
						|
}
 | 
						|
 | 
						|
// Check whether the migration from .js to .jslz4 is correct.
 | 
						|
add_task(async function test_migration() {
 | 
						|
  // Make sure that we have a profile before initializing SessionFile.
 | 
						|
  let profd = do_get_profile();
 | 
						|
  SessionFile = ChromeUtils.import("resource:///modules/sessionstore/SessionFile.jsm", {}).SessionFile;
 | 
						|
  Paths = SessionFile.Paths;
 | 
						|
 | 
						|
  let source = do_get_file("data/sessionstore_valid.js");
 | 
						|
  source.copyTo(profd, "sessionstore.js");
 | 
						|
 | 
						|
  // Read the content of the session store file.
 | 
						|
  let sessionStoreUncompressed = await OS.File.read(Paths.clean.replace("jsonlz4", "js"), {encoding: "utf-8"});
 | 
						|
  let parsed = JSON.parse(sessionStoreUncompressed);
 | 
						|
 | 
						|
  // Read the session file with .js extension.
 | 
						|
  let result = await SessionFile.read();
 | 
						|
 | 
						|
  // Check whether the result is what we wanted.
 | 
						|
  equal(result.origin, "clean");
 | 
						|
  equal(result.useOldExtension, true);
 | 
						|
  Assert.deepEqual(result.parsed, parsed, "result.parsed contains expected data");
 | 
						|
 | 
						|
  // Initiate a write to ensure we write the compressed version.
 | 
						|
  await SessionFile.write(parsed);
 | 
						|
  await promise_check_exist(Paths.backups, true);
 | 
						|
  await promise_check_exist(Paths.clean, false);
 | 
						|
  await promise_check_exist(Paths.cleanBackup, true);
 | 
						|
  await promise_check_exist(Paths.recovery, true);
 | 
						|
  await promise_check_exist(Paths.recoveryBackup, false);
 | 
						|
  await promise_check_exist(Paths.nextUpgradeBackup, true);
 | 
						|
  // The deprecated $Path.clean should exist.
 | 
						|
  await promise_check_exist(Paths.clean.replace("jsonlz4", "js"), true);
 | 
						|
 | 
						|
  await promise_check_contents(Paths.recovery, parsed);
 | 
						|
});
 | 
						|
 | 
						|
add_task(async function test_startup_with_compressed_clean() {
 | 
						|
  let state = {windows: []};
 | 
						|
  let stateString = JSON.stringify(state);
 | 
						|
 | 
						|
  // Mare sure we have an empty profile dir.
 | 
						|
  await SessionFile.wipe();
 | 
						|
 | 
						|
  // Populate session files to profile dir.
 | 
						|
  await OS.File.writeAtomic(Paths.clean, stateString, {encoding: "utf-8", compression: "lz4"});
 | 
						|
  await OS.File.makeDir(Paths.backups);
 | 
						|
  await OS.File.writeAtomic(Paths.cleanBackup, stateString, {encoding: "utf-8", compression: "lz4"});
 | 
						|
 | 
						|
  // Initiate a read.
 | 
						|
  let result = await SessionFile.read();
 | 
						|
 | 
						|
  // Make sure we read correct session file and its content.
 | 
						|
  equal(result.origin, "clean");
 | 
						|
  equal(result.useOldExtension, false);
 | 
						|
  Assert.deepEqual(state, result.parsed, "result.parsed contains expected data");
 | 
						|
});
 | 
						|
 | 
						|
add_task(async function test_empty_profile_dir() {
 | 
						|
  // Make sure that we have empty profile dir.
 | 
						|
  await SessionFile.wipe();
 | 
						|
  await promise_check_exist(Paths.backups, false);
 | 
						|
  await promise_check_exist(Paths.clean, false);
 | 
						|
  await promise_check_exist(Paths.cleanBackup, false);
 | 
						|
  await promise_check_exist(Paths.recovery, false);
 | 
						|
  await promise_check_exist(Paths.recoveryBackup, false);
 | 
						|
  await promise_check_exist(Paths.nextUpgradeBackup, false);
 | 
						|
  await promise_check_exist(Paths.backups.replace("jsonlz4", "js"), false);
 | 
						|
  await promise_check_exist(Paths.clean.replace("jsonlz4", "js"), false);
 | 
						|
  await promise_check_exist(Paths.cleanBackup.replace("lz4", ""), false);
 | 
						|
  await promise_check_exist(Paths.recovery.replace("jsonlz4", "js"), false);
 | 
						|
  await promise_check_exist(Paths.recoveryBackup.replace("jsonlz4", "js"), false);
 | 
						|
  await promise_check_exist(Paths.nextUpgradeBackup.replace("jsonlz4", "js"), false);
 | 
						|
 | 
						|
  // Initiate a read and make sure that we are in empty state.
 | 
						|
  let result = await SessionFile.read();
 | 
						|
  equal(result.origin, "empty");
 | 
						|
  equal(result.noFilesFound, true);
 | 
						|
 | 
						|
  // Create a state to store.
 | 
						|
  let state = {windows: []};
 | 
						|
  await SessionWorker.post("write", [state, {isFinalWrite: true}]);
 | 
						|
 | 
						|
  // Check session files are created, but not deprecated ones.
 | 
						|
  await promise_check_exist(Paths.clean, true);
 | 
						|
  await promise_check_exist(Paths.clean.replace("jsonlz4", "js"), false);
 | 
						|
 | 
						|
  // Check session file' content is correct.
 | 
						|
  await promise_check_contents(Paths.clean, state);
 | 
						|
});
 |