runtime-client-factory.js (2223B)
1 /* This Source Code Form is subject to the terms of the Mozilla Public 2 * License, v. 2.0. If a copy of the MPL was not distributed with this 3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 4 5 "use strict"; 6 7 const { 8 prepareTCPConnection, 9 } = require("resource://devtools/client/shared/remote-debugging/adb/commands/index.js"); 10 const { 11 DevToolsClient, 12 } = require("resource://devtools/client/devtools-client.js"); 13 const { 14 DevToolsServer, 15 } = require("resource://devtools/server/devtools-server.js"); 16 const { 17 ClientWrapper, 18 } = require("resource://devtools/client/aboutdebugging/src/modules/client-wrapper.js"); 19 const { 20 remoteClientManager, 21 } = require("resource://devtools/client/shared/remote-debugging/remote-client-manager.js"); 22 23 const { 24 RUNTIMES, 25 } = require("resource://devtools/client/aboutdebugging/src/constants.js"); 26 27 async function createLocalClient() { 28 DevToolsServer.init(); 29 DevToolsServer.registerAllActors(); 30 DevToolsServer.allowChromeProcess = true; 31 32 const client = new DevToolsClient(DevToolsServer.connectPipe()); 33 await client.connect(); 34 return new ClientWrapper(client); 35 } 36 37 async function createNetworkClient(host, port) { 38 const transport = await DevToolsClient.socketConnect({ host, port }); 39 const client = new DevToolsClient(transport); 40 await client.connect(); 41 return new ClientWrapper(client); 42 } 43 44 async function createUSBClient(deviceId, socketPath) { 45 const port = await prepareTCPConnection(deviceId, socketPath); 46 return createNetworkClient("localhost", port); 47 } 48 49 async function createClientForRuntime(runtime) { 50 const { extra, id, type } = runtime; 51 52 if (type === RUNTIMES.THIS_FIREFOX) { 53 return createLocalClient(); 54 } else if (remoteClientManager.hasClient(id, type)) { 55 const client = remoteClientManager.getClient(id, type); 56 return new ClientWrapper(client); 57 } else if (type === RUNTIMES.NETWORK) { 58 const { host, port } = extra.connectionParameters; 59 return createNetworkClient(host, port); 60 } else if (type === RUNTIMES.USB) { 61 const { deviceId, socketPath } = extra.connectionParameters; 62 return createUSBClient(deviceId, socketPath); 63 } 64 65 return null; 66 } 67 68 exports.createClientForRuntime = createClientForRuntime;