mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-02-14 20:22:00 +00:00
Bug 1432320 - (Part 2) Change calls to nsIURL.{fileName,fileBaseName,fileExtension} setters to use nsIURLMutator r=mayhemer
MozReview-Commit-ID: D5aTl1i14gI --HG-- extra : rebase_source : 6d4a8606da971426c554c31d188567cf1e6c8741
This commit is contained in:
parent
d4c640e9f7
commit
7183e543b2
@ -39,6 +39,7 @@
|
||||
#include "nsITextControlElement.h"
|
||||
#include "nsUnicharUtils.h"
|
||||
#include "nsIURL.h"
|
||||
#include "nsIURIMutator.h"
|
||||
#include "nsIDocument.h"
|
||||
#include "nsIScriptSecurityManager.h"
|
||||
#include "nsIPrincipal.h"
|
||||
@ -597,15 +598,15 @@ DragDataProducer::Produce(DataTransfer* aDataTransfer,
|
||||
&validExtension)) ||
|
||||
!validExtension) {
|
||||
// Fix the file extension in the URL
|
||||
nsresult rv = imgUrl->Clone(getter_AddRefs(imgUri));
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
imgUrl = do_QueryInterface(imgUri);
|
||||
|
||||
nsAutoCString primaryExtension;
|
||||
mimeInfo->GetPrimaryExtension(primaryExtension);
|
||||
|
||||
imgUrl->SetFileExtension(primaryExtension);
|
||||
rv = NS_MutateURI(imgUrl)
|
||||
.Apply<nsIURLMutator>(&nsIURLMutator::SetFileExtension,
|
||||
primaryExtension,
|
||||
nullptr)
|
||||
.Finalize(imgUrl);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
}
|
||||
|
||||
nsAutoCString fileName;
|
||||
|
@ -40,6 +40,7 @@
|
||||
#include "nsGkAtoms.h"
|
||||
#include "nsIFrame.h"
|
||||
#include "nsIURI.h"
|
||||
#include "nsIURIMutator.h"
|
||||
#include "nsISimpleEnumerator.h"
|
||||
|
||||
// image copy stuff
|
||||
@ -651,15 +652,15 @@ static nsresult AppendImagePromise(nsITransferable* aTransferable,
|
||||
&validExtension)) ||
|
||||
!validExtension) {
|
||||
// Fix the file extension in the URL
|
||||
rv = imgUrl->Clone(getter_AddRefs(imgUri));
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
imgUrl = do_QueryInterface(imgUri);
|
||||
|
||||
nsAutoCString primaryExtension;
|
||||
mimeInfo->GetPrimaryExtension(primaryExtension);
|
||||
|
||||
imgUrl->SetFileExtension(primaryExtension);
|
||||
rv = NS_MutateURI(imgUri)
|
||||
.Apply<nsIURLMutator>(&nsIURLMutator::SetFileExtension,
|
||||
primaryExtension,
|
||||
nullptr)
|
||||
.Finalize(imgUrl);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
}
|
||||
|
||||
nsAutoCString fileName;
|
||||
|
@ -38,6 +38,7 @@
|
||||
|
||||
#include "nsIURL.h"
|
||||
#include "nsIFileURL.h"
|
||||
#include "nsIURIMutator.h"
|
||||
#include "nsIWebProgressListener.h"
|
||||
#include "nsIAuthPrompt.h"
|
||||
#include "nsIPrompt.h"
|
||||
@ -855,11 +856,19 @@ NS_IMETHODIMP nsWebBrowserPersist::OnStartRequest(
|
||||
|
||||
if (data->mCalcFileExt && !(mPersistFlags & PERSIST_FLAGS_DONT_CHANGE_FILENAMES))
|
||||
{
|
||||
nsCOMPtr<nsIURI> uriWithExt;
|
||||
// this is the first point at which the server can tell us the mimetype
|
||||
CalculateAndAppendFileExt(data->mFile, channel, data->mOriginalLocation);
|
||||
nsresult rv = CalculateAndAppendFileExt(data->mFile, channel, data->mOriginalLocation, uriWithExt);
|
||||
if (NS_SUCCEEDED(rv)) {
|
||||
data->mFile = uriWithExt;
|
||||
}
|
||||
|
||||
// now make filename conformant and unique
|
||||
CalculateUniqueFilename(data->mFile);
|
||||
nsCOMPtr<nsIURI> uniqueFilenameURI;
|
||||
rv = CalculateUniqueFilename(data->mFile, uniqueFilenameURI);
|
||||
if (NS_SUCCEEDED(rv)) {
|
||||
data->mFile = uniqueFilenameURI;
|
||||
}
|
||||
}
|
||||
|
||||
// compare uris and bail before we add to output map if they are equal
|
||||
@ -1959,7 +1968,7 @@ void nsWebBrowserPersist::CleanupLocalFiles()
|
||||
}
|
||||
|
||||
nsresult
|
||||
nsWebBrowserPersist::CalculateUniqueFilename(nsIURI *aURI)
|
||||
nsWebBrowserPersist::CalculateUniqueFilename(nsIURI *aURI, nsCOMPtr<nsIURI>& aOutURI)
|
||||
{
|
||||
nsCOMPtr<nsIURL> url(do_QueryInterface(aURI));
|
||||
NS_ENSURE_TRUE(url, NS_ERROR_FAILURE);
|
||||
@ -2111,10 +2120,16 @@ nsWebBrowserPersist::CalculateUniqueFilename(nsIURI *aURI)
|
||||
}
|
||||
else
|
||||
{
|
||||
url->SetFileName(filename);
|
||||
return NS_MutateURI(url)
|
||||
.Apply<nsIURLMutator>(&nsIURLMutator::SetFileName,
|
||||
filename,
|
||||
nullptr)
|
||||
.Finalize(aOutURI);
|
||||
}
|
||||
}
|
||||
|
||||
// TODO (:valentin) This method should always clone aURI
|
||||
aOutURI = aURI;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
@ -2183,9 +2198,12 @@ nsWebBrowserPersist::MakeFilenameFromURI(nsIURI *aURI, nsString &aFilename)
|
||||
|
||||
|
||||
nsresult
|
||||
nsWebBrowserPersist::CalculateAndAppendFileExt(nsIURI *aURI, nsIChannel *aChannel, nsIURI *aOriginalURIWithExtension)
|
||||
nsWebBrowserPersist::CalculateAndAppendFileExt(nsIURI *aURI,
|
||||
nsIChannel *aChannel,
|
||||
nsIURI *aOriginalURIWithExtension,
|
||||
nsCOMPtr<nsIURI>& aOutURI)
|
||||
{
|
||||
nsresult rv;
|
||||
nsresult rv = NS_OK;
|
||||
|
||||
if (!mMIMEService)
|
||||
{
|
||||
@ -2280,13 +2298,19 @@ nsWebBrowserPersist::CalculateAndAppendFileExt(nsIURI *aURI, nsIChannel *aChanne
|
||||
}
|
||||
else
|
||||
{
|
||||
url->SetFileName(newFileName);
|
||||
return NS_MutateURI(url)
|
||||
.Apply<nsIURLMutator>(&nsIURLMutator::SetFileName,
|
||||
newFileName,
|
||||
nullptr)
|
||||
.Finalize(aOutURI);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
// TODO (:valentin) This method should always clone aURI
|
||||
aOutURI = aURI;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
@ -2683,10 +2707,14 @@ nsWebBrowserPersist::SaveSubframeContent(
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
// Make frame document & data path conformant and unique
|
||||
rv = CalculateUniqueFilename(frameURI);
|
||||
nsCOMPtr<nsIURI> out;
|
||||
rv = CalculateUniqueFilename(frameURI, out);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
rv = CalculateUniqueFilename(frameDataURI);
|
||||
frameURI = out;
|
||||
|
||||
rv = CalculateUniqueFilename(frameDataURI, out);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
frameDataURI = out;
|
||||
|
||||
mCurrentThingsToPersist++;
|
||||
|
||||
|
@ -105,8 +105,9 @@ private:
|
||||
nsresult StartUpload(nsIInputStream *aInputStream, nsIURI *aDestinationURI,
|
||||
const nsACString &aContentType);
|
||||
nsresult CalculateAndAppendFileExt(nsIURI *aURI, nsIChannel *aChannel,
|
||||
nsIURI *aOriginalURIWithExtension);
|
||||
nsresult CalculateUniqueFilename(nsIURI *aURI);
|
||||
nsIURI *aOriginalURIWithExtension,
|
||||
nsCOMPtr<nsIURI>& aOutURI);
|
||||
nsresult CalculateUniqueFilename(nsIURI *aURI, nsCOMPtr<nsIURI>& aOutURI);
|
||||
nsresult MakeFilenameFromURI(
|
||||
nsIURI *aURI, nsString &aFilename);
|
||||
nsresult StoreURI(
|
||||
|
@ -303,7 +303,7 @@ add_test(function test_hugeStringThrows()
|
||||
let hugeString = new Array(maxLen + 1).fill("a").join("");
|
||||
let properties = ["scheme", "userPass", "username",
|
||||
"password", "hostPort", "host", "pathQueryRef", "ref",
|
||||
"query", "fileName", "filePath", "fileBaseName", "fileExtension"];
|
||||
"query", "filePath"];
|
||||
for (let prop of properties) {
|
||||
Assert.throws(() => url[prop] = hugeString,
|
||||
/NS_ERROR_MALFORMED_URI/,
|
||||
@ -314,6 +314,18 @@ add_test(function test_hugeStringThrows()
|
||||
/NS_ERROR_MALFORMED_URI/,
|
||||
"Passing a huge string to setSpec should throw");
|
||||
|
||||
let setters = [
|
||||
{ method: "setFileName", qi: Ci.nsIURLMutator },
|
||||
{ method: "setFileExtension", qi: Ci.nsIURLMutator },
|
||||
{ method: "setFileBaseName", qi: Ci.nsIURLMutator },
|
||||
];
|
||||
|
||||
for (let prop of setters) {
|
||||
Assert.throws(() => url = url.mutate().QueryInterface(prop.qi)[prop.method](hugeString).finalize(),
|
||||
/NS_ERROR_MALFORMED_URI/,
|
||||
`Passing a huge string to "${prop.method}" should throw`);
|
||||
}
|
||||
|
||||
run_next_test();
|
||||
});
|
||||
|
||||
@ -330,7 +342,7 @@ add_test(function test_filterWhitespace()
|
||||
Assert.equal(url.spec, "http://test.com/pa%0D%0A%09th?qu%0D%0A%09ery#hash");
|
||||
url.ref = "ha\r\n\tsh";
|
||||
Assert.equal(url.spec, "http://test.com/pa%0D%0A%09th?qu%0D%0A%09ery#ha%0D%0A%09sh");
|
||||
url.fileName = "fi\r\n\tle.name";
|
||||
url = url.mutate().QueryInterface(Ci.nsIURLMutator).setFileName("fi\r\n\tle.name").finalize();
|
||||
Assert.equal(url.spec, "http://test.com/fi%0D%0A%09le.name?qu%0D%0A%09ery#ha%0D%0A%09sh");
|
||||
|
||||
run_next_test();
|
||||
@ -399,7 +411,7 @@ add_test(function test_encode_C0_and_space()
|
||||
Assert.equal(url.spec, "http://example.com/pa%00th?qu%00ery#hash");
|
||||
url.ref = "ha\0sh";
|
||||
Assert.equal(url.spec, "http://example.com/pa%00th?qu%00ery#ha%00sh");
|
||||
url.fileName = "fi\0le.name";
|
||||
url = url.mutate().QueryInterface(Ci.nsIURLMutator).setFileName("fi\0le.name").finalize();
|
||||
Assert.equal(url.spec, "http://example.com/fi%00le.name?qu%00ery#ha%00sh");
|
||||
|
||||
run_next_test();
|
||||
|
Loading…
x
Reference in New Issue
Block a user