зеркало из https://github.com/mozilla/gecko-dev.git
Bug 773942 - Create a new init method in nsITransfer that accepts a BrowsingContext and if the download should be handled internally for backwards-compat. r=Gijs
Differential Revision: https://phabricator.services.mozilla.com/D75186
This commit is contained in:
Родитель
6a71aa8029
Коммит
788718620f
|
@ -269,8 +269,68 @@ DownloadLegacyTransfer.prototype = {
|
|||
aStartTime,
|
||||
aTempFile,
|
||||
aCancelable,
|
||||
aIsPrivate
|
||||
) {
|
||||
return this._nsITransferInitInternal(
|
||||
aSource,
|
||||
aTarget,
|
||||
aDisplayName,
|
||||
aMIMEInfo,
|
||||
aStartTime,
|
||||
aTempFile,
|
||||
aCancelable,
|
||||
aIsPrivate
|
||||
);
|
||||
},
|
||||
|
||||
// nsITransfer
|
||||
initWithBrowsingContext(
|
||||
aSource,
|
||||
aTarget,
|
||||
aDisplayName,
|
||||
aMIMEInfo,
|
||||
aStartTime,
|
||||
aTempFile,
|
||||
aCancelable,
|
||||
aIsPrivate,
|
||||
aBrowsingContext,
|
||||
aHandleInternally
|
||||
) {
|
||||
let browsingContextId;
|
||||
let userContextId;
|
||||
if (aBrowsingContext && aBrowsingContext.currentWindowGlobal) {
|
||||
browsingContextId = aBrowsingContext.id;
|
||||
let windowGlobal = aBrowsingContext.currentWindowGlobal;
|
||||
let originAttributes = windowGlobal.documentPrincipal.originAttributes;
|
||||
userContextId = originAttributes.userContextId;
|
||||
}
|
||||
return this._nsITransferInitInternal(
|
||||
aSource,
|
||||
aTarget,
|
||||
aDisplayName,
|
||||
aMIMEInfo,
|
||||
aStartTime,
|
||||
aTempFile,
|
||||
aCancelable,
|
||||
aIsPrivate,
|
||||
userContextId,
|
||||
browsingContextId,
|
||||
aHandleInternally
|
||||
);
|
||||
},
|
||||
|
||||
_nsITransferInitInternal(
|
||||
aSource,
|
||||
aTarget,
|
||||
aDisplayName,
|
||||
aMIMEInfo,
|
||||
aStartTime,
|
||||
aTempFile,
|
||||
aCancelable,
|
||||
isPrivate,
|
||||
userContextId = 0,
|
||||
browsingContextId = 0,
|
||||
handleInternally = false
|
||||
) {
|
||||
this._cancelable = aCancelable;
|
||||
|
||||
|
@ -295,11 +355,6 @@ DownloadLegacyTransfer.prototype = {
|
|||
// Create a new Download object associated to a DownloadLegacySaver, and
|
||||
// wait for it to be available. This operation may cause the entire
|
||||
// download system to initialize before the object is created.
|
||||
let browsingContextId = aBrowsingContext.id;
|
||||
let windowGlobal = aBrowsingContext.currentWindowGlobal;
|
||||
let originAttributes = windowGlobal.documentPrincipal.originAttributes;
|
||||
let isPrivate = originAttributes.privateBrowsingId > 0;
|
||||
let { userContextId } = originAttributes;
|
||||
Downloads.createDownload({
|
||||
source: {
|
||||
url: aSource.spec,
|
||||
|
@ -315,7 +370,7 @@ DownloadLegacyTransfer.prototype = {
|
|||
launchWhenSucceeded,
|
||||
contentType,
|
||||
launcherPath,
|
||||
handleInternally: aHandleInternally,
|
||||
handleInternally,
|
||||
})
|
||||
.then(aDownload => {
|
||||
// Legacy components keep partial data when they use a ".part" file.
|
||||
|
|
|
@ -68,6 +68,7 @@ MockTransfer.prototype = {
|
|||
|
||||
/* nsITransfer */
|
||||
init() {},
|
||||
initWithBrowsingContext() {},
|
||||
setSha256Hash() {},
|
||||
setSignatureInfo() {},
|
||||
};
|
||||
|
|
|
@ -51,8 +51,6 @@ interface nsITransfer : nsIWebProgressListener2 {
|
|||
* If true, indicates that the transfer was initiated from
|
||||
* a source that desires privacy.
|
||||
*
|
||||
* @param aHandleInternally Set to true if the download should be opened within
|
||||
* the browser.
|
||||
*/
|
||||
void init(in nsIURI aSource,
|
||||
in nsIURI aTarget,
|
||||
|
@ -61,8 +59,28 @@ interface nsITransfer : nsIWebProgressListener2 {
|
|||
in PRTime startTime,
|
||||
in nsIFile aTempFile,
|
||||
in nsICancelable aCancelable,
|
||||
in BrowsingContext aBrowsingContext,
|
||||
in boolean aHandleInternally);
|
||||
in boolean aIsPrivate);
|
||||
|
||||
/**
|
||||
* Same as init, but allows for passing the browsingContext
|
||||
* which will allow for opening the download with the same
|
||||
* userContextId
|
||||
*
|
||||
* @param aBrowsingContext BrowsingContext of the initiating document.
|
||||
*
|
||||
* @param aHandleInternally Set to true if the download should be opened within
|
||||
* the browser.
|
||||
*/
|
||||
void initWithBrowsingContext(in nsIURI aSource,
|
||||
in nsIURI aTarget,
|
||||
in AString aDisplayName,
|
||||
in nsIMIMEInfo aMIMEInfo,
|
||||
in PRTime startTime,
|
||||
in nsIFile aTempFile,
|
||||
in nsICancelable aCancelable,
|
||||
in boolean aIsPrivate,
|
||||
in BrowsingContext aBrowsingContext,
|
||||
in boolean aHandleInternally);
|
||||
|
||||
/*
|
||||
* Used to notify the transfer object of the hash of the downloaded file.
|
||||
|
|
|
@ -2109,9 +2109,18 @@ nsresult nsExternalAppHandler::CreateTransfer() {
|
|||
rv = NS_NewFileURI(getter_AddRefs(target), mFinalFileDestination);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
rv = transfer->Init(mSourceUrl, target, EmptyString(), mMimeInfo,
|
||||
mTimeDownloadStarted, mTempFile, this, mBrowsingContext,
|
||||
mHandleInternally);
|
||||
nsCOMPtr<nsIChannel> channel = do_QueryInterface(mRequest);
|
||||
if (mBrowsingContext) {
|
||||
rv = transfer->InitWithBrowsingContext(
|
||||
mSourceUrl, target, EmptyString(), mMimeInfo, mTimeDownloadStarted,
|
||||
mTempFile, this, channel && NS_UsePrivateBrowsing(channel),
|
||||
mBrowsingContext, mHandleInternally);
|
||||
} else {
|
||||
rv = transfer->Init(mSourceUrl, target, EmptyString(), mMimeInfo,
|
||||
mTimeDownloadStarted, mTempFile, this,
|
||||
channel && NS_UsePrivateBrowsing(channel));
|
||||
}
|
||||
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
// If we were cancelled since creating the transfer, just return. It is
|
||||
|
@ -2168,9 +2177,18 @@ nsresult nsExternalAppHandler::CreateFailedTransfer() {
|
|||
rv = NS_NewFileURI(getter_AddRefs(pseudoTarget), pseudoFile);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
rv = transfer->Init(mSourceUrl, pseudoTarget, EmptyString(), mMimeInfo,
|
||||
mTimeDownloadStarted, nullptr, this, mBrowsingContext,
|
||||
mHandleInternally);
|
||||
nsCOMPtr<nsIChannel> channel = do_QueryInterface(mRequest);
|
||||
if (mBrowsingContext) {
|
||||
rv = transfer->InitWithBrowsingContext(
|
||||
mSourceUrl, pseudoTarget, EmptyString(), mMimeInfo,
|
||||
mTimeDownloadStarted, nullptr, this,
|
||||
channel && NS_UsePrivateBrowsing(channel), mBrowsingContext,
|
||||
mHandleInternally);
|
||||
} else {
|
||||
rv = transfer->Init(mSourceUrl, pseudoTarget, EmptyString(), mMimeInfo,
|
||||
mTimeDownloadStarted, nullptr, this,
|
||||
channel && NS_UsePrivateBrowsing(channel));
|
||||
}
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
// Our failed transfer is ready.
|
||||
|
|
Загрузка…
Ссылка в новой задаче