gecko-dev/devtools/shared/transport/js-window-actor-transport.js

62 строки
1.6 KiB
JavaScript

/* 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";
/**
* DevTools transport relying on JS Window Actors. This is an experimental
* transport. It is only used when using the JS Window Actor based frame
* connector. In that case this transport will be used to communicate between
* the DevToolsServer living in the parent process and the DevToolsServer
* living in the process of the target frame.
*
* This is intended to be a replacement for child-transport.js which is a
* message-manager based transport.
*/
class JsWindowActorTransport {
constructor(jsWindowActor, prefix) {
this.hooks = null;
this._jsWindowActor = jsWindowActor;
this._prefix = prefix;
this._onPacketReceived = this._onPacketReceived.bind(this);
}
_addListener() {
this._jsWindowActor.on("packet-received", this._onPacketReceived);
}
_removeListener() {
this._jsWindowActor.off("packet-received", this._onPacketReceived);
}
ready() {
this._addListener();
}
close() {
this._removeListener();
if (this.hooks.onClosed) {
this.hooks.onClosed();
}
}
_onPacketReceived(eventName, { data }) {
const { prefix, packet } = data;
if (prefix === this._prefix) {
this.hooks.onPacket(packet);
}
}
send(packet) {
this._jsWindowActor.sendPacket(packet, this._prefix);
}
startBulkSend() {
throw new Error("startBulkSend not implemented for JsWindowActorTransport");
}
}
exports.JsWindowActorTransport = JsWindowActorTransport;