diff --git a/toolkit/components/downloads/nsDownloadManager.cpp b/toolkit/components/downloads/nsDownloadManager.cpp index 53e2b2c0722e..32c537552cf9 100644 --- a/toolkit/components/downloads/nsDownloadManager.cpp +++ b/toolkit/components/downloads/nsDownloadManager.cpp @@ -231,7 +231,7 @@ nsDownloadManager::RemoveAllDownloads(nsCOMArray& aDownloads) nsRefPtr dl = aDownloads[0]; nsresult result = NS_OK; - if (dl->IsPaused() && GetQuitBehavior() != QUIT_AND_CANCEL) + if (!dl->mPrivate && dl->IsPaused() && GetQuitBehavior() != QUIT_AND_CANCEL) aDownloads.RemoveObject(dl); else result = dl->Cancel(); @@ -2418,7 +2418,6 @@ nsDownloadManager::Observe(nsISupports *aSubject, // Upon leaving private browsing mode, cancel all private downloads, // remove all trace of them, and then blow away the private database // and recreate a blank one. - PauseAllDownloads(mCurrentPrivateDownloads, true); RemoveAllDownloads(mCurrentPrivateDownloads); InitPrivateDB(); } else if (strcmp(aTopic, "last-pb-context-exiting") == 0) { diff --git a/toolkit/components/downloads/test/unit/test_privatebrowsing_cancel.js b/toolkit/components/downloads/test/unit/test_privatebrowsing_cancel.js index ebca5d6d964f..04fc55f2f89d 100644 --- a/toolkit/components/downloads/test/unit/test_privatebrowsing_cancel.js +++ b/toolkit/components/downloads/test/unit/test_privatebrowsing_cancel.js @@ -4,7 +4,7 @@ /** Make sure that the download manager service is given a chance to cancel the - private browisng mode transition. + private browsing mode transition. **/ const Cm = Components.manager; @@ -78,9 +78,9 @@ function trigger_pb_cleanup(expected) function run_test() { function finishTest() { - // Cancel Download-E - dlF.cancel(); - dlF.remove(); + // Cancel Download-G + dlG.cancel(); + dlG.remove(); dm.cleanUp(); dm.cleanUpPrivate(); do_check_eq(dm.activeDownloadCount, 0); @@ -161,11 +161,11 @@ function run_test() { trigger_pb_cleanup(false); do_check_true(promptService.wasCalled()); do_check_eq(dm.activePrivateDownloadCount, 0); - do_check_eq(dlE.state, dm.DOWNLOAD_PAUSED); + do_check_eq(dlE.state, dm.DOWNLOAD_CANCELED); // Create Download-F dlF = addDownload({ - isPrivate: false, + isPrivate: true, targetFile: fileF, sourceURI: downloadFSource, downloadName: downloadFName @@ -173,17 +173,42 @@ function run_test() { // Wait for Download-F to start } else if (aDownload.targetFile.equals(dlF.targetFile)) { - // Sanity check: Download-F must not be resumable - do_check_false(dlF.resumable); + // Sanity check: Download-F must be resumable + do_check_true(dlF.resumable); + dlF.pause(); + + } else if (aDownload.targetFile.equals(dlG.targetFile)) { + // Sanity check: Download-G must not be resumable + do_check_false(dlG.resumable); promptService.sayCancel(); trigger_pb_cleanup(false); do_check_false(promptService.wasCalled()); do_check_eq(dm.activeDownloadCount, 1); - do_check_eq(dlF.state, dm.DOWNLOAD_DOWNLOADING); + do_check_eq(dlG.state, dm.DOWNLOAD_DOWNLOADING); finishTest(); } break; + + case dm.DOWNLOAD_PAUSED: + if (aDownload.targetFile.equals(dlF.targetFile)) { + promptService.sayProceed(); + trigger_pb_cleanup(false); + do_check_true(promptService.wasCalled()); + do_check_eq(dm.activePrivateDownloadCount, 0); + do_check_eq(dlF.state, dm.DOWNLOAD_CANCELED); + + // Create Download-G + dlG = addDownload({ + isPrivate: false, + targetFile: fileG, + sourceURI: downloadGSource, + downloadName: downloadGName + }); + + // Wait for Download-G to start + } + break; } }, onStateChange: function(a, b, c, d, e) { }, @@ -204,10 +229,15 @@ function run_test() { const downloadEName = "download-E"; // properties of Download-F - const downloadFSource = "http://localhost:4444/noresume"; + const downloadFSource = "http://localhost:4444/file/head_download_manager.js"; const downloadFDest = "download-file-F"; const downloadFName = "download-F"; + // properties of Download-G + const downloadGSource = "http://localhost:4444/noresume"; + const downloadGDest = "download-file-G"; + const downloadGName = "download-G"; + // Create all target files let fileD = tmpDir.clone(); fileD.append(downloadDDest); @@ -218,6 +248,9 @@ function run_test() { let fileF = tmpDir.clone(); fileF.append(downloadFDest); fileF.createUnique(Ci.nsIFile.NORMAL_FILE_TYPE, 0666); + let fileG = tmpDir.clone(); + fileG.append(downloadGDest); + fileG.createUnique(Ci.nsIFile.NORMAL_FILE_TYPE, 0666); // Create Download-D let dlD = addDownload({ @@ -227,7 +260,7 @@ function run_test() { downloadName: downloadDName }); - let dlE, dlF; + let dlE, dlF, dlG; // wait for Download-D to start }