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.
This commit is contained in:
Nathan Froyd 2016-02-18 14:35:21 -05:00
Родитель 060b90466d
Коммит 2e83574eb4
2 изменённых файлов: 21 добавлений и 8 удалений

Просмотреть файл

@ -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<char[]>* 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);

Просмотреть файл

@ -92,26 +92,23 @@ TestStartupWriteRead() {
const char* buf = "Market opportunities for BeardBook";
const char* id = "id";
char* outbufPtr = nullptr;
nsAutoArrayPtr<char> outbuf;
UniquePtr<char[]> 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;
}