gecko/netwerk/protocol/wyciwyg/nsWyciwygChannel.h
Ehsan Akhgari 5236854e21 Bug 741059 - Part 1: Add APIs to nsIChannel to allow callers to override the private bit on the channel; r=jduell
This is probably the worst patch that I have ever written!

We add a setPrivate method to nsIPrivateBrowsingChannel which will be
implemented by channels who care about private browsing.  This allows the
client to explicitly override the private bit on the channel.
NS_UsePrivateBrowsing is also taught about this override bit using the
internal nsIPrivateBrowsingChannel::IsPrivateModeOverriden API.  This patch
implements the new API for HTTP, FTP and wyciwyg channels.  This also
modifies the IPC implementations of these channels to correctly transfer that
bit to the parent process if it has been set in the child process channel.
2012-09-04 20:37:45 -04:00

105 lines
3.5 KiB
C++

/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#ifndef nsWyciwygChannel_h___
#define nsWyciwygChannel_h___
#include "nsWyciwygProtocolHandler.h"
#include "nsXPIDLString.h"
#include "nsString.h"
#include "nsCOMPtr.h"
#include "nsIWyciwygChannel.h"
#include "nsILoadGroup.h"
#include "nsIOutputStream.h"
#include "nsIInputStream.h"
#include "nsIInputStreamPump.h"
#include "nsIInterfaceRequestor.h"
#include "nsIProgressEventSink.h"
#include "nsIStreamListener.h"
#include "nsICacheListener.h"
#include "nsICacheEntryDescriptor.h"
#include "nsIURI.h"
#include "nsIEventTarget.h"
#include "nsILoadContext.h"
#include "nsNetUtil.h"
#include "PrivateBrowsingChannel.h"
extern PRLogModuleInfo * gWyciwygLog;
//-----------------------------------------------------------------------------
class nsWyciwygChannel: public nsIWyciwygChannel,
public nsIStreamListener,
public nsICacheListener,
public mozilla::net::PrivateBrowsingChannel<nsWyciwygChannel>
{
public:
NS_DECL_ISUPPORTS
NS_DECL_NSIREQUEST
NS_DECL_NSICHANNEL
NS_DECL_NSIWYCIWYGCHANNEL
NS_DECL_NSIREQUESTOBSERVER
NS_DECL_NSISTREAMLISTENER
NS_DECL_NSICACHELISTENER
friend class nsWyciwygSetCharsetandSourceEvent;
friend class nsWyciwygWriteEvent;
friend class nsWyciwygCloseEvent;
// nsWyciwygChannel methods:
nsWyciwygChannel();
virtual ~nsWyciwygChannel();
nsresult Init(nsIURI *uri);
protected:
nsresult WriteToCacheEntryInternal(const nsAString& aData, const nsACString& spec);
void SetCharsetAndSourceInternal();
nsresult CloseCacheEntryInternal(nsresult reason);
nsresult ReadFromCache();
nsresult OpenCacheEntry(const nsACString & aCacheKey, nsCacheAccessMode aWriteAccess);
void WriteCharsetAndSourceToCache(int32_t aSource,
const nsCString& aCharset);
void NotifyListener();
bool IsOnCacheIOThread();
friend class mozilla::net::PrivateBrowsingChannel<nsWyciwygChannel>;
nsresult mStatus;
bool mIsPending;
bool mCharsetAndSourceSet;
bool mNeedToWriteCharset;
int32_t mCharsetSource;
nsCString mCharset;
int32_t mContentLength;
uint32_t mLoadFlags;
nsCOMPtr<nsIURI> mURI;
nsCOMPtr<nsIURI> mOriginalURI;
nsCOMPtr<nsISupports> mOwner;
nsCOMPtr<nsIInterfaceRequestor> mCallbacks;
nsCOMPtr<nsIProgressEventSink> mProgressSink;
nsCOMPtr<nsILoadGroup> mLoadGroup;
nsCOMPtr<nsIStreamListener> mListener;
nsCOMPtr<nsISupports> mListenerContext;
// reuse as much of this channel implementation as we can
nsCOMPtr<nsIInputStreamPump> mPump;
// Cache related stuff
nsCOMPtr<nsICacheEntryDescriptor> mCacheEntry;
nsCOMPtr<nsIOutputStream> mCacheOutputStream;
nsCOMPtr<nsIInputStream> mCacheInputStream;
nsCOMPtr<nsIEventTarget> mCacheIOTarget;
nsCOMPtr<nsISupports> mSecurityInfo;
};
#endif /* nsWyciwygChannel_h___ */