Bug 1536794 - Implement a base Target class. r=ato

In this revision it only helps sharing `handle`.
But in a followup changeset, it will also help closing all the connections
and justify the `sessions` map we keep around.

Differential Revision: https://phabricator.services.mozilla.com/D24219

--HG--
rename : remote/targets/MainProcessTarget.jsm => remote/targets/Target.jsm
extra : moz-landing-system : lando
This commit is contained in:
Alexandre Poirot 2019-03-21 14:17:21 +00:00
parent c33cbad71c
commit 8f9717d1e8
4 changed files with 52 additions and 39 deletions

View File

@ -23,6 +23,7 @@ remote.jar:
# targets
content/targets/MainProcessTarget.jsm (targets/MainProcessTarget.jsm)
content/targets/TabTarget.jsm (targets/TabTarget.jsm)
content/targets/Target.jsm (targets/Target.jsm)
content/targets/Targets.jsm (targets/Targets.jsm)
# domains

View File

@ -6,10 +6,8 @@
var EXPORTED_SYMBOLS = ["MainProcessTarget"];
const {Connection} = ChromeUtils.import("chrome://remote/content/Connection.jsm");
const {Target} = ChromeUtils.import("chrome://remote/content/targets/Target.jsm");
const {Session} = ChromeUtils.import("chrome://remote/content/sessions/Session.jsm");
const {WebSocketDebuggerTransport} = ChromeUtils.import("chrome://remote/content/server/WebSocketTransport.jsm");
const {WebSocketServer} = ChromeUtils.import("chrome://remote/content/server/WebSocket.jsm");
/**
* The main process Target.
@ -17,13 +15,12 @@ const {WebSocketServer} = ChromeUtils.import("chrome://remote/content/server/Web
* Matches BrowserDevToolsAgentHost from chromium, and only support a couple of Domains:
* https://cs.chromium.org/chromium/src/content/browser/devtools/browser_devtools_agent_host.cc?dr=CSs&g=0&l=80-91
*/
class MainProcessTarget {
/**
class MainProcessTarget extends Target {
/*
* @param Targets targets
*/
constructor(targets) {
this.targets = targets;
this.sessions = new Map();
super(targets, Session);
this.type = "main-process";
}
@ -51,21 +48,4 @@ class MainProcessTarget {
webSocketDebuggerUrl: this.wsDebuggerURL,
};
}
// nsIHttpRequestHandler
async handle(request, response) {
const so = await WebSocketServer.upgrade(request, response);
const transport = new WebSocketDebuggerTransport(so);
const conn = new Connection(transport);
this.sessions.set(conn, new Session(conn, this));
}
// XPCOM
get QueryInterface() {
return ChromeUtils.generateQI([
Ci.nsIHttpRequestHandler,
]);
}
}

View File

@ -6,11 +6,9 @@
var EXPORTED_SYMBOLS = ["TabTarget"];
const {Connection} = ChromeUtils.import("chrome://remote/content/Connection.jsm");
const {Target} = ChromeUtils.import("chrome://remote/content/targets/Target.jsm");
const {Services} = ChromeUtils.import("resource://gre/modules/Services.jsm");
const {TabSession} = ChromeUtils.import("chrome://remote/content/sessions/TabSession.jsm");
const {WebSocketDebuggerTransport} = ChromeUtils.import("chrome://remote/content/server/WebSocketTransport.jsm");
const {WebSocketServer} = ChromeUtils.import("chrome://remote/content/server/WebSocket.jsm");
const {XPCOMUtils} = ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm");
XPCOMUtils.defineLazyServiceGetter(this, "Favicons",
@ -19,15 +17,15 @@ XPCOMUtils.defineLazyServiceGetter(this, "Favicons",
/**
* Target for a local tab or a remoted frame.
*/
class TabTarget {
class TabTarget extends Target {
/**
* @param Targets targets
* @param BrowserElement browser
*/
constructor(targets, browser) {
this.targets = targets;
super(targets, TabSession);
this.browser = browser;
this.sessions = new Map();
}
connect() {
@ -124,15 +122,6 @@ class TabTarget {
};
}
// nsIHttpRequestHandler
async handle(request, response) {
const so = await WebSocketServer.upgrade(request, response);
const transport = new WebSocketDebuggerTransport(so);
const conn = new Connection(transport);
this.sessions.set(conn, new TabSession(conn, this));
}
// nsIObserver
observe(subject, topic, data) {

43
remote/targets/Target.jsm Normal file
View File

@ -0,0 +1,43 @@
/* 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";
var EXPORTED_SYMBOLS = ["Target"];
const {Connection} = ChromeUtils.import("chrome://remote/content/Connection.jsm");
const {WebSocketDebuggerTransport} = ChromeUtils.import("chrome://remote/content/server/WebSocketTransport.jsm");
const {WebSocketServer} = ChromeUtils.import("chrome://remote/content/server/WebSocket.jsm");
/**
* Base class for all the Targets.
*/
class Target {
/**
* @param Targets targets
* @param Class sessionClass
*/
constructor(targets, sessionClass) {
this.targets = targets;
this.sessionClass = sessionClass;
this.sessions = new Map();
}
// nsIHttpRequestHandler
async handle(request, response) {
const so = await WebSocketServer.upgrade(request, response);
const transport = new WebSocketDebuggerTransport(so);
const conn = new Connection(transport);
this.sessions.set(conn, new this.sessionClass(conn, this));
}
// XPCOM
get QueryInterface() {
return ChromeUtils.generateQI([
Ci.nsIHttpRequestHandler,
]);
}
}