diff -r 000000000000 -r 6474c204b198 browser/base/content/test/general/browser_sanitize-download-history.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/browser/base/content/test/general/browser_sanitize-download-history.js Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,142 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +function test() +{ + ////////////////////////////////////////////////////////////////////////////// + //// Tests (defined locally for scope's sake) + + function test_checkedAndDisabledAtStart(aWin) + { + let doc = aWin.document; + let downloads = doc.getElementById("downloads-checkbox"); + let history = doc.getElementById("history-checkbox"); + + ok(history.checked, "history checkbox is checked"); + ok(downloads.disabled, "downloads checkbox is disabled"); + ok(downloads.checked, "downloads checkbox is checked"); + } + + function test_checkedAndDisabledOnHistoryToggle(aWin) + { + let doc = aWin.document; + let downloads = doc.getElementById("downloads-checkbox"); + let history = doc.getElementById("history-checkbox"); + + EventUtils.synthesizeMouse(history, 0, 0, {}, aWin); + ok(!history.checked, "history checkbox is not checked"); + ok(downloads.disabled, "downloads checkbox is disabled"); + ok(downloads.checked, "downloads checkbox is checked"); + } + + function test_checkedAfterAddingDownload(aWin) + { + let doc = aWin.document; + let downloads = doc.getElementById("downloads-checkbox"); + let history = doc.getElementById("history-checkbox"); + + // Add download to DB + let file = Cc["@mozilla.org/file/directory_service;1"]. + getService(Ci.nsIProperties).get("TmpD", Ci.nsIFile); + file.append("sanitize-dm-test.file"); + file.createUnique(Ci.nsIFile.NORMAL_FILE_TYPE, 0666); + let testPath = Services.io.newFileURI(file).spec; + let data = { + name: "381603.patch", + source: "https://bugzilla.mozilla.org/attachment.cgi?id=266520", + target: testPath, + startTime: 1180493839859230, + endTime: 1180493839859239, + state: Ci.nsIDownloadManager.DOWNLOAD_FINISHED, + currBytes: 0, maxBytes: -1, preferredAction: 0, autoResume: 0, + guid: "a1bcD23eF4g5" + }; + let db = Cc["@mozilla.org/download-manager;1"]. + getService(Ci.nsIDownloadManager).DBConnection; + let stmt = db.createStatement( + "INSERT INTO moz_downloads (name, source, target, startTime, endTime, " + + "state, currBytes, maxBytes, preferredAction, autoResume, guid) " + + "VALUES (:name, :source, :target, :startTime, :endTime, :state, " + + ":currBytes, :maxBytes, :preferredAction, :autoResume, :guid)"); + try { + for (let prop in data) + stmt.params[prop] = data[prop]; + stmt.execute(); + } + finally { + stmt.finalize(); + } + + // Toggle history to get everything to update + EventUtils.synthesizeMouse(history, 0, 0, {}, aWin); + EventUtils.synthesizeMouse(history, 0, 0, {}, aWin); + + ok(!history.checked, "history checkbox is not checked"); + ok(!downloads.disabled, "downloads checkbox is not disabled"); + ok(downloads.checked, "downloads checkbox is checked"); + } + + function test_checkedAndDisabledWithHistoryChecked(aWin) + { + let doc = aWin.document; + let downloads = doc.getElementById("downloads-checkbox"); + let history = doc.getElementById("history-checkbox"); + + EventUtils.synthesizeMouse(history, 0, 0, {}, aWin); + ok(history.checked, "history checkbox is checked"); + ok(downloads.disabled, "downloads checkbox is disabled"); + ok(downloads.checked, "downloads checkbox is checked"); + } + + let tests = [ + test_checkedAndDisabledAtStart, + test_checkedAndDisabledOnHistoryToggle, + test_checkedAfterAddingDownload, + test_checkedAndDisabledWithHistoryChecked, + ]; + + ////////////////////////////////////////////////////////////////////////////// + //// Run the tests + + let dm = Cc["@mozilla.org/download-manager;1"]. + getService(Ci.nsIDownloadManager); + let db = dm.DBConnection; + + // Empty any old downloads + db.executeSimpleSQL("DELETE FROM moz_downloads"); + + // Close the UI if necessary + let win = Services.ww.getWindowByName("Sanitize", null); + if (win && (win instanceof Ci.nsIDOMWindow)) + win.close(); + + // Start the test when the sanitize window loads + Services.ww.registerNotification(function (aSubject, aTopic, aData) { + Services.ww.unregisterNotification(arguments.callee); + aSubject.QueryInterface(Ci.nsIDOMEventTarget) + .addEventListener("DOMContentLoaded", doTest, false); + }); + + // Let the methods that run onload finish before we test + let doTest = function() setTimeout(function() { + let win = Services.ww.getWindowByName("Sanitize", null) + .QueryInterface(Ci.nsIDOMWindow); + + for (let i = 0; i < tests.length; i++) + tests[i](win); + + win.close(); + finish(); + }, 0); + + // Show the UI + Services.ww.openWindow(window, + "chrome://browser/content/sanitize.xul", + "Sanitize", + "chrome,titlebar,centerscreen", + null); + + waitForExplicitFinish(); +}