From ddb55e32651674fe22811aa990ef0f036d9ac691 Mon Sep 17 00:00:00 2001 From: "vladimir@pobox.com" Date: Sun, 2 Mar 2008 23:31:37 -0800 Subject: [PATCH] backing out patch for bug 299372 for b4, as per bug 420481 --- browser/app/profile/firefox.js | 6 - browser/base/content/nsContextMenu.js | 117 +----------------- uriloader/base/nsURILoader.cpp | 1 - uriloader/base/nsURILoader.h | 6 - .../exthandler/nsExternalHelperAppService.cpp | 14 +-- .../exthandler/nsExternalHelperAppService.h | 9 +- .../nsIExternalHelperAppService.idl | 7 +- 7 files changed, 7 insertions(+), 153 deletions(-) diff --git a/browser/app/profile/firefox.js b/browser/app/profile/firefox.js index c35543f00585..0edbf931bdef 100644 --- a/browser/app/profile/firefox.js +++ b/browser/app/profile/firefox.js @@ -221,12 +221,6 @@ pref("browser.urlbar.maxRichResults", 25); pref("browser.urlbar.search.chunkSize", 1000); pref("browser.urlbar.search.timeout", 50); -// Number of milliseconds to wait for the http headers (and thus -// the Content-Disposition filename) before giving up and falling back to -// picking a filename without that info in hand so that the user sees some -// feedback from their action. -pref("browser.download.saveLinkAsFilenameTimeout", 1000); - pref("browser.download.useDownloadDir", true); pref("browser.download.folderList", 0); pref("browser.download.manager.showAlertOnComplete", true); diff --git a/browser/base/content/nsContextMenu.js b/browser/base/content/nsContextMenu.js index 06957f38e840..bd82882c613a 100644 --- a/browser/base/content/nsContextMenu.js +++ b/browser/base/content/nsContextMenu.js @@ -41,7 +41,6 @@ # Simon Bünzli # Gijs Kruitbosch # Ehsan Akhgari -# Dan Mosedale # # Alternatively, the contents of this file may be used under the terms of # either the GNU General Public License Version 2 or later (the "GPL"), or @@ -827,122 +826,10 @@ nsContextMenu.prototype = { // Save URL of clicked-on link. saveLink: function() { - // canonical def in nsURILoader.h - const NS_ERROR_SAVE_LINK_AS_TIMEOUT = 0x805d0020; - var doc = this.target.ownerDocument; urlSecurityCheck(this.linkURL, doc.nodePrincipal); - var linkText = this.linkText(); - var linkURL = this.linkURL; - - - // an object to proxy the data through to - // nsIExternalHelperAppService.doContent, which will wait for the - // appropriate MIME-type headers and then prompt the user with a - // file picker - function saveAsListener() {} - saveAsListener.prototype = { - extListener: null, - - onStartRequest: function saveLinkAs_onStartRequest(aRequest, aContext) { - - // if the timer fired, the error status will have been caused by that, - // and we'll be restarting in onStopRequest, so no reason to notify - // the user - if (aRequest.status == NS_ERROR_SAVE_LINK_AS_TIMEOUT) - return; - - timer.cancel(); - - // some other error occured; notify the user... - if (!Components.isSuccessCode(aRequest.status)) { - try { - const sbs = Cc["@mozilla.org/intl/stringbundle;1"]. - getService(Ci.nsIStringBundleService); - const bundle = sbs.createBundle( - "chrome://mozapps/locale/downloads/downloads.properties"); - - const title = bundle.GetStringFromName("downloadErrorAlertTitle"); - const msg = bundle.GetStringFromName("downloadErrorGeneric"); - - const promptSvc = Cc["@mozilla.org/embedcomp/prompt-service;1"]. - getService(Ci.nsIPromptService); - promptSvc.alert(doc.defaultView, title, msg); - } catch (ex) {} - return; - } - - var extHelperAppSvc = - Cc["@mozilla.org/uriloader/external-helper-app-service;1"]. - getService(Ci.nsIExternalHelperAppService); - this.extListener = - extHelperAppSvc.doContent(aRequest.contentType, aRequest, - doc.defaultView, true); - this.extListener.onStartRequest(aRequest, aContext); - }, - - onStopRequest: function saveLinkAs_onStopRequest(aRequest, aContext, - aStatusCode) { - if (aStatusCode == NS_ERROR_SAVE_LINK_AS_TIMEOUT) { - // do it the old fashioned way, which will pick the best filename - // it can without waiting. - saveURL(linkURL, linkText, null, true, false, doc.documentURIObject); - } - if (this.extListener) - this.extListener.onStopRequest(aRequest, aContext, aStatusCode); - }, - - onDataAvailable: function saveLinkAs_onDataAvailable(aRequest, aContext, - aInputStream, - aOffset, aCount) { - this.extListener.onDataAvailable(aRequest, aContext, aInputStream, - aOffset, aCount); - } - } - - // in case we need to prompt the user for authentication - function callbacks() {} - callbacks.prototype = { - getInterface: function sLA_callbacks_getInterface(aIID) { - if (aIID.equals(Ci.nsIAuthPrompt) || aIID.equals(Ci.nsIAuthPrompt2)) { - var ww = Cc["@mozilla.org/embedcomp/window-watcher;1"]. - getService(Ci.nsIPromptFactory); - return ww.getPrompt(doc.defaultView, aIID); - } - throw Cr.NS_ERROR_NO_INTERFACE; - } - } - - // if it we don't have the headers after a short time, the user - // won't have received any feedback from their click. that's bad. so - // we give up waiting for the filename. - function timerCallback() {} - timerCallback.prototype = { - notify: function sLA_timer_notify(aTimer) { - channel.cancel(NS_ERROR_SAVE_LINK_AS_TIMEOUT); - return; - } - } - - // set up a channel to do the saving - var ioService = Cc["@mozilla.org/network/io-service;1"]. - getService(Ci.nsIIOService); - var channel = ioService.newChannelFromURI(this.getLinkURI()); - channel.notificationCallbacks = new callbacks(); - channel.loadFlags |= Ci.nsIRequest.LOAD_BYPASS_CACHE | - Ci.nsIChannel.LOAD_CALL_CONTENT_SNIFFERS; - if (channel instanceof Ci.nsIHttpChannel) - channel.referrer = doc.documentURIObject; - - // fallback to the old way if we don't see the headers quickly - var timeToWait = - gPrefService.getIntPref("browser.download.saveLinkAsFilenameTimeout"); - var timer = Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer); - timer.initWithCallback(new timerCallback(), timeToWait, - timer.TYPE_ONE_SHOT); - - // kick off the channel with our proxy object as the listener - channel.asyncOpen(new saveAsListener(), null); + saveURL(this.linkURL, this.linkText(), null, true, false, + doc.documentURIObject); }, sendLink: function() { diff --git a/uriloader/base/nsURILoader.cpp b/uriloader/base/nsURILoader.cpp index f1ba46252862..c18554e35680 100644 --- a/uriloader/base/nsURILoader.cpp +++ b/uriloader/base/nsURILoader.cpp @@ -594,7 +594,6 @@ nsresult nsDocumentOpenInfo::DispatchContent(nsIRequest *request, nsISupports * rv = helperAppService->DoContent(mContentType, request, m_originalContext, - PR_FALSE, getter_AddRefs(m_targetStreamListener)); if (NS_FAILED(rv)) { request->SetLoadFlags(loadFlags); diff --git a/uriloader/base/nsURILoader.h b/uriloader/base/nsURILoader.h index 4615c33b623d..2ef4ce74bdb0 100644 --- a/uriloader/base/nsURILoader.h +++ b/uriloader/base/nsURILoader.h @@ -99,10 +99,4 @@ protected: #define NS_ERROR_MALWARE_URI NS_ERROR_GENERATE_FAILURE(NS_ERROR_MODULE_URILOADER, 30) #define NS_ERROR_PHISHING_URI NS_ERROR_GENERATE_FAILURE(NS_ERROR_MODULE_URILOADER, 31) -/** - * Used when "Save Link As..." doesn't see the headers quickly enough to choose - * a filename. See nsContextMenu.js. - */ -#define NS_ERROR_SAVE_LINK_AS_TIMEOUT NS_ERROR_GENERATE_FAILURE(NS_ERROR_MODULE_URILOADER, 32); - #endif /* nsURILoader_h__ */ diff --git a/uriloader/exthandler/nsExternalHelperAppService.cpp b/uriloader/exthandler/nsExternalHelperAppService.cpp index 8e72db491a40..224fb02d2614 100644 --- a/uriloader/exthandler/nsExternalHelperAppService.cpp +++ b/uriloader/exthandler/nsExternalHelperAppService.cpp @@ -524,7 +524,6 @@ nsExternalHelperAppService::~nsExternalHelperAppService() NS_IMETHODIMP nsExternalHelperAppService::DoContent(const nsACString& aMimeContentType, nsIRequest *aRequest, nsIInterfaceRequestor *aWindowContext, - PRBool aForceSave, nsIStreamListener ** aStreamListener) { nsAutoString fileName; @@ -641,8 +640,7 @@ NS_IMETHODIMP nsExternalHelperAppService::DoContent(const nsACString& aMimeConte buf, aWindowContext, fileName, - reason, - aForceSave); + reason); if (!handler) return NS_ERROR_OUT_OF_MEMORY; NS_ADDREF(*aStreamListener = handler); @@ -993,12 +991,11 @@ nsExternalAppHandler::nsExternalAppHandler(nsIMIMEInfo * aMIMEInfo, const nsCSubstring& aTempFileExtension, nsIInterfaceRequestor* aWindowContext, const nsAString& aSuggestedFilename, - PRUint32 aReason, PRBool aForceSave) + PRUint32 aReason) : mMimeInfo(aMIMEInfo) , mWindowContext(aWindowContext) , mWindowToClose(nsnull) , mSuggestedFileName(aSuggestedFilename) -, mForceSave(aForceSave) , mCanceled(PR_FALSE) , mShouldCloseWindow(PR_FALSE) , mReceivedDispositionInfo(PR_FALSE) @@ -1473,13 +1470,6 @@ NS_IMETHODIMP nsExternalAppHandler::OnStartRequest(nsIRequest *request, nsISuppo alwaysAsk = (action != nsIMIMEInfo::saveToDisk); } - // if we were told that we _must_ save to disk without asking, all the stuff - // before this is irrelevant; override it - if (mForceSave) { - alwaysAsk = PR_FALSE; - action = nsIMIMEInfo::saveToDisk; - } - if (alwaysAsk) { // do this first! make sure we don't try to take an action until the user tells us what they want to do diff --git a/uriloader/exthandler/nsExternalHelperAppService.h b/uriloader/exthandler/nsExternalHelperAppService.h index f271113956ff..b12ebeb35f55 100644 --- a/uriloader/exthandler/nsExternalHelperAppService.h +++ b/uriloader/exthandler/nsExternalHelperAppService.h @@ -251,7 +251,7 @@ public: nsExternalAppHandler(nsIMIMEInfo * aMIMEInfo, const nsCSubstring& aFileExtension, nsIInterfaceRequestor * aWindowContext, const nsAString& aFilename, - PRUint32 aReason, PRBool aForceSave); + PRUint32 aReason); ~nsExternalAppHandler(); @@ -280,13 +280,6 @@ protected: */ nsString mSuggestedFileName; - /** - * If set, this handler should forcibly save the file to disk regardless of - * MIME info settings or anything else, without ever popping up the - * unknown content type handling dialog. - */ - PRPackedBool mForceSave; - /** * The canceled flag is set if the user canceled the launching of this * application before we finished saving the data to a temp file. diff --git a/uriloader/exthandler/nsIExternalHelperAppService.idl b/uriloader/exthandler/nsIExternalHelperAppService.idl index 02d3f622b7eb..29670bd14b58 100644 --- a/uriloader/exthandler/nsIExternalHelperAppService.idl +++ b/uriloader/exthandler/nsIExternalHelperAppService.idl @@ -51,7 +51,7 @@ interface nsIInterfaceRequestor; * The external helper app service is used for finding and launching * platform specific external applications for a given mime content type. */ -[scriptable, uuid(9e456297-ba3e-42b1-92bd-b7db014268cb)] +[scriptable, uuid(0ea90cf3-2dd9-470f-8f76-f141743c5678)] interface nsIExternalHelperAppService : nsISupports { /** @@ -64,13 +64,10 @@ interface nsIExternalHelperAppService : nsISupports * @param aWindowContext Use GetInterface to retrieve properties like the * dom window or parent window... * The service might need this in order to bring up dialogs. - * @param aForceSave True to always save this content to disk, regardless of - * nsIMIMEInfo and other such influences. * @return A nsIStreamListener which the caller should pump the data into. */ nsIStreamListener doContent (in ACString aMimeContentType, in nsIRequest aRequest, - in nsIInterfaceRequestor aWindowContext, - in boolean aForceSave); + in nsIInterfaceRequestor aWindowContext); /** * Returns true if data from a URL with this extension combination