mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
c4c18521be
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.
119 lines
3.4 KiB
C++
119 lines
3.4 KiB
C++
/* 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 mozilla_net_WyciwygChannelChild_h
|
|
#define mozilla_net_WyciwygChannelChild_h
|
|
|
|
#include "mozilla/net/PWyciwygChannelChild.h"
|
|
#include "mozilla/net/ChannelEventQueue.h"
|
|
#include "nsIWyciwygChannel.h"
|
|
#include "nsIChannel.h"
|
|
#include "nsIProgressEventSink.h"
|
|
#include "PrivateBrowsingChannel.h"
|
|
|
|
namespace mozilla {
|
|
namespace net {
|
|
|
|
// TODO: replace with IPDL states
|
|
enum WyciwygChannelChildState {
|
|
WCC_NEW,
|
|
WCC_INIT,
|
|
|
|
// States when reading from the channel
|
|
WCC_OPENED,
|
|
WCC_ONSTART,
|
|
WCC_ONDATA,
|
|
WCC_ONSTOP,
|
|
|
|
// States when writing to the cache
|
|
WCC_ONWRITE,
|
|
WCC_ONCLOSED
|
|
};
|
|
|
|
|
|
// Header file contents
|
|
class WyciwygChannelChild : public PWyciwygChannelChild
|
|
, public nsIWyciwygChannel
|
|
, public PrivateBrowsingChannel<WyciwygChannelChild>
|
|
{
|
|
public:
|
|
NS_DECL_ISUPPORTS
|
|
NS_DECL_NSIREQUEST
|
|
NS_DECL_NSICHANNEL
|
|
NS_DECL_NSIWYCIWYGCHANNEL
|
|
|
|
WyciwygChannelChild();
|
|
virtual ~WyciwygChannelChild();
|
|
|
|
void AddIPDLReference();
|
|
void ReleaseIPDLReference();
|
|
|
|
nsresult Init(nsIURI *uri);
|
|
|
|
bool IsSuspended();
|
|
|
|
protected:
|
|
bool RecvOnStartRequest(const nsresult& statusCode,
|
|
const int32_t& contentLength,
|
|
const int32_t& source,
|
|
const nsCString& charset,
|
|
const nsCString& securityInfo);
|
|
bool RecvOnDataAvailable(const nsCString& data,
|
|
const uint64_t& offset);
|
|
bool RecvOnStopRequest(const nsresult& statusCode);
|
|
bool RecvCancelEarly(const nsresult& statusCode);
|
|
|
|
void OnStartRequest(const nsresult& statusCode,
|
|
const int32_t& contentLength,
|
|
const int32_t& source,
|
|
const nsCString& charset,
|
|
const nsCString& securityInfo);
|
|
void OnDataAvailable(const nsCString& data,
|
|
const uint64_t& offset);
|
|
void OnStopRequest(const nsresult& statusCode);
|
|
void CancelEarly(const nsresult& statusCode);
|
|
|
|
friend class PrivateBrowsingChannel<WyciwygChannelChild>;
|
|
|
|
private:
|
|
nsresult mStatus;
|
|
bool mIsPending;
|
|
bool mCanceled;
|
|
uint32_t mLoadFlags;
|
|
int32_t mContentLength;
|
|
int32_t mCharsetSource;
|
|
nsCString mCharset;
|
|
nsCOMPtr<nsIURI> mURI;
|
|
nsCOMPtr<nsIURI> mOriginalURI;
|
|
nsCOMPtr<nsISupports> mOwner;
|
|
nsCOMPtr<nsIInterfaceRequestor> mCallbacks;
|
|
nsCOMPtr<nsIProgressEventSink> mProgressSink;
|
|
nsCOMPtr<nsILoadGroup> mLoadGroup;
|
|
nsCOMPtr<nsIStreamListener> mListener;
|
|
nsCOMPtr<nsISupports> mListenerContext;
|
|
nsCOMPtr<nsISupports> mSecurityInfo;
|
|
|
|
// FIXME: replace with IPDL states (bug 536319)
|
|
enum WyciwygChannelChildState mState;
|
|
|
|
bool mIPCOpen;
|
|
ChannelEventQueue mEventQ;
|
|
|
|
friend class WyciwygStartRequestEvent;
|
|
friend class WyciwygDataAvailableEvent;
|
|
friend class WyciwygStopRequestEvent;
|
|
friend class WyciwygCancelEvent;
|
|
};
|
|
|
|
inline bool
|
|
WyciwygChannelChild::IsSuspended()
|
|
{
|
|
return false;
|
|
}
|
|
|
|
} // namespace net
|
|
} // namespace mozilla
|
|
|
|
#endif // mozilla_net_WyciwygChannelChild_h
|