/* static */ void ThreadSafeChromeUtils::Base64URLEncode(GlobalObject& aGlobal, const ArrayBufferViewOrArrayBuffer& aSource, const Base64URLEncodeOptions& aOptions, nsACString& aResult, ErrorResult& aRv) { size_t length = 0; uint8_t* data = nullptr; if (aSource.IsArrayBuffer()) { const ArrayBuffer& buffer = aSource.GetAsArrayBuffer(); buffer.ComputeLengthAndData(); length = buffer.Length(); data = buffer.Data(); } else if (aSource.IsArrayBufferView()) { const ArrayBufferView& view = aSource.GetAsArrayBufferView(); view.ComputeLengthAndData(); length = view.Length(); data = view.Data(); } else { MOZ_CRASH("Uninitialized union: expected buffer or view"); } auto paddingPolicy = aOptions.mPad ? Base64URLEncodePaddingPolicy::Include : Base64URLEncodePaddingPolicy::Omit; nsresult rv = mozilla::Base64URLEncode(length, data, paddingPolicy, aResult); if (NS_WARN_IF(NS_FAILED(rv))) { aResult.Truncate(); aRv.Throw(rv); } }
bool CopyArrayBufferViewOrArrayBufferData(const ArrayBufferViewOrArrayBuffer& aBufferOrView, nsTArray<uint8_t>& aOutData) { if (aBufferOrView.IsArrayBuffer()) { const ArrayBuffer& buffer = aBufferOrView.GetAsArrayBuffer(); buffer.ComputeLengthAndData(); aOutData.AppendElements(buffer.Data(), buffer.Length()); } else if (aBufferOrView.IsArrayBufferView()) { const ArrayBufferView& bufferview = aBufferOrView.GetAsArrayBufferView(); bufferview.ComputeLengthAndData(); aOutData.AppendElements(bufferview.Data(), bufferview.Length()); } else { return false; } return true; }