/* 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_dom_BlobURLChannel_h #define mozilla_dom_BlobURLChannel_h #include "mozilla/net/ContentRange.h" #include "nsBaseChannel.h" #include "nsCOMPtr.h" #include "nsContentUtils.h" #include "nsIInputStream.h" class nsIURI; namespace mozilla::dom { #define MOZ_BLOBURLCHANNEL_IID \ {0xe6d2a388, 0x0007, 0x42e4, {0xbf, 0x0b, 0xa1, 0x2b, 0xc8, 0x1a, 0x8c, 0x1f}} class BlobImpl; class BlobURLChannel final : public nsBaseChannel { public: NS_INLINE_DECL_STATIC_IID(MOZ_BLOBURLCHANNEL_IID) NS_DECL_ISUPPORTS_INHERITED BlobURLChannel(nsIURI* aURI, nsILoadInfo* aLoadInfo); // Unlike other non-http(s) channels, blob channels may specify a content // range which will be used to read a subset of the full blob. This method can // be used by callers to provide the relevant information before AsyncOpen. nsresult SetRequestContentRangeHeader(const nsACString& aContentRangeHeader); const Maybe& GetRequestContentRange() { return mRequestContentRange; } // Getter/Setter for the response ContentRange object. This is derived from // the request content range, with the additional context of the true // content-length of the underlying BlobImpl. // The response ContentRange is only available after OnStartRequest, and only // if the channel has not been cancelled. net::ContentRange* GetResponseContentRange() { return mResponseContentRange; } nsresult SetResponseContentRange(net::ContentRange* aContentRange); // Get the BlobImpl backing this BlobURLChannel. // The BlobImpl is only available after OnStartRequest, and only if the // channel has not been cancelled. nsresult GetBackingBlob(BlobImpl** aBlobImpl); nsresult SetBackingBlob(BlobImpl* aBlobImpl); NS_IMETHOD SetContentType(const nsACString& aContentType) override; private: ~BlobURLChannel() override; nsresult OpenContentStream(bool aAsync, nsIInputStream** aResult, nsIChannel** aChannel) override; bool mContentStreamOpened; Maybe mRequestContentRange; RefPtr mBlobImpl; RefPtr mResponseContentRange; }; } // namespace mozilla::dom #endif /* mozilla_dom_BlobURLChannel_h */