void
SharedMessagePortMessage::Write(JSContext* aCx,
                                JS::Handle<JS::Value> aValue,
                                JS::Handle<JS::Value> aTransfer,
                                ErrorResult& aRv)
{
  StructuredCloneHelper::Write(aCx, aValue, aTransfer, aRv);
  if (NS_WARN_IF(aRv.Failed())) {
    return;
  }

  const nsTArray<nsRefPtr<BlobImpl>>& blobImpls = BlobImpls();
  for (uint32_t i = 0, len = blobImpls.Length(); i < len; ++i) {
    if (!blobImpls[i]->MayBeClonedToOtherThreads()) {
      aRv.Throw(NS_ERROR_DOM_DATA_CLONE_ERR);
      return;
    }
  }

  FallibleTArray<uint8_t> cloneData;

  MoveBufferDataToArray(cloneData, aRv);
  if (NS_WARN_IF(aRv.Failed())) {
    return;
  }

  MOZ_ASSERT(mData.IsEmpty());
  mData.SwapElements(cloneData);
}
Пример #2
0
void
SharedMessagePortMessage::Write(JSContext* aCx,
                                JS::Handle<JS::Value> aValue,
                                JS::Handle<JS::Value> aTransfer,
                                ErrorResult& aRv)
{
  StructuredCloneHolder::Write(aCx, aValue, aTransfer, aRv);
  if (NS_WARN_IF(aRv.Failed())) {
    return;
  }

  FallibleTArray<uint8_t> cloneData;

  MoveBufferDataToArray(cloneData, aRv);
  if (NS_WARN_IF(aRv.Failed())) {
    return;
  }

  MOZ_ASSERT(mData.IsEmpty());
  mData.SwapElements(cloneData);
}