Commit 2e83574e authored by Nathan Froyd's avatar Nathan Froyd
Browse files

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.
parent 060b9046
Loading
Loading
Loading
Loading
+16 −0
Original line number Diff line number Diff line
@@ -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);
 
+5 −8
Original line number Diff line number Diff line
@@ -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;
}