Bug 1404198: Part 1 - Add non-virtual constructor for nsIObject(Input|Output)Stream and update existing callers. r=njn

MozReview-Commit-ID: 3eoh6AwDJyz

--HG--
extra : rebase_source : 92b18b6ef07d276cac79ce735ca0b592cffbf87e
This commit is contained in:
Kris Maglione 2017-10-04 20:06:28 -07:00
parent d52de87818
commit 3876d40960
10 changed files with 69 additions and 64 deletions

View File

@ -11,8 +11,8 @@
#include "mozilla/dom/quota/QuotaManager.h"
#include "mozilla/SnappyCompressOutputStream.h"
#include "mozilla/Unused.h"
#include "nsIBinaryInputStream.h"
#include "nsIBinaryOutputStream.h"
#include "nsIObjectInputStream.h"
#include "nsIObjectOutputStream.h"
#include "nsIFile.h"
#include "nsIUUIDGenerator.h"
#include "nsNetCID.h"
@ -420,14 +420,10 @@ LockedDirectoryPaddingWrite(nsIFile* aBaseDir, DirPaddingFile aPaddingFileType,
rv = NS_NewLocalFileOutputStream(getter_AddRefs(outputStream), file);
if (NS_WARN_IF(NS_FAILED(rv))) { return rv; }
nsCOMPtr<nsIBinaryOutputStream> binaryStream =
do_CreateInstance("@mozilla.org/binaryoutputstream;1");
if (NS_WARN_IF(!binaryStream)) { return NS_ERROR_FAILURE; }
nsCOMPtr<nsIObjectOutputStream> objectStream =
NS_NewObjectOutputStream(outputStream);
rv = binaryStream->SetOutputStream(outputStream);
if (NS_WARN_IF(NS_FAILED(rv))) { return rv; }
rv = binaryStream->Write64(aPaddingSize);
rv = objectStream->Write64(aPaddingSize);
if (NS_WARN_IF(NS_FAILED(rv))) { return rv; }
return rv;
@ -744,15 +740,11 @@ LockedDirectoryPaddingGet(nsIFile* aBaseDir, int64_t* aPaddingSizeOut)
rv = NS_NewBufferedInputStream(getter_AddRefs(bufferedStream), stream, 512);
if (NS_WARN_IF(NS_FAILED(rv))) { return rv; }
nsCOMPtr<nsIBinaryInputStream> binaryStream =
do_CreateInstance("@mozilla.org/binaryinputstream;1");
if (NS_WARN_IF(NS_FAILED(rv))) { return rv; }
rv = binaryStream->SetInputStream(bufferedStream);
if (NS_WARN_IF(NS_FAILED(rv))) { return rv; }
nsCOMPtr<nsIObjectInputStream> objectStream =
NS_NewObjectInputStream(bufferedStream);
uint64_t paddingSize = 0;
rv = binaryStream->Read64(&paddingSize);
rv = objectStream->Read64(&paddingSize);
if (NS_WARN_IF(NS_FAILED(rv))) { return rv; }
*aPaddingSizeOut = paddingSize;

View File

@ -19,8 +19,8 @@
#include "nsIClipboard.h"
#include "nsContentUtils.h"
#include "nsIContent.h"
#include "nsIBinaryInputStream.h"
#include "nsIBinaryOutputStream.h"
#include "nsIObjectInputStream.h"
#include "nsIObjectOutputStream.h"
#include "nsIStorageStream.h"
#include "nsStringStream.h"
#include "nsCRT.h"
@ -996,7 +996,7 @@ DataTransfer::GetTransferable(uint32_t aIndex, nsILoadContext* aLoadContext)
transferable->Init(aLoadContext);
nsCOMPtr<nsIStorageStream> storageStream;
nsCOMPtr<nsIBinaryOutputStream> stream;
nsCOMPtr<nsIObjectOutputStream> stream;
bool added = false;
bool handlingCustomFormats = true;
@ -1087,8 +1087,7 @@ DataTransfer::GetTransferable(uint32_t aIndex, nsILoadContext* aLoadContext)
nsCOMPtr<nsIOutputStream> outputStream;
storageStream->GetOutputStream(0, getter_AddRefs(outputStream));
stream = do_CreateInstance("@mozilla.org/binaryoutputstream;1");
stream->SetOutputStream(outputStream);
stream = NS_NewObjectOutputStream(outputStream);
}
CheckedInt<uint32_t> formatLength =
@ -1593,14 +1592,8 @@ DataTransfer::FillInExternalCustomTypes(nsIVariant* aData, uint32_t aIndex,
nsCOMPtr<nsIInputStream> stringStream;
NS_NewCStringInputStream(getter_AddRefs(stringStream), str);
nsCOMPtr<nsIBinaryInputStream> stream =
do_CreateInstance("@mozilla.org/binaryinputstream;1");
if (!stream) {
return;
}
rv = stream->SetInputStream(stringStream);
NS_ENSURE_SUCCESS_VOID(rv);
nsCOMPtr<nsIObjectInputStream> stream =
NS_NewObjectInputStream(stringStream);
uint32_t type;
do {

View File

@ -8,8 +8,8 @@
#include "mozIStorageConnection.h"
#include "mozIStorageService.h"
#include "nsIBinaryInputStream.h"
#include "nsIBinaryOutputStream.h"
#include "nsIObjectInputStream.h"
#include "nsIObjectOutputStream.h"
#include "nsIFile.h"
#include "nsIFileStreams.h"
#include "nsIObserverService.h"
@ -2140,18 +2140,14 @@ GetBinaryOutputStream(nsIFile* aFile,
return rv;
}
nsCOMPtr<nsIBinaryOutputStream> binaryStream =
do_CreateInstance("@mozilla.org/binaryoutputstream;1");
if (NS_WARN_IF(!binaryStream)) {
return NS_ERROR_FAILURE;
if (NS_WARN_IF(!outputStream)) {
return NS_ERROR_UNEXPECTED;
}
rv = binaryStream->SetOutputStream(outputStream);
if (NS_WARN_IF(NS_FAILED(rv))) {
return rv;
}
nsCOMPtr<nsIObjectOutputStream> objectOutputStream =
NS_NewObjectOutputStream(outputStream);
binaryStream.forget(aStream);
objectOutputStream.forget(aStream);
return NS_OK;
}

View File

@ -399,11 +399,15 @@ nsXULPrototypeCache::GetOutputStream(nsIURI* uri, nsIObjectOutputStream** stream
nsCOMPtr<nsIStorageStream> storageStream;
bool found = mOutputStreamTable.Get(uri, getter_AddRefs(storageStream));
if (found) {
objectOutput = do_CreateInstance("mozilla.org/binaryoutputstream;1");
if (!objectOutput) return NS_ERROR_OUT_OF_MEMORY;
// Setting an output stream here causes crashes on Windows. The previous
// version of this code always returned NS_ERROR_OUT_OF_MEMORY here,
// because it used a mistyped contract ID to create its object stream.
return NS_ERROR_NOT_IMPLEMENTED;
#if 0
nsCOMPtr<nsIOutputStream> outputStream
= do_QueryInterface(storageStream);
objectOutput->SetOutputStream(outputStream);
objectOutput = NS_NewObjectOutputStream(outputStream);
#endif
} else {
rv = NewObjectOutputWrappedStorageStream(getter_AddRefs(objectOutput),
getter_AddRefs(storageStream),

View File

@ -25,11 +25,7 @@ NS_SerializeToString(nsISerializable* obj, nsACString& str)
return NS_ERROR_OUT_OF_MEMORY;
nsCOMPtr<nsIObjectOutputStream> objstream =
do_CreateInstance("@mozilla.org/binaryoutputstream;1");
if (!objstream)
return NS_ERROR_OUT_OF_MEMORY;
objstream->SetOutputStream(stream);
NS_NewObjectOutputStream(stream);
nsresult rv =
objstream->WriteCompoundObject(obj, NS_GET_IID(nsISupports), true);
NS_ENSURE_SUCCESS(rv, rv);
@ -48,11 +44,7 @@ NS_DeserializeObject(const nsACString& str, nsISupports** obj)
NS_ENSURE_SUCCESS(rv, rv);
nsCOMPtr<nsIObjectInputStream> objstream =
do_CreateInstance("@mozilla.org/binaryinputstream;1");
if (!objstream)
return NS_ERROR_OUT_OF_MEMORY;
objstream->SetInputStream(stream);
NS_NewObjectInputStream(stream);
return objstream->ReadObject(true, obj);
}

View File

@ -11,6 +11,7 @@
#include "nsIResProtocolHandler.h"
#include "nsIChromeRegistry.h"
#include "nsAutoPtr.h"
#include "nsStringStream.h"
#include "StartupCacheUtils.h"
#include "mozilla/scache/StartupCache.h"
#include "mozilla/Omnijar.h"
@ -22,16 +23,14 @@ nsresult
NewObjectInputStreamFromBuffer(UniquePtr<char[]> buffer, uint32_t len,
nsIObjectInputStream** stream)
{
nsCOMPtr<nsIStringInputStream> stringStream =
do_CreateInstance("@mozilla.org/io/string-input-stream;1");
NS_ENSURE_TRUE(stringStream, NS_ERROR_FAILURE);
nsCOMPtr<nsIInputStream> stringStream;
nsresult rv = NS_NewByteInputStream(getter_AddRefs(stringStream),
buffer.release(), len,
NS_ASSIGNMENT_ADOPT);
MOZ_ALWAYS_SUCCEEDS(rv);
nsCOMPtr<nsIObjectInputStream> objectInput =
do_CreateInstance("@mozilla.org/binaryinputstream;1");
NS_ENSURE_TRUE(objectInput, NS_ERROR_FAILURE);
stringStream->AdoptData(buffer.release(), len);
objectInput->SetInputStream(stringStream);
NS_NewObjectInputStream(stringStream);
objectInput.forget(stream);
return NS_OK;
@ -47,12 +46,11 @@ NewObjectOutputWrappedStorageStream(nsIObjectOutputStream **wrapperStream,
nsresult rv = NS_NewStorageStream(256, UINT32_MAX, getter_AddRefs(storageStream));
NS_ENSURE_SUCCESS(rv, rv);
nsCOMPtr<nsIObjectOutputStream> objectOutput
= do_CreateInstance("@mozilla.org/binaryoutputstream;1");
nsCOMPtr<nsIOutputStream> outputStream
= do_QueryInterface(storageStream);
objectOutput->SetOutputStream(outputStream);
nsCOMPtr<nsIObjectOutputStream> objectOutput
= NS_NewObjectOutputStream(outputStream);
#ifdef DEBUG
if (wantDebugStream) {

View File

@ -25,6 +25,7 @@
#include "mozilla/EndianUtils.h"
#include "mozilla/PodOperations.h"
#include "mozilla/RefPtr.h"
#include "mozilla/UniquePtr.h"
#include "nsCRT.h"
@ -41,6 +42,26 @@ using mozilla::MakeUnique;
using mozilla::PodCopy;
using mozilla::UniquePtr;
already_AddRefed<nsIObjectOutputStream>
NS_NewObjectOutputStream(nsIOutputStream* aOutputStream)
{
MOZ_ASSERT(aOutputStream);
auto stream = mozilla::MakeRefPtr<nsBinaryOutputStream>();
MOZ_ALWAYS_SUCCEEDS(stream->SetOutputStream(aOutputStream));
return stream.forget();
}
already_AddRefed<nsIObjectInputStream>
NS_NewObjectInputStream(nsIInputStream* aInputStream)
{
MOZ_ASSERT(aInputStream);
auto stream = mozilla::MakeRefPtr<nsBinaryInputStream>();
MOZ_ALWAYS_SUCCEEDS(stream->SetInputStream(aInputStream));
return stream.forget();
}
NS_IMPL_ISUPPORTS(nsBinaryOutputStream,
nsIObjectOutputStream,
nsIBinaryOutputStream,

View File

@ -33,6 +33,8 @@ public:
}
protected:
friend already_AddRefed<nsIObjectOutputStream> NS_NewObjectOutputStream(nsIOutputStream*);
// nsISupports methods
NS_DECL_ISUPPORTS
@ -76,6 +78,8 @@ public:
}
protected:
friend already_AddRefed<nsIObjectInputStream> NS_NewObjectInputStream(nsIInputStream*);
// nsISupports methods
NS_DECL_ISUPPORTS

View File

@ -35,6 +35,9 @@ interface nsIObjectInputStream : nsIBinaryInputStream
%{C++
already_AddRefed<nsIObjectInputStream>
NS_NewObjectInputStream(nsIInputStream* aOutputStream);
inline nsresult
NS_ReadOptionalObject(nsIObjectInputStream* aStream, bool aIsStrongRef,
nsISupports* *aResult)

View File

@ -58,6 +58,8 @@ interface nsIObjectOutputStream : nsIBinaryOutputStream
};
%{C++
already_AddRefed<nsIObjectOutputStream>
NS_NewObjectOutputStream(nsIOutputStream* aOutputStream);
inline nsresult
NS_WriteOptionalObject(nsIObjectOutputStream* aStream, nsISupports* aObject,