dom/simpledb/SDBResults.cpp
author John Dai <jdai@mozilla.com>
Tue, 26 Mar 2019 15:19:56 +0000
changeset 466115 06a189e6b675149d77a254e6e4678c9c898d3158
parent 448966 6f3709b3878117466168c40affa7bca0b60cf75b
child 473822 32b8f9006e8516679ca63880b1e029d42e1839d2
permissions -rw-r--r--
Bug 1523982 - Part 3: Don't raise an error in observe if creation of our actor was vetoed, r=nika Depends on D24204 Differential Revision: https://phabricator.services.mozilla.com/D24205

/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
/* 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 "SDBResults.h"

#include "nsContentUtils.h"

namespace mozilla {
namespace dom {

SDBResult::SDBResult(const nsACString& aData) : mData(aData) {}

NS_IMPL_ISUPPORTS(SDBResult, nsISDBResult)

NS_IMETHODIMP
SDBResult::GetAsArray(uint32_t* aDataLen, uint8_t** aData) {
  MOZ_ASSERT(aDataLen);
  MOZ_ASSERT(aData);

  if (mData.IsEmpty()) {
    *aDataLen = 0;
    *aData = nullptr;
    return NS_OK;
  }

  uint32_t length = mData.Length();

  uint8_t* data = static_cast<uint8_t*>(moz_xmalloc(length * sizeof(uint8_t)));

  memcpy(data, mData.BeginReading(), length * sizeof(uint8_t));

  *aDataLen = length;
  *aData = data;
  return NS_OK;
}

NS_IMETHODIMP
SDBResult::GetAsArrayBuffer(JSContext* aCx, JS::MutableHandleValue _retval) {
  JS::Rooted<JSObject*> arrayBuffer(aCx);
  nsresult rv =
      nsContentUtils::CreateArrayBuffer(aCx, mData, arrayBuffer.address());
  if (NS_WARN_IF(NS_FAILED(rv))) {
    return rv;
  }

  _retval.setObject(*arrayBuffer);
  return NS_OK;
}

}  // namespace dom
}  // namespace mozilla