Blame uriloader/exthandler/ExternalHelperAppParent.h

Packit f0b94e
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
Packit f0b94e
/* vim: set ts=2 et sw=2 tw=80: */
Packit f0b94e
/* This Source Code Form is subject to the terms of the Mozilla Public
Packit f0b94e
 * License, v. 2.0. If a copy of the MPL was not distributed with this
Packit f0b94e
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
Packit f0b94e
Packit f0b94e
#include "mozilla/dom/PExternalHelperAppParent.h"
Packit f0b94e
#include "nsIChannel.h"
Packit f0b94e
#include "nsIMultiPartChannel.h"
Packit f0b94e
#include "nsIResumableChannel.h"
Packit f0b94e
#include "nsIStreamListener.h"
Packit f0b94e
#include "nsHashPropertyBag.h"
Packit f0b94e
#include "PrivateBrowsingChannel.h"
Packit f0b94e
Packit f0b94e
namespace IPC {
Packit f0b94e
class URI;
Packit f0b94e
}  // namespace IPC
Packit f0b94e
Packit f0b94e
namespace mozilla {
Packit f0b94e
Packit f0b94e
namespace ipc {
Packit f0b94e
class OptionalURIParams;
Packit f0b94e
}  // namespace ipc
Packit f0b94e
Packit f0b94e
namespace net {
Packit f0b94e
class PChannelDiverterParent;
Packit f0b94e
}  // namespace net
Packit f0b94e
Packit f0b94e
namespace dom {
Packit f0b94e
Packit f0b94e
#define NS_IEXTERNALHELPERAPPPARENT_IID              \
Packit f0b94e
  {                                                  \
Packit f0b94e
    0x127a01bc, 0x2a49, 0x46a8, {                    \
Packit f0b94e
      0x8c, 0x63, 0x4b, 0x5d, 0x3c, 0xa4, 0x07, 0x9c \
Packit f0b94e
    }                                                \
Packit f0b94e
  }
Packit f0b94e
Packit f0b94e
class nsIExternalHelperAppParent : public nsISupports {
Packit f0b94e
 public:
Packit f0b94e
  NS_DECLARE_STATIC_IID_ACCESSOR(NS_IEXTERNALHELPERAPPPARENT_IID)
Packit f0b94e
Packit f0b94e
  /**
Packit f0b94e
   * Returns true if this fake channel represented a file channel in the child.
Packit f0b94e
   */
Packit f0b94e
  virtual bool WasFileChannel() = 0;
Packit f0b94e
};
Packit f0b94e
Packit f0b94e
NS_DEFINE_STATIC_IID_ACCESSOR(nsIExternalHelperAppParent,
Packit f0b94e
                              NS_IEXTERNALHELPERAPPPARENT_IID)
Packit f0b94e
Packit f0b94e
class ContentParent;
Packit f0b94e
class PBrowserParent;
Packit f0b94e
Packit f0b94e
class ExternalHelperAppParent
Packit f0b94e
    : public PExternalHelperAppParent,
Packit f0b94e
      public nsHashPropertyBag,
Packit f0b94e
      public nsIChannel,
Packit f0b94e
      public nsIMultiPartChannel,
Packit f0b94e
      public nsIResumableChannel,
Packit f0b94e
      public nsIStreamListener,
Packit f0b94e
      public net::PrivateBrowsingChannel<ExternalHelperAppParent>,
Packit f0b94e
      public nsIExternalHelperAppParent {
Packit f0b94e
  typedef mozilla::ipc::OptionalURIParams OptionalURIParams;
Packit f0b94e
Packit f0b94e
 public:
Packit f0b94e
  NS_DECL_ISUPPORTS_INHERITED
Packit f0b94e
  NS_DECL_NSIREQUEST
Packit f0b94e
  NS_DECL_NSICHANNEL
Packit f0b94e
  NS_DECL_NSIMULTIPARTCHANNEL
Packit f0b94e
  NS_DECL_NSIRESUMABLECHANNEL
Packit f0b94e
  NS_DECL_NSISTREAMLISTENER
Packit f0b94e
  NS_DECL_NSIREQUESTOBSERVER
Packit f0b94e
Packit f0b94e
  mozilla::ipc::IPCResult RecvOnStartRequest(const nsCString& entityID,
Packit f0b94e
                                             PBrowserParent* aBrowser) override;
Packit f0b94e
  mozilla::ipc::IPCResult RecvOnDataAvailable(const nsCString& data,
Packit f0b94e
                                              const uint64_t& offset,
Packit f0b94e
                                              const uint32_t& count) override;
Packit f0b94e
  mozilla::ipc::IPCResult RecvOnStopRequest(const nsresult& code) override;
Packit f0b94e
Packit f0b94e
  mozilla::ipc::IPCResult RecvDivertToParentUsing(
Packit f0b94e
      PChannelDiverterParent* diverter, PBrowserParent* aBrowser) override;
Packit f0b94e
Packit f0b94e
  bool WasFileChannel() override { return mWasFileChannel; }
Packit f0b94e
Packit f0b94e
  ExternalHelperAppParent(const OptionalURIParams& uri,
Packit f0b94e
                          const int64_t& contentLength,
Packit f0b94e
                          const bool& wasFileChannel);
Packit f0b94e
  void Init(ContentParent* parent, const nsCString& aMimeContentType,
Packit f0b94e
            const nsCString& aContentDisposition,
Packit f0b94e
            const uint32_t& aContentDispositionHint,
Packit f0b94e
            const nsString& aContentDispositionFilename, const bool& aForceSave,
Packit f0b94e
            const OptionalURIParams& aReferrer, PBrowserParent* aBrowser);
Packit f0b94e
Packit f0b94e
 protected:
Packit f0b94e
  virtual ~ExternalHelperAppParent();
Packit f0b94e
Packit f0b94e
  virtual void ActorDestroy(ActorDestroyReason why) override;
Packit f0b94e
  void Delete();
Packit f0b94e
Packit f0b94e
 private:
Packit f0b94e
  nsCOMPtr<nsIStreamListener> mListener;
Packit f0b94e
  nsCOMPtr<nsIURI> mURI;
Packit f0b94e
  bool mPending;
Packit f0b94e
#ifdef DEBUG
Packit f0b94e
  bool mDiverted;
Packit f0b94e
#endif
Packit f0b94e
  bool mIPCClosed;
Packit f0b94e
  nsLoadFlags mLoadFlags;
Packit f0b94e
  nsresult mStatus;
Packit f0b94e
  int64_t mContentLength;
Packit f0b94e
  bool mWasFileChannel;
Packit f0b94e
  uint32_t mContentDisposition;
Packit f0b94e
  nsString mContentDispositionFilename;
Packit f0b94e
  nsCString mContentDispositionHeader;
Packit f0b94e
  nsCString mEntityID;
Packit f0b94e
};
Packit f0b94e
Packit f0b94e
}  // namespace dom
Packit f0b94e
}  // namespace mozilla