12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- /* 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 protocol = require("devtools/shared/protocol");
- const {Arg, RetVal, generateActorSpec} = protocol;
- const promise = require("promise");
- const {Class} = require("sdk/core/heritage");
- const longStringSpec = generateActorSpec({
- typeName: "longstractor",
- methods: {
- substring: {
- request: {
- start: Arg(0),
- end: Arg(1)
- },
- response: { substring: RetVal() },
- },
- release: { release: true },
- },
- });
- exports.longStringSpec = longStringSpec;
- /**
- * When a caller is expecting a LongString actor but the string is already available on
- * client, the SimpleStringFront can be used as it shares the same API as a
- * LongStringFront but will not make unnecessary trips to the server.
- */
- const SimpleStringFront = Class({
- initialize: function (str) {
- this.str = str;
- },
- get length() {
- return this.str.length;
- },
- get initial() {
- return this.str;
- },
- string: function () {
- return promise.resolve(this.str);
- },
- substring: function (start, end) {
- return promise.resolve(this.str.substring(start, end));
- },
- release: function () {
- this.str = null;
- return promise.resolve(undefined);
- }
- });
- exports.SimpleStringFront = SimpleStringFront;
- // The long string actor needs some custom marshalling, because it is sometimes
- // returned as a primitive rather than a complete form.
- var stringActorType = protocol.types.getType("longstractor");
- protocol.types.addType("longstring", {
- _actor: true,
- write: (value, context, detail) => {
- if (!(context instanceof protocol.Actor)) {
- throw Error("Passing a longstring as an argument isn't supported.");
- }
- if (value.short) {
- return value.str;
- }
- return stringActorType.write(value, context, detail);
- },
- read: (value, context, detail) => {
- if (context instanceof protocol.Actor) {
- throw Error("Passing a longstring as an argument isn't supported.");
- }
- if (typeof (value) === "string") {
- return new SimpleStringFront(value);
- }
- return stringActorType.read(value, context, detail);
- }
- });
|