bug 1523104: remote: emit events when targets connect and disconnect; r=ochameau

This commit is contained in:
Andreas Tolfsen 2019-03-07 22:10:02 +00:00
Родитель 38cb88984d
Коммит 3d0e2a846c
1 изменённых файлов: 7 добавлений и 2 удалений

Просмотреть файл

@ -6,6 +6,7 @@
var EXPORTED_SYMBOLS = ["Targets"];
const {EventEmitter} = ChromeUtils.import("resource://gre/modules/EventEmitter.jsm");
const {MessagePromise} = ChromeUtils.import("chrome://remote/content/Sync.jsm");
const {Target} = ChromeUtils.import("chrome://remote/content/Target.jsm");
@ -13,9 +14,11 @@ class Targets {
constructor() {
// browser context ID -> Target<XULElement>
this._targets = new Map();
EventEmitter.decorate(this);
}
/** @param BrowserElement browser */
/** @param {BrowserElement} browser */
async connect(browser) {
// The tab may just have been created and not fully initialized yet.
// Target class expects BrowserElement.browsingContext to be defined
@ -28,9 +31,10 @@ class Targets {
const target = new Target(browser);
target.connect();
this._targets.set(target.id, target);
this.emit("connect", target);
}
/** @param BrowserElement browser */
/** @param {BrowserElement} browser */
disconnect(browser) {
// Ignore the browsers that haven't had time to initialize.
if (!browser.browsingContext) {
@ -39,6 +43,7 @@ class Targets {
const target = this._targets.get(browser.browsingContext.id);
if (target) {
this.emit("disconnect", target);
target.disconnect();
this._targets.delete(target.id);
}