mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-13 05:15:45 +00:00
Bug 238257 File URLs aren't respecting user network.dir.format pref r/sr=darin
This commit is contained in:
parent
94b1b6fd03
commit
02a8c74280
@ -47,6 +47,8 @@
|
||||
#include "nsITransport.h"
|
||||
#include "nsIFileURL.h"
|
||||
#include "nsIMIMEService.h"
|
||||
#include "nsIPrefService.h"
|
||||
#include "nsIPrefBranch.h"
|
||||
|
||||
static NS_DEFINE_CID(kStreamConverterServiceCID, NS_STREAMCONVERTERSERVICE_CID);
|
||||
static NS_DEFINE_CID(kStreamTransportServiceCID, NS_STREAMTRANSPORTSERVICE_CID);
|
||||
@ -58,18 +60,17 @@ nsFileChannel::nsFileChannel()
|
||||
, mUploadLength(-1)
|
||||
, mLoadFlags(LOAD_NORMAL)
|
||||
, mStatus(NS_OK)
|
||||
, mConvertToHTML(PR_FALSE)
|
||||
, mListFormat(FORMAT_HTML)
|
||||
, mIsDir(PR_FALSE)
|
||||
, mUploading(PR_FALSE)
|
||||
{
|
||||
}
|
||||
|
||||
nsresult
|
||||
nsFileChannel::Init(nsIURI *uri, PRBool htmlDirs)
|
||||
nsFileChannel::Init(nsIURI *uri)
|
||||
{
|
||||
nsresult rv;
|
||||
mURL = do_QueryInterface(uri, &rv);
|
||||
mConvertToHTML = htmlDirs;
|
||||
return rv;
|
||||
}
|
||||
|
||||
@ -125,14 +126,15 @@ nsFileChannel::EnsureStream()
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
// XXX this only needs to be threadsafe because of bug 101252
|
||||
NS_IMPL_THREADSAFE_ISUPPORTS7(nsFileChannel,
|
||||
NS_IMPL_THREADSAFE_ISUPPORTS8(nsFileChannel,
|
||||
nsIRequest,
|
||||
nsIChannel,
|
||||
nsIStreamListener,
|
||||
nsIRequestObserver,
|
||||
nsIUploadChannel,
|
||||
nsIFileChannel,
|
||||
nsITransportEventSink)
|
||||
nsITransportEventSink,
|
||||
nsIDirectoryListing)
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// nsIRequest
|
||||
@ -283,7 +285,7 @@ nsFileChannel::GetContentType(nsACString &aContentType)
|
||||
|
||||
if (mContentType.IsEmpty()) {
|
||||
if (mIsDir) {
|
||||
if (mConvertToHTML)
|
||||
if (mListFormat == FORMAT_HTML)
|
||||
mContentType = NS_LITERAL_CSTRING(TEXT_HTML);
|
||||
else
|
||||
mContentType = NS_LITERAL_CSTRING(APPLICATION_HTTP_INDEX_FORMAT);
|
||||
@ -362,7 +364,7 @@ nsFileChannel::Open(nsIInputStream **result)
|
||||
rv = EnsureStream();
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
||||
if (mIsDir && mConvertToHTML) {
|
||||
if (mIsDir && mListFormat == FORMAT_HTML) {
|
||||
nsCOMPtr<nsIStreamConverterService> scs =
|
||||
do_GetService(kStreamConverterServiceCID, &rv);
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
@ -458,7 +460,7 @@ nsFileChannel::AsyncOpen(nsIStreamListener *listener, nsISupports *ctx)
|
||||
//
|
||||
// push stream converter if opening a directory.
|
||||
//
|
||||
if (mIsDir && mConvertToHTML) {
|
||||
if (mIsDir && mListFormat == FORMAT_HTML) {
|
||||
nsCOMPtr<nsIStreamConverterService> scs =
|
||||
do_GetService(kStreamConverterServiceCID, &rv);
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
@ -613,3 +615,33 @@ nsFileChannel::OnTransportStatus(nsITransport *trans, nsresult status,
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsFileChannel::SetListFormat(PRUint32 format)
|
||||
{
|
||||
// Convert the pref value
|
||||
if (format == FORMAT_PREF) {
|
||||
format = FORMAT_HTML; // default
|
||||
nsCOMPtr<nsIPrefBranch> prefs = do_GetService(NS_PREFSERVICE_CONTRACTID);
|
||||
if (prefs) {
|
||||
PRInt32 sFormat;
|
||||
if (NS_SUCCEEDED(prefs->GetIntPref("network.dir.format", &sFormat)))
|
||||
format = sFormat;
|
||||
}
|
||||
}
|
||||
if (format != FORMAT_RAW &&
|
||||
format != FORMAT_HTML &&
|
||||
format != FORMAT_HTTP_INDEX) {
|
||||
NS_WARNING("invalid directory format");
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
mListFormat = format;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsFileChannel::GetListFormat(PRUint32 *format)
|
||||
{
|
||||
*format = mListFormat;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
@ -48,6 +48,7 @@
|
||||
#include "nsIStreamListener.h"
|
||||
#include "nsIInputStream.h"
|
||||
#include "nsITransport.h"
|
||||
#include "nsIDirectoryListing.h"
|
||||
#include "nsCOMPtr.h"
|
||||
#include "nsString.h"
|
||||
|
||||
@ -55,6 +56,7 @@ class nsFileChannel : public nsIFileChannel
|
||||
, public nsIUploadChannel
|
||||
, public nsIStreamListener
|
||||
, public nsITransportEventSink
|
||||
, public nsIDirectoryListing
|
||||
{
|
||||
public:
|
||||
NS_DECL_ISUPPORTS
|
||||
@ -65,11 +67,12 @@ public:
|
||||
NS_DECL_NSIREQUESTOBSERVER
|
||||
NS_DECL_NSISTREAMLISTENER
|
||||
NS_DECL_NSITRANSPORTEVENTSINK
|
||||
NS_DECL_NSIDIRECTORYLISTING
|
||||
|
||||
nsFileChannel();
|
||||
virtual ~nsFileChannel() {}
|
||||
|
||||
nsresult Init(nsIURI *uri, PRBool htmlDirs);
|
||||
nsresult Init(nsIURI *uri);
|
||||
|
||||
private:
|
||||
|
||||
@ -93,7 +96,7 @@ private:
|
||||
|
||||
nsCOMPtr<nsIRequest> mRequest;
|
||||
nsCOMPtr<nsIInputStream> mStream;
|
||||
PRBool mConvertToHTML; // applies only if is directory
|
||||
PRUint32 mListFormat;
|
||||
PRBool mIsDir;
|
||||
PRBool mUploading;
|
||||
};
|
||||
|
@ -42,28 +42,18 @@
|
||||
#include "nsURLHelper.h"
|
||||
#include "nsNetCID.h"
|
||||
|
||||
#include "nsIPrefService.h"
|
||||
#include "nsIPrefBranch.h"
|
||||
#include "nsIServiceManager.h"
|
||||
#include "nsIDirectoryListing.h"
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
nsFileProtocolHandler::nsFileProtocolHandler()
|
||||
: mGenerateHTMLDirs(PR_FALSE)
|
||||
{
|
||||
}
|
||||
|
||||
nsresult
|
||||
nsFileProtocolHandler::Init()
|
||||
{
|
||||
nsCOMPtr<nsIPrefBranch> prefs = do_GetService(NS_PREFSERVICE_CONTRACTID);
|
||||
if (prefs) {
|
||||
PRInt32 sFormat;
|
||||
nsresult rv = prefs->GetIntPref("network.dir.format", &sFormat);
|
||||
if (NS_SUCCEEDED(rv) && sFormat == nsIDirectoryListing::FORMAT_HTML)
|
||||
mGenerateHTMLDirs = PR_TRUE;
|
||||
}
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
@ -121,7 +111,7 @@ nsFileProtocolHandler::NewChannel(nsIURI *uri, nsIChannel **result)
|
||||
return NS_ERROR_OUT_OF_MEMORY;
|
||||
NS_ADDREF(chan);
|
||||
|
||||
nsresult rv = chan->Init(uri, mGenerateHTMLDirs);
|
||||
nsresult rv = chan->Init(uri);
|
||||
if (NS_FAILED(rv)) {
|
||||
NS_RELEASE(chan);
|
||||
return rv;
|
||||
|
@ -53,9 +53,6 @@ public:
|
||||
virtual ~nsFileProtocolHandler() {}
|
||||
|
||||
nsresult Init();
|
||||
|
||||
protected:
|
||||
PRBool mGenerateHTMLDirs;
|
||||
};
|
||||
|
||||
#endif // !nsFileProtocolHandler_h__
|
||||
|
Loading…
Reference in New Issue
Block a user