summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--components/jar/src/nsJARChannel.cpp75
-rw-r--r--components/jar/src/nsJARChannel.h5
2 files changed, 36 insertions, 44 deletions
diff --git a/components/jar/src/nsJARChannel.cpp b/components/jar/src/nsJARChannel.cpp
index 0bbfa31eb..65c034779 100644
--- a/components/jar/src/nsJARChannel.cpp
+++ b/components/jar/src/nsJARChannel.cpp
@@ -577,47 +577,48 @@ nsJARChannel::GetSecurityInfo(nsISupports **aSecurityInfo)
return NS_OK;
}
-bool nsJARChannel::GetContentTypeGuess(nsACString& aResult) const {
- 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)) {
- aResult.AssignLiteral(APPLICATION_HTTP_INDEX_FORMAT);
- return true;
- }
-
- // 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) {
- return false;
- }
- nsIMIMEService* mimeServ = gJarHandler->MimeService();
- if (!mimeServ) {
- return false;
- }
- mimeServ->GetTypeFromExtension(nsDependentCString(ext), aResult);
- return !aResult.IsEmpty();
-}
-
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) {
- aResult.Assign(UNKNOWN_CONTENT_TYPE);
+ 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;
}
@@ -635,8 +636,8 @@ nsJARChannel::SetContentType(const nsACString &aContentType)
NS_IMETHODIMP
nsJARChannel::GetContentCharset(nsACString &aContentCharset)
{
- // We behave like HTTP channels (treat this as a hint if called before open,
- // and override the charset if called after open).
+ // If someone gives us a charset hint we should just use that charset.
+ // So we don't care when this is being called.
aContentCharset = mContentCharset;
return NS_OK;
}
@@ -729,10 +730,6 @@ nsJARChannel::Open(nsIInputStream **stream)
input.forget(stream);
mOpened = true;
- // Compute the content type now.
- if (!GetContentTypeGuess(mContentType)) {
- mContentType.Assign(UNKNOWN_CONTENT_TYPE);
- }
// local files are always considered safe
mIsUnsafe = false;
return NS_OK;
diff --git a/components/jar/src/nsJARChannel.h b/components/jar/src/nsJARChannel.h
index 20afbcb2f..5328d586a 100644
--- a/components/jar/src/nsJARChannel.h
+++ b/components/jar/src/nsJARChannel.h
@@ -59,11 +59,6 @@ private:
nsresult OpenLocalFile();
void NotifyError(nsresult aError);
void FireOnProgress(uint64_t aProgress);
-
- // Returns false if we don't know the content type of this channel, in which
- // case we should use the content-type hint.
- bool GetContentTypeGuess(nsACString&) const;
-
virtual void OnDownloadComplete(mozilla::net::MemoryDownloader* aDownloader,
nsIRequest* aRequest,
nsISupports* aCtxt,