mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
5236854e21
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.
105 lines
3.5 KiB
C++
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___ */
|