/* 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 nsBlobProtocolHandler_h
#define nsBlobProtocolHandler_h

#include "nsIProtocolHandler.h"
#include "nsIURI.h"
#include "nsCOMPtr.h"

#define BLOBURI_SCHEME "blob"

class nsIDOMBlob;
class nsIPrincipal;
class nsIInputStream;

inline bool IsBlobURI(nsIURI* aUri)
{
  bool isBlob;
  return NS_SUCCEEDED(aUri->SchemeIs(BLOBURI_SCHEME, &isBlob)) && isBlob;
}

extern nsresult
NS_GetStreamForBlobURI(nsIURI* aURI, nsIInputStream** aStream);

class nsBlobProtocolHandler : public nsIProtocolHandler
{
public:
  NS_DECL_ISUPPORTS

  // nsIProtocolHandler methods:
  NS_DECL_NSIPROTOCOLHANDLER

  // nsBlobProtocolHandler methods:
  nsBlobProtocolHandler() {}
  virtual ~nsBlobProtocolHandler() {}

  // Methods for managing uri->file mapping
  static void AddFileDataEntry(nsACString& aUri,
                               nsIDOMBlob* aFile,
                               nsIPrincipal* aPrincipal);
  static void RemoveFileDataEntry(nsACString& aUri);
  static nsIPrincipal* GetFileDataEntryPrincipal(nsACString& aUri);
};

#define NS_BLOBPROTOCOLHANDLER_CID \
{ 0xb43964aa, 0xa078, 0x44b2, \
  { 0xb0, 0x6b, 0xfd, 0x4d, 0x1b, 0x17, 0x2e, 0x66 } }

#endif /* nsBlobProtocolHandler_h */
