Bug 1769763: Part 1 - Add StructuredCloneHolder::(Read/Write)String variants for CStrings. r=nika

Differential Revision: https://phabricator.services.mozilla.com/D162250
This commit is contained in:
Kris Maglione 2023-05-23 23:13:36 +00:00
Родитель 5fe310d168
Коммит 020bf49219
2 изменённых файлов: 35 добавлений и 8 удалений

Просмотреть файл

@ -510,9 +510,9 @@ bool StructuredCloneHolder::WriteFullySerializableObjects(
return false;
}
/* static */
bool StructuredCloneHolder::ReadString(JSStructuredCloneReader* aReader,
nsString& aString) {
template <typename char_type>
static bool ReadTString(JSStructuredCloneReader* aReader,
nsTString<char_type>& aString) {
uint32_t length, zero;
if (!JS_ReadUint32Pair(aReader, &length, &zero)) {
return false;
@ -521,18 +521,42 @@ bool StructuredCloneHolder::ReadString(JSStructuredCloneReader* aReader,
if (NS_WARN_IF(!aString.SetLength(length, fallible))) {
return false;
}
size_t charSize = sizeof(nsString::char_type);
size_t charSize = sizeof(char_type);
return JS_ReadBytes(aReader, (void*)aString.BeginWriting(),
length * charSize);
}
template <typename char_type>
static bool WriteTString(JSStructuredCloneWriter* aWriter,
const nsTSubstring<char_type>& aString) {
size_t charSize = sizeof(char_type);
return JS_WriteUint32Pair(aWriter, aString.Length(), 0) &&
JS_WriteBytes(aWriter, aString.BeginReading(),
aString.Length() * charSize);
}
/* static */
bool StructuredCloneHolder::ReadString(JSStructuredCloneReader* aReader,
nsString& aString) {
return ReadTString(aReader, aString);
}
/* static */
bool StructuredCloneHolder::WriteString(JSStructuredCloneWriter* aWriter,
const nsAString& aString) {
size_t charSize = sizeof(nsString::char_type);
return JS_WriteUint32Pair(aWriter, aString.Length(), 0) &&
JS_WriteBytes(aWriter, aString.BeginReading(),
aString.Length() * charSize);
return WriteTString(aWriter, aString);
}
/* static */
bool StructuredCloneHolder::ReadCString(JSStructuredCloneReader* aReader,
nsCString& aString) {
return ReadTString(aReader, aString);
}
/* static */
bool StructuredCloneHolder::WriteCString(JSStructuredCloneWriter* aWriter,
const nsACString& aString) {
return WriteTString(aWriter, aString);
}
namespace {

Просмотреть файл

@ -317,6 +317,9 @@ class StructuredCloneHolder : public StructuredCloneHolderBase {
static bool ReadString(JSStructuredCloneReader* aReader, nsString& aString);
static bool WriteString(JSStructuredCloneWriter* aWriter,
const nsAString& aString);
static bool ReadCString(JSStructuredCloneReader* aReader, nsCString& aString);
static bool WriteCString(JSStructuredCloneWriter* aWriter,
const nsACString& aString);
static const JSStructuredCloneCallbacks sCallbacks;