forked from mirrors/gecko-dev
129 lines
3.8 KiB
JavaScript
129 lines
3.8 KiB
JavaScript
/* 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/. */
|
|
|
|
"use strict";
|
|
|
|
var { XPCOMUtils } = ChromeUtils.importESModule(
|
|
"resource://gre/modules/XPCOMUtils.sys.mjs"
|
|
);
|
|
|
|
ChromeUtils.defineModuleGetter(
|
|
this,
|
|
"DownloadSpamProtection",
|
|
"resource:///modules/DownloadSpamProtection.jsm"
|
|
);
|
|
|
|
XPCOMUtils.defineLazyModuleGetters(this, {
|
|
BrowserWindowTracker: "resource:///modules/BrowserWindowTracker.jsm",
|
|
PermissionTestUtils: "resource://testing-common/PermissionTestUtils.jsm",
|
|
});
|
|
|
|
const TEST_URI = "https://example.com";
|
|
|
|
const TEST_PATH = getRootDirectory(gTestPath).replace(
|
|
"chrome://mochitests/content",
|
|
TEST_URI
|
|
);
|
|
|
|
add_setup(async function() {
|
|
// Create temp directory
|
|
let time = new Date().getTime();
|
|
let tempDir = Services.dirsvc.get("TmpD", Ci.nsIFile);
|
|
tempDir.append(time);
|
|
Services.prefs.setIntPref("browser.download.folderList", 2);
|
|
Services.prefs.setComplexValue("browser.download.dir", Ci.nsIFile, tempDir);
|
|
|
|
PermissionTestUtils.add(
|
|
TEST_URI,
|
|
"automatic-download",
|
|
Services.perms.UNKNOWN_ACTION
|
|
);
|
|
await SpecialPowers.pushPrefEnv({
|
|
set: [
|
|
["browser.download.improvements_to_download_panel", true],
|
|
["browser.download.always_ask_before_handling_new_types", false], // To avoid the saving dialog being shown
|
|
["browser.download.enable_spam_prevention", true],
|
|
],
|
|
});
|
|
|
|
registerCleanupFunction(async () => {
|
|
Services.prefs.clearUserPref("browser.download.folderList");
|
|
Services.prefs.clearUserPref("browser.download.dir");
|
|
await IOUtils.remove(tempDir.path, { recursive: true });
|
|
});
|
|
});
|
|
|
|
add_task(async function check_download_spam_ui() {
|
|
await task_resetState();
|
|
|
|
registerCleanupFunction(async () => {
|
|
BrowserWindowTracker.getTopWindow().DownloadsPanel.hidePanel();
|
|
DownloadIntegration.downloadSpamProtection.clearDownloadSpam(TEST_URI);
|
|
let publicList = await Downloads.getList(Downloads.PUBLIC);
|
|
await publicList.removeFinished();
|
|
BrowserTestUtils.removeTab(newTab);
|
|
});
|
|
let observedBlockedDownloads = 0;
|
|
let gotAllBlockedDownloads = TestUtils.topicObserved(
|
|
"blocked-automatic-download",
|
|
() => {
|
|
return ++observedBlockedDownloads >= 99;
|
|
}
|
|
);
|
|
|
|
let newTab = await BrowserTestUtils.openNewForegroundTab(
|
|
gBrowser,
|
|
TEST_PATH + "test_spammy_page.html"
|
|
);
|
|
|
|
await BrowserTestUtils.synthesizeMouseAtCenter(
|
|
"body",
|
|
{},
|
|
newTab.linkedBrowser
|
|
);
|
|
|
|
info("Waiting on all blocked downloads.");
|
|
await gotAllBlockedDownloads;
|
|
|
|
let spamProtection = DownloadIntegration.downloadSpamProtection;
|
|
let spamList = spamProtection.spamList;
|
|
is(
|
|
spamList._downloads[0].blockedDownloadsCount,
|
|
99,
|
|
"99 blocked downloads recorded"
|
|
);
|
|
ok(
|
|
spamList._downloads[0].error.becauseBlockedByReputationCheck,
|
|
"Download blocked because of reputation"
|
|
);
|
|
is(
|
|
spamList._downloads[0].error.reputationCheckVerdict,
|
|
"DownloadSpam",
|
|
"Verdict is DownloadSpam"
|
|
);
|
|
|
|
let browserWin = BrowserWindowTracker.getTopWindow();
|
|
await BrowserTestUtils.waitForPopupEvent(
|
|
browserWin.DownloadsPanel.panel,
|
|
"shown"
|
|
);
|
|
|
|
ok(browserWin.DownloadsPanel.isPanelShowing, "Download panel should open");
|
|
await Downloads.getList(Downloads.PUBLIC);
|
|
|
|
let listbox = document.getElementById("downloadsListBox");
|
|
ok(listbox, "Download list box present");
|
|
|
|
await TestUtils.waitForCondition(() => {
|
|
return listbox.childElementCount == 2 && !listbox.getAttribute("disabled");
|
|
}, "2 downloads = 1 allowed download and 1 for 99 downloads blocked");
|
|
|
|
let spamElement = listbox.itemChildren[0].classList.contains(
|
|
"temporary-block"
|
|
)
|
|
? listbox.itemChildren[0]
|
|
: listbox.itemChildren[1];
|
|
|
|
ok(spamElement.classList.contains("temporary-block"), "Download is blocked");
|
|
});
|