From 5107bb3857097243db6ddd657dc75974d6310dd9 Mon Sep 17 00:00:00 2001 From: "sdwilsh%shawnwilsher.com" Date: Wed, 15 Aug 2007 17:56:51 +0000 Subject: [PATCH] Bug 390748 - When downloading multiple files, Download Manager doesn't show files it has queued. r=mano, a=blocking-firefox3 git-svn-id: svn://10.0.0.236/trunk@232150 18797224-902f-48f8-a5cc-f745e15eee43 --- .../downloads/public/nsIDownloadManager.idl | 3 ++- .../downloads/src/nsDownloadManager.cpp | 27 ++++++++++++++----- .../downloads/src/nsDownloadManager.h | 1 + .../test/unit/head_download_manager.js | 6 ++--- .../content/DownloadProgressListener.js | 2 +- .../mozapps/downloads/content/download.xml | 1 + 6 files changed, 29 insertions(+), 11 deletions(-) diff --git a/mozilla/toolkit/components/downloads/public/nsIDownloadManager.idl b/mozilla/toolkit/components/downloads/public/nsIDownloadManager.idl index 4acd424c06b..0342b21d37d 100644 --- a/mozilla/toolkit/components/downloads/public/nsIDownloadManager.idl +++ b/mozilla/toolkit/components/downloads/public/nsIDownloadManager.idl @@ -51,10 +51,11 @@ interface nsIDownloadProgressListener; interface nsISimpleEnumerator; interface mozIStorageConnection; -[scriptable, uuid(0e8ded0d-c6e4-4b67-9d1e-42fe3d405491)] +[scriptable, uuid(b0ba9b75-2aad-4293-8680-3fc66b13e546)] interface nsIDownloadManager : nsISupports { // Download States const short DOWNLOAD_NOTSTARTED = -1; + const short DOWNLOAD_QUEUED = 5; const short DOWNLOAD_DOWNLOADING = 0; const short DOWNLOAD_FINISHED = 1; const short DOWNLOAD_FAILED = 2; diff --git a/mozilla/toolkit/components/downloads/src/nsDownloadManager.cpp b/mozilla/toolkit/components/downloads/src/nsDownloadManager.cpp index c01505418d1..e8037f5a776 100644 --- a/mozilla/toolkit/components/downloads/src/nsDownloadManager.cpp +++ b/mozilla/toolkit/components/downloads/src/nsDownloadManager.cpp @@ -740,6 +740,7 @@ nsDownloadManager::AddDownload(DownloadType aDownloadType, dl->mID = id; rv = AddToCurrentDownloads(dl); + (void)dl->SetState(nsIDownloadManager::DOWNLOAD_QUEUED); NS_ENSURE_SUCCESS(rv, rv); NS_ADDREF(*aDownload = dl); @@ -842,8 +843,6 @@ nsDownloadManager::RetryDownload(PRUint32 aID) dl->mDownloadManager = this; dl->SetStartTime(PR_Now()); - rv = dl->SetState(nsIDownloadManager::DOWNLOAD_NOTSTARTED); - NS_ENSURE_SUCCESS(rv, rv); nsCOMPtr wbp = do_CreateInstance("@mozilla.org/embedding/browser/nsWebBrowserPersist;1", &rv); @@ -855,12 +854,28 @@ nsDownloadManager::RetryDownload(PRUint32 aID) rv = wbp->SetPersistFlags(nsIWebBrowserPersist::PERSIST_FLAGS_REPLACE_EXISTING_FILES | nsIWebBrowserPersist::PERSIST_FLAGS_AUTODETECT_APPLY_CONVERSION); - NS_ENSURE_SUCCESS(rv, rv); + if (NS_FAILED(rv)) { + dl->mCancelable = nsnull; + (void)wbp->SetProgressListener(nsnull); + return rv; + } rv = AddToCurrentDownloads(dl); - NS_ENSURE_SUCCESS(rv, rv); + if (NS_FAILED(rv)) { + dl->mCancelable = nsnull; + (void)wbp->SetProgressListener(nsnull); + return rv; + } + (void)dl->SetState(nsIDownloadManager::DOWNLOAD_QUEUED); - return wbp->SaveURI(dl->mSource, nsnull, nsnull, nsnull, nsnull, dl->mTarget); + rv = wbp->SaveURI(dl->mSource, nsnull, nsnull, nsnull, nsnull, dl->mTarget); + if (NS_FAILED(rv)) { + dl->mCancelable = nsnull; + (void)wbp->SetProgressListener(nsnull); + return rv; + } + + return NS_OK; } NS_IMETHODIMP @@ -1337,7 +1352,7 @@ nsDownload::OnProgressChange64(nsIWebProgress *aWebProgress, if (!mRequest) mRequest = aRequest; // used for pause/resume - if (mDownloadState == nsIDownloadManager::DOWNLOAD_NOTSTARTED) { + if (mDownloadState == nsIDownloadManager::DOWNLOAD_QUEUED) { nsresult rv = SetState(nsIDownloadManager::DOWNLOAD_DOWNLOADING); NS_ENSURE_SUCCESS(rv, rv); mDownloadManager->mObserverService->NotifyObservers(this, "dl-start", nsnull); diff --git a/mozilla/toolkit/components/downloads/src/nsDownloadManager.h b/mozilla/toolkit/components/downloads/src/nsDownloadManager.h index 6d4faad2824..4d50e3d1971 100644 --- a/mozilla/toolkit/components/downloads/src/nsDownloadManager.h +++ b/mozilla/toolkit/components/downloads/src/nsDownloadManager.h @@ -170,6 +170,7 @@ protected: static PRBool IsInProgress(DownloadState aState) { return aState == nsIDownloadManager::DOWNLOAD_NOTSTARTED || + aState == nsIDownloadManager::DOWNLOAD_QUEUED || aState == nsIDownloadManager::DOWNLOAD_DOWNLOADING || aState == nsIDownloadManager::DOWNLOAD_PAUSED; } diff --git a/mozilla/toolkit/components/downloads/test/unit/head_download_manager.js b/mozilla/toolkit/components/downloads/test/unit/head_download_manager.js index afa2b55846b..ff40635b043 100644 --- a/mozilla/toolkit/components/downloads/test/unit/head_download_manager.js +++ b/mozilla/toolkit/components/downloads/test/unit/head_download_manager.js @@ -120,6 +120,9 @@ function addDownload() var srcFile = dirSvc.get("ProfD", Ci.nsIFile); srcFile.append("LICENSE"); + // it is part of the active downloads the moment addDownload is called + gDownloadCount++; + var dl = dm.addDownload(nsIDownloadManager.DOWNLOAD_TYPE_DOWNLOAD, createURI("http://localhost:4444/LICENSE"), createURI(destFile), null, null, @@ -129,9 +132,6 @@ function addDownload() // try catch block var test = dm.getDownload(dl.id); - // it is part of the active downloads now, even if it hasn't started. - gDownloadCount++; - persist.progressListener = dl.QueryInterface(Ci.nsIWebProgressListener); persist.saveURI(dl.source, null, null, null, null, dl.targetFile); diff --git a/mozilla/toolkit/mozapps/downloads/content/DownloadProgressListener.js b/mozilla/toolkit/mozapps/downloads/content/DownloadProgressListener.js index 24c745d4720..dd193c464e9 100644 --- a/mozilla/toolkit/mozapps/downloads/content/DownloadProgressListener.js +++ b/mozilla/toolkit/mozapps/downloads/content/DownloadProgressListener.js @@ -65,7 +65,7 @@ DownloadProgressListener.prototype = { var dl = getDownload(aDownload.id); switch (aDownload.state) { - case Ci.nsIDownloadManager.DOWNLOAD_NOTSTARTED: + case Ci.nsIDownloadManager.DOWNLOAD_QUEUED: // We'll have at least one active download now gDownloadsActiveTitle.hidden = false; case Ci.nsIDownloadManager.DOWNLOAD_DOWNLOADING: diff --git a/mozilla/toolkit/mozapps/downloads/content/download.xml b/mozilla/toolkit/mozapps/downloads/content/download.xml index 830dd13838b..c6cba7d580a 100644 --- a/mozilla/toolkit/mozapps/downloads/content/download.xml +++ b/mozilla/toolkit/mozapps/downloads/content/download.xml @@ -85,6 +85,7 @@ var state = parseInt(this.getAttribute("state")); const dl = Components.interfaces.nsIDownloadManager; return state == dl.DOWNLOAD_NOTSTARTED || + state == dl.DOWNLOAD_QUEUED || state == dl.DOWNLOAD_DOWNLOADING || state == dl.DOWNLOAD_PAUSED; ]]>