Bug 1709129 - Open downloads panel when new download starts. r=Gijs

Differential Revision: https://phabricator.services.mozilla.com/D118186
This commit is contained in:
Ava Katushka ava8katushka 2021-07-05 14:51:03 +00:00
Родитель bc8b666b90
Коммит 3b8aae0267
3 изменённых файлов: 90 добавлений и 1 удалений

Просмотреть файл

@ -941,7 +941,18 @@ DownloadsDataCtor.prototype = {
return;
}
if (this.panelHasShownBefore && aType != "error") {
let shouldOpenDownloadsPanel =
aType == "start" &&
Services.prefs.getBoolPref(
"browser.download.improvements_to_download_panel"
) &&
DownloadsCommon.summarizeDownloads(this.downloads).numDownloading <= 1;
if (
this.panelHasShownBefore &&
aType != "error" &&
!shouldOpenDownloadsPanel
) {
// For new downloads after the first one, don't show the panel
// automatically, but provide a visible notification in the topmost
// browser window, if the status indicator is already visible.

Просмотреть файл

@ -30,6 +30,7 @@ skip-if = true # Bug 1352792
[browser_downloads_panel_context_menu.js]
[browser_downloads_panel_ctrl_click.js]
[browser_downloads_panel_height.js]
[browser_downloads_panel_opens.js]
[browser_downloads_autohide.js]
[browser_go_to_download_page.js]
[browser_pdfjs_preview.js]

Просмотреть файл

@ -0,0 +1,77 @@
/* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/ */
/**
* Make sure the downloads panel opens automatically with a new download.
*/
add_task(async function test_downloads_panel_opens() {
await SpecialPowers.pushPrefEnv({
set: [["browser.download.improvements_to_download_panel", true]],
});
info("waiting for panel to open");
let promise = promisePanelOpened();
DownloadsCommon.getData(window)._notifyDownloadEvent("start");
is(
DownloadsPanel.isPanelShowing,
true,
"Panel state should indicate a preparation to be opened"
);
await promise;
is(DownloadsPanel.panel.state, "open", "Panel should be opened");
DownloadsPanel.hidePanel();
});
/**
* Make sure the downloads panel opens automatically with new download, only if no other downloads are in progress.
*/
add_task(async function test_downloads_panel_remains_closed() {
await SpecialPowers.pushPrefEnv({
set: [["browser.download.improvements_to_download_panel", true]],
});
await task_addDownloads([
{ state: DownloadsCommon.DOWNLOAD_DOWNLOADING },
{ state: DownloadsCommon.DOWNLOAD_DOWNLOADING },
]);
let publicList = await Downloads.getList(Downloads.PUBLIC);
let downloads = await publicList.getAll();
info("setting 2 downloads to be in progress");
downloads[0].stopped = false;
downloads[1].stopped = false;
let oldShowEventNotification = DownloadsIndicatorView.showEventNotification;
registerCleanupFunction(async () => {
// Remove all downloads created during the test.
for (let download of downloads) {
await publicList.remove(download);
}
DownloadsIndicatorView.showEventNotification = oldShowEventNotification;
});
let promiseDownloadStartedNotification = new Promise(resolve => {
// Instead of downloads panel opening, download notification should be shown.
DownloadsIndicatorView.showEventNotification = aType => {
if (aType == "start") {
DownloadsIndicatorView.showEventNotification = oldShowEventNotification;
resolve();
}
};
});
DownloadsCommon.getData(window)._notifyDownloadEvent("start");
is(
DownloadsPanel.isPanelShowing,
false,
"Panel state should NOT indicate a preparation to be opened"
);
await promiseDownloadStartedNotification;
is(DownloadsPanel.panel.state, "closed", "Panel should be closed");
});