mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-07 18:04:46 +00:00
Bug 1346171 - Part 2 - Test synchronous session file deletion on clearing history. r=sebastian
MozReview-Commit-ID: JUrbSD2t41t --HG-- extra : rebase_source : b563dc9944f13f1fc2fccdc1b88786282f8d6379
This commit is contained in:
parent
bb40130b5e
commit
a6d3db031b
@ -87,4 +87,10 @@ interface nsISessionStore : nsISupports
|
||||
* @param aWindow The window to remove
|
||||
*/
|
||||
void removeWindow(in nsIDOMWindow aWindow);
|
||||
|
||||
/**
|
||||
* Set the load state of the session store. Use only for testing.
|
||||
* @param aState The target load state.
|
||||
*/
|
||||
void setLoadState(in long aState);
|
||||
};
|
||||
|
@ -1607,6 +1607,11 @@ SessionStore.prototype = {
|
||||
} else if (this._loadState <= STATE_QUITTING) {
|
||||
this.saveStateDelayed();
|
||||
}
|
||||
},
|
||||
|
||||
setLoadState: function ss_setLoadState(aState) {
|
||||
this.flushPendingState();
|
||||
this._loadState = aState;
|
||||
}
|
||||
|
||||
};
|
||||
|
@ -48,7 +48,21 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=1343603
|
||||
cleanupTabs();
|
||||
});
|
||||
|
||||
let ss = Cc["@mozilla.org/browser/sessionstore;1"].getService(Ci.nsISessionStore);
|
||||
|
||||
// Session store load state constants
|
||||
const STATE_STOPPED = 0;
|
||||
const STATE_RUNNING = 1;
|
||||
const STATE_QUITTING = -1;
|
||||
const STATE_QUITTING_FLUSHED = -2;
|
||||
|
||||
function createFileIfNotExists(file) {
|
||||
if (!file.exists()) {
|
||||
file.create(Ci.nsIFile.NORMAL_FILE_TYPE, 0o666);
|
||||
}
|
||||
}
|
||||
|
||||
// URLs for testing
|
||||
const url1 = "http://example.org/chrome/mobile/android/tests/browser/chrome/basic_article_mobile.html";
|
||||
const url2 = "http://example.org/chrome/mobile/android/tests/browser/chrome/basic_article.html";
|
||||
const url3 = "data:text/html;charset=utf-8,It%20was%20a%20dark%20and%20stormy%20night.";
|
||||
@ -89,6 +103,51 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=1343603
|
||||
cleanupTabs();
|
||||
});
|
||||
|
||||
add_task(function* test_sessionStoreClearFiles() {
|
||||
// Temporarily set the session store to shutdown mode to test the
|
||||
// synchronous deletion code path.
|
||||
// This also means that nothing gets written to disk until explicitly
|
||||
// flushed, so we can test that all files have been deleted and don't
|
||||
// have to worry about them already having been recreated before we get
|
||||
// around checking on them.
|
||||
ss.setLoadState(STATE_QUITTING);
|
||||
|
||||
let sessionFile = Services.dirsvc.get("ProfD", Ci.nsILocalFile);
|
||||
let sessionFileBackup = sessionFile.clone();
|
||||
let sessionFilePrevious = sessionFile.clone();
|
||||
let sessionFileTemp = sessionFile.clone();
|
||||
|
||||
sessionFile.append("sessionstore.js"); // The main session store save file.
|
||||
sessionFileBackup.append("sessionstore.bak"); // A backup copy to guard against interrupted writes.
|
||||
sessionFilePrevious.append("sessionstore.old"); // The previous session's file, used for what used to be the "Tabs from last time".
|
||||
sessionFileTemp.append(sessionFile.leafName + ".tmp"); // Temporary file for writing changes to disk.
|
||||
|
||||
createFileIfNotExists(sessionFile);
|
||||
createFileIfNotExists(sessionFileBackup);
|
||||
createFileIfNotExists(sessionFilePrevious);
|
||||
createFileIfNotExists(sessionFileTemp);
|
||||
|
||||
ok(sessionFile.exists(), "session file exists");
|
||||
ok(sessionFileBackup.exists(), "backup file exists");
|
||||
ok(sessionFilePrevious.exists(), "last session file exists");
|
||||
ok(sessionFileTemp.exists(), "temp file exists");
|
||||
|
||||
// Clear browsing history
|
||||
let sanitize = { history:true };
|
||||
let notification = promiseNotification("sessionstore-state-purge-complete");
|
||||
|
||||
BrowserApp.sanitize(sanitize);
|
||||
yield notification;
|
||||
|
||||
ok(!sessionFile.exists(), "session file was deleted");
|
||||
ok(!sessionFileBackup.exists(), "backup file was deleted");
|
||||
ok(!sessionFilePrevious.exists(), "last session file was deleted");
|
||||
ok(!sessionFileTemp.exists(), "temp file was deleted");
|
||||
|
||||
// Revert back to normal
|
||||
ss.setLoadState(STATE_RUNNING);
|
||||
});
|
||||
|
||||
add_task(function* test_sessionStoreClearZombieTabHistory() {
|
||||
// Add a new tab with some content
|
||||
tabTest = BrowserApp.addTab(url1 , { selected: true, parentId: BrowserApp.selectedTab.id });
|
||||
|
Loading…
Reference in New Issue
Block a user