mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-02-23 02:47:07 +00:00
bug 315227 make saveURI-downloads from servers requiring authentication work
r=gavin/neil
This commit is contained in:
parent
1bd1d3484f
commit
3cc33af8bd
@ -169,6 +169,49 @@ function saveDocument(aDocument, aSkipPrompt)
|
||||
aDocument.contentType, false, null, null, aSkipPrompt);
|
||||
}
|
||||
|
||||
|
||||
function DownloadListener(win, transfer) {
|
||||
function makeClosure(name) {
|
||||
return function() {
|
||||
transfer[name].apply(transfer, arguments);
|
||||
}
|
||||
}
|
||||
|
||||
this.window = win;
|
||||
|
||||
// Now... we need to forward all calls to our transfer
|
||||
for (var i in transfer) {
|
||||
if (i != "QueryInterface")
|
||||
this[i] = makeClosure(i);
|
||||
}
|
||||
}
|
||||
|
||||
DownloadListener.prototype = {
|
||||
QueryInterface: function dl_qi(aIID)
|
||||
{
|
||||
if (aIID.equals(Components.interfaces.nsIInterfaceRequestor) ||
|
||||
aIID.equals(Components.interfaces.nsIWebProgressListener) ||
|
||||
aIID.equals(Components.interfaces.nsIWebProgressListener2) ||
|
||||
aIID.equals(Components.interfaces.nsISupports)) {
|
||||
return this;
|
||||
}
|
||||
throw Components.results.NS_ERROR_NO_INTERFACE;
|
||||
},
|
||||
|
||||
getInterface: function dl_gi(aIID)
|
||||
{
|
||||
if (aIID.equals(Components.interfaces.nsIAuthPrompt) ||
|
||||
aIID.equals(Components.interfaces.nsIAuthPrompt2)) {
|
||||
var ww =
|
||||
Components.classes["@mozilla.org/embedcomp/window-watcher;1"]
|
||||
.getService(Components.interfaces.nsIPromptFactory);
|
||||
return ww.getPrompt(this.window, aIID);
|
||||
}
|
||||
|
||||
throw Components.results.NS_ERROR_NO_INTERFACE;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* internalSave: Used when saving a document or URL. This method:
|
||||
* - Determines a local target filename to use (unless parameter
|
||||
@ -311,13 +354,13 @@ function internalSave(aURL, aDocument, aDefaultFileName, aContentDisposition,
|
||||
const kWrapColumn = 80;
|
||||
tr.init((aChosenData ? aChosenData.uri : fileInfo.uri),
|
||||
persistArgs.target, "", null, null, null, persist);
|
||||
persist.progressListener = tr;
|
||||
persist.progressListener = new DownloadListener(window, tr);
|
||||
persist.saveDocument(persistArgs.source, persistArgs.target, filesFolder,
|
||||
persistArgs.contentType, encodingFlags, kWrapColumn);
|
||||
} else {
|
||||
tr.init((aChosenData ? aChosenData.uri : source),
|
||||
persistArgs.target, "", null, null, null, persist);
|
||||
persist.progressListener = tr;
|
||||
persist.progressListener = new DownloadListener(window, tr);
|
||||
persist.saveURI((aChosenData ? aChosenData.uri : source),
|
||||
null, aReferrer, persistArgs.postData, null,
|
||||
persistArgs.target);
|
||||
|
@ -264,6 +264,48 @@ function saveDocument(aDocument)
|
||||
aDocument.contentType, false, null, null);
|
||||
}
|
||||
|
||||
function DownloadListener(win, transfer) {
|
||||
function makeClosure(name) {
|
||||
return function() {
|
||||
transfer[name].apply(transfer, arguments);
|
||||
}
|
||||
}
|
||||
|
||||
this.window = win;
|
||||
|
||||
// Now... we need to forward all calls to our transfer
|
||||
for (var i in transfer) {
|
||||
if (i != "QueryInterface")
|
||||
this[i] = makeClosure(i);
|
||||
}
|
||||
}
|
||||
|
||||
DownloadListener.prototype = {
|
||||
QueryInterface: function dl_qi(aIID)
|
||||
{
|
||||
if (aIID.equals(Components.interfaces.nsIInterfaceRequestor) ||
|
||||
aIID.equals(Components.interfaces.nsIWebProgressListener) ||
|
||||
aIID.equals(Components.interfaces.nsIWebProgressListener2) ||
|
||||
aIID.equals(Components.interfaces.nsISupports)) {
|
||||
return this;
|
||||
}
|
||||
throw Components.results.NS_ERROR_NO_INTERFACE;
|
||||
},
|
||||
|
||||
getInterface: function dl_gi(aIID)
|
||||
{
|
||||
if (aIID.equals(Components.interfaces.nsIAuthPrompt) ||
|
||||
aIID.equals(Components.interfaces.nsIAuthPrompt2)) {
|
||||
var ww =
|
||||
Components.classes["@mozilla.org/embedcomp/window-watcher;1"]
|
||||
.getService(Components.interfaces.nsIPromptFactory);
|
||||
return ww.getPrompt(this.window, aIID);
|
||||
}
|
||||
|
||||
throw Components.results.NS_ERROR_NO_INTERFACE;
|
||||
}
|
||||
}
|
||||
|
||||
const SAVETYPE_COMPLETE_PAGE = 0x00;
|
||||
const SAVETYPE_TEXT_ONLY = 0x02;
|
||||
/**
|
||||
@ -404,13 +446,13 @@ function internalSave(aURL, aDocument, aDefaultFileName, aContentDisposition,
|
||||
const kWrapColumn = 80;
|
||||
tr.init((aChosenData ? aChosenData.uri : fileInfo.uri),
|
||||
persistArgs.target, "", null, null, null, persist);
|
||||
persist.progressListener = tr;
|
||||
persist.progressListener = new DownloadListener(window, tr);
|
||||
persist.saveDocument(persistArgs.source, persistArgs.target, filesFolder,
|
||||
persistArgs.contentType, encodingFlags, kWrapColumn);
|
||||
} else {
|
||||
tr.init((aChosenData ? aChosenData.uri : source),
|
||||
persistArgs.target, "", null, null, null, persist);
|
||||
persist.progressListener = tr;
|
||||
persist.progressListener = new DownloadListener(window, tr);
|
||||
persist.saveURI((aChosenData ? aChosenData.uri : source),
|
||||
null, aReferrer, persistArgs.postData, null,
|
||||
persistArgs.target);
|
||||
|
Loading…
x
Reference in New Issue
Block a user