From c2230f21f8eab2811c585c6b347a4dd62a762db7 Mon Sep 17 00:00:00 2001 From: Andrea Marchesini Date: Wed, 9 Dec 2015 15:52:15 -0500 Subject: [PATCH] Bug 1231100 - Get rid of nsIDOMFileReader - patch 1, r=sicking --- b2g/components/LogCapture.jsm | 4 +- .../components/migration/MSMigrationUtils.jsm | 3 +- devtools/server/actors/device.js | 1 - devtools/server/actors/webapps.js | 3 +- dom/apps/ImportExport.jsm | 3 +- dom/base/FileReader.cpp | 204 +++++------------- dom/base/FileReader.h | 24 +-- dom/base/moz.build | 1 - dom/base/nsDOMClassInfo.cpp | 3 +- dom/base/nsIDOMFileReader.idl | 47 ---- .../test/test_ipc_messagemanager_blob.html | 4 +- .../test/test_message_manager_ipc.html | 13 +- .../test/unit/test_blob_file_backed.js | 9 +- .../test/unit/xpcshell-head-parent-process.js | 10 +- .../test_blob_sliced_from_parent_process.html | 9 +- dom/mobilemessage/gonk/MmsService.js | 3 +- dom/webidl/FileReader.webidl | 3 +- .../tests/mochitest/test_bug790732.html | 1 - layout/build/nsLayoutModule.cpp | 7 - toolkit/components/thumbnails/PageThumbs.jsm | 7 +- .../content/backgroundPageThumbsContent.js | 3 +- toolkit/modules/PropertyListUtils.jsm | 3 +- xpcom/reflect/xptinfo/ShimInterfaceInfo.cpp | 3 - 23 files changed, 91 insertions(+), 277 deletions(-) delete mode 100644 dom/base/nsIDOMFileReader.idl diff --git a/b2g/components/LogCapture.jsm b/b2g/components/LogCapture.jsm index 2170d1f597f9..bace9fa51ff1 100644 --- a/b2g/components/LogCapture.jsm +++ b/b2g/components/LogCapture.jsm @@ -198,9 +198,7 @@ var LogCapture = { try { this.ensureLoaded(); - let fr = Cc["@mozilla.org/files/filereader;1"] - .createInstance(Ci.nsIDOMFileReader); - + let fr = new FileReader(); fr.onload = function(evt) { deferred.resolve(new Uint8Array(evt.target.result)); }; diff --git a/browser/components/migration/MSMigrationUtils.jsm b/browser/components/migration/MSMigrationUtils.jsm index 3ac5f7935c49..e9e77bd4eca2 100644 --- a/browser/components/migration/MSMigrationUtils.jsm +++ b/browser/components/migration/MSMigrationUtils.jsm @@ -545,8 +545,7 @@ Cookies.prototype = { }, _readCookieFile(aFile, aCallback) { - let fileReader = Cc["@mozilla.org/files/filereader;1"]. - createInstance(Ci.nsIDOMFileReader); + let fileReader = new FileReader(); let onLoadEnd = () => { fileReader.removeEventListener("loadend", onLoadEnd, false); diff --git a/devtools/server/actors/device.js b/devtools/server/actors/device.js index 6dbc4aa17198..e9878568bf03 100644 --- a/devtools/server/actors/device.js +++ b/devtools/server/actors/device.js @@ -25,7 +25,6 @@ var DeviceActor = exports.DeviceActor = protocol.ActorClass({ getWallpaper: method(function() { let deferred = promise.defer(); getSetting("wallpaper.image").then((blob) => { - let FileReader = CC("@mozilla.org/files/filereader;1"); let reader = new FileReader(); let conn = this.conn; reader.addEventListener("load", function() { diff --git a/devtools/server/actors/webapps.js b/devtools/server/actors/webapps.js index a17e31ce2541..a547e118d67f 100644 --- a/devtools/server/actors/webapps.js +++ b/devtools/server/actors/webapps.js @@ -851,8 +851,7 @@ WebappsActor.prototype = { } // Convert the blog to a base64 encoded data URI - let reader = Cc["@mozilla.org/files/filereader;1"] - .createInstance(Ci.nsIDOMFileReader); + let reader = new FileReader(); reader.onload = function () { deferred.resolve({ url: reader.result diff --git a/dom/apps/ImportExport.jsm b/dom/apps/ImportExport.jsm index cf759de73094..94184d213593 100644 --- a/dom/apps/ImportExport.jsm +++ b/dom/apps/ImportExport.jsm @@ -262,8 +262,7 @@ this.ImportExport = { debug("_writeBlobToTempFile"); let path; return new Promise((aResolve, aReject) => { - let reader = Cc['@mozilla.org/files/filereader;1'] - .createInstance(Ci.nsIDOMFileReader); + let reader = new FileReader(); reader.onloadend = () => { path = OS.Path.join(OS.Constants.Path.tmpDir, "app-blob.zip"); debug("onloadend path=" + path); diff --git a/dom/base/FileReader.cpp b/dom/base/FileReader.cpp index 1bfa1a6884a9..10bfea467d35 100644 --- a/dom/base/FileReader.cpp +++ b/dom/base/FileReader.cpp @@ -70,20 +70,12 @@ NS_IMPL_CYCLE_COLLECTION_TRACE_END NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION_INHERITED(FileReader) NS_INTERFACE_MAP_ENTRY(nsITimerCallback) NS_INTERFACE_MAP_ENTRY(nsIInputStreamCallback) - NS_INTERFACE_MAP_ENTRY(nsIDOMFileReader) NS_INTERFACE_MAP_ENTRY(nsISupportsWeakReference) NS_INTERFACE_MAP_END_INHERITING(DOMEventTargetHelper) NS_IMPL_ADDREF_INHERITED(FileReader, DOMEventTargetHelper) NS_IMPL_RELEASE_INHERITED(FileReader, DOMEventTargetHelper) -NS_IMPL_EVENT_HANDLER(FileReader, abort) -NS_IMPL_EVENT_HANDLER(FileReader, error) -NS_IMPL_EVENT_HANDLER(FileReader, progress) -NS_IMPL_EVENT_HANDLER(FileReader, load) -NS_IMPL_EVENT_HANDLER(FileReader, loadend) -NS_IMPL_EVENT_HANDLER(FileReader, loadstart) - void FileReader::RootResultArrayBuffer() { @@ -92,14 +84,15 @@ FileReader::RootResultArrayBuffer() //FileReader constructors/initializers -FileReader::FileReader() - : mFileData(nullptr) +FileReader::FileReader(nsPIDOMWindow* aWindow) + : DOMEventTargetHelper(aWindow) + , mFileData(nullptr) , mDataLen(0) , mDataFormat(FILE_AS_BINARY) , mResultArrayBuffer(nullptr) , mProgressEventWasDelayed(false) , mTimerIsActive(false) - , mReadyState(0) + , mReadyState(EMPTY) , mTotal(0) , mTransferred(0) { @@ -113,32 +106,20 @@ FileReader::~FileReader() DropJSObjects(this); } -/** - * This Init method is called from the factory constructor. - */ -nsresult -FileReader::Init() -{ - // Instead of grabbing some random global from the context stack, - // let's use the default one (junk scope) for now. - // We should move away from this Init... - BindToOwner(xpc::NativeGlobal(xpc::PrivilegedJunkScope())); - return NS_OK; -} - /* static */ already_AddRefed FileReader::Constructor(const GlobalObject& aGlobal, ErrorResult& aRv) { - RefPtr fileReader = new FileReader(); - + // The owner can be null when this object is used by chrome code. nsCOMPtr owner = do_QueryInterface(aGlobal.GetAsSupports()); - if (!owner) { - NS_WARNING("Unexpected owner"); - aRv.Throw(NS_ERROR_FAILURE); - return nullptr; + RefPtr fileReader = new FileReader(owner); + + if (!owner && nsContentUtils::IsCallerChrome()) { + // Instead of grabbing some random global from the context stack, + // let's use the default one (junk scope) for now. + // We should move away from this Init... + fileReader->BindToOwner(xpc::NativeGlobal(xpc::PrivilegedJunkScope())); } - fileReader->BindToOwner(owner); return fileReader.forget(); } @@ -150,104 +131,37 @@ FileReader::GetInterface(const nsIID & aIID, void **aResult) return QueryInterface(aIID, aResult); } -// nsIDOMFileReader - -NS_IMETHODIMP -FileReader::GetReadyState(uint16_t *aReadyState) -{ - *aReadyState = ReadyState(); - return NS_OK; -} - void -FileReader::GetResult(JSContext* aCx, JS::MutableHandle aResult, +FileReader::GetResult(JSContext* aCx, + JS::MutableHandle aResult, ErrorResult& aRv) -{ - aRv = GetResult(aCx, aResult); -} - -NS_IMETHODIMP -FileReader::GetResult(JSContext* aCx, JS::MutableHandle aResult) { JS::Rooted result(aCx); + if (mDataFormat == FILE_AS_ARRAYBUFFER) { - if (mReadyState == nsIDOMFileReader::DONE && mResultArrayBuffer) { + if (mReadyState == DONE && mResultArrayBuffer) { result.setObject(*mResultArrayBuffer); } else { result.setNull(); } + if (!JS_WrapValue(aCx, &result)) { - return NS_ERROR_FAILURE; + aRv.Throw(NS_ERROR_FAILURE); + return; } + aResult.set(result); - return NS_OK; + return; } nsString tmpResult = mResult; if (!xpc::StringToJsval(aCx, tmpResult, aResult)) { - return NS_ERROR_FAILURE; + aRv.Throw(NS_ERROR_FAILURE); + return; } - return NS_OK; } -NS_IMETHODIMP -FileReader::GetError(nsISupports** aError) -{ - NS_IF_ADDREF(*aError = GetError()); - return NS_OK; -} - -NS_IMETHODIMP -FileReader::ReadAsArrayBuffer(nsIDOMBlob* aBlob, JSContext* aCx) -{ - NS_ENSURE_TRUE(aBlob, NS_ERROR_NULL_POINTER); - ErrorResult rv; - RefPtr blob = static_cast(aBlob); - ReadAsArrayBuffer(aCx, *blob, rv); - return rv.StealNSResult(); -} - -NS_IMETHODIMP -FileReader::ReadAsBinaryString(nsIDOMBlob* aBlob) -{ - NS_ENSURE_TRUE(aBlob, NS_ERROR_NULL_POINTER); - ErrorResult rv; - RefPtr blob = static_cast(aBlob); - ReadAsBinaryString(*blob, rv); - return rv.StealNSResult(); -} - -NS_IMETHODIMP -FileReader::ReadAsText(nsIDOMBlob* aBlob, - const nsAString &aCharset) -{ - NS_ENSURE_TRUE(aBlob, NS_ERROR_NULL_POINTER); - ErrorResult rv; - RefPtr blob = static_cast(aBlob); - ReadAsText(*blob, aCharset, rv); - return rv.StealNSResult(); -} - -NS_IMETHODIMP -FileReader::ReadAsDataURL(nsIDOMBlob* aBlob) -{ - NS_ENSURE_TRUE(aBlob, NS_ERROR_NULL_POINTER); - ErrorResult rv; - RefPtr blob = static_cast(aBlob); - ReadAsDataURL(*blob, rv); - return rv.StealNSResult(); -} - -NS_IMETHODIMP -FileReader::Abort() -{ - ErrorResult rv; - Abort(rv); - return rv.StealNSResult(); -} - -static -NS_METHOD +static NS_IMETHODIMP ReadFuncBinaryString(nsIInputStream* in, void* closure, const char* fromRawSegment, @@ -390,12 +304,15 @@ FileReader::ReadFileContent(Blob& aBlob, ErrorResult& aRv) { //Implicit abort to clear any other activity going on - Abort(); + ErrorResult error; + Abort(error); + error.SuppressException(); + mError = nullptr; SetDOMStringToNull(mResult); mTransferred = 0; mTotal = 0; - mReadyState = nsIDOMFileReader::EMPTY; + mReadyState = EMPTY; FreeFileData(); mBlob = &aBlob; @@ -403,7 +320,6 @@ FileReader::ReadFileContent(Blob& aBlob, CopyUTF16toUTF8(aCharset, mCharset); nsresult rv; - nsCOMPtr sts = do_GetService(kStreamTransportServiceCID, &rv); if (NS_WARN_IF(NS_FAILED(rv))) { @@ -418,23 +334,21 @@ FileReader::ReadFileContent(Blob& aBlob, } nsCOMPtr transport; - rv = sts->CreateInputTransport(stream, - /* aStartOffset */ 0, - /* aReadLimit */ -1, - /* aCloseWhenDone */ true, - getter_AddRefs(transport)); - if (NS_WARN_IF(NS_FAILED(rv))) { - aRv.Throw(rv); + aRv = sts->CreateInputTransport(stream, + /* aStartOffset */ 0, + /* aReadLimit */ -1, + /* aCloseWhenDone */ true, + getter_AddRefs(transport)); + if (NS_WARN_IF(aRv.Failed())) { return; } nsCOMPtr wrapper; - rv = transport->OpenInputStream(/* aFlags */ 0, - /* aSegmentSize */ 0, - /* aSegmentCount */ 0, - getter_AddRefs(wrapper)); - if (NS_WARN_IF(NS_FAILED(rv))) { - aRv.Throw(rv); + aRv = transport->OpenInputStream(/* aFlags */ 0, + /* aSegmentSize */ 0, + /* aSegmentCount */ 0, + getter_AddRefs(wrapper)); + if (NS_WARN_IF(aRv.Failed())) { return; } @@ -447,14 +361,16 @@ FileReader::ReadFileContent(Blob& aBlob, return; } - rv = DoAsyncWait(mAsyncStream); - if (NS_WARN_IF(NS_FAILED(rv))) { - aRv.Throw(rv); + aRv = mAsyncStream->AsyncWait(this, + /* aFlags*/ 0, + /* aRequestedCount */ 0, + NS_GetCurrentThread()); + if (NS_WARN_IF(aRv.Failed())) { return; } //FileReader should be in loading state here - mReadyState = nsIDOMFileReader::LOADING; + mReadyState = LOADING; DispatchProgressEvent(NS_LITERAL_STRING(LOADSTART_STR)); if (mDataFormat == FILE_AS_ARRAYBUFFER) { @@ -514,7 +430,7 @@ FileReader::GetAsDataURL(Blob *aBlob, { aResult.AssignLiteral("data:"); - nsString contentType; + nsAutoString contentType; aBlob->GetType(contentType); if (!contentType.IsEmpty()) { aResult.Append(contentType); @@ -630,7 +546,7 @@ FileReader::Notify(nsITimer* aTimer) NS_IMETHODIMP FileReader::OnInputStreamReady(nsIAsyncInputStream* aStream) { - if (mReadyState != 1 || aStream != mAsyncStream) { + if (mReadyState != LOADING || aStream != mAsyncStream) { return NS_OK; } @@ -642,7 +558,10 @@ FileReader::OnInputStreamReady(nsIAsyncInputStream* aStream) } if (NS_SUCCEEDED(rv)) { - rv = DoAsyncWait(aStream); + rv = aStream->AsyncWait(this, + /* aFlags*/ 0, + /* aRequestedCount */ 0, + NS_GetCurrentThread()); } if (NS_FAILED(rv) || !aCount) { @@ -674,9 +593,9 @@ FileReader::OnLoadEnd(nsresult aStatus) ClearProgressEventTimer(); // FileReader must be in DONE stage after an operation - mReadyState = 2; + mReadyState = DONE; - nsString successEvent, termEvent; + nsAutoString successEvent, termEvent; nsresult rv = DoOnLoadEnd(aStatus, successEvent, termEvent); NS_ENSURE_SUCCESS(rv, rv); @@ -693,19 +612,10 @@ FileReader::OnLoadEnd(nsresult aStatus) return NS_OK; } -nsresult -FileReader::DoAsyncWait(nsIAsyncInputStream* aStream) -{ - return aStream->AsyncWait(this, - /* aFlags*/ 0, - /* aRequestedCount */ 0, - NS_GetCurrentThread()); -} - void FileReader::Abort(ErrorResult& aRv) { - if (mReadyState != 1) { + if (mReadyState != LOADING) { // XXX The spec doesn't say this aRv.Throw(NS_ERROR_DOM_FILE_ABORT_ERR); return; @@ -713,8 +623,8 @@ FileReader::Abort(ErrorResult& aRv) ClearProgressEventTimer(); - mReadyState = 2; // There are DONE constants on multiple interfaces, - // but they all have value 2. + mReadyState = DONE; + // XXX The spec doesn't say this mError = new DOMError(GetOwner(), NS_LITERAL_STRING("AbortError")); diff --git a/dom/base/FileReader.h b/dom/base/FileReader.h index f5275af6b591..7026d94a7f10 100644 --- a/dom/base/FileReader.h +++ b/dom/base/FileReader.h @@ -13,7 +13,6 @@ #include "nsCOMPtr.h" #include "nsIAsyncInputStream.h" -#include "nsIDOMFileReader.h" #include "nsIStreamListener.h" #include "nsISupportsUtils.h" #include "nsIInterfaceRequestor.h" @@ -34,29 +33,22 @@ class Blob; extern const uint64_t kUnknownSize; class FileReader final : public DOMEventTargetHelper, - public nsIDOMFileReader, public nsIInterfaceRequestor, public nsSupportsWeakReference, public nsIInputStreamCallback, public nsITimerCallback { public: - FileReader(); + explicit FileReader(nsPIDOMWindow* aWindow); NS_DECL_ISUPPORTS_INHERITED - NS_DECL_NSIDOMFILEREADER NS_DECL_NSITIMERCALLBACK NS_DECL_NSIINPUTSTREAMCALLBACK NS_DECL_NSIINTERFACEREQUESTOR - NS_REALLY_FORWARD_NSIDOMEVENTTARGET(DOMEventTargetHelper) NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS_INHERITED(FileReader, DOMEventTargetHelper) - nsPIDOMWindow* GetParentObject() const - { - return GetOwner(); - } virtual JSObject* WrapObject(JSContext* aCx, JS::Handle aGivenProto) override; // WebIDL @@ -81,7 +73,7 @@ public: uint16_t ReadyState() const { - return mReadyState; + return static_cast(mReadyState); } DOMError* GetError() const @@ -104,11 +96,16 @@ public: ReadFileContent(aBlob, EmptyString(), FILE_AS_BINARY, aRv); } - nsresult Init(); - private: virtual ~FileReader(); + // This must be in sync with dom/webidl/FileReader.webidl + enum eReadyState { + EMPTY = 0, + LOADING = 1, + DONE = 2 + }; + enum eDataFormat { FILE_AS_ARRAYBUFFER, FILE_AS_BINARY, @@ -128,7 +125,6 @@ private: uint32_t aDataLen, nsAString &aResult); nsresult OnLoadEnd(nsresult aStatus); - nsresult DoAsyncWait(nsIAsyncInputStream* aStream); void StartProgressEventTimer(); void ClearProgressEventTimer(); @@ -166,7 +162,7 @@ private: RefPtr mError; - uint16_t mReadyState; + eReadyState mReadyState; uint64_t mTotal; uint64_t mTransferred; diff --git a/dom/base/moz.build b/dom/base/moz.build index 48302c244359..3c5ba1d8d7f0 100644 --- a/dom/base/moz.build +++ b/dom/base/moz.build @@ -16,7 +16,6 @@ XPIDL_SOURCES += [ 'nsIDOMDOMCursor.idl', 'nsIDOMDOMRequest.idl', 'nsIDOMFileList.idl', - 'nsIDOMFileReader.idl', 'nsIDOMFormData.idl', 'nsIDOMParser.idl', 'nsIDOMSerializer.idl', diff --git a/dom/base/nsDOMClassInfo.cpp b/dom/base/nsDOMClassInfo.cpp index a446fad4f11d..51628b1a337a 100644 --- a/dom/base/nsDOMClassInfo.cpp +++ b/dom/base/nsDOMClassInfo.cpp @@ -2275,8 +2275,7 @@ struct InterfaceShimEntry { // interface that has interface constants that sites might be getting off // of Ci. const InterfaceShimEntry kInterfaceShimMap[] = -{ { "nsIDOMFileReader", "FileReader" }, - { "nsIXMLHttpRequest", "XMLHttpRequest" }, +{ { "nsIXMLHttpRequest", "XMLHttpRequest" }, { "nsIDOMDOMException", "DOMException" }, { "nsIDOMNode", "Node" }, { "nsIDOMCSSPrimitiveValue", "CSSPrimitiveValue" }, diff --git a/dom/base/nsIDOMFileReader.idl b/dom/base/nsIDOMFileReader.idl deleted file mode 100644 index 98b8559f873c..000000000000 --- a/dom/base/nsIDOMFileReader.idl +++ /dev/null @@ -1,47 +0,0 @@ -/* -*- Mode: C++; 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/. */ - -#include "nsIDOMEventTarget.idl" - -interface nsIDOMEventListener; -interface nsIDOMBlob; - -[builtinclass, uuid(2f34c719-bc14-4546-9fb9-2bab75e56e45)] -interface nsIDOMFileReader : nsIDOMEventTarget -{ - [implicit_jscontext] - void readAsArrayBuffer(in nsIDOMBlob filedata); - void readAsBinaryString(in nsIDOMBlob filedata); - void readAsText(in nsIDOMBlob filedata, [optional] in DOMString encoding); - void readAsDataURL(in nsIDOMBlob file); - - void abort(); - - const unsigned short EMPTY = 0; - const unsigned short LOADING = 1; - const unsigned short DONE = 2; - readonly attribute unsigned short readyState; - - [implicit_jscontext] - readonly attribute jsval result; - - // This is a DOMError - readonly attribute nsISupports error; - - [implicit_jscontext] attribute jsval onloadstart; - [implicit_jscontext] attribute jsval onprogress; - [implicit_jscontext] attribute jsval onload; - [implicit_jscontext] attribute jsval onabort; - [implicit_jscontext] attribute jsval onerror; - [implicit_jscontext] attribute jsval onloadend; -}; - -%{ C++ -#define NS_FILEREADER_CID \ -{0x06aa7c21, 0xfe05, 0x4cf2, \ -{0xb1, 0xc4, 0x0c, 0x71, 0x26, 0xa4, 0xf7, 0x13}} -#define NS_FILEREADER_CONTRACTID \ -"@mozilla.org/files/filereader;1" -%} diff --git a/dom/base/test/test_ipc_messagemanager_blob.html b/dom/base/test/test_ipc_messagemanager_blob.html index c8872c93eeb6..fa8967888e2b 100644 --- a/dom/base/test/test_ipc_messagemanager_blob.html +++ b/dom/base/test/test_ipc_messagemanager_blob.html @@ -26,9 +26,7 @@ return; } - let reader = - Components.classes["@mozilla.org/files/filereader;1"] - .createInstance(Components.interfaces.nsIDOMFileReader); + let reader = new FileReader(); reader.addEventListener("load", function() { let response = reader.result == "this is a great success!" ? message.json : diff --git a/dom/indexedDB/test/test_message_manager_ipc.html b/dom/indexedDB/test/test_message_manager_ipc.html index 5a45b90a009d..7fae1402eab3 100644 --- a/dom/indexedDB/test/test_message_manager_ipc.html +++ b/dom/indexedDB/test/test_message_manager_ipc.html @@ -50,11 +50,6 @@ function childFrameScript() { sendAsyncMessage(mmName, { op: "done", result: result }); } - function createFileReader() { - return Cc["@mozilla.org/files/filereader;1"] - .createInstance(Ci.nsIDOMFileReader); - } - function grabAndContinue(arg) { testGenerator.send(arg); } @@ -78,7 +73,7 @@ function childFrameScript() { info("Reading blob"); - let reader = createFileReader(); + let reader = new FileReader(); reader.addEventListener("load", grabAndContinue); reader.readAsText(blob); @@ -94,7 +89,7 @@ function childFrameScript() { info("Reading slice"); - reader = createFileReader(); + reader = new FileReader(); reader.addEventListener("load", grabAndContinue); reader.readAsText(slice); @@ -155,7 +150,7 @@ function childFrameScript() { info("Reading blob"); - reader = createFileReader(); + reader = new FileReader(); reader.addEventListener("load", grabAndContinue); reader.readAsText(blob); @@ -190,7 +185,7 @@ function childFrameScript() { info("Reading Slice"); - reader = createFileReader(); + reader = new FileReader(); reader.addEventListener("load", grabAndContinue); reader.readAsText(slice); diff --git a/dom/indexedDB/test/unit/test_blob_file_backed.js b/dom/indexedDB/test/unit/test_blob_file_backed.js index 9dff9d081e51..40f49eeb1318 100644 --- a/dom/indexedDB/test/unit/test_blob_file_backed.js +++ b/dom/indexedDB/test/unit/test_blob_file_backed.js @@ -7,11 +7,6 @@ var disableWorkerTest = "This test uses SpecialPowers"; var testGenerator = testSteps(); -function createFileReader() { - return SpecialPowers.Cc["@mozilla.org/files/filereader;1"] - .createInstance(SpecialPowers.Ci.nsIDOMFileReader); -} - function testSteps() { const fileIOFlags = 0x02 | // PR_WRONLY @@ -48,7 +43,7 @@ function testSteps() is(file.size, fileData.length, "Correct size"); is(file.type, fileType, "Correct type"); - let fileReader = createFileReader(); + let fileReader = new FileReader(); fileReader.onload = grabEventAndContinueHandler; fileReader.readAsText(file); @@ -85,7 +80,7 @@ function testSteps() is(file.size, fileData.length, "Correct size"); is(file.type, fileType, "Correct type"); - fileReader = createFileReader(); + fileReader = new FileReader(); fileReader.onload = grabEventAndContinueHandler; fileReader.readAsText(file); diff --git a/dom/indexedDB/test/unit/xpcshell-head-parent-process.js b/dom/indexedDB/test/unit/xpcshell-head-parent-process.js index a159fd68a2c8..95b1c627d954 100644 --- a/dom/indexedDB/test/unit/xpcshell-head-parent-process.js +++ b/dom/indexedDB/test/unit/xpcshell-head-parent-process.js @@ -339,12 +339,6 @@ function getFile(name, type, str) return new File([str], name, {type: type}); } -function getFileReader() -{ - return SpecialPowers.Cc["@mozilla.org/files/filereader;1"] - .createInstance(SpecialPowers.Ci.nsIDOMFileReader); -} - function compareBuffers(buffer1, buffer2) { if (buffer1.byteLength != buffer2.byteLength) { @@ -388,7 +382,7 @@ function verifyBlob(blob1, blob2) } if (!buffer2) { - let reader = getFileReader(); + let reader = new FileReader(); reader.readAsArrayBuffer(blob2); reader.onload = function(event) { buffer2 = event.target.result; @@ -400,7 +394,7 @@ function verifyBlob(blob1, blob2) } } - let reader = getFileReader(); + let reader = new FileReader(); reader.readAsArrayBuffer(blob1); reader.onload = function(event) { buffer1 = event.target.result; diff --git a/dom/ipc/tests/test_blob_sliced_from_parent_process.html b/dom/ipc/tests/test_blob_sliced_from_parent_process.html index 00f8b13110c7..8a00ed5083bf 100644 --- a/dom/ipc/tests/test_blob_sliced_from_parent_process.html +++ b/dom/ipc/tests/test_blob_sliced_from_parent_process.html @@ -44,11 +44,6 @@ function childFrameScript() { sendAsyncMessage(messageName, { op: "done", result: result }); } - function createFileReader() { - return Cc["@mozilla.org/files/filereader;1"] - .createInstance(Ci.nsIDOMFileReader); - } - function grabAndContinue(arg) { testGenerator.send(arg); } @@ -65,7 +60,7 @@ function childFrameScript() { info("Reading blob"); - let reader = createFileReader(); + let reader = new FileReader(); reader.addEventListener("load", grabAndContinue); reader.readAsText(blob); @@ -84,7 +79,7 @@ function childFrameScript() { info("Reading slice"); - reader = createFileReader(); + reader = new FileReader(); reader.addEventListener("load", grabAndContinue); reader.readAsText(slice); diff --git a/dom/mobilemessage/gonk/MmsService.js b/dom/mobilemessage/gonk/MmsService.js index b9386c7de4cd..37151445fa4e 100644 --- a/dom/mobilemessage/gonk/MmsService.js +++ b/dom/mobilemessage/gonk/MmsService.js @@ -1303,8 +1303,7 @@ SendTransaction.prototype = Object.create(CancellableTransaction.prototype, { return; } - let fileReader = Cc["@mozilla.org/files/filereader;1"] - .createInstance(Ci.nsIDOMFileReader); + let fileReader = new FileReader(); fileReader.addEventListener("loadend", (aEvent) => { let arrayBuffer = aEvent.target.result; aPart.content = new Uint8Array(arrayBuffer); diff --git a/dom/webidl/FileReader.webidl b/dom/webidl/FileReader.webidl index 0032efeba3b6..b4bea2540589 100644 --- a/dom/webidl/FileReader.webidl +++ b/dom/webidl/FileReader.webidl @@ -10,7 +10,8 @@ * liability, trademark and document use rules apply. */ -[Constructor] +[Constructor, + Exposed=(Window,System)] interface FileReader : EventTarget { // async read methods [Throws] diff --git a/js/xpconnect/tests/mochitest/test_bug790732.html b/js/xpconnect/tests/mochitest/test_bug790732.html index 9f3a7d1a3c21..7938a3bd8bde 100644 --- a/js/xpconnect/tests/mochitest/test_bug790732.html +++ b/js/xpconnect/tests/mochitest/test_bug790732.html @@ -20,7 +20,6 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=790732 // constants for a couple of interfaces, and then once it's pretty clear that // it's working as intended we just check that the objects themselves are the // same. - is(Ci.nsIDOMFileReader.DONE, FileReader.DONE); is(Ci.nsIXMLHttpRequest.HEADERS_RECEIVED, XMLHttpRequest.HEADERS_RECEIVED); is(Ci.nsIDOMDOMException.DATA_CLONE_ERR, DOMException.DATA_CLONE_ERR); is(Ci.nsIDOMNode.DOCUMENT_NODE, Node.DOCUMENT_NODE); diff --git a/layout/build/nsLayoutModule.cpp b/layout/build/nsLayoutModule.cpp index bde533c3419b..6d5ae658ea3f 100644 --- a/layout/build/nsLayoutModule.cpp +++ b/layout/build/nsLayoutModule.cpp @@ -67,9 +67,6 @@ // view stuff #include "nsContentCreatorFunctions.h" -// DOM includes -#include "mozilla/dom/FileReader.h" - #include "nsFormData.h" #include "nsHostObjectProtocolHandler.h" #include "nsHostObjectURI.h" @@ -301,7 +298,6 @@ NS_GENERIC_FACTORY_CONSTRUCTOR(XPathEvaluator) NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(txNodeSetAdaptor, Init) NS_GENERIC_FACTORY_CONSTRUCTOR(nsDOMSerializer) NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsXMLHttpRequest, Init) -NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(FileReader, Init) NS_GENERIC_FACTORY_CONSTRUCTOR(nsFormData) NS_GENERIC_FACTORY_CONSTRUCTOR(nsBlobProtocolHandler) NS_GENERIC_FACTORY_CONSTRUCTOR(nsMediaStreamProtocolHandler) @@ -751,7 +747,6 @@ NS_DEFINE_NAMED_CID(TRANSFORMIIX_XSLT_PROCESSOR_CID); NS_DEFINE_NAMED_CID(TRANSFORMIIX_XPATH_EVALUATOR_CID); NS_DEFINE_NAMED_CID(TRANSFORMIIX_NODESET_CID); NS_DEFINE_NAMED_CID(NS_XMLSERIALIZER_CID); -NS_DEFINE_NAMED_CID(NS_FILEREADER_CID); NS_DEFINE_NAMED_CID(NS_FORMDATA_CID); NS_DEFINE_NAMED_CID(NS_BLOBPROTOCOLHANDLER_CID); NS_DEFINE_NAMED_CID(NS_MEDIASTREAMPROTOCOLHANDLER_CID); @@ -1059,7 +1054,6 @@ static const mozilla::Module::CIDEntry kLayoutCIDs[] = { { &kTRANSFORMIIX_XPATH_EVALUATOR_CID, false, nullptr, XPathEvaluatorConstructor }, { &kTRANSFORMIIX_NODESET_CID, false, nullptr, txNodeSetAdaptorConstructor }, { &kNS_XMLSERIALIZER_CID, false, nullptr, nsDOMSerializerConstructor }, - { &kNS_FILEREADER_CID, false, nullptr, FileReaderConstructor }, { &kNS_FORMDATA_CID, false, nullptr, nsFormDataConstructor }, { &kNS_BLOBPROTOCOLHANDLER_CID, false, nullptr, nsBlobProtocolHandlerConstructor }, { &kNS_MEDIASTREAMPROTOCOLHANDLER_CID, false, nullptr, nsMediaStreamProtocolHandlerConstructor }, @@ -1227,7 +1221,6 @@ static const mozilla::Module::ContractIDEntry kLayoutContracts[] = { { NS_XPATH_EVALUATOR_CONTRACTID, &kTRANSFORMIIX_XPATH_EVALUATOR_CID }, { TRANSFORMIIX_NODESET_CONTRACTID, &kTRANSFORMIIX_NODESET_CID }, { NS_XMLSERIALIZER_CONTRACTID, &kNS_XMLSERIALIZER_CID }, - { NS_FILEREADER_CONTRACTID, &kNS_FILEREADER_CID }, { NS_FORMDATA_CONTRACTID, &kNS_FORMDATA_CID }, { NS_NETWORK_PROTOCOL_CONTRACTID_PREFIX BLOBURI_SCHEME, &kNS_BLOBPROTOCOLHANDLER_CID }, { NS_NETWORK_PROTOCOL_CONTRACTID_PREFIX MEDIASTREAMURI_SCHEME, &kNS_MEDIASTREAMPROTOCOLHANDLER_CID }, diff --git a/toolkit/components/thumbnails/PageThumbs.jsm b/toolkit/components/thumbnails/PageThumbs.jsm index 50e1927f5122..1e0b4200ca71 100644 --- a/toolkit/components/thumbnails/PageThumbs.jsm +++ b/toolkit/components/thumbnails/PageThumbs.jsm @@ -83,9 +83,9 @@ const TaskUtils = { */ readBlob: function readBlob(blob) { let deferred = Promise.defer(); - let reader = Cc["@mozilla.org/files/filereader;1"].createInstance(Ci.nsIDOMFileReader); + let reader = new FileReader(); reader.onloadend = function onloadend() { - if (reader.readyState != Ci.nsIDOMFileReader.DONE) { + if (reader.readyState != FileReader.DONE) { deferred.reject(reader.error); } else { deferred.resolve(reader.result); @@ -305,8 +305,7 @@ this.PageThumbs = { mm.removeMessageListener("Browser:Thumbnail:Response", thumbFunc); let imageBlob = aMsg.data.thumbnail; let doc = aBrowser.parentElement.ownerDocument; - let reader = Cc["@mozilla.org/files/filereader;1"]. - createInstance(Ci.nsIDOMFileReader); + let reader = new FileReader(); reader.addEventListener("loadend", function() { let image = doc.createElementNS(PageThumbUtils.HTML_NAMESPACE, "img"); image.onload = function () { diff --git a/toolkit/components/thumbnails/content/backgroundPageThumbsContent.js b/toolkit/components/thumbnails/content/backgroundPageThumbsContent.js index dddbbcefdf3c..6ed1090d8a8a 100644 --- a/toolkit/components/thumbnails/content/backgroundPageThumbsContent.js +++ b/toolkit/components/thumbnails/content/backgroundPageThumbsContent.js @@ -141,8 +141,7 @@ const backgroundPageThumbsContent = { _finishCurrentCapture: function () { let capture = this._currentCapture; - let fileReader = Cc["@mozilla.org/files/filereader;1"]. - createInstance(Ci.nsIDOMFileReader); + let fileReader = new FileReader(); fileReader.onloadend = () => { sendAsyncMessage("BackgroundPageThumbs:didCapture", { id: capture.id, diff --git a/toolkit/modules/PropertyListUtils.jsm b/toolkit/modules/PropertyListUtils.jsm index 9c90b11f05a0..2c072cefd33b 100644 --- a/toolkit/modules/PropertyListUtils.jsm +++ b/toolkit/modules/PropertyListUtils.jsm @@ -100,8 +100,7 @@ this.PropertyListUtils = Object.freeze({ file = new File(file); } - let fileReader = Cc["@mozilla.org/files/filereader;1"]. - createInstance(Ci.nsIDOMFileReader); + let fileReader = new FileReader(); let onLoadEnd = function() { let root = null; try { diff --git a/xpcom/reflect/xptinfo/ShimInterfaceInfo.cpp b/xpcom/reflect/xptinfo/ShimInterfaceInfo.cpp index 9a2548269e06..868986c769f5 100644 --- a/xpcom/reflect/xptinfo/ShimInterfaceInfo.cpp +++ b/xpcom/reflect/xptinfo/ShimInterfaceInfo.cpp @@ -44,7 +44,6 @@ #include "nsIDOMEvent.h" #include "nsIDOMEventTarget.h" #include "nsIDOMFileList.h" -#include "nsIDOMFileReader.h" #include "nsIDOMFocusEvent.h" #include "nsIDOMFormData.h" #include "nsIDOMGeoPositionError.h" @@ -179,7 +178,6 @@ #include "mozilla/dom/EventBinding.h" #include "mozilla/dom/EventTargetBinding.h" #include "mozilla/dom/FileListBinding.h" -#include "mozilla/dom/FileReaderBinding.h" #include "mozilla/dom/FocusEventBinding.h" #include "mozilla/dom/FormDataBinding.h" #include "mozilla/dom/HistoryBinding.h" @@ -368,7 +366,6 @@ const ComponentsInterfaceShimEntry kComponentsInterfaceShimMap[] = DEFINE_SHIM(Element), DEFINE_SHIM(Event), DEFINE_SHIM(EventTarget), - DEFINE_SHIM(FileReader), DEFINE_SHIM(FileList), DEFINE_SHIM(FocusEvent), DEFINE_SHIM(FormData),