From 2e83574eb4e0a2661ca1782a0cb05cd75e69a521 Mon Sep 17 00:00:00 2001 From: Nathan Froyd Date: Thu, 18 Feb 2016 14:35:21 -0500 Subject: [PATCH] Bug 1249389 - part 6 - provide UniquePtr overload for nsIStartupCache::GetBuffer; r=erahm The lone remaining startup cache-related uses of nsAutoArrayPtr are both in TestStartupCache.cpp, for use with nsIStartupCache::GetBuffer. The uses can't use StartupCache::GetBuffer because StartupCache::GetBuffer isn't visible outside of libxul, and TestStartupCache is a normal C++ unit test. The Right Thing is to convert TestStartupCache to a gtest so we can see libxul internal symbols and then delete nsIStartupCache entirely. That's a bit complicated, as TestStartupCache doesn't fit nicely into gtest's framework. The simpler solution is to add a UniquePtr overload in the interface that hides the XPCOM outparam management details. --- startupcache/nsIStartupCache.idl | 16 ++++++++++++++++ startupcache/test/TestStartupCache.cpp | 13 +++++-------- 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/startupcache/nsIStartupCache.idl b/startupcache/nsIStartupCache.idl index ece38b4edb65..b03dcb3ccd16 100644 --- a/startupcache/nsIStartupCache.idl +++ b/startupcache/nsIStartupCache.idl @@ -9,6 +9,10 @@ #include "nsIObserver.idl" #include "nsIObjectOutputStream.idl" +%{C++ +#include "mozilla/UniquePtr.h" +%} + [uuid(25957820-90a1-428c-8739-b0845d3cc534)] interface nsIStartupCache : nsISupports { @@ -19,6 +23,18 @@ interface nsIStartupCache : nsISupports * in that file. */ uint32_t getBuffer(in string aID, out charPtr aBuffer); +%{C++ + /* A more convenient interface for using from C++. */ + nsresult GetBuffer(const char* id, mozilla::UniquePtr* outbuf, uint32_t* length) + { + char* buf; + nsresult rv = GetBuffer(id, &buf, length); + NS_ENSURE_SUCCESS(rv, rv); + outbuf->reset(buf); + return rv; + } +%} + void putBuffer(in string aID, in string aBuffer, in uint32_t aLength); diff --git a/startupcache/test/TestStartupCache.cpp b/startupcache/test/TestStartupCache.cpp index 2ccdc9cd7ff5..ddcac1a7d203 100644 --- a/startupcache/test/TestStartupCache.cpp +++ b/startupcache/test/TestStartupCache.cpp @@ -92,26 +92,23 @@ TestStartupWriteRead() { const char* buf = "Market opportunities for BeardBook"; const char* id = "id"; - char* outbufPtr = nullptr; - nsAutoArrayPtr outbuf; + UniquePtr outbuf; uint32_t len; rv = sc->PutBuffer(id, buf, strlen(buf) + 1); NS_ENSURE_SUCCESS(rv, rv); - rv = sc->GetBuffer(id, &outbufPtr, &len); + rv = sc->GetBuffer(id, &outbuf, &len); NS_ENSURE_SUCCESS(rv, rv); - outbuf = outbufPtr; - NS_ENSURE_STR_MATCH(buf, outbuf, "pre-write read"); + NS_ENSURE_STR_MATCH(buf, outbuf.get(), "pre-write read"); rv = sc->ResetStartupWriteTimer(); rv = WaitForStartupTimer(); NS_ENSURE_SUCCESS(rv, rv); - rv = sc->GetBuffer(id, &outbufPtr, &len); + rv = sc->GetBuffer(id, &outbuf, &len); NS_ENSURE_SUCCESS(rv, rv); - outbuf = outbufPtr; - NS_ENSURE_STR_MATCH(buf, outbuf, "simple write/read"); + NS_ENSURE_STR_MATCH(buf, outbuf.get(), "simple write/read"); return NS_OK; }