From 5d774d0709a89fcbf50f31d41d3841deff89be93 Mon Sep 17 00:00:00 2001 From: roytam1 Date: Wed, 21 Sep 2022 22:24:29 +0800 Subject: [PATCH] backout bug1757604 part from rev 591552c5 as it cause display issues --- modules/libjar/nsJARChannel.cpp | 84 +++++++++++++++------------------ modules/libjar/nsJARChannel.h | 3 -- 2 files changed, 37 insertions(+), 50 deletions(-) diff --git a/modules/libjar/nsJARChannel.cpp b/modules/libjar/nsJARChannel.cpp index 5317e0f2fb..6e5c4d63d1 100644 --- a/modules/libjar/nsJARChannel.cpp +++ b/modules/libjar/nsJARChannel.cpp @@ -596,50 +596,48 @@ nsJARChannel::GetSecurityInfo(nsISupports **aSecurityInfo) return NS_OK; } -nsresult -nsJARChannel::SetContentTypeGuess() { - // - // generate content type and set it - // - const char *ext = nullptr, *fileName = mJarEntry.get(); - int32_t len = mJarEntry.Length(); - - // check if we're displaying a directory - // mJarEntry will be empty if we're trying to display - // the topmost directory in a zip, e.g. jar:foo.zip!/ - if (ENTRY_IS_DIRECTORY(mJarEntry)) { - mContentType.AssignLiteral(APPLICATION_HTTP_INDEX_FORMAT); - } else { - // not a directory, take a guess by its extension - for (int32_t i = len-1; i >= 0; i--) { - if (fileName[i] == '.') { - ext = &fileName[i + 1]; - break; - } - } - if (ext) { - nsIMIMEService *mimeServ = gJarHandler->MimeService(); - if (mimeServ) - mimeServ->GetTypeFromExtension(nsDependentCString(ext), mContentType); - } - if (mContentType.IsEmpty()) - mContentType.AssignLiteral(UNKNOWN_CONTENT_TYPE); - } - - return NS_OK; -} - NS_IMETHODIMP -nsJARChannel::GetContentType(nsACString &aResult) +nsJARChannel::GetContentType(nsACString &result) { // If the Jar file has not been open yet, // We return application/x-unknown-content-type - if (!mOpened || mContentType.IsEmpty()) { - aResult.Assign(UNKNOWN_CONTENT_TYPE); + if (!mOpened) { + result.Assign(UNKNOWN_CONTENT_TYPE); return NS_OK; } - aResult = mContentType; + if (mContentType.IsEmpty()) { + + // + // generate content type and set it + // + const char *ext = nullptr, *fileName = mJarEntry.get(); + int32_t len = mJarEntry.Length(); + + // check if we're displaying a directory + // mJarEntry will be empty if we're trying to display + // the topmost directory in a zip, e.g. jar:foo.zip!/ + if (ENTRY_IS_DIRECTORY(mJarEntry)) { + mContentType.AssignLiteral(APPLICATION_HTTP_INDEX_FORMAT); + } + else { + // not a directory, take a guess by its extension + for (int32_t i = len-1; i >= 0; i--) { + if (fileName[i] == '.') { + ext = &fileName[i + 1]; + break; + } + } + if (ext) { + nsIMIMEService *mimeServ = gJarHandler->MimeService(); + if (mimeServ) + mimeServ->GetTypeFromExtension(nsDependentCString(ext), mContentType); + } + if (mContentType.IsEmpty()) + mContentType.AssignLiteral(UNKNOWN_CONTENT_TYPE); + } + } + result = mContentType; return NS_OK; } @@ -750,7 +748,7 @@ nsJARChannel::Open(nsIInputStream **stream) return rv; input.forget(stream); - SetOpened(); + mOpened = true; // local files are always considered safe mIsUnsafe = false; return NS_OK; @@ -765,14 +763,6 @@ nsJARChannel::Open2(nsIInputStream** aStream) return Open(aStream); } -void -nsJARChannel::SetOpened() { - MOZ_ASSERT(!mOpened, "Opening channel twice?"); - mOpened = true; - // Compute the content type now. - NS_ASSERTION(NS_SUCCEEDED(SetContentTypeGuess()), "content type guess failure"); -} - NS_IMETHODIMP nsJARChannel::AsyncOpen(nsIStreamListener *listener, nsISupports *ctx) { @@ -855,7 +845,7 @@ nsJARChannel::AsyncOpen(nsIStreamListener *listener, nsISupports *ctx) if (mLoadGroup) mLoadGroup->AddRequest(this, nullptr); - SetOpened(); + mOpened = true; return NS_OK; } diff --git a/modules/libjar/nsJARChannel.h b/modules/libjar/nsJARChannel.h index a9b46568ea..5328d586ab 100644 --- a/modules/libjar/nsJARChannel.h +++ b/modules/libjar/nsJARChannel.h @@ -66,9 +66,6 @@ private: mozilla::net::MemoryDownloader::Data aData) override; - nsresult SetContentTypeGuess(); - void SetOpened(); - nsCString mSpec; bool mOpened;