tenfourfox/toolkit/components/downloads/test/browser/browser_download_history.js

148 lines
5.1 KiB
JavaScript
Raw Normal View History

2017-04-19 07:56:45 +00:00
/* 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() {
try {
if (Services.prefs.getBoolPref("browser.download.useJSTransfer")) {
return;
}
} catch (ex) { }
waitForExplicitFinish();
let privateWin = null;
let itemCount = 0;
let sourceURL =
"http://example.org/tests/toolkit/components/downloads/test/browser/download.html";
let linkURL =
"http://mochi.test:8888/tests/toolkit/components/downloads/test/browser/download.test";
let linkURI = Services.io.newURI(linkURL, null, null);
let downloadDialogURL =
"chrome://mozapps/content/downloads/unknownContentType.xul";
let downloadListener = {
onDownloadStateChange: function(aState, aDownload) {
switch (aDownload.state) {
case Services.downloads.DOWNLOAD_FINISHED:
info("Download finished");
Services.downloads.removeListener(downloadListener);
executeSoon(function() { checkDownload(aDownload); });
break;
}
},
onStateChange: function(a, b, c, d, e) { },
onProgressChange: function(a, b, c, d, e, f, g) { },
onSecurityChange: function(a, b, c, d) { }
};
let historyObserver = {
onVisit: function (aURI, aVisitID, aTime, aSessionID, aReferringID, aTransitionType) {
ok(false, "Download should not fired a visit notification: " + aURI.spec);
},
onBeginUpdateBatch: function () {},
onEndUpdateBatch: function () {},
onTitleChanged: function () {},
onBeforeDeleteURI: function () {},
onDeleteURI: function () {},
onClearHistory: function () {},
onPageChanged: function () {},
onDeleteVisits: function () {},
QueryInterface: XPCOMUtils.generateQI([Ci.nsINavHistoryObserver])
};
let windowListener = {
onOpenWindow: function(aXULWindow) {
info("Window opened");
Services.wm.removeListener(windowListener);
let domWindow =
aXULWindow.QueryInterface(Ci.nsIInterfaceRequestor).
getInterface(Ci.nsIDOMWindow);
waitForFocus(function() {
is(domWindow.document.location.href, downloadDialogURL,
"Should have seen the right window open");
executeSoon(function() {
let button = domWindow.document.documentElement.getButton("accept");
button.disabled = false;
domWindow.document.documentElement.acceptDialog();
});
}, domWindow);
},
onCloseWindow: function(aXULWindow) {},
onWindowTitleChange: function(aXULWindow, aNewTitle) {}
};
registerCleanupFunction(function() {
privateWin.close();
Services.prefs.clearUserPref("browser.download.manager.showAlertOnComplete");
});
function getHistoryItemCount() {
let options = PlacesUtils.history.getNewQueryOptions();
options.includeHidden = true;
options.queryType = Ci.nsINavHistoryQueryOptions.QUERY_TYPE_HISTORY;
let query = PlacesUtils.history.getNewQuery();
let root = PlacesUtils.history.executeQuery(query, options).root;
root.containerOpen = true;
let cc = root.childCount;
root.containerOpen = false;
return cc;
}
function whenNewWindowLoaded(aIsPrivate, aCallback) {
let win = OpenBrowserWindow({private: aIsPrivate});
win.addEventListener("load", function onLoad() {
win.removeEventListener("load", onLoad, false);
executeSoon(() => aCallback(win));
}, false);
}
function whenPageLoad(aWin, aURL, aCallback) {
let browser = aWin.gBrowser.selectedBrowser;
browser.addEventListener("load", function onLoad() {
browser.removeEventListener("load", onLoad, true);
executeSoon(() => aCallback(browser.contentDocument));
}, true);
browser.loadURI(aURL);
}
function checkDownload(aDownload) {
PlacesUtils.history.removeObserver(historyObserver);
ok(aDownload.isPrivate, "Download should be private");
is(getHistoryItemCount(), itemCount,
"History items count should not change after a download");
PlacesUtils.asyncHistory.isURIVisited(linkURI, function(aURI, aIsVisited) {
is(aIsVisited, false, "Download source should not be set as visited");
// Clean up
if (aDownload.targetFile.exists()) {
aDownload.targetFile.remove(false);
}
waitForFocus(function() {
if (privateWin.DownloadsPanel.isPanelShowing) {
privateWin.DownloadsPanel.hidePanel();
}
finish();
}, privateWin);
});
}
// Disable alert service notifications
Services.prefs.setBoolPref("browser.download.manager.showAlertOnComplete", false);
whenNewWindowLoaded(true, function(win) {
info("Start listeners");
privateWin = win;
Services.wm.addListener(windowListener);
Services.downloads.addPrivacyAwareListener(downloadListener);
PlacesUtils.history.addObserver(historyObserver, false);
info("Load test page");
whenPageLoad(win, sourceURL, function(doc) {
info("Start download");
itemCount = getHistoryItemCount();
doc.getElementById("download-link").click();
});
});
}