/* 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 { DevToolsServer } = require("devtools/server/devtools-server"); const { longStringSpec, SimpleStringFront, } = require("devtools/shared/specs/string"); const { FrontClassWithSpec, registerFront, } = require("devtools/shared/protocol"); class LongStringFront extends FrontClassWithSpec(longStringSpec) { destroy() { this.initial = null; this.length = null; this.strPromise = null; super.destroy(); } form(data) { this.actorID = data.actor; this.initial = data.initial; this.length = data.length; this._grip = data; } // We expose the grip so consumers (e.g. ObjectInspector) that handle webconsole // evaluations (which can return primitive, object fronts or longString front), // can directly call this without further check. getGrip() { return this._grip; } string() { if (!this.strPromise) { const promiseRest = thusFar => { if (thusFar.length === this.length) { return Promise.resolve(thusFar); } return this.substring( thusFar.length, thusFar.length + DevToolsServer.LONG_STRING_READ_LENGTH ).then(next => promiseRest(thusFar + next)); }; this.strPromise = promiseRest(this.initial); } return this.strPromise; } } exports.LongStringFront = LongStringFront; registerFront(LongStringFront); exports.SimpleStringFront = SimpleStringFront; registerFront(SimpleStringFront);