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 --- devtools/server/actors/array-buffer.js | 69 ++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 devtools/server/actors/array-buffer.js (limited to 'devtools/server/actors/array-buffer.js') diff --git a/devtools/server/actors/array-buffer.js b/devtools/server/actors/array-buffer.js new file mode 100644 index 0000000000..940d17e166 --- /dev/null +++ b/devtools/server/actors/array-buffer.js @@ -0,0 +1,69 @@ +/* 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/. */ + +"use strict"; + +const { Actor } = require("resource://devtools/shared/protocol.js"); +const { + arrayBufferSpec, +} = require("resource://devtools/shared/specs/array-buffer.js"); + +/** + * Creates an actor for the specified ArrayBuffer. + * + * @param {DevToolsServerConnection} conn + * The server connection. + * @param buffer ArrayBuffer + * The buffer. + */ +class ArrayBufferActor extends Actor { + constructor(conn, buffer) { + super(conn, arrayBufferSpec); + this.buffer = buffer; + this.bufferLength = buffer.byteLength; + } + + rawValue() { + return this.buffer; + } + + form() { + return { + actor: this.actorID, + length: this.bufferLength, + // The `typeName` is read in the source spec when reading "sourcedata" + // which can either be an ArrayBuffer actor or a LongString actor. + typeName: this.typeName, + }; + } + + slice(start, count) { + const slice = new Uint8Array(this.buffer, start, count); + const parts = []; + let offset = 0; + const PortionSize = 0x6000; // keep it divisible by 3 for btoa() and join() + while (offset + PortionSize < count) { + parts.push( + btoa( + String.fromCharCode.apply( + null, + slice.subarray(offset, offset + PortionSize) + ) + ) + ); + offset += PortionSize; + } + parts.push( + btoa(String.fromCharCode.apply(null, slice.subarray(offset, count))) + ); + return { + from: this.actorID, + encoded: parts.join(""), + }; + } +} + +module.exports = { + ArrayBufferActor, +}; -- cgit v1.2.3