#ifdef UNSAFE_BUFFERS_BUILD
#pragma allow_unsafe_buffers
#endif
#include "third_party/blink/public/common/messaging/string_message_codec.h"
#include <memory>
#include <string>
#include <vector>
#include "base/check_op.h"
#include "base/containers/buffer_iterator.h"
#include "base/containers/span.h"
#include "base/functional/overloaded.h"
#include "base/logging.h"
#include "base/notreached.h"
#include "base/numerics/checked_math.h"
#include "mojo/public/cpp/base/big_buffer.h"
#include "third_party/blink/public/mojom/array_buffer/array_buffer_contents.mojom.h"
namespace blink {
namespace {
class VectorArrayBuffer : public WebMessageArrayBufferPayload { … };
class BigBufferArrayBuffer : public WebMessageArrayBufferPayload { … };
const uint32_t kVarIntShift = …;
const uint32_t kVarIntMask = …;
const uint8_t kVersionTag = …;
const uint8_t kPaddingTag = …;
const uint8_t kOneByteStringTag = …;
const uint8_t kTwoByteStringTag = …;
const uint8_t kArrayBuffer = …;
const uint8_t kArrayBufferTransferTag = …;
const uint32_t kVersion = …;
static size_t BytesNeededForUint32(uint32_t value) { … }
void WriteUint8(uint8_t value, std::vector<uint8_t>* buffer) { … }
void WriteUint32(uint32_t value, std::vector<uint8_t>* buffer) { … }
void WriteBytes(const char* bytes,
size_t num_bytes,
std::vector<uint8_t>* buffer) { … }
bool ReadUint8(base::BufferIterator<const uint8_t>& iter, uint8_t* value) { … }
bool ReadUint32(base::BufferIterator<const uint8_t>& iter, uint32_t* value) { … }
bool ContainsOnlyLatin1(const std::u16string& data) { … }
}
std::unique_ptr<WebMessageArrayBufferPayload>
WebMessageArrayBufferPayload::CreateFromBigBuffer(
mojo_base::BigBuffer buffer,
std::optional<size_t> max_byte_length) { … }
std::unique_ptr<WebMessageArrayBufferPayload>
WebMessageArrayBufferPayload::CreateForTesting(std::vector<uint8_t> data) { … }
TransferableMessage EncodeWebMessagePayload(const WebMessagePayload& payload) { … }
std::optional<WebMessagePayload> DecodeToWebMessagePayload(
TransferableMessage message) { … }
}