Blame widget/nsTransferable.h

Packit f0b94e
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
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
#ifndef nsTransferable_h__
Packit f0b94e
#define nsTransferable_h__
Packit f0b94e
Packit f0b94e
#include "nsIFormatConverter.h"
Packit f0b94e
#include "nsITransferable.h"
Packit f0b94e
#include "nsCOMPtr.h"
Packit f0b94e
#include "nsString.h"
Packit f0b94e
#include "nsTArray.h"
Packit f0b94e
#include "nsIPrincipal.h"
Packit f0b94e
#include "prio.h"
Packit f0b94e
Packit f0b94e
class nsIMutableArray;
Packit f0b94e
Packit f0b94e
//
Packit f0b94e
// DataStruct
Packit f0b94e
//
Packit f0b94e
// Holds a flavor (a mime type) that describes the data and the associated data.
Packit f0b94e
//
Packit f0b94e
struct DataStruct {
Packit f0b94e
  explicit DataStruct(const char* aFlavor)
Packit f0b94e
      : mDataLen(0), mCacheFD(nullptr), mFlavor(aFlavor) {}
Packit f0b94e
  DataStruct(DataStruct&& aRHS);
Packit f0b94e
  ~DataStruct();
Packit f0b94e
Packit f0b94e
  const nsCString& GetFlavor() const { return mFlavor; }
Packit f0b94e
  void SetData(nsISupports* inData, uint32_t inDataLen, bool aIsPrivateData);
Packit f0b94e
  void GetData(nsISupports** outData, uint32_t* outDataLen);
Packit f0b94e
  bool IsDataAvailable() const {
Packit f0b94e
    return mData ? mDataLen > 0 : mCacheFD != nullptr;
Packit f0b94e
  }
Packit f0b94e
Packit f0b94e
 protected:
Packit f0b94e
  enum {
Packit f0b94e
    // The size of data over which we write the data to disk rather than
Packit f0b94e
    // keep it around in memory.
Packit f0b94e
    kLargeDatasetSize = 1000000  // 1 million bytes
Packit f0b94e
  };
Packit f0b94e
Packit f0b94e
  nsresult WriteCache(nsISupports* aData, uint32_t aDataLen);
Packit f0b94e
  nsresult ReadCache(nsISupports** aData, uint32_t* aDataLen);
Packit f0b94e
Packit f0b94e
  // mData + mDataLen OR mCacheFD should be used, not both.
Packit f0b94e
  nsCOMPtr<nsISupports> mData;  // OWNER - some varient of primitive wrapper
Packit f0b94e
  uint32_t mDataLen;
Packit f0b94e
  PRFileDesc* mCacheFD;
Packit f0b94e
  const nsCString mFlavor;
Packit f0b94e
Packit f0b94e
 private:
Packit f0b94e
  DataStruct(const DataStruct&) = delete;
Packit f0b94e
  DataStruct& operator=(const DataStruct&) = delete;
Packit f0b94e
};
Packit f0b94e
Packit f0b94e
/**
Packit f0b94e
 * XP Transferable wrapper
Packit f0b94e
 */
Packit f0b94e
Packit f0b94e
class nsTransferable : public nsITransferable {
Packit f0b94e
 public:
Packit f0b94e
  nsTransferable();
Packit f0b94e
Packit f0b94e
  // nsISupports
Packit f0b94e
  NS_DECL_ISUPPORTS
Packit f0b94e
  NS_DECL_NSITRANSFERABLE
Packit f0b94e
Packit f0b94e
 protected:
Packit f0b94e
  virtual ~nsTransferable();
Packit f0b94e
Packit f0b94e
  // get flavors w/out converter
Packit f0b94e
  already_AddRefed<nsIMutableArray> GetTransferDataFlavors();
Packit f0b94e
Packit f0b94e
  nsTArray<DataStruct> mDataArray;
Packit f0b94e
  nsCOMPtr<nsIFormatConverter> mFormatConv;
Packit f0b94e
  bool mPrivateData;
Packit f0b94e
  nsCOMPtr<nsIPrincipal> mRequestingPrincipal;
Packit f0b94e
  nsContentPolicyType mContentPolicyType;
Packit f0b94e
#if DEBUG
Packit f0b94e
  bool mInitialized;
Packit f0b94e
#endif
Packit f0b94e
};
Packit f0b94e
Packit f0b94e
#endif  // nsTransferable_h__