From 36d22d82aa202bb199967e9512281e9a53db42c9 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 21:33:14 +0200 Subject: Adding upstream version 115.7.0esr. Signed-off-by: Daniel Baumann --- dom/payments/PaymentRequestUtils.cpp | 60 ++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 dom/payments/PaymentRequestUtils.cpp (limited to 'dom/payments/PaymentRequestUtils.cpp') diff --git a/dom/payments/PaymentRequestUtils.cpp b/dom/payments/PaymentRequestUtils.cpp new file mode 100644 index 0000000000..8a8626c328 --- /dev/null +++ b/dom/payments/PaymentRequestUtils.cpp @@ -0,0 +1,60 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set ts=8 sts=2 et sw=2 tw=80: */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#include "js/JSON.h" +#include "nsContentUtils.h" +#include "nsArrayUtils.h" +#include "nsTString.h" +#include "PaymentRequestUtils.h" + +namespace mozilla::dom { + +nsresult SerializeFromJSObject(JSContext* aCx, JS::Handle aObject, + nsAString& aSerializedObject) { + MOZ_ASSERT(aCx); + JS::Rooted value(aCx, JS::ObjectValue(*aObject)); + return SerializeFromJSVal(aCx, value, aSerializedObject); +} + +nsresult SerializeFromJSVal(JSContext* aCx, JS::Handle aValue, + nsAString& aSerializedValue) { + aSerializedValue.Truncate(); + NS_ENSURE_TRUE(nsContentUtils::StringifyJSON(aCx, aValue, aSerializedValue, + UndefinedIsNullStringLiteral), + NS_ERROR_XPC_BAD_CONVERT_JS); + NS_ENSURE_TRUE(!aSerializedValue.IsEmpty(), NS_ERROR_FAILURE); + return NS_OK; +} + +nsresult DeserializeToJSObject(const nsAString& aSerializedObject, + JSContext* aCx, + JS::MutableHandle aObject) { + MOZ_ASSERT(aCx); + JS::Rooted value(aCx); + nsresult rv = DeserializeToJSValue(aSerializedObject, aCx, &value); + if (NS_WARN_IF(NS_FAILED(rv))) { + return rv; + } + if (value.isObject()) { + aObject.set(&value.toObject()); + } else { + aObject.set(nullptr); + } + return NS_OK; +} + +nsresult DeserializeToJSValue(const nsAString& aSerializedObject, + JSContext* aCx, + JS::MutableHandle aValue) { + MOZ_ASSERT(aCx); + if (!JS_ParseJSON(aCx, aSerializedObject.BeginReading(), + aSerializedObject.Length(), aValue)) { + return NS_ERROR_UNEXPECTED; + } + return NS_OK; +} + +} // namespace mozilla::dom -- cgit v1.2.3