mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
75 lines
2.2 KiB
C++
75 lines
2.2 KiB
C++
/**
|
|
* Opens an individual progress dialog displaying progress for the download.
|
|
*
|
|
* @param aPersistentDescriptor The persistent descriptor of the download to
|
|
* display progress for.
|
|
*
|
|
* @param aParent The parent, or opener, of the front end (optional).
|
|
*/
|
|
|
|
void openProgressDialogFor(in wstring aPersistentDescriptor, in nsIDOMWindow aParent);
|
|
|
|
NS_IMETHODIMP
|
|
nsDownloadManager::OpenProgressDialogFor(const PRUnichar* aPath, nsIDOMWindow* aParent)
|
|
{
|
|
nsresult rv;
|
|
nsStringKey key(aPath);
|
|
if (!mCurrDownloads.Exists(&key))
|
|
return NS_ERROR_FAILURE;
|
|
|
|
nsCOMPtr<nsIDownload> download;
|
|
nsDownload* internalDownload = static_cast<nsDownload*>(mCurrDownloads.Get(&key));
|
|
internalDownload->QueryInterface(NS_GET_IID(nsIDownload), (void**) getter_AddRefs(download));
|
|
if (!download)
|
|
return NS_ERROR_FAILURE;
|
|
|
|
|
|
nsCOMPtr<nsIProgressDialog> oldDialog;
|
|
internalDownload->GetDialog(getter_AddRefs(oldDialog));
|
|
|
|
if (oldDialog) {
|
|
nsCOMPtr<nsIDOMWindow> window;
|
|
oldDialog->GetDialog(getter_AddRefs(window));
|
|
if (window) {
|
|
nsCOMPtr<nsIDOMWindowInternal> internalWin = do_QueryInterface(window);
|
|
internalWin->Focus();
|
|
return NS_OK;
|
|
}
|
|
}
|
|
|
|
nsCOMPtr<nsIProgressDialog> dialog(do_CreateInstance("@mozilla.org/progressdialog;1", &rv));
|
|
if (NS_FAILED(rv)) return rv;
|
|
|
|
nsCOMPtr<nsIDownload> dl = do_QueryInterface(dialog);
|
|
|
|
// now give the dialog the necessary context
|
|
|
|
// start time...
|
|
PRInt64 startTime = 0;
|
|
download->GetStartTime(&startTime);
|
|
|
|
// source...
|
|
nsCOMPtr<nsIURI> source;
|
|
download->GetSource(getter_AddRefs(source));
|
|
|
|
// target...
|
|
nsCOMPtr<nsILocalFile> target;
|
|
download->GetTarget(getter_AddRefs(target));
|
|
|
|
// helper app...
|
|
nsCOMPtr<nsIMIMEInfo> mimeInfo;
|
|
download->GetMIMEInfo(getter_AddRefs(mimeInfo));
|
|
|
|
dl->Init(source, target, nsnull, mimeInfo, startTime, nsnull);
|
|
dl->SetObserver(this);
|
|
|
|
// now set the listener so we forward notifications to the dialog
|
|
nsCOMPtr<nsIWebProgressListener> listener = do_QueryInterface(dialog);
|
|
internalDownload->SetDialogListener(listener);
|
|
|
|
internalDownload->SetDialog(dialog);
|
|
|
|
return dialog->Open(aParent);
|
|
}
|
|
|