Bug 1342361 - Get rid of ArchiveReader API, r=smaug
authorAndrea Marchesini <amarchesini@mozilla.com>
Mon, 27 Feb 2017 17:50:46 +0100
changeset 374098 fe12200aa33ad5970712ba7cf4c546d12746c9f2
parent 374097 cd39e056f488613b1cb18fc0ed981fc0db750c68
child 374099 c032cf7f54a06ef03254e450be74b5c54968a27b
push id10863
push userjlorenzo@mozilla.com
push dateMon, 06 Mar 2017 23:02:23 +0000
treeherdermozilla-aurora@0931190cd725 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewerssmaug
bugs1342361
milestone54.0a1
Bug 1342361 - Get rid of ArchiveReader API, r=smaug
dom/archivereader/ArchiveEvent.cpp
dom/archivereader/ArchiveEvent.h
dom/archivereader/ArchiveReader.cpp
dom/archivereader/ArchiveReader.h
dom/archivereader/ArchiveReaderCommon.h
dom/archivereader/ArchiveRequest.cpp
dom/archivereader/ArchiveRequest.h
dom/archivereader/ArchiveZipEvent.cpp
dom/archivereader/ArchiveZipEvent.h
dom/archivereader/ArchiveZipFile.cpp
dom/archivereader/ArchiveZipFile.h
dom/archivereader/moz.build
dom/archivereader/test/helpers.js
dom/archivereader/test/mochitest.ini
dom/archivereader/test/test_basic.html
dom/archivereader/test/test_nonUnicode.html
dom/archivereader/test/test_zip_in_zip.html
dom/indexedDB/test/helpers.js
dom/indexedDB/test/mochitest.ini
dom/indexedDB/test/test_blob_archive.html
dom/moz.build
dom/webidl/ArchiveReader.webidl
dom/webidl/ArchiveRequest.webidl
dom/webidl/moz.build
modules/libpref/init/all.js
deleted file mode 100644
--- a/dom/archivereader/ArchiveEvent.cpp
+++ /dev/null
@@ -1,126 +0,0 @@
-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* vim: set ts=8 sts=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/. */
-
-#include "ArchiveEvent.h"
-
-#include "nsCExternalHandlerService.h"
-#include "nsProxyRelease.h"
-
-USING_ARCHIVEREADER_NAMESPACE
-
-NS_IMPL_ISUPPORTS0(ArchiveItem)
-
-ArchiveItem::ArchiveItem()
-{
-}
-
-ArchiveItem::~ArchiveItem()
-{
-}
-
-
-nsCString
-ArchiveItem::GetType()
-{
-  if (mType.IsEmpty()) {
-    return NS_LITERAL_CSTRING("binary/octet-stream");
-  }
-
-  return mType;
-}
-
-void
-ArchiveItem::SetType(const nsCString& aType)
-{
-  mType = aType;
-}
-
-ArchiveReaderEvent::ArchiveReaderEvent(ArchiveReader* aArchiveReader)
-: mArchiveReader(aArchiveReader)
-{
-}
-
-ArchiveReaderEvent::~ArchiveReaderEvent()
-{
-  if (!NS_IsMainThread()) {
-    NS_ReleaseOnMainThread(mMimeService.forget());
-  }
-}
-
-// From the filename to the mimetype:
-nsresult
-ArchiveReaderEvent::GetType(nsCString& aExt,
-                            nsCString& aMimeType)
-{
-  MOZ_ASSERT(NS_IsMainThread());
-
-  nsresult rv;
-  
-  if (mMimeService.get() == nullptr) {
-    mMimeService = do_GetService(NS_MIMESERVICE_CONTRACTID, &rv);
-    NS_ENSURE_SUCCESS(rv, rv);
-  }
-
-  rv = mMimeService->GetTypeFromExtension(aExt, aMimeType);
-  NS_ENSURE_SUCCESS(rv, rv);
-
-  return NS_OK;
-}
-
-NS_IMETHODIMP
-ArchiveReaderEvent::Run()
-{
-  return Exec();
-}
-
-nsresult
-ArchiveReaderEvent::RunShare(nsresult aStatus)
-{
-  mStatus = aStatus;
-
-  NS_DispatchToMainThread(NewRunnableMethod(this, &ArchiveReaderEvent::ShareMainThread));
-
-  return NS_OK;
-}
-
-void
-ArchiveReaderEvent::ShareMainThread()
-{
-  nsTArray<RefPtr<File>> fileList;
-
-  if (!NS_FAILED(mStatus)) {
-    // This extra step must run in the main thread:
-    for (uint32_t index = 0; index < mFileList.Length(); ++index) {
-      RefPtr<ArchiveItem> item = mFileList[index];
-
-      nsString tmp;
-      nsresult rv = item->GetFilename(tmp);
-      nsCString filename = NS_ConvertUTF16toUTF8(tmp);
-      if (NS_FAILED(rv)) {
-        continue;
-      }
-
-      int32_t offset = filename.RFindChar('.');
-      if (offset != kNotFound) {
-        filename.Cut(0, offset + 1);
-
-        // Just to be sure, if something goes wrong, the mimetype is an empty string:
-        nsCString type;
-        if (NS_SUCCEEDED(GetType(filename, type))) {
-          item->SetType(type);
-        }
-      }
-
-      // This is a File:
-      RefPtr<File> file = item->GetFile(mArchiveReader);
-      if (file) {
-        fileList.AppendElement(file);
-      }
-    }
-  }
-
-  mArchiveReader->Ready(fileList, mStatus);
-}
deleted file mode 100644
--- a/dom/archivereader/ArchiveEvent.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* vim: set ts=8 sts=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_domarchiveevent_h__
-#define mozilla_dom_archivereader_domarchiveevent_h__
-
-#include "ArchiveReader.h"
-
-#include "mozilla/dom/File.h"
-#include "nsISeekableStream.h"
-#include "nsIMIMEService.h"
-
-#include "ArchiveReaderCommon.h"
-
-BEGIN_ARCHIVEREADER_NAMESPACE
-
-/**
- * This class contains all the info needed for a single item
- * It must contain the implementation of the File() method.
- */
-class ArchiveItem : public nsISupports
-{
-public:
-  NS_DECL_THREADSAFE_ISUPPORTS
-
-  ArchiveItem();
-
-  // Getter/Setter for the type
-  nsCString GetType();
-  void SetType(const nsCString& aType);
-
-  // Getter for the filename
-  virtual nsresult GetFilename(nsString& aFilename) = 0;
-
-  // Generate a File
-  virtual already_AddRefed<File> GetFile(ArchiveReader* aArchiveReader) = 0;
-
-protected:
-  virtual ~ArchiveItem();
-
-  nsCString mType;
-};
-
-/**
- * This class must be extended by any archive format supported by ArchiveReader API
- * This class runs in a different thread and it calls the 'exec()' method.
- * The exec() must populate mFileList and mStatus then it must call RunShare();
- */
-class ArchiveReaderEvent : public Runnable
-{
-public:
-  NS_DECL_NSIRUNNABLE
-
-  explicit ArchiveReaderEvent(ArchiveReader* aArchiveReader);
-
-protected:
-  virtual ~ArchiveReaderEvent();
-
-public:
-  // This must be implemented
-  virtual nsresult Exec() = 0;
-
-protected:
-  nsresult GetType(nsCString& aExt,
-                   nsCString& aMimeType);
-
-  nsresult RunShare(nsresult aStatus);
-  void ShareMainThread();
-
-protected: // data
-  ArchiveReader* mArchiveReader;
-
-  nsCOMPtr<nsIMIMEService> mMimeService;
-
-  nsTArray<RefPtr<ArchiveItem> > mFileList; // this must be populated
-  nsresult mStatus;
-};
-
-END_ARCHIVEREADER_NAMESPACE
-
-#endif // mozilla_dom_archivereader_domarchiveevent_h__
deleted file mode 100644
--- a/dom/archivereader/ArchiveReader.cpp
+++ /dev/null
@@ -1,217 +0,0 @@
-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* vim: set ts=8 sts=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/. */
-
-#include "ArchiveReader.h"
-#include "ArchiveRequest.h"
-#include "ArchiveEvent.h"
-#include "ArchiveZipEvent.h"
-
-#include "nsIURI.h"
-#include "nsNetCID.h"
-
-#include "mozilla/dom/ArchiveReaderBinding.h"
-#include "mozilla/dom/BindingDeclarations.h"
-#include "mozilla/dom/File.h"
-#include "mozilla/dom/EncodingUtils.h"
-#include "mozilla/Preferences.h"
-
-using namespace mozilla;
-using namespace mozilla::dom;
-USING_ARCHIVEREADER_NAMESPACE
-
-/* static */ already_AddRefed<ArchiveReader>
-ArchiveReader::Constructor(const GlobalObject& aGlobal,
-                           Blob& aBlob,
-                           const ArchiveReaderOptions& aOptions,
-                           ErrorResult& aError)
-{
-  nsCOMPtr<nsPIDOMWindowInner> window = do_QueryInterface(aGlobal.GetAsSupports());
-  if (!window) {
-    aError.Throw(NS_ERROR_UNEXPECTED);
-    return nullptr;
-  }
-
-  nsAutoCString encoding;
-  if (!EncodingUtils::FindEncodingForLabelNoReplacement(aOptions.mEncoding,
-                                                        encoding)) {
-    aError.ThrowRangeError<MSG_ENCODING_NOT_SUPPORTED>(aOptions.mEncoding);
-    return nullptr;
-  }
-
-  RefPtr<ArchiveReader> reader =
-    new ArchiveReader(aBlob, window, encoding);
-  return reader.forget();
-}
-
-ArchiveReader::ArchiveReader(Blob& aBlob, nsPIDOMWindowInner* aWindow,
-                             const nsACString& aEncoding)
-  : mBlobImpl(aBlob.Impl())
-  , mWindow(aWindow)
-  , mStatus(NOT_STARTED)
-  , mEncoding(aEncoding)
-{
-  MOZ_ASSERT(aWindow);
-}
-
-ArchiveReader::~ArchiveReader()
-{
-}
-
-/* virtual */ JSObject*
-ArchiveReader::WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto)
-{
-  return ArchiveReaderBinding::Wrap(aCx, this, aGivenProto);
-}
-
-nsresult
-ArchiveReader::RegisterRequest(ArchiveRequest* aRequest)
-{
-  switch (mStatus) {
-    // Append to the list and let's start to work:
-    case NOT_STARTED:
-      mRequests.AppendElement(aRequest);
-      return OpenArchive();
-
-    // Just append to the list:
-    case WORKING:
-      mRequests.AppendElement(aRequest);
-      return NS_OK;
-
-    // Return data!
-    case READY:
-      RequestReady(aRequest);
-      return NS_OK;
-  }
-
-  NS_ASSERTION(false, "unexpected mStatus value");
-  return NS_OK;
-}
-
-// This returns the input stream
-nsresult
-ArchiveReader::GetInputStream(nsIInputStream** aInputStream)
-{
-  // Getting the input stream
-  ErrorResult rv;
-  mBlobImpl->GetInternalStream(aInputStream, rv);
-  if (NS_WARN_IF(rv.Failed())) {
-    return rv.StealNSResult();
-  }
-
-  return NS_OK;
-}
-
-nsresult
-ArchiveReader::GetSize(uint64_t* aSize)
-{
-  ErrorResult rv;
-  *aSize = mBlobImpl->GetSize(rv);
-  return rv.StealNSResult();
-}
-
-// Here we open the archive:
-nsresult
-ArchiveReader::OpenArchive()
-{
-  mStatus = WORKING;
-  nsresult rv;
-
-  // Target:
-  nsCOMPtr<nsIEventTarget> target = do_GetService(NS_STREAMTRANSPORTSERVICE_CONTRACTID);
-  NS_ASSERTION(target, "Must have stream transport service");
-
-  // Here a Event to make everything async:
-  RefPtr<ArchiveReaderEvent> event;
-
-  /* FIXME: If we want to support more than 1 format we should check the content type here: */
-  event = new ArchiveReaderZipEvent(this, mEncoding);
-  rv = target->Dispatch(event, NS_DISPATCH_NORMAL);
-  NS_ENSURE_SUCCESS(rv, rv);
-
-  // In order to be sure that this object exists when the event finishes its task,
-  // we increase the refcount here:
-  AddRef();
-
-  return NS_OK;
-}
-
-// Data received from the dispatched event:
-void
-ArchiveReader::Ready(nsTArray<RefPtr<File>>& aFileList,
-                     nsresult aStatus)
-{
-  mStatus = READY;
- 
-  // Let's store the values:
-  mData.fileList = aFileList;
-  mData.status = aStatus;
-
-  // Propagate the results:
-  for (uint32_t index = 0; index < mRequests.Length(); ++index) {
-    RefPtr<ArchiveRequest> request = mRequests[index];
-    RequestReady(request);
-  }
-
-  mRequests.Clear();
-
-  // The async operation is concluded, we can decrease the reference:
-  Release();
-}
-
-void
-ArchiveReader::RequestReady(ArchiveRequest* aRequest)
-{
-  // The request will do the rest:
-  aRequest->ReaderReady(mData.fileList, mData.status);
-}
-
-already_AddRefed<ArchiveRequest>
-ArchiveReader::GetFilenames()
-{
-  RefPtr<ArchiveRequest> request = GenerateArchiveRequest();
-  request->OpGetFilenames();
-
-  return request.forget();
-}
-
-already_AddRefed<ArchiveRequest>
-ArchiveReader::GetFile(const nsAString& filename)
-{
-  RefPtr<ArchiveRequest> request = GenerateArchiveRequest();
-  request->OpGetFile(filename);
-
-  return request.forget();
-}
-
-already_AddRefed<ArchiveRequest>
-ArchiveReader::GetFiles()
-{
-  RefPtr<ArchiveRequest> request = GenerateArchiveRequest();
-  request->OpGetFiles();
-
-  return request.forget();
-}
-
-already_AddRefed<ArchiveRequest>
-ArchiveReader::GenerateArchiveRequest()
-{
-  NS_ASSERTION(NS_IsMainThread(), "Wrong thread!");
-  return ArchiveRequest::Create(mWindow, this);
-}
-
-NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(ArchiveReader,
-                                      mBlobImpl,
-                                      mWindow,
-                                      mData.fileList,
-                                      mRequests)
-
-NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(ArchiveReader)
-  NS_WRAPPERCACHE_INTERFACE_MAP_ENTRY
-  NS_INTERFACE_MAP_ENTRY(nsISupports)
-NS_INTERFACE_MAP_END
-
-NS_IMPL_CYCLE_COLLECTING_ADDREF(ArchiveReader)
-NS_IMPL_CYCLE_COLLECTING_RELEASE(ArchiveReader)
deleted file mode 100644
--- a/dom/archivereader/ArchiveReader.h
+++ /dev/null
@@ -1,119 +0,0 @@
-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* vim: set ts=8 sts=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 "mozilla/Attributes.h"
-
-namespace mozilla {
-namespace dom {
-struct ArchiveReaderOptions;
-class Blob;
-class BlobImpl;
-class File;
-class GlobalObject;
-} // namespace dom
-} // namespace mozilla
-
-BEGIN_ARCHIVEREADER_NAMESPACE
-
-class ArchiveRequest;
-
-/**
- * This is the ArchiveReader object
- */
-class ArchiveReader 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, Blob& aBlob,
-              const ArchiveReaderOptions& aOptions, ErrorResult& aError);
-
-  ArchiveReader(Blob& aBlob, nsPIDOMWindowInner* aWindow,
-                const nsACString& aEncoding);
-
-  nsPIDOMWindowInner* GetParentObject() const
-  {
-    return mWindow;
-  }
-
-  virtual JSObject* WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) 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:
-  BlobImpl* GetBlobImpl() const
-  {
-    return mBlobImpl;
-  }
-
-  void Ready(nsTArray<RefPtr<File>>& aFileList, nsresult aStatus);
-
-private:
-  ~ArchiveReader();
-
-  already_AddRefed<ArchiveRequest> GenerateArchiveRequest();
-
-  nsresult OpenArchive();
-
-  void RequestReady(ArchiveRequest* aRequest);
-
-protected:
-  // The archive blob/file
-  RefPtr<BlobImpl> mBlobImpl;
-
-  // The window is needed by the requests
-  nsCOMPtr<nsPIDOMWindowInner> 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<RefPtr<ArchiveRequest> > mRequests;
-
-  // Everything related to the blobs and the status:
-  struct {
-    nsTArray<RefPtr<File>> fileList;
-    nsresult status;
-  } mData;
-
-  nsCString mEncoding;
-};
-
-END_ARCHIVEREADER_NAMESPACE
-
-#endif // mozilla_dom_archivereader_domarchivereader_h__
deleted file mode 100644
--- a/dom/archivereader/ArchiveReaderCommon.h
+++ /dev/null
@@ -1,24 +0,0 @@
-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* vim: set ts=8 sts=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_archivereader_h
-#define mozilla_dom_archivereader_archivereader_h
-
-#include "mozilla/DOMEventTargetHelper.h"
-#include "nsCOMPtr.h"
-#include "nsCycleCollectionParticipant.h"
-#include "nsDebug.h"
-#include "nsString.h"
-#include "nsTArray.h"
-
-#define BEGIN_ARCHIVEREADER_NAMESPACE \
-  namespace mozilla { namespace dom { namespace archivereader {
-#define END_ARCHIVEREADER_NAMESPACE \
-  } /* namespace archivereader */ } /* namespace dom */ } /* namespace mozilla */
-#define USING_ARCHIVEREADER_NAMESPACE \
-  using namespace mozilla::dom::archivereader;
-
-#endif // mozilla_dom_archivereader_archivereadercommon_h
deleted file mode 100644
--- a/dom/archivereader/ArchiveRequest.cpp
+++ /dev/null
@@ -1,272 +0,0 @@
-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* vim: set ts=8 sts=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/. */
-
-#include "ArchiveRequest.h"
-
-#include "mozilla/EventDispatcher.h"
-#include "mozilla/dom/ArchiveRequestBinding.h"
-#include "mozilla/dom/ScriptSettings.h"
-#include "nsContentUtils.h"
-
-using namespace mozilla;
-
-USING_ARCHIVEREADER_NAMESPACE
-
-/**
- * Class used to make asynchronous the ArchiveRequest.
- */
-class ArchiveRequestEvent : public Runnable
-{
-public:
-  NS_DECL_NSIRUNNABLE
-
-  explicit ArchiveRequestEvent(ArchiveRequest* aRequest)
-  : mRequest(aRequest)
-  {
-  }
-
-protected:
-  ~ArchiveRequestEvent()
-  {
-  }
-
-private: //data
-  RefPtr<ArchiveRequest> mRequest;
-};
-
-NS_IMETHODIMP
-ArchiveRequestEvent::Run()
-{
-  MOZ_ASSERT(mRequest, "the request is not longer valid");
-  mRequest->Run();
-  return NS_OK;
-}
-
-// ArchiveRequest
-
-ArchiveRequest::ArchiveRequest(nsPIDOMWindowInner* aWindow,
-                               ArchiveReader* aReader)
-: DOMRequest(aWindow),
-  mArchiveReader(aReader)
-{
-  MOZ_ASSERT(aReader);
-
-  /* An event to make this request asynchronous: */
-  RefPtr<ArchiveRequestEvent> event = new ArchiveRequestEvent(this);
-  NS_DispatchToCurrentThread(event);
-}
-
-ArchiveRequest::~ArchiveRequest()
-{
-}
-
-nsresult
-ArchiveRequest::GetEventTargetParent(EventChainPreVisitor& aVisitor)
-{
-  aVisitor.mCanHandle = true;
-  aVisitor.mParentTarget = nullptr;
-  return NS_OK;
-}
-
-/* virtual */ JSObject*
-ArchiveRequest::WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto)
-{
-  return ArchiveRequestBinding::Wrap(aCx, this, aGivenProto);
-}
-
-ArchiveReader*
-ArchiveRequest::Reader() const
-{
-  NS_ASSERTION(NS_IsMainThread(), "Wrong thread!");
-
-  return mArchiveReader;
-}
-
-// Here the request is processed:
-void
-ArchiveRequest::Run()
-{
-  // Register this request to the reader.
-  // When the reader is ready to return data, a 'Ready()' will be called
-  nsresult rv = mArchiveReader->RegisterRequest(this);
-  if (NS_FAILED(rv)) {
-    FireError(rv);
-  }
-}
-
-void
-ArchiveRequest::OpGetFilenames()
-{
-  mOperation = GetFilenames;
-}
-
-void
-ArchiveRequest::OpGetFile(const nsAString& aFilename)
-{
-  mOperation = GetFile;
-  mFilename = aFilename;
-}
-
-void
-ArchiveRequest::OpGetFiles()
-{
-  mOperation = GetFiles;
-}
-
-nsresult
-ArchiveRequest::ReaderReady(nsTArray<RefPtr<File>>& aFileList,
-                            nsresult aStatus)
-{
-  if (NS_FAILED(aStatus)) {
-    FireError(aStatus);
-    return NS_OK;
-  }
-
-  nsresult rv;
-
-  AutoJSAPI jsapi;
-  if (NS_WARN_IF(!jsapi.Init(GetOwner()))) {
-    return NS_ERROR_UNEXPECTED;
-  }
-  JSContext* cx = jsapi.cx();
-
-  JS::Rooted<JS::Value> result(cx);
-  switch (mOperation) {
-    case GetFilenames:
-      rv = GetFilenamesResult(cx, result.address(), aFileList);
-      break;
-
-    case GetFile:
-      rv = GetFileResult(cx, &result, aFileList);
-      break;
-
-    case GetFiles:
-      rv = GetFilesResult(cx, &result, aFileList);
-      break;
-
-    default:
-      rv = NS_ERROR_UNEXPECTED;
-      break;
-  }
-
-  if (NS_FAILED(rv)) {
-    NS_WARNING("Get*Result failed!");
-  }
-
-  if (NS_SUCCEEDED(rv)) {
-    FireSuccess(result);
-  }
-  else {
-    FireError(rv);
-  }
-
-  return NS_OK;
-}
-
-nsresult
-ArchiveRequest::GetFilenamesResult(JSContext* aCx,
-                                   JS::Value* aValue,
-                                   nsTArray<RefPtr<File>>& aFileList)
-{
-  JS::Rooted<JSObject*> array(aCx, JS_NewArrayObject(aCx, aFileList.Length()));
-
-  if (!array) {
-    return NS_ERROR_OUT_OF_MEMORY;
-  }
-
-  JS::Rooted<JSString*> str(aCx);
-  for (uint32_t i = 0; i < aFileList.Length(); ++i) {
-    RefPtr<File> file = aFileList[i];
-
-    nsString filename;
-    file->GetName(filename);
-
-    str = JS_NewUCStringCopyZ(aCx, filename.get());
-    NS_ENSURE_TRUE(str, NS_ERROR_OUT_OF_MEMORY);
-
-    if (!JS_DefineElement(aCx, array, i, str, JSPROP_ENUMERATE)) {
-      return NS_ERROR_FAILURE;
-    }
-  }
-
-  if (!JS_FreezeObject(aCx, array)) {
-    return NS_ERROR_FAILURE;
-  }
-
-  aValue->setObject(*array);
-  return NS_OK;
-}
-
-nsresult
-ArchiveRequest::GetFileResult(JSContext* aCx,
-                              JS::MutableHandle<JS::Value> aValue,
-                              nsTArray<RefPtr<File>>& aFileList)
-{
-  for (uint32_t i = 0; i < aFileList.Length(); ++i) {
-    RefPtr<File> file = aFileList[i];
-
-    nsString filename;
-    file->GetName(filename);
-
-    if (filename == mFilename) {
-      if (!ToJSValue(aCx, file, aValue)) {
-        return NS_ERROR_FAILURE;
-      }
-
-      return NS_OK;
-    }
-  }
-
-  return NS_ERROR_FAILURE;
-}
-
-nsresult
-ArchiveRequest::GetFilesResult(JSContext* aCx,
-                               JS::MutableHandle<JS::Value> aValue,
-                               nsTArray<RefPtr<File>>& aFileList)
-{
-  JS::Rooted<JSObject*> array(aCx, JS_NewArrayObject(aCx, aFileList.Length()));
-  if (!array) {
-    return NS_ERROR_OUT_OF_MEMORY;
-  }
-
-  for (uint32_t i = 0; i < aFileList.Length(); ++i) {
-    RefPtr<File> file = aFileList[i];
-
-    JS::Rooted<JS::Value> value(aCx);
-    if (!ToJSValue(aCx, file, &value)) {
-      return NS_ERROR_FAILURE;
-    }
-
-    if (!JS_DefineElement(aCx, array, i, value, JSPROP_ENUMERATE)) {
-      return NS_ERROR_FAILURE;
-    }
-  }
-
-  aValue.setObject(*array);
-  return NS_OK;
-}
-
-// static
-already_AddRefed<ArchiveRequest>
-ArchiveRequest::Create(nsPIDOMWindowInner* aOwner,
-                       ArchiveReader* aReader)
-{
-  NS_ASSERTION(NS_IsMainThread(), "Wrong thread!");
-
-  RefPtr<ArchiveRequest> request = new ArchiveRequest(aOwner, aReader);
-
-  return request.forget();
-}
-
-NS_IMPL_CYCLE_COLLECTION_INHERITED(ArchiveRequest, DOMRequest,
-                                   mArchiveReader)
-
-NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION_INHERITED(ArchiveRequest)
-NS_INTERFACE_MAP_END_INHERITING(DOMRequest)
-
-NS_IMPL_ADDREF_INHERITED(ArchiveRequest, DOMRequest)
-NS_IMPL_RELEASE_INHERITED(ArchiveRequest, DOMRequest)
deleted file mode 100644
--- a/dom/archivereader/ArchiveRequest.h
+++ /dev/null
@@ -1,89 +0,0 @@
-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* vim: set ts=8 sts=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_domarchiverequest_h__
-#define mozilla_dom_archivereader_domarchiverequest_h__
-
-#include "mozilla/Attributes.h"
-#include "ArchiveReader.h"
-#include "DOMRequest.h"
-
-#include "ArchiveReaderCommon.h"
-
-namespace mozilla {
-class EventChainPreVisitor;
-} // namespace mozilla
-
-BEGIN_ARCHIVEREADER_NAMESPACE
-
-/**
- * This is the ArchiveRequest that handles any operation
- * related to ArchiveReader
- */
-class ArchiveRequest : public mozilla::dom::DOMRequest
-{
-public:
-  virtual JSObject* WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override;
-
-  ArchiveReader* Reader() const;
-
-  NS_DECL_ISUPPORTS_INHERITED
-
-  NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(ArchiveRequest, DOMRequest)
-
-  ArchiveRequest(nsPIDOMWindowInner* aWindow,
-                 ArchiveReader* aReader);
-
-  // nsIDOMEventTarget
-  virtual nsresult GetEventTargetParent(
-                     EventChainPreVisitor& aVisitor) override;
-
-public:
-  // This is called by the DOMArchiveRequestEvent
-  void Run();
-
-  // Set the types for this request
-  void OpGetFilenames();
-  void OpGetFile(const nsAString& aFilename);
-  void OpGetFiles();
-
-  nsresult ReaderReady(nsTArray<RefPtr<File>>& aFileList, nsresult aStatus);
-
-public: // static
-  static already_AddRefed<ArchiveRequest> Create(nsPIDOMWindowInner* aOwner,
-                                                 ArchiveReader* aReader);
-
-private:
-  ~ArchiveRequest();
-
-  nsresult GetFilenamesResult(JSContext* aCx,
-                              JS::Value* aValue,
-                              nsTArray<RefPtr<File>>& aFileList);
-  nsresult GetFileResult(JSContext* aCx,
-                         JS::MutableHandle<JS::Value> aValue,
-                         nsTArray<RefPtr<File>>& aFileList);
-  nsresult GetFilesResult(JSContext* aCx,
-                          JS::MutableHandle<JS::Value> aValue,
-                          nsTArray<RefPtr<File>>& aFileList);
-
-protected:
-  // The reader:
-  RefPtr<ArchiveReader> mArchiveReader;
-
-  // The operation:
-  enum {
-    GetFilenames,
-    GetFile,
-    GetFiles
-  } mOperation;
-
-  // The filename (needed by GetFile):
-  nsString mFilename;
-};
-
-END_ARCHIVEREADER_NAMESPACE
-
-#endif // mozilla_dom_archivereader_domarchiverequest_h__
deleted file mode 100644
--- a/dom/archivereader/ArchiveZipEvent.cpp
+++ /dev/null
@@ -1,215 +0,0 @@
-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* vim: set ts=8 sts=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/. */
-
-#include "ArchiveZipEvent.h"
-#include "ArchiveZipFile.h"
-
-#include "nsContentUtils.h"
-#include "nsCExternalHandlerService.h"
-
-#include "mozilla/UniquePtr.h"
-#include "nsIInputStream.h"
-
-using namespace mozilla;
-using namespace mozilla::dom;
-
-USING_ARCHIVEREADER_NAMESPACE
-
-#ifndef PATH_MAX
-#  define PATH_MAX 65536 // The filename length is stored in 2 bytes
-#endif
-
-ArchiveZipItem::ArchiveZipItem(const char* aFilename,
-                               const ZipCentral& aCentralStruct,
-                               const nsACString& aEncoding)
-: mFilename(aFilename),
-  mCentralStruct(aCentralStruct),
-  mEncoding(aEncoding)
-{
-}
-
-ArchiveZipItem::~ArchiveZipItem()
-{
-}
-
-nsresult
-ArchiveZipItem::ConvertFilename()
-{
-  if (mEncoding.IsEmpty()) {
-    return NS_ERROR_FAILURE;
-  }
-
-  nsString filenameU;
-  nsresult rv = nsContentUtils::ConvertStringFromEncoding(
-                  mEncoding,
-                  mFilename, filenameU);
-  NS_ENSURE_SUCCESS(rv, rv);
-
-  if (filenameU.IsEmpty()) {
-    return NS_ERROR_FAILURE;
-  }
-
-  mFilenameU = filenameU;
-  return NS_OK;
-}
-
-nsresult
-ArchiveZipItem::GetFilename(nsString& aFilename)
-{
-  if (mFilenameU.IsEmpty()) {
-    // Maybe this string is UTF-8:
-    if (IsUTF8(mFilename, false)) {
-      mFilenameU = NS_ConvertUTF8toUTF16(mFilename);
-    }
-
-    // Let's use the enconding value for the dictionary
-    else {
-      nsresult rv = ConvertFilename();
-      NS_ENSURE_SUCCESS(rv, rv);
-    }
-  }
-
-  aFilename = mFilenameU;
-  return NS_OK;
-}
-
-// From zipItem to File:
-already_AddRefed<File>
-ArchiveZipItem::GetFile(ArchiveReader* aArchiveReader)
-{
-  nsString filename;
-
-  if (NS_FAILED(GetFilename(filename))) {
-    return nullptr;
-  }
-
-  RefPtr<dom::File> file = dom::File::Create(aArchiveReader,
-    new ArchiveZipBlobImpl(filename,
-                           NS_ConvertUTF8toUTF16(GetType()),
-                           StrToInt32(mCentralStruct.orglen),
-                           mCentralStruct, aArchiveReader->GetBlobImpl()));
-  MOZ_ASSERT(file);
-  return file.forget();
-}
-
-uint32_t
-ArchiveZipItem::StrToInt32(const uint8_t* aStr)
-{
-  return (uint32_t)( (aStr [0] <<  0) |
-                     (aStr [1] <<  8) |
-                     (aStr [2] << 16) |
-                     (aStr [3] << 24) );
-}
-
-uint16_t
-ArchiveZipItem::StrToInt16(const uint8_t* aStr)
-{
-  return (uint16_t) ((aStr [0]) | (aStr [1] << 8));
-}
-
-// ArchiveReaderZipEvent
-
-ArchiveReaderZipEvent::ArchiveReaderZipEvent(ArchiveReader* aArchiveReader,
-                                             const nsACString& aEncoding)
-: ArchiveReaderEvent(aArchiveReader),
-  mEncoding(aEncoding)
-{
-}
-
-// NOTE: this runs in a different thread!!
-nsresult
-ArchiveReaderZipEvent::Exec()
-{
-  uint32_t centralOffset(0);
-  nsresult rv;
-
-  nsCOMPtr<nsIInputStream> inputStream;
-  rv = mArchiveReader->GetInputStream(getter_AddRefs(inputStream));
-  if (NS_FAILED(rv) || !inputStream) {
-    return RunShare(NS_ERROR_UNEXPECTED);
-  }
-
-  // From the input stream to a seekable stream
-  nsCOMPtr<nsISeekableStream> seekableStream;
-  seekableStream = do_QueryInterface(inputStream);
-  if (!seekableStream) {
-    return RunShare(NS_ERROR_UNEXPECTED);
-  }
-
-  uint64_t size;
-  rv = mArchiveReader->GetSize(&size);
-  if (NS_FAILED(rv)) {
-    return RunShare(NS_ERROR_UNEXPECTED);
-  }
-
-  // Reading backward.. looking for the ZipEnd signature
-  for (uint64_t curr = size - ZIPEND_SIZE; curr > 4; --curr) {
-    seekableStream->Seek(nsISeekableStream::NS_SEEK_SET, curr);
-
-    uint8_t buffer[ZIPEND_SIZE];
-    uint32_t ret;
-
-    rv = inputStream->Read((char*)buffer, sizeof(buffer), &ret);
-    if (NS_FAILED(rv) || ret != sizeof(buffer)) {
-      return RunShare(NS_ERROR_UNEXPECTED);
-    }
-
-    // Here we are:
-    if (ArchiveZipItem::StrToInt32(buffer) == ENDSIG) {
-      centralOffset = ArchiveZipItem::StrToInt32(((ZipEnd*)buffer)->offset_central_dir);
-      break;
-    }
-  }
-
-  // No central Offset
-  if (!centralOffset || centralOffset >= size - ZIPEND_SIZE) {
-    return RunShare(NS_ERROR_FAILURE);
-  }
-
-  // Seek to the first central directory:
-  seekableStream->Seek(nsISeekableStream::NS_SEEK_SET, centralOffset);
-
-  // For each central directory:
-  while (centralOffset <= size - ZIPCENTRAL_SIZE) {
-    ZipCentral centralStruct;
-    uint32_t ret;
-    
-    rv = inputStream->Read((char*)&centralStruct, ZIPCENTRAL_SIZE, &ret);
-    if (NS_FAILED(rv) || ret != ZIPCENTRAL_SIZE) {
-      return RunShare(NS_ERROR_UNEXPECTED);
-    }
-
-    uint16_t filenameLen = ArchiveZipItem::StrToInt16(centralStruct.filename_len);
-    uint16_t extraLen = ArchiveZipItem::StrToInt16(centralStruct.extrafield_len);
-    uint16_t commentLen = ArchiveZipItem::StrToInt16(centralStruct.commentfield_len);
-
-    // Point to the next item at the top of loop
-    centralOffset += ZIPCENTRAL_SIZE + filenameLen + extraLen + commentLen;
-    if (filenameLen == 0 || filenameLen >= PATH_MAX || centralOffset >= size) {
-      return RunShare(NS_ERROR_FILE_CORRUPTED);
-    }
-
-    // Read the name:
-    auto filename = MakeUnique<char[]>(filenameLen + 1);
-    rv = inputStream->Read(filename.get(), filenameLen, &ret);
-    if (NS_FAILED(rv) || ret != filenameLen) {
-      return RunShare(NS_ERROR_UNEXPECTED);
-    }
-
-    filename[filenameLen] = 0;
-
-    // We ignore the directories:
-    if (filename[filenameLen - 1] != '/') {
-      mFileList.AppendElement(new ArchiveZipItem(filename.get(), centralStruct,
-                                                 mEncoding));
-    }
-
-    // Ignore the rest
-    seekableStream->Seek(nsISeekableStream::NS_SEEK_CUR, extraLen + commentLen);
-  }
-
-  return RunShare(NS_OK);
-}
deleted file mode 100644
--- a/dom/archivereader/ArchiveZipEvent.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* vim: set ts=8 sts=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_domarchivezipevent_h__
-#define mozilla_dom_archivereader_domarchivezipevent_h__
-
-#include "mozilla/Attributes.h"
-#include "ArchiveEvent.h"
-
-#include "ArchiveReaderCommon.h"
-#include "zipstruct.h"
-
-BEGIN_ARCHIVEREADER_NAMESPACE
-
-/**
- * ArchiveZipItem - ArchiveItem for ArchiveReaderZipEvent
- */
-class ArchiveZipItem : public ArchiveItem
-{
-public:
-  ArchiveZipItem(const char* aFilename,
-                 const ZipCentral& aCentralStruct,
-                 const nsACString& aEncoding);
-protected:
-  virtual ~ArchiveZipItem();
-
-public:
-  nsresult GetFilename(nsString& aFilename) override;
-
-  // From zipItem to File:
-  virtual already_AddRefed<File>
-  GetFile(ArchiveReader* aArchiveReader) override;
-
-public: // for the event
-  static uint32_t StrToInt32(const uint8_t* aStr);
-  static uint16_t StrToInt16(const uint8_t* aStr);
-
-private:
-  nsresult ConvertFilename();
-
-private: // data
-  nsCString mFilename;
-
-  nsString mFilenameU;
-  ZipCentral mCentralStruct;
-
-  nsCString mEncoding;
-};
-
-/**
- * ArchiveReaderEvent implements the ArchiveReaderEvent for the ZIP format
- */
-class ArchiveReaderZipEvent : public ArchiveReaderEvent
-{
-public:
-  ArchiveReaderZipEvent(ArchiveReader* aArchiveReader,
-                        const nsACString& aEncoding);
-
-  nsresult Exec() override;
-
-private:
-  nsCString mEncoding;
-};
-
-END_ARCHIVEREADER_NAMESPACE
-
-#endif // mozilla_dom_archivereader_domarchivezipevent_h__
deleted file mode 100644
--- a/dom/archivereader/ArchiveZipFile.cpp
+++ /dev/null
@@ -1,399 +0,0 @@
-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* vim: set ts=8 sts=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/. */
-
-#include "ArchiveZipFile.h"
-#include "ArchiveZipEvent.h"
-
-#include "nsIInputStream.h"
-#include "zlib.h"
-#include "mozilla/Attributes.h"
-#include "mozilla/dom/File.h"
-
-using namespace mozilla::dom;
-USING_ARCHIVEREADER_NAMESPACE
-
-#define ZIP_CHUNK 16384
-
-/**
- * Input stream object for zip files
- */
-class ArchiveInputStream final : public nsIInputStream,
-                                 public nsISeekableStream
-{
-public:
-  ArchiveInputStream(uint64_t aParentSize,
-                     nsIInputStream* aInputStream,
-                     nsString& aFilename,
-                     uint32_t aStart,
-                     uint32_t aLength,
-                     ZipCentral& aCentral)
-  : mCentral(aCentral),
-    mFilename(aFilename),
-    mStart(aStart),
-    mLength(aLength),
-    mStatus(NotStarted)
-  {
-    // Reset the data:
-    memset(&mData, 0, sizeof(mData));
-
-    mData.parentSize = aParentSize;
-    mData.inputStream = aInputStream;
-  }
-
-  NS_DECL_THREADSAFE_ISUPPORTS
-  NS_DECL_NSIINPUTSTREAM
-  NS_DECL_NSISEEKABLESTREAM
-
-private:
-  virtual ~ArchiveInputStream()
-  {
-    Close();
-  }
-
-  nsresult Init();
-
-private: // data
-  ZipCentral mCentral;
-  nsString mFilename;
-  uint32_t mStart;
-  uint32_t mLength;
-
-  z_stream mZs;
-
-  enum {
-    NotStarted,
-    Started,
-    Done
-  } mStatus;
-
-  struct {
-    uint64_t parentSize;
-    nsCOMPtr<nsIInputStream> inputStream;
-
-    unsigned char input[ZIP_CHUNK];
-    uint32_t sizeToBeRead;
-    uint32_t cursor;
-
-    bool compressed; // a zip file can contain stored or compressed files
-  } mData;
-};
-
-NS_IMPL_ISUPPORTS(ArchiveInputStream,
-                  nsIInputStream,
-                  nsISeekableStream)
-
-nsresult
-ArchiveInputStream::Init()
-{
-  nsresult rv;
-
-  memset(&mZs, 0, sizeof(z_stream));
-  int zerr = inflateInit2(&mZs, -MAX_WBITS);
-  if (zerr != Z_OK) {
-    return NS_ERROR_OUT_OF_MEMORY;
-  }
-
-  mData.sizeToBeRead = ArchiveZipItem::StrToInt32(mCentral.size);
-
-  uint32_t offset = ArchiveZipItem::StrToInt32(mCentral.localhdr_offset);
-
-  // The file is corrupt
-  if (mData.parentSize < ZIPLOCAL_SIZE ||
-      offset > mData.parentSize - ZIPLOCAL_SIZE) {
-    return NS_ERROR_UNEXPECTED;
-  }
-
-  // From the input stream to a seekable stream
-  nsCOMPtr<nsISeekableStream> seekableStream;
-  seekableStream = do_QueryInterface(mData.inputStream);
-  if (!seekableStream) {
-    return NS_ERROR_UNEXPECTED;
-  }
-
-  // Seek + read the ZipLocal struct
-  seekableStream->Seek(nsISeekableStream::NS_SEEK_SET, offset);
-  uint8_t buffer[ZIPLOCAL_SIZE];
-  uint32_t ret;
-
-  rv = mData.inputStream->Read((char*)buffer, ZIPLOCAL_SIZE, &ret);
-  if (NS_FAILED(rv) || ret != ZIPLOCAL_SIZE) {
-    return NS_ERROR_UNEXPECTED;
-  }
-
-  // Signature check:
-  if (ArchiveZipItem::StrToInt32(buffer) != LOCALSIG) {
-    return NS_ERROR_UNEXPECTED;
-  }
-
-  ZipLocal local;
-  memcpy(&local, buffer, ZIPLOCAL_SIZE);
-
-  // Seek to the real data:
-  offset += ZIPLOCAL_SIZE +
-            ArchiveZipItem::StrToInt16(local.filename_len) +
-            ArchiveZipItem::StrToInt16(local.extrafield_len);
-
-  // The file is corrupt if there is not enough data
-  if (mData.parentSize < mData.sizeToBeRead ||
-      offset > mData.parentSize - mData.sizeToBeRead) {
-    return NS_ERROR_UNEXPECTED;
-  }
-
-  // Data starts here:
-  seekableStream->Seek(nsISeekableStream::NS_SEEK_SET, offset);
-
-  // The file is compressed or not?
-  mData.compressed = (ArchiveZipItem::StrToInt16(mCentral.method) != 0);
-
-  // We have to skip the first mStart bytes:
-  if (mStart != 0) {
-    rv = Seek(NS_SEEK_SET, mStart);
-    NS_ENSURE_SUCCESS(rv, rv);
-  }
-
-  return NS_OK;
-}
-
-NS_IMETHODIMP
-ArchiveInputStream::Close()
-{
-  if (mStatus != NotStarted) {
-    inflateEnd(&mZs);
-    mStatus = NotStarted;
-  }
-
-  return NS_OK;
-}
-
-NS_IMETHODIMP
-ArchiveInputStream::Available(uint64_t* _retval)
-{
-  *_retval = mLength - mData.cursor - mStart;
-  return NS_OK;
-}
-
-NS_IMETHODIMP
-ArchiveInputStream::Read(char* aBuffer,
-                         uint32_t aCount,
-                         uint32_t* _retval)
-{
-  NS_ENSURE_ARG_POINTER(aBuffer);
-  NS_ENSURE_ARG_POINTER(_retval);
-
-  nsresult rv;
-
-  // This is the first time:
-  if (mStatus == NotStarted) {
-    mStatus = Started;
-
-    rv = Init();
-    if (NS_FAILED(rv)) {
-      return rv;
-    }
-
-    // Let's set avail_out to -1 so we read something from the stream.
-    mZs.avail_out = (uInt)-1;
-  }
-
-  // Nothing more can be read
-  if (mStatus == Done) {
-    *_retval = 0;
-    return NS_OK;
-  }
-
-  // Stored file:
-  if (!mData.compressed) {
-    rv = mData.inputStream->Read(aBuffer,
-                                 (mData.sizeToBeRead > aCount ?
-                                    aCount : mData.sizeToBeRead),
-                                 _retval);
-    if (NS_SUCCEEDED(rv)) {
-      mData.sizeToBeRead -= *_retval;
-      mData.cursor += *_retval;
-
-      if (mData.sizeToBeRead == 0) {
-        mStatus = Done;
-      }
-    }
-
-    return rv;
-  }
-
-  // We have nothing ready to be processed:
-  if (mZs.avail_out != 0 && mData.sizeToBeRead != 0) {
-    uint32_t ret;
-    rv = mData.inputStream->Read((char*)mData.input,
-                                 (mData.sizeToBeRead > sizeof(mData.input) ?
-                                      sizeof(mData.input) : mData.sizeToBeRead),
-                                 &ret);
-    if (NS_FAILED(rv)) {
-      return rv;
-    }
-
-    // Terminator:
-    if (ret == 0) {
-      *_retval = 0;
-      return NS_OK;
-    }
-
-    mData.sizeToBeRead -= ret;
-    mZs.avail_in = ret;
-    mZs.next_in = mData.input;
-  }
-
-  mZs.avail_out = aCount;
-  mZs.next_out = (unsigned char*)aBuffer;
-
-  int ret = inflate(&mZs, mData.sizeToBeRead ? Z_NO_FLUSH : Z_FINISH);
-  if (ret != Z_BUF_ERROR && ret != Z_OK && ret != Z_STREAM_END) {
-    return NS_ERROR_UNEXPECTED;
-  }
-
-  if (ret == Z_STREAM_END) {
-    mStatus = Done;
-  }
-
-  *_retval = aCount - mZs.avail_out;
-  mData.cursor += *_retval;
-  return NS_OK;
-}
-
-NS_IMETHODIMP
-ArchiveInputStream::ReadSegments(nsWriteSegmentFun aWriter,
-                                 void* aClosure,
-                                 uint32_t aCount,
-                                 uint32_t* _retval)
-{
-  // don't have a buffer to read from, so this better not be called!
-  NS_NOTREACHED("Consumers should be using Read()!");
-  return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-NS_IMETHODIMP
-ArchiveInputStream::IsNonBlocking(bool* _retval)
-{
-  // We are blocking
-  *_retval = false;
-  return NS_OK;
-}
-
-NS_IMETHODIMP
-ArchiveInputStream::Seek(int32_t aWhence, int64_t aOffset)
-{
-  int64_t pos = aOffset;
-
-  switch (aWhence) {
-  case NS_SEEK_SET:
-    break;
-
-  case NS_SEEK_CUR:
-    pos += mData.cursor;
-    break;
-
-  case NS_SEEK_END:
-    pos += mLength;
-    break;
-
-  default:
-    NS_NOTREACHED("unexpected whence value");
-    return NS_ERROR_UNEXPECTED;
-  }
-
-  if (pos == int64_t(mData.cursor)) {
-    return NS_OK;
-  }
-
-  if (pos < 0 || pos >= mLength) {
-    return NS_ERROR_FAILURE;
-  }
-
-  // We have to terminate the previous operation:
-  nsresult rv;
-  if (mStatus != NotStarted) {
-    rv = Close();
-    NS_ENSURE_SUCCESS(rv, rv);
-  }
-
-  // Reset the cursor:
-  mData.cursor = 0;
-
-  // Note: This code is heavy but inflate does not have any seek() support:
-  uint32_t ret;
-  char buffer[1024];
-  while (pos > 0) {
-    rv = Read(buffer, pos > int64_t(sizeof(buffer)) ? sizeof(buffer) : pos, &ret);
-    if (NS_FAILED(rv)) {
-      return rv;
-    }
-
-    if (ret == 0) {
-      return NS_ERROR_UNEXPECTED;
-    }
-
-    pos -= ret;
-  }
-
-  return NS_OK;
-}
-
-NS_IMETHODIMP
-ArchiveInputStream::Tell(int64_t *aResult)
-{
-  *aResult = mData.cursor;
-  return NS_OK;
-}
-
-NS_IMETHODIMP
-ArchiveInputStream::SetEOF()
-{
-  return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-// ArchiveZipBlobImpl
-
-void
-ArchiveZipBlobImpl::GetInternalStream(nsIInputStream** aStream,
-                                      ErrorResult& aRv)
-{
-  if (mLength > INT32_MAX) {
-    aRv.Throw(NS_ERROR_FAILURE);
-    return;
-  }
-
-  uint64_t size = mBlobImpl->GetSize(aRv);
-  if (NS_WARN_IF(aRv.Failed())) {
-    return;
-  }
-
-  nsCOMPtr<nsIInputStream> inputStream;
-  mBlobImpl->GetInternalStream(getter_AddRefs(inputStream), aRv);
-  if (NS_WARN_IF(aRv.Failed())) {
-    return;
-  }
-
-  RefPtr<ArchiveInputStream> stream = new ArchiveInputStream(size,
-                                                               inputStream,
-                                                               mFilename,
-                                                               mStart,
-                                                               mLength,
-                                                               mCentral);
-
-  stream.forget(aStream);
-}
-
-already_AddRefed<mozilla::dom::BlobImpl>
-ArchiveZipBlobImpl::CreateSlice(uint64_t aStart,
-                                uint64_t aLength,
-                                const nsAString& aContentType,
-                                mozilla::ErrorResult& aRv)
-{
-  RefPtr<BlobImpl> impl =
-    new ArchiveZipBlobImpl(mFilename, mContentType, aStart, mLength, mCentral,
-                           mBlobImpl);
-  return impl.forget();
-}
-
-NS_IMPL_ISUPPORTS_INHERITED0(ArchiveZipBlobImpl, BlobImpl)
deleted file mode 100644
--- a/dom/archivereader/ArchiveZipFile.h
+++ /dev/null
@@ -1,78 +0,0 @@
-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* vim: set ts=8 sts=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_domarchivefile_h__
-#define mozilla_dom_archivereader_domarchivefile_h__
-
-#include "mozilla/Attributes.h"
-#include "mozilla/ErrorResult.h"
-#include "mozilla/dom/BaseBlobImpl.h"
-
-#include "ArchiveReader.h"
-
-#include "ArchiveReaderCommon.h"
-#include "zipstruct.h"
-
-BEGIN_ARCHIVEREADER_NAMESPACE
-
-/**
- * ArchiveZipBlobImpl to BlobImpl
- */
-class ArchiveZipBlobImpl : public BaseBlobImpl
-{
-public:
-  NS_DECL_ISUPPORTS_INHERITED
-
-  ArchiveZipBlobImpl(const nsAString& aName,
-                     const nsAString& aContentType,
-                     uint64_t aLength,
-                     ZipCentral& aCentral,
-                     BlobImpl* aBlobImpl)
-  : BaseBlobImpl(aName, aContentType, aLength),
-    mCentral(aCentral),
-    mBlobImpl(aBlobImpl),
-    mFilename(aName)
-  {
-    MOZ_ASSERT(mBlobImpl);
-  }
-
-  ArchiveZipBlobImpl(const nsAString& aName,
-                     const nsAString& aContentType,
-                     uint64_t aStart,
-                     uint64_t aLength,
-                     ZipCentral& aCentral,
-                     BlobImpl* aBlobImpl)
-  : BaseBlobImpl(aContentType, aStart, aLength),
-    mCentral(aCentral),
-    mBlobImpl(aBlobImpl),
-    mFilename(aName)
-  {
-    MOZ_ASSERT(mBlobImpl);
-  }
-
-  // Overrides:
-  virtual void GetInternalStream(nsIInputStream** aInputStream,
-                                 ErrorResult& aRv) override;
-
-protected:
-  virtual ~ArchiveZipBlobImpl()
-  {
-  }
-
-  virtual already_AddRefed<BlobImpl>
-  CreateSlice(uint64_t aStart, uint64_t aLength, const nsAString& aContentType,
-              mozilla::ErrorResult& aRv) override;
-
-private: // Data
-  ZipCentral mCentral;
-  RefPtr<BlobImpl> mBlobImpl;
-
-  nsString mFilename;
-};
-
-END_ARCHIVEREADER_NAMESPACE
-
-#endif // mozilla_dom_archivereader_domarchivefile_h__
deleted file mode 100644
--- a/dom/archivereader/moz.build
+++ /dev/null
@@ -1,33 +0,0 @@
-# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
-# vim: set filetype=python:
-# 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/.
-
-with Files("**"):
-    BUG_COMPONENT = ("Core", "DOM")
-
-EXPORTS.mozilla.dom.archivereader += [
-    'ArchiveEvent.h',
-    'ArchiveReader.h',
-    'ArchiveReaderCommon.h',
-    'ArchiveRequest.h',
-    'ArchiveZipEvent.h',
-    'ArchiveZipFile.h',
-]
-
-UNIFIED_SOURCES += [
-    'ArchiveEvent.cpp',
-    'ArchiveReader.cpp',
-    'ArchiveRequest.cpp',
-    'ArchiveZipEvent.cpp',
-    'ArchiveZipFile.cpp',
-]
-
-LOCAL_INCLUDES += [
-    '../base',
-]
-
-FINAL_LIBRARY = 'xul'
-
-MOCHITEST_MANIFESTS += ['test/mochitest.ini']
deleted file mode 100644
--- a/dom/archivereader/test/helpers.js
+++ /dev/null
@@ -1,27 +0,0 @@
-/**
- * Any copyright is dedicated to the Public Domain.
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-function runTest()
-{
-  SimpleTest.waitForExplicitFinish();
-
-  SpecialPowers.pushPrefEnv({'set': [ ["dom.archivereader.enabled", true] ]}, function() {
-    SpecialPowers.createFiles(filesToCreate(),
-                              function (files) {
-                                testSteps(files);
-                              },
-                              function (msg) {
-                                ok(false, "File creation error: " + msg);
-                                finishTest();
-                              });
-  });
-}
-
-function finishTest()
-{
-  SpecialPowers.popPrefEnv(function() {
-    SimpleTest.finish();
-  });
-}
deleted file mode 100644
--- a/dom/archivereader/test/mochitest.ini
+++ /dev/null
@@ -1,7 +0,0 @@
-[DEFAULT]
-support-files =
-  helpers.js
-
-[test_basic.html]
-[test_nonUnicode.html]
-[test_zip_in_zip.html]
deleted file mode 100644
--- a/dom/archivereader/test/test_basic.html
+++ /dev/null
@@ -1,226 +0,0 @@
-<!--
-  Any copyright is dedicated to the Public Domain.
-  http://creativecommons.org/publicdomain/zero/1.0/
--->
-<html>
-<head>
-  <title>Archive Reader Test</title>
-
-  <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
-  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
-
-  <script type="text/javascript">
-  function filesToCreate() {
-    var binaryString = '504B03040A00000000002E6BF14000000000000000000000000005001C00746573742F555409000337CA055039CA055075780B' +
-                       '000104E803000004E8030000504B03041400000008002D6BF1401780E15015000000580200000A001C00746573742F612E7478' +
-                       '74555409000336CA05503ACA055075780B000104E803000004E8030000CB48CDC9C95728CF2FCA49E1CA18658FB2A9C4060050' +
-                       '4B03040A00000000002F88EC40662E847010000000100000000A001C00746573742F622E74787455540900035A65FF4F42C505' +
-                       '5075780B000104E803000004E803000068656C6C6F20776F726C642C2032210A504B01021E030A00000000002E6BF140000000' +
-                       '000000000000000000050018000000000000001000FD4100000000746573742F555405000337CA055075780B000104E8030000' +
-                       '04E8030000504B01021E031400000008002D6BF1401780E15015000000580200000A0018000000000001000000B4813F000000' +
-                       '746573742F612E747874555405000336CA055075780B000104E803000004E8030000504B01021E030A00000000002F88EC4066' +
-                       '2E847010000000100000000A0018000000000001000000B48198000000746573742F622E74787455540500035A65FF4F75780B' +
-                       '000104E803000004E8030000504B05060000000003000300EB000000EC0000000000';
-
-    var binaryData = "";
-    for (var i = 0, len = binaryString.length / 2; i < len; ++i) {
-      var hex = binaryString[i * 2] + binaryString[i * 2 + 1];
-      binaryData += String.fromCharCode(parseInt(hex,16));
-    }
-
-    return [ {name: "fileArchiveReader.zip", data: binaryData},
-             {name: "fileArchiveReader.txt", data: "Hello World"}];
-  }
-
-  handleFinished = 0;
-  function markTestDone() {
-    ++handleFinished;
-    if (isFinished()) {
-      finishTest();
-    }
-  }
-  function isFinished() {
-    return handleFinished == 6;
-  }
-
-  function testSteps(files)
-  {
-    var binaryFile = files[0];
-    var textFile = files[1];
-
-    var status;
-
-    // Create - wrong 1
-    try {
-      var r = new ArchiveReader();
-      status = false;
-    }
-    catch(e) {
-      status = true;
-    }
-    ok(status, "ArchiveReader() without args MUST fail");
-
-    // Create - wrong 2
-    try {
-      var r = new ArchiveReader(true);
-      status = false;
-    }
-    catch(e) {
-      status = true;
-    }
-    ok(status, "ArchiveReader() without a blob arg MUST fail");
-
-    // Create - wrong 3
-    try {
-      var r = new ArchiveReader("hello world");
-      status = false;
-    }
-    catch(e) {
-      status = true;
-    }
-    ok(status, "ArchiveReader() without a blob arg MUST fail");
-
-    // Create - good! (but with a text file)
-    var rt = new ArchiveReader(textFile);
-    isnot(rt, null, "ArchiveReader cannot be null");
-
-    // GetFilename
-    var handle = rt.getFilenames();
-    isnot(handle, null, "ArchiveReader.getFilenames() cannot be null");
-    handle.onsuccess = function() {
-      ok(false, "ArchiveReader.getFilenames() should return a 'failure' if the input file is not a zip");
-      markTestDone();
-    }
-    handle.onerror = function() {
-      ok(true, "ArchiveReader.getFilenames() should return a 'error' if the input file is a zip file");
-      is(this.reader, rt, "ArchiveRequest.reader == ArchiveReader");
-      markTestDone();
-    }
-
-    // Create - good!
-    var r = new ArchiveReader(binaryFile);
-    isnot(r, null, "ArchiveReader cannot be null");
-
-    // GetFilename
-    handle = r.getFilenames();
-    isnot(handle, null, "ArchiveReader.getFilenames() cannot be null");
-    handle.onsuccess = function() {
-      ok(true, "ArchiveReader.getFilenames() should return a 'success'");
-      is(this.result instanceof Array, true, "ArchiveReader.getFilenames() should return an array");
-      is(this.result.length, 2, "ArchiveReader.getFilenames(): the array contains 2 items");
-      is(this.result[0], "test/a.txt", "ArchiveReader.getFilenames(): first file is 'test/a.txt'");
-      is(this.result[1], "test/b.txt", "ArchiveReader.getFilenames(): second file is 'test/b.txt'");
-      ok(this.reader, r, "ArchiveRequest.reader should be == ArchiveReader");
-      markTestDone();
-    }
-    handle.onerror = function() {
-      ok(false, "ArchiveReader.getFilenames() should not return any 'error'");
-      markTestDone();
-    }
-
-    // GetFile - wrong (no args)
-    try {
-      r.getFile();
-      status = false;
-    }
-    catch(e) {
-      status = true;
-    }
-    ok(status, "ArchiveReader.getFile() without args fail");
-
-    var handle2 = r.getFile("hello world");
-    isnot(handle2, null, "ArchiveReader.getFile() cannot be null");
-    handle2.onsuccess = function() {
-      ok(false, "ArchiveReader.getFile('unknown file') should not return a 'success'");
-      markTestDone();
-    }
-    handle2.onerror = function() {
-      ok(true, "ArchiveReader.getFile('unknown file') should return an 'error'");
-      ok(this.reader, r, "ArchiveRequest.reader should be == ArchiveReader");
-      markTestDone();
-    }
-
-    var handle3 = r.getFile("test/b.txt");
-    isnot(handle3, null, "ArchiveReader.getFile() cannot be null");
-    handle3.onsuccess = function() {
-      ok(true, "ArchiveReader.getFile('test/b.txt') should return a 'success'");
-      ok(this.reader, r, "ArchiveRequest.reader should be == ArchiveReader");
-      is(this.result.name, "test/b.txt", "ArchiveReader.getFile('test/b.txt') the name MUST be 'test/b.txt'");
-      is(this.result.type, "text/plain", "ArchiveReader.getFile('test/b.txt') the type MUST be 'text/plain'");
-
-      var fr = new FileReader();
-      fr.readAsText(this.result);
-      fr.onerror = function() {
-        ok(false, "ArchiveReader + FileReader should work!");
-        markTestDone();
-      }
-      fr.onload = function(event) {
-        is(event.target.result, "hello world, 2!\n", "ArchiveReader + FileReader are working together.");
-        markTestDone();
-      }
-    }
-
-    handle3.onerror = function() {
-      ok(false, "ArchiveReader.getFile('test/b.txt') should not return an 'error'");
-      markTestDone();
-    }
-
-    var handle4 = r.getFile("test/a.txt");
-    isnot(handle4, null, "ArchiveReader.getFile() cannot be null");
-    handle4.onsuccess = function() {
-      ok(true, "ArchiveReader.getFile('test/a.txt') should return a 'success'");
-      ok(this.reader, r, "ArchiveRequest.reader should be == ArchiveReader");
-      is(this.result.name, "test/a.txt", "ArchiveReader.getFile('test/a.txt') the name MUST be 'test/a.txt'");
-      is(this.result.type, "text/plain", "ArchiveReader.getFile('test/a.txt') the type MUST be 'text/plain'");
-
-      var fr = new FileReader();
-      fr.readAsText(this.result);
-      fr.onerror = function() {
-        ok(false, "ArchiveReader + FileReader should work!");
-        markTestDone();
-      }
-      fr.onload = function(event) {
-        is(event.target.result.length, 600, "ArchiveReader + FileReader are working with a compress data");
-        var p = event.target.result.trim().split('\n');
-        is(p.length, 50, "ArchiveReader + FileReader are working with a compress data");
-
-        for (var i = 0; i < p.length; ++i)
-          is(p[i], "hello world", "ArchiveReader + FileReader are working with a compress data");
-        markTestDone();
-      }
-    }
-    handle4.onerror = function() {
-      ok(false, "ArchiveReader.getFile('test/a.txt') should not return an 'error'");
-      markTestDone();
-    }
-
-    var handle5 = r.getFiles();
-    isnot(handle5, null, "ArchiveReader.getFiles() cannot be null");
-    handle5.onsuccess = function() {
-      ok(true, "ArchiveReader.getFiles() should return a 'success'");
-      ok(this.reader, r, "ArchiveRequest.reader should be == ArchiveReader");
-
-      is(this.result.length, 2, "ArchiveReader.getFilenames(): the array contains 2 items");
-      is(this.result[0].name, "test/a.txt", "ArchiveReader.getFilenames(): first file is 'test/a.txt'");
-      is(this.result[1].name, "test/b.txt", "ArchiveReader.getFilenames(): second file is 'test/b.txt'");
-      is(this.result[0].type, "text/plain", "ArchiveReader.getFile('test/a.txt') the type MUST be 'text/plain'");
-      is(this.result[1].type, "text/plain", "ArchiveReader.getFile('test/a.txt') the type MUST be 'text/plain'");
-
-      markTestDone();
-    }
-    handle5.onerror = function() {
-      ok(false, "ArchiveReader.getFiles() should not return an 'error'");
-      markTestDone();
-    }
-  }
-
-  </script>
-  <script type="text/javascript" src="helpers.js"></script>
-</head>
-
-<body onload="runTest();">
-<p id="display">
-</p>
-</body>
-
-</html>
deleted file mode 100644
--- a/dom/archivereader/test/test_nonUnicode.html
+++ /dev/null
@@ -1,76 +0,0 @@
-<!--
-  Any copyright is dedicated to the Public Domain.
-  http://creativecommons.org/publicdomain/zero/1.0/
--->
-<html>
-<head>
-  <title>Archive Reader Non-Unicode Test</title>
-
-  <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
-  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
-
-  <script type="text/javascript">
-  function filesToCreate() {
-    var binaryData = "";
-    for (var i = 0, len = binaryString.length / 2; i < len; ++i) {
-      var hex = binaryString[i * 2] + binaryString[i * 2 + 1];
-      binaryData += String.fromCharCode(parseInt(hex,16));
-    }
-    return [ {name: "fileArchiveReader_nonUnicode.zip", data: binaryData} ];
-  }
-
-  function test1(binaryFile)
-  {
-    var r = new ArchiveReader(binaryFile, { encoding: "ISO-8859-1" });
-    isnot(r, null, "ArchiveReader cannot be null");
-
-    // GetFilename
-    var handle = r.getFilenames();
-    isnot(handle, null, "ArchiveReader.getFilenames() cannot be null");
-    handle.onsuccess = function() {
-      ok(true, "ArchiveReader.getFilenames() should return a 'success'");
-      is(this.result instanceof Array, true, "ArchiveReader.getFilenames() should return an array");
-      is(this.result.length, 1, "ArchiveReader.getFilenames(): the array contains 1 item");
-      ok(this.reader, r, "ArchiveRequest.reader should be == ArchiveReader");
-      dump('Content: ' + this.result[0] + '\n');
-      test2(binaryFile);
-    }
-  }
-
-  function test2(binaryFile)
-  {
-    try {
-      new ArchiveReader(binaryFile, { encoding: "random stuff" });
-      ok(false, "Should have thrown for bogus encoding label.");
-    } catch (e) {
-      ok(e instanceof RangeError, "Expected a RangeError");
-    }
-    finishTest();
-  }
-
-  function testSteps(files)
-  {
-    test1(files[0]);
-  }
-
-
-  </script>
-  <script type="text/javascript" src="helpers.js"></script>
-
-</head>
-
-<body onload="runTest();">
-<p id="display">
-</p>
-<script type="text/javascript">
-var binaryString = '' +
-'504B0304140000000000255D094100000000000000000000000002000000912F504B03040A0000000000285D09416BB50A5A' +
-'010000000100000007000000912F9B2E747874D8504B01023F00140000000000255D09410000000000000000000000000200' +
-'24000000000000001000000000000000912F0A002000000000000100180062505F1A1376CD0162505F1A1376CD01FE3F8D59' +
-'1176CD01504B01023F000A0000000000285D09416BB50A5A0100000001000000070024000000000000002000000020000000' +
-'912F9B2E7478740A0020000000000001001800565EF41D1376CD0107BD73631176CD0107BD73631176CD01504B0506000000' +
-'0002000200AD000000460000000000';
-</script>
-</body>
-
-</html>
deleted file mode 100644
--- a/dom/archivereader/test/test_zip_in_zip.html
+++ /dev/null
@@ -1,109 +0,0 @@
-<!--
-  Any copyright is dedicated to the Public Domain.
-  http://creativecommons.org/publicdomain/zero/1.0/
--->
-<html>
-<head>
-  <title>Archive Reader Zip-In-Zip Test</title>
-
-  <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
-  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
-
-  <script type="text/javascript">
-  function filesToCreate() {
-    var binaryData = "";
-    for (var i = 0, len = binaryString.length / 2; i < len; ++i) {
-      var hex = binaryString[i * 2] + binaryString[i * 2 + 1];
-      binaryData += String.fromCharCode(parseInt(hex,16));
-    }
-    return [ {name: "fileArchiveReader_42.zip", data: binaryData} ];
-  }
-
-  function testSteps(files)
-  {
-    var binaryFile = files[0];
-
-    // The input is 4 nested zip archives:
-    doLoop(binaryFile, 4);
-  }
-
-  function doLoop(blob, loop)
-  {
-    var r = new ArchiveReader(blob);
-    isnot(r, null, "ArchiveReader cannot be null");
-
-    // GetFilename
-    var handle = r.getFilenames();
-    isnot(handle, null, "ArchiveReader.getFilenames() cannot be null");
-    handle.onsuccess = function() {
-      ok(true, "ArchiveReader.getFilenames() should return a 'success'");
-      is(this.result instanceof Array, true, "ArchiveReader.getFilenames() should return an array");
-      is(this.result.length, 1, "ArchiveReader.getFilenames(): the array contains 1 item");
-      ok(this.reader, r, "ArchiveRequest.reader should be == ArchiveReader");
-
-      dump('Content:\n');
-      for (var i = 0; i < this.result.length; ++i)
-        dump(' * ' + this.result[i] + '\n');
-
-      var handle = r.getFile(this.result[0]);
-      handle.onerror = function() {
-        ok(false, "ArchiveReader.getFile() should not return any 'error'");
-      }
-      handle.onsuccess = function() {
-        ok(true, "ArchiveReader.getFilenames() should return a 'success'");
-        ok(this.reader, r, "ArchiveRequest.reader should be == ArchiveReader");
-
-        if (loop > 0)
-          doLoop(this.result, loop - 1);
-        else
-          doLastLoop(this.result);
-      }
-    }
-    handle.onerror = function() {
-      ok(false, "ArchiveReader.getFilenames() should not return any 'error'");
-    }
-  }
-
-  function doLastLoop(blob)
-  {
-    ok(blob.size == 262144, "The last file size is wrong");
-    ok(blob.name == 'empty.dat', "The last filename is wrong");
-    finishTest();
-  }
-
-  </script>
-  <script type="text/javascript" src="helpers.js"></script>
-
-</head>
-
-<body onload="runTest();">
-<p id="display">
-</p>
-<script type="text/javascript">
-var binaryString = '' +
-'504B03040A0000000000B0620E415F715F15970300009703000005001C00642E7A69705554090003AC262A50AC262A507578' +
-'0B000104E803000004E8030000504B03040A0000000000B0620E41CFE25F1EF7020000F702000005001C00632E7A69705554' +
-'090003AC262A50AC262A5075780B000104E803000004E8030000504B03040A0000000000B0620E4107D702A4570200005702' +
-'000005001C00622E7A69705554090003AC262A50AC262A5075780B000104E803000004E8030000504B03040A0000000000B0' +
-'620E417E45286DB7010000B701000005001C00612E7A69705554090003AC262A50AC262A5075780B000104E803000004E803' +
-'0000504B0304140000000800F7610E41784909B70F0100000000040009001C00656D7074792E646174555409000351252A50' +
-'57252A5075780B000104E803000004E8030000EDC13101000000C2A0FEA9E76D07A000000000000000000000000000000000' +
-'0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' +
-'0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' +
-'0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' +
-'0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' +
-'0000000000000000000000000000000000000000000000000000000000000000000000000000DE00504B01021E0314000000' +
-'0800F7610E41784909B70F01000000000400090018000000000001000000B48100000000656D7074792E6461745554050003' +
-'51252A5075780B000104E803000004E8030000504B050600000000010001004F000000520100000000504B01021E030A0000' +
-'000000B0620E417E45286DB7010000B7010000050018000000000000000000B48100000000612E7A69705554050003AC262A' +
-'5075780B000104E803000004E8030000504B050600000000010001004B000000F60100000000504B01021E030A0000000000' +
-'B0620E4107D702A45702000057020000050018000000000000000000B48100000000622E7A69705554050003AC262A507578' +
-'0B000104E803000004E8030000504B050600000000010001004B000000960200000000504B01021E030A0000000000B0620E' +
-'41CFE25F1EF7020000F7020000050018000000000000000000B48100000000632E7A69705554050003AC262A5075780B0001' +
-'04E803000004E8030000504B050600000000010001004B000000360300000000504B01021E030A0000000000B0620E415F71' +
-'5F159703000097030000050018000000000000000000B48100000000642E7A69705554050003AC262A5075780B000104E803' +
-'000004E8030000504B050600000000010001004B000000D60300000000';
-</script>
-</body>
-
-</html>
--- a/dom/indexedDB/test/helpers.js
+++ b/dom/indexedDB/test/helpers.js
@@ -1,16 +1,14 @@
 /**
  * Any copyright is dedicated to the Public Domain.
  * http://creativecommons.org/publicdomain/zero/1.0/
  */
 
 var testGenerator = testSteps();
-var archiveReaderEnabled = false;
-
 // The test js is shared between xpcshell (which has no SpecialPowers object)
 // and content mochitests (where the |Components| object is accessible only as
 // SpecialPowers.Components). Expose Components if necessary here to make things
 // work everywhere.
 //
 // Even if the real |Components| doesn't exist, we might shim in a simple JS
 // placebo for compat. An easy way to differentiate this from the real thing
 // is whether the property is read-only or not.
@@ -70,17 +68,16 @@ function* testHarnessSteps() {
 
   info("Pushing preferences");
 
   SpecialPowers.pushPrefEnv(
     {
       "set": [
         ["dom.indexedDB.testing", true],
         ["dom.indexedDB.experimental", true],
-        ["dom.archivereader.enabled", true]
       ]
     },
     nextTestHarnessStep
   );
   yield undefined;
 
   info("Pushing permissions");
 
--- a/dom/indexedDB/test/mochitest.ini
+++ b/dom/indexedDB/test/mochitest.ini
@@ -122,17 +122,16 @@ support-files =
 [test_abort_deleted_index.html]
 [test_abort_deleted_objectStore.html]
 [test_add_put.html]
 [test_add_twice_failure.html]
 [test_advance.html]
 [test_autoIncrement.html]
 [test_autoIncrement_indexes.html]
 [test_bfcache.html]
-[test_blob_archive.html]
 [test_blob_file_backed.html]
 [test_blob_simple.html]
 [test_blob_worker_crash.html]
 skip-if = e10s && os == 'win' && os_version == '6.1' # Bug 1342415
 [test_blob_worker_xhr_post.html]
 skip-if = e10s && os == 'win' && os_version == '6.1' # Bug 1342415
 [test_blob_worker_xhr_post_multifile.html]
 skip-if = e10s && os == 'win' && os_version == '6.1' # Bug 1342415
deleted file mode 100644
--- a/dom/indexedDB/test/test_blob_archive.html
+++ /dev/null
@@ -1,126 +0,0 @@
-<!--
-  Any copyright is dedicated to the Public Domain.
-  http://creativecommons.org/publicdomain/zero/1.0/
--->
-<html>
-<head>
-  <title>Indexed Database Property Test</title>
-
-  <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
-  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
-
-  <script type="text/javascript">
-
-  function* testSteps()
-  {
-    const BLOB_DATA =
-      "504B03040A00000000002E6BF14000000000000000000000000005001C00746573742F" +
-      "555409000337CA055039CA055075780B000104E803000004E8030000504B0304140000" +
-      "0008002D6BF1401780E15015000000580200000A001C00746573742F612E7478745554" +
-      "09000336CA05503ACA055075780B000104E803000004E8030000CB48CDC9C95728CF2F" +
-      "CA49E1CA18658FB2A9C40600504B03040A00000000002F88EC40662E84701000000010" +
-      "0000000A001C00746573742F622E74787455540900035A65FF4F42C5055075780B0001" +
-      "04E803000004E803000068656C6C6F20776F726C642C2032210A504B01021E030A0000" +
-      "0000002E6BF140000000000000000000000000050018000000000000001000FD410000" +
-      "0000746573742F555405000337CA055075780B000104E803000004E8030000504B0102" +
-      "1E031400000008002D6BF1401780E15015000000580200000A00180000000000010000" +
-      "00B4813F000000746573742F612E747874555405000336CA055075780B000104E80300" +
-      "0004E8030000504B01021E030A00000000002F88EC40662E847010000000100000000A" +
-      "0018000000000001000000B48198000000746573742F622E74787455540500035A65FF" +
-      "4F75780B000104E803000004E8030000504B05060000000003000300EB000000EC0000" +
-      "000000";
-
-    const TEST_FILE_1 = "test/a.txt";
-    const TEST_FILE_2 = "test/b.txt";
-
-    let TEST_FILE_1_CONTENTS = "";
-    for (let i = 0; i < 50; i++) {
-      TEST_FILE_1_CONTENTS += "hello world\n";
-    }
-    const TEST_FILE_2_CONTENTS = "hello world, 2!\n";
-
-    let binaryData = new Uint8Array(BLOB_DATA.length / 2);
-    for (let i = 0, len = BLOB_DATA.length / 2; i < len; i++) {
-      let hex = BLOB_DATA[i * 2] + BLOB_DATA[i * 2 + 1];
-      binaryData[i] = parseInt(hex, 16);
-    }
-
-    let request = indexedDB.open(window.location.pathname, 1);
-    request.onerror = errorHandler;
-    request.onupgradeneeded = grabEventAndContinueHandler;
-    request.onsuccess = unexpectedSuccessHandler;
-    let event = yield undefined;
-
-    let db = event.target.result;
-    db.onerror = errorHandler;
-
-    let objectStore = db.createObjectStore("foo", { autoIncrement: true });
-    let index = objectStore.createIndex("foo", "index");
-
-    request.onsuccess = grabEventAndContinueHandler;
-    event = yield undefined;
-
-    let data = new Blob([binaryData]);
-
-    objectStore = db.transaction("foo", "readwrite").objectStore("foo");
-    objectStore.add(data).onsuccess = grabEventAndContinueHandler;
-    event = yield undefined;
-
-    let key = event.target.result;
-
-    objectStore = db.transaction("foo").objectStore("foo");
-    objectStore.get(key).onsuccess = grabEventAndContinueHandler;
-    event = yield undefined;
-
-    let archiveReader = new ArchiveReader(event.target.result);
-    ok(archiveReader, "Got an ArchiveReader");
-
-    request = archiveReader.getFilenames();
-    request.onsuccess = grabEventAndContinueHandler;
-    request.onerror = errorHandler;
-    event = yield undefined;
-
-    is(event.target.result.length, 2, "Got 2 archive items");
-    is(event.target.result[0], TEST_FILE_1,
-       "First file is '" + TEST_FILE_1 + "'");
-    is(event.target.result[1], TEST_FILE_2,
-       "Second file is '" + TEST_FILE_2 + "'");
-
-    request = archiveReader.getFile(TEST_FILE_1);
-    request.onsuccess = grabEventAndContinueHandler;
-    request.onerror = errorHandler;
-    event = yield undefined;
-
-    let fileReader = new FileReader();
-    fileReader.readAsText(event.target.result);
-    fileReader.onload = grabEventAndContinueHandler;
-    fileReader.onerror = errorHandler;
-    event = yield undefined;
-
-    // Don't use is() because it prints out 100 lines of text...
-    ok(event.target.result == TEST_FILE_1_CONTENTS, "Correct text");
-
-    request = archiveReader.getFile(TEST_FILE_2);
-    request.onsuccess = grabEventAndContinueHandler;
-    request.onerror = errorHandler;
-    event = yield undefined;
-
-    fileReader = new FileReader();
-    fileReader.readAsText(event.target.result);
-    fileReader.onload = grabEventAndContinueHandler;
-    fileReader.onerror = errorHandler;
-    event = yield undefined;
-
-    // Don't use is() because it prints out a newline...
-    ok(event.target.result == TEST_FILE_2_CONTENTS, "Correct text");
-
-    finishTest();
-  }
-  </script>
-  <script type="text/javascript" src="helpers.js"></script>
-
-</head>
-
-<body onload="runTest();"></body>
-
-</html>
--- a/dom/moz.build
+++ b/dom/moz.build
@@ -31,17 +31,16 @@ interfaces = [
     'push',
 ]
 
 DIRS += ['interfaces/' + i for i in interfaces]
 
 DIRS += [
     'animation',
     'base',
-    'archivereader',
     'bindings',
     'battery',
     'browser-element',
     'cache',
     'canvas',
     'commandhandler',
     'crypto',
     'devicestorage',
deleted file mode 100644
--- a/dom/webidl/ArchiveReader.webidl
+++ /dev/null
@@ -1,16 +0,0 @@
-/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* 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/. */
-
-[Pref="dom.archivereader.enabled",
- Constructor(Blob blob, optional ArchiveReaderOptions options)]
-interface ArchiveReader {
-  ArchiveRequest getFilenames();
-  ArchiveRequest getFile(DOMString filename);
-  ArchiveRequest getFiles();
-};
-
-dictionary ArchiveReaderOptions {
-  DOMString encoding = "windows-1252"; // Default fallback encoding
-};
deleted file mode 100644
--- a/dom/webidl/ArchiveRequest.webidl
+++ /dev/null
@@ -1,10 +0,0 @@
-/* -*- Mode: IDL; 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/. */
-
-[Pref="dom.archivereader.enabled"]
-interface ArchiveRequest : DOMRequest {
-  readonly attribute ArchiveReader reader;
-};
--- a/dom/webidl/moz.build
+++ b/dom/webidl/moz.build
@@ -387,18 +387,16 @@ WEBIDL_FILES = [
     'AnimationEffectTiming.webidl',
     'AnimationEffectTimingReadOnly.webidl',
     'AnimationEvent.webidl',
     'AnimationTimeline.webidl',
     'AnonymousContent.webidl',
     'AppInfo.webidl',
     'AppNotificationServiceOptions.webidl',
     'APZTestData.webidl',
-    'ArchiveReader.webidl',
-    'ArchiveRequest.webidl',
     'Attr.webidl',
     'AudioBuffer.webidl',
     'AudioBufferSourceNode.webidl',
     'AudioChannel.webidl',
     'AudioContext.webidl',
     'AudioDestinationNode.webidl',
     'AudioListener.webidl',
     'AudioNode.webidl',
--- a/modules/libpref/init/all.js
+++ b/modules/libpref/init/all.js
@@ -2798,19 +2798,16 @@ pref("editor.positioning.offset",       
 
 pref("dom.use_watchdog", true);
 pref("dom.max_chrome_script_run_time", 20);
 pref("dom.max_script_run_time", 10);
 
 // Stop all scripts in a compartment when the "stop script" dialog is used.
 pref("dom.global_stop_script", true);
 
-// If true, ArchiveReader will be enabled
-pref("dom.archivereader.enabled", false);
-
 // Time (milliseconds) between throttled idle callbacks.
 pref("dom.idle_period.throttled_length", 10000);
 
 // The amount of idle time (milliseconds) reserved for a long idle period
 pref("idle_queue.long_period", 50);
 
 // The minimum amount of time (milliseconds) required for an idle
 // period to be scheduled on the main thread. N.B. that