mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-06 09:05:45 +00:00
cd3e8a6f73
Backed out changeset 7d06b68c44d0 (bug 1079335) Backed out changeset 92030169528e (bug 1079301) Backed out changeset c09d7f95554a (bug 1047483) Backed out changeset c199f1057d7e (bug 1047483) Backed out changeset 18830d07884c (bug 1047483) Backed out changeset e087289ccfbb (bug 1047483) Backed out changeset 6238ff5d3ed0 (bug 1047483) CLOSED TREE --HG-- rename : content/base/public/File.h => content/base/public/nsDOMFile.h rename : content/base/src/MultipartFileImpl.cpp => content/base/src/nsDOMBlobBuilder.cpp rename : content/base/src/MultipartFileImpl.h => content/base/src/nsDOMBlobBuilder.h rename : content/base/src/File.cpp => content/base/src/nsDOMFile.cpp
113 lines
2.9 KiB
C++
113 lines
2.9 KiB
C++
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
/* vim: set ts=2 et sw=2 tw=80: */
|
|
/* 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_archivereader_domarchivereader_h__
|
|
#define mozilla_dom_archivereader_domarchivereader_h__
|
|
|
|
#include "nsWrapperCache.h"
|
|
|
|
#include "ArchiveReaderCommon.h"
|
|
|
|
#include "nsCOMArray.h"
|
|
#include "nsIChannel.h"
|
|
#include "nsIDOMFile.h"
|
|
#include "mozilla/Attributes.h"
|
|
|
|
namespace mozilla {
|
|
namespace dom {
|
|
struct ArchiveReaderOptions;
|
|
class GlobalObject;
|
|
} // namespace dom
|
|
} // namespace mozilla
|
|
|
|
BEGIN_ARCHIVEREADER_NAMESPACE
|
|
|
|
class ArchiveRequest;
|
|
|
|
/**
|
|
* This is the ArchiveReader object
|
|
*/
|
|
class ArchiveReader MOZ_FINAL : public nsISupports,
|
|
public nsWrapperCache
|
|
{
|
|
public:
|
|
NS_DECL_CYCLE_COLLECTING_ISUPPORTS
|
|
NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(ArchiveReader)
|
|
|
|
static already_AddRefed<ArchiveReader>
|
|
Constructor(const GlobalObject& aGlobal, nsIDOMBlob* aBlob,
|
|
const ArchiveReaderOptions& aOptions, ErrorResult& aError);
|
|
|
|
ArchiveReader(nsIDOMBlob* aBlob, nsPIDOMWindow* aWindow,
|
|
const nsACString& aEncoding);
|
|
|
|
nsIDOMWindow* GetParentObject() const
|
|
{
|
|
return mWindow;
|
|
}
|
|
virtual JSObject* WrapObject(JSContext* aCx) MOZ_OVERRIDE;
|
|
|
|
already_AddRefed<ArchiveRequest> GetFilenames();
|
|
already_AddRefed<ArchiveRequest> GetFile(const nsAString& filename);
|
|
already_AddRefed<ArchiveRequest> GetFiles();
|
|
|
|
nsresult GetInputStream(nsIInputStream** aInputStream);
|
|
nsresult GetSize(uint64_t* aSize);
|
|
|
|
public: // for the ArchiveRequest:
|
|
nsresult RegisterRequest(ArchiveRequest* aRequest);
|
|
|
|
public: // For events:
|
|
void Ready(nsTArray<nsCOMPtr<nsIDOMFile> >& aFileList,
|
|
nsresult aStatus);
|
|
|
|
private:
|
|
~ArchiveReader();
|
|
|
|
already_AddRefed<ArchiveRequest> GenerateArchiveRequest();
|
|
|
|
nsresult OpenArchive();
|
|
|
|
void RequestReady(ArchiveRequest* aRequest);
|
|
|
|
protected:
|
|
// The archive blob/file
|
|
nsCOMPtr<nsIDOMBlob> mBlob;
|
|
|
|
// The window is needed by the requests
|
|
nsCOMPtr<nsPIDOMWindow> mWindow;
|
|
|
|
// Are we ready to return data?
|
|
enum {
|
|
NOT_STARTED = 0,
|
|
WORKING,
|
|
READY
|
|
} mStatus;
|
|
|
|
// State of the read:
|
|
enum {
|
|
Header, // We are collecting the header: 30bytes
|
|
Name, // The name length is contained in the header
|
|
Data, // The length of the data segment COULD be written in the header
|
|
Search // ... if the data length is unknown (== 0) we wait until we read a new header
|
|
} mReadStatus;
|
|
|
|
// List of requests to be processed
|
|
nsTArray<nsRefPtr<ArchiveRequest> > mRequests;
|
|
|
|
// Everything related to the blobs and the status:
|
|
struct {
|
|
nsTArray<nsCOMPtr<nsIDOMFile> > fileList;
|
|
nsresult status;
|
|
} mData;
|
|
|
|
nsCString mEncoding;
|
|
};
|
|
|
|
END_ARCHIVEREADER_NAMESPACE
|
|
|
|
#endif // mozilla_dom_archivereader_domarchivereader_h__
|