// static bool SVGTransformListSMILType::GetTransforms(const nsSMILValue& aValue, FallibleTArray<nsSVGTransform>& aTransforms) { NS_PRECONDITION(aValue.mType == Singleton(), "Unexpected SMIL value type"); const TransformArray& smilTransforms = *static_cast<const TransformArray*>(aValue.mU.mPtr); aTransforms.Clear(); if (!aTransforms.SetCapacity(smilTransforms.Length(), fallible)) return false; for (uint32_t i = 0; i < smilTransforms.Length(); ++i) { // No need to check the return value below since we have already allocated // the necessary space aTransforms.AppendElement(smilTransforms[i].ToSVGTransform(), fallible); } return true; }
static inline bool ConvertIndex(FallibleTArray<Index::Indice>& aDest, const nsTArray<stagefright::MediaSource::Indice>& aIndex, int64_t aMediaTime) { if (!aDest.SetCapacity(aIndex.Length(), mozilla::fallible)) { return false; } for (size_t i = 0; i < aIndex.Length(); i++) { Index::Indice indice; const stagefright::MediaSource::Indice& s_indice = aIndex[i]; indice.start_offset = s_indice.start_offset; indice.end_offset = s_indice.end_offset; indice.start_composition = s_indice.start_composition - aMediaTime; indice.end_composition = s_indice.end_composition - aMediaTime; indice.sync = s_indice.sync; // FIXME: Make this infallible after bug 968520 is done. MOZ_ALWAYS_TRUE(aDest.AppendElement(indice, mozilla::fallible)); } return true; }
/* static */ bool SharedMessagePortMessage::FromMessagesToSharedParent( nsTArray<ClonedMessageData>& aArray, FallibleTArray<RefPtr<SharedMessagePortMessage>>& aData) { MOZ_ASSERT(aData.IsEmpty()); if (NS_WARN_IF(!aData.SetCapacity(aArray.Length(), mozilla::fallible))) { return false; } for (auto& message : aArray) { RefPtr<SharedMessagePortMessage> data = new SharedMessagePortMessage(); data->StealFromClonedMessageDataForBackgroundParent(message); if (!aData.AppendElement(data, mozilla::fallible)) { return false; } } return true; }
/* static */ bool SharedMessagePortMessage::FromSharedToMessagesParent( MessagePortParent* aActor, const nsTArray<RefPtr<SharedMessagePortMessage>>& aData, FallibleTArray<ClonedMessageData>& aArray) { MOZ_ASSERT(aArray.IsEmpty()); if (NS_WARN_IF(!aArray.SetCapacity(aData.Length(), mozilla::fallible))) { return false; } PBackgroundParent* backgroundManager = aActor->Manager(); MOZ_ASSERT(backgroundManager); for (auto& data : aData) { ClonedMessageData* message = aArray.AppendElement(mozilla::fallible); data->BuildClonedMessageDataForBackgroundParent(backgroundManager, *message); } return true; }
/* static */ bool SharedMessagePortMessage::FromMessagesToSharedChild( nsTArray<MessagePortMessage>& aArray, FallibleTArray<nsRefPtr<SharedMessagePortMessage>>& aData) { MOZ_ASSERT(aData.IsEmpty()); if (NS_WARN_IF(!aData.SetCapacity(aArray.Length(), mozilla::fallible))) { return false; } for (auto& message : aArray) { nsRefPtr<SharedMessagePortMessage> data = new SharedMessagePortMessage(); data->mData.SwapElements(message.data()); const nsTArray<PBlobChild*>& blobs = message.blobsChild(); if (!blobs.IsEmpty()) { data->mClosure.mBlobImpls.SetCapacity(blobs.Length()); for (uint32_t i = 0, len = blobs.Length(); i < len; ++i) { nsRefPtr<BlobImpl> impl = static_cast<BlobChild*>(blobs[i])->GetBlobImpl(); data->mClosure.mBlobImpls.AppendElement(impl); } } data->mClosure.mMessagePortIdentifiers.AppendElements( message.transferredPorts()); if (!aData.AppendElement(data, mozilla::fallible)) { return false; } } return true; }
/* static */ bool SharedMessagePortMessage::FromSharedToMessagesParent( MessagePortParent* aActor, const nsTArray<nsRefPtr<SharedMessagePortMessage>>& aData, FallibleTArray<MessagePortMessage>& aArray) { MOZ_ASSERT(aArray.IsEmpty()); if (NS_WARN_IF(!aArray.SetCapacity(aData.Length(), mozilla::fallible))) { return false; } PBackgroundParent* backgroundManager = aActor->Manager(); MOZ_ASSERT(backgroundManager); for (auto& data : aData) { MessagePortMessage* message = aArray.AppendElement(mozilla::fallible); message->data().SwapElements(data->mData); const nsTArray<nsRefPtr<BlobImpl>>& blobImpls = data->mClosure.mBlobImpls; if (!blobImpls.IsEmpty()) { message->blobsParent().SetCapacity(blobImpls.Length()); for (uint32_t i = 0, len = blobImpls.Length(); i < len; ++i) { PBlobParent* blobParent = BackgroundParent::GetOrCreateActorForBlobImpl(backgroundManager, blobImpls[i]); message->blobsParent().AppendElement(blobParent); } } message->transferredPorts().AppendElements( data->mClosure.mMessagePortIdentifiers); } return true; }