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 --- services/settings/SharedUtils.jsm | 53 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 services/settings/SharedUtils.jsm (limited to 'services/settings/SharedUtils.jsm') diff --git a/services/settings/SharedUtils.jsm b/services/settings/SharedUtils.jsm new file mode 100644 index 0000000000..9804e80c91 --- /dev/null +++ b/services/settings/SharedUtils.jsm @@ -0,0 +1,53 @@ +/* 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/. */ + +/** + * Common logic shared by RemoteSettingsWorker.js (Worker) and the main thread. + */ + +var EXPORTED_SYMBOLS = ["SharedUtils"]; + +var SharedUtils = { + /** + * Check that the specified content matches the expected size and SHA-256 hash. + * @param {ArrayBuffer} buffer binary content + * @param {Number} size expected file size + * @param {String} size expected file SHA-256 as hex string + * @returns {boolean} + */ + async checkContentHash(buffer, size, hash) { + const bytes = new Uint8Array(buffer); + // Has expected size? (saves computing hash) + if (bytes.length !== size) { + return false; + } + // Has expected content? + const hashBuffer = await crypto.subtle.digest("SHA-256", bytes); + const hashBytes = new Uint8Array(hashBuffer); + const toHex = b => b.toString(16).padStart(2, "0"); + const hashStr = Array.from(hashBytes, toHex).join(""); + return hashStr == hash; + }, + + /** + * Load (from disk) the JSON file distributed with the release for this collection. + * @param {String} bucket + * @param {String} collection + */ + async loadJSONDump(bucket, collection) { + // When using the preview bucket, we still want to load the main dump. + // But we store it locally in the preview bucket. + const jsonBucket = bucket.replace("-preview", ""); + const fileURI = `resource://app/defaults/settings/${jsonBucket}/${collection}.json`; + let response; + try { + response = await fetch(fileURI); + } catch (e) { + // Return null if file is missing. + return { data: null, timestamp: null }; + } + // Will throw if JSON is invalid. + return response.json(); + }, +}; -- cgit v1.2.3