summaryrefslogtreecommitdiffstats
path: root/devtools/client/fronts/string.js
diff options
context:
space:
mode:
Diffstat (limited to 'devtools/client/fronts/string.js')
-rw-r--r--devtools/client/fronts/string.js60
1 files changed, 60 insertions, 0 deletions
diff --git a/devtools/client/fronts/string.js b/devtools/client/fronts/string.js
new file mode 100644
index 0000000000..f9b42e260c
--- /dev/null
+++ b/devtools/client/fronts/string.js
@@ -0,0 +1,60 @@
+/* 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);