Backed out 5 changesets (bug 1542286) for causing devtool failures at browser_about-devtools-toolbox_reload.js CLOSED TREE
authorMihai Alexandru Michis <malexandru@mozilla.com>
Tue, 07 May 2019 12:04:53 +0300
changeset 534748 bb9ad1e63c26115a367bbe6f92960fa9f8f72494
parent 534747 bfeb8f1e42e35f32fe2f4382962c3586336b5b33
child 534749 39ae355770620829620655b965de928567635aa6
push id2082
push userffxbld-merge
push dateMon, 01 Jul 2019 08:34:18 +0000
treeherdermozilla-release@2fb19d0466d2 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
bugs1542286
milestone68.0a1
backs out8b43cfcebf9f68835cd93b093df011864a5fec02
d02d934560c5d5a0e215f65151fe09dd2558de25
dbb72223a684718779c85fa211a6255368641d46
8a220edc2db39df54337dc2a0b92847d0f2cb6b9
38220ee5ab0c01215c9662d57bef5f7432b39081
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Backed out 5 changesets (bug 1542286) for causing devtool failures at browser_about-devtools-toolbox_reload.js CLOSED TREE Backed out changeset 8b43cfcebf9f (bug 1542286) Backed out changeset d02d934560c5 (bug 1542286) Backed out changeset dbb72223a684 (bug 1542286) Backed out changeset 8a220edc2db3 (bug 1542286) Backed out changeset 38220ee5ab0c (bug 1542286)
devtools/client/aboutdebugging-new/src/actions/runtimes.js
devtools/client/aboutdebugging-new/src/components/RuntimeInfo.js
devtools/client/aboutdebugging-new/src/modules/usb-runtimes.js
devtools/client/aboutdebugging-new/src/reducers/runtimes-state.js
devtools/client/aboutdebugging-new/src/types/runtime.js
devtools/client/aboutdebugging-new/test/browser/browser.ini
devtools/client/aboutdebugging-new/test/browser/browser_aboutdebugging_fenix_runtime_display.js
devtools/client/aboutdebugging-new/test/browser/helper-mocks.js
devtools/client/framework/components/DebugTargetInfo.js
devtools/client/framework/components/ToolboxToolbar.js
devtools/client/framework/test/jest/components/debug-target-info.test.js
devtools/client/framework/toolbox.js
devtools/client/jar.mn
devtools/client/shared/remote-debugging/remote-client-manager.js
devtools/client/shared/remote-debugging/test/unit/test_remote_client_manager.js
devtools/client/themes/images/aboutdebugging-fenix-nightly.svg
devtools/client/themes/images/aboutdebugging-fenix.svg
devtools/shared/adb/adb-runtime.js
devtools/shared/adb/adb.js
--- a/devtools/client/aboutdebugging-new/src/actions/runtimes.js
+++ b/devtools/client/aboutdebugging-new/src/actions/runtimes.js
@@ -54,28 +54,17 @@ const {
   WATCH_RUNTIME_FAILURE,
   WATCH_RUNTIME_START,
   WATCH_RUNTIME_SUCCESS,
 } = require("../constants");
 
 const CONNECTION_TIMING_OUT_DELAY = 3000;
 const CONNECTION_CANCEL_DELAY = 13000;
 
-async function getRuntimeIcon(runtime, channel) {
-  if (runtime.isFenix) {
-    switch (channel) {
-      case "release":
-      case "beta":
-        return "chrome://devtools/skin/images/aboutdebugging-fenix.svg";
-      case "aurora":
-      default:
-        return "chrome://devtools/skin/images/aboutdebugging-fenix-nightly.svg";
-    }
-  }
-
+async function getRuntimeIcon(channel) {
   return (channel === "release" || channel === "beta" || channel === "aurora")
     ? `chrome://devtools/skin/images/aboutdebugging-firefox-${ channel }.svg`
     : "chrome://devtools/skin/images/aboutdebugging-firefox-nightly.svg";
 }
 
 function onRemoteDebuggerClientClosed() {
   window.AboutDebugging.onNetworkLocationsUpdated();
   window.AboutDebugging.onUSBRuntimesUpdated();
@@ -113,17 +102,17 @@ function connectRuntime(id) {
     }, connectionCancelDelay);
 
     try {
       const runtime = findRuntimeById(id, getState().runtimes);
       const clientWrapper = await createClientForRuntime(runtime);
 
       const deviceDescription = await clientWrapper.getDeviceDescription();
       const compatibilityReport = await clientWrapper.checkVersionCompatibility();
-      const icon = await getRuntimeIcon(runtime, deviceDescription.channel);
+      const icon = await getRuntimeIcon(deviceDescription.channel);
 
       const {
         CHROME_DEBUG_ENABLED,
         CONNECTION_PROMPT,
         PERMANENT_PRIVATE_BROWSING,
         REMOTE_DEBUG_ENABLED,
         SERVICE_WORKERS_ENABLED,
       } = RUNTIME_PREFERENCE;
@@ -135,41 +124,28 @@ function connectRuntime(id) {
             await clientWrapper.getPreference(REMOTE_DEBUG_ENABLED, true)
           : true;
       const privateBrowsing =
         await clientWrapper.getPreference(PERMANENT_PRIVATE_BROWSING, false);
       const serviceWorkersEnabled =
         await clientWrapper.getPreference(SERVICE_WORKERS_ENABLED, true);
       const serviceWorkersAvailable = serviceWorkersEnabled && !privateBrowsing;
 
-      // Fenix specific workarounds are needed until we can get proper server side APIs
-      // to detect Fenix and get the proper application names and versions.
-      // See https://github.com/mozilla-mobile/fenix/issues/2016.
-
-      // For Fenix runtimes, the ADB runtime name is more accurate than the one returned
-      // by the Device actor.
-      const runtimeName = runtime.isFenix ? runtime.name : deviceDescription.name;
-
-      // For Fenix runtimes, the version we should display is the application version
-      // retrieved from ADB, and not the Gecko version returned by the Device actor.
-      const version = runtime.isFenix ?
-        runtime.extra.adbPackageVersion : deviceDescription.version;
-
       const runtimeDetails = {
         clientWrapper,
         compatibilityReport,
         connectionPromptEnabled,
         extensionDebugEnabled,
         info: {
           deviceName: deviceDescription.deviceName,
           icon,
-          name: runtimeName,
+          name: deviceDescription.name,
           os: deviceDescription.os,
           type: runtime.type,
-          version,
+          version: deviceDescription.version,
         },
         isMultiE10s: deviceDescription.isMultiE10s,
         serviceWorkersAvailable,
       };
 
       const deviceFront = await clientWrapper.getFront("device");
       if (deviceFront) {
         deviceFront.on("multi-e10s-updated", onMultiE10sUpdated);
@@ -364,17 +340,16 @@ function updateNetworkRuntimes(locations
       id: location,
       extra: {
         connectionParameters: { host, port: parseInt(port, 10) },
       },
       isConnecting: false,
       isConnectionFailed: false,
       isConnectionNotResponding: false,
       isConnectionTimeout: false,
-      isFenix: false,
       isUnavailable: false,
       isUnplugged: false,
       isUnknown: false,
       name: location,
       type: RUNTIMES.NETWORK,
     };
   });
   return updateRemoteRuntimes(runtimes, RUNTIMES.NETWORK);
@@ -386,23 +361,21 @@ function updateUSBRuntimes(adbRuntimes) 
     const socketPath = adbRuntime.socketPath;
     const deviceId = adbRuntime.deviceId;
     const connectionParameters = socketPath ? { deviceId, socketPath } : null;
     return {
       id: adbRuntime.id,
       extra: {
         connectionParameters,
         deviceName: adbRuntime.deviceName,
-        adbPackageVersion: adbRuntime.versionName,
       },
       isConnecting: false,
       isConnectionFailed: false,
       isConnectionNotResponding: false,
       isConnectionTimeout: false,
-      isFenix: adbRuntime.isFenix,
       isUnavailable: adbRuntime.isUnavailable,
       isUnplugged: adbRuntime.isUnplugged,
       name: adbRuntime.shortName,
       type: RUNTIMES.USB,
     };
   });
   return updateRemoteRuntimes(runtimes, RUNTIMES.USB);
 }
--- a/devtools/client/aboutdebugging-new/src/components/RuntimeInfo.js
+++ b/devtools/client/aboutdebugging-new/src/components/RuntimeInfo.js
@@ -32,17 +32,17 @@ class RuntimeInfo extends PureComponent 
     const { icon, deviceName, name, version, runtimeId, dispatch } = this.props;
 
     return dom.h1(
       {
         className: "main-heading runtime-info",
       },
       dom.img(
         {
-          className: "main-heading__icon runtime-info__icon qa-runtime-icon",
+          className: "main-heading__icon runtime-info__icon",
           src: icon,
         }
       ),
       Localized(
         {
           id: "about-debugging-runtime-name",
           $name: name,
           $version: version,
--- a/devtools/client/aboutdebugging-new/src/modules/usb-runtimes.js
+++ b/devtools/client/aboutdebugging-new/src/modules/usb-runtimes.js
@@ -11,56 +11,50 @@ loader.lazyRequireGetter(this, "adb", "d
  */
 class UsbRuntime {
   constructor(adbRuntime) {
     this.id = adbRuntime.id;
     this.deviceId = adbRuntime.deviceId;
     this.deviceName = adbRuntime.deviceName;
     this.shortName = adbRuntime.shortName;
     this.socketPath = adbRuntime.socketPath;
-    this.isFenix = adbRuntime.isFenix;
     this.isUnavailable = false;
     this.isUnplugged = false;
-    this.versionName = adbRuntime.versionName;
   }
 }
 
 /**
  * Used when a device was detected, meaning USB debugging is enabled on the device, but no
  * runtime/browser is available for connection.
  */
 class UnavailableUsbRuntime {
   constructor(adbDevice) {
     this.id = adbDevice.id + "|unavailable";
     this.deviceId = adbDevice.id;
     this.deviceName = adbDevice.name;
     this.shortName = "Unavailable runtime";
     this.socketPath = null;
-    this.isFenix = false;
     this.isUnavailable = true;
     this.isUnplugged = false;
-    this.versionName = null;
   }
 }
 
 /**
  * Used to represent USB devices that were previously connected but are now missing
  * (presumably after being unplugged/disconnected from the computer).
  */
 class UnpluggedUsbRuntime {
   constructor(deviceId, deviceName) {
     this.id = deviceId + "|unplugged";
     this.deviceId = deviceId;
     this.deviceName = deviceName;
     this.shortName = "Unplugged runtime";
     this.socketPath = null;
-    this.isFenix = false;
     this.isUnavailable = true;
     this.isUnplugged = true;
-    this.versionName = null;
   }
 }
 
 /**
  * Map used to keep track of discovered usb devices. Will be used to create the unplugged
  * usb runtimes.
  */
 const devices = new Map();
--- a/devtools/client/aboutdebugging-new/src/reducers/runtimes-state.js
+++ b/devtools/client/aboutdebugging-new/src/reducers/runtimes-state.js
@@ -100,22 +100,17 @@ function runtimesReducer(state = Runtime
         isConnectionNotResponding: false,
         isConnectionTimeout: true,
       };
       return _updateRuntimeById(id, updatedState, state);
     }
 
     case CONNECT_RUNTIME_SUCCESS: {
       const { id, runtimeDetails, type } = action.runtime;
-
-      // Update the remoteClientManager with the connected runtime.
-      const client = runtimeDetails.clientWrapper.client;
-      const runtimeInfo = runtimeDetails.info;
-      remoteClientManager.setClient(id, type, client, runtimeInfo);
-
+      remoteClientManager.setClient(id, type, runtimeDetails.clientWrapper.client);
       const updatedState = {
         isConnecting: false,
         isConnectionFailed: false,
         isConnectionNotResponding: false,
         isConnectionTimeout: false,
         runtimeDetails,
       };
       return _updateRuntimeById(id, updatedState, state);
--- a/devtools/client/aboutdebugging-new/src/types/runtime.js
+++ b/devtools/client/aboutdebugging-new/src/types/runtime.js
@@ -100,20 +100,16 @@ const runtimeExtra = {
   connectionParameters: PropTypes.oneOfType([
     PropTypes.shape(networkRuntimeConnectionParameter),
     PropTypes.shape(usbRuntimeConnectionParameter),
   ]),
 
   // device name
   // unavailable on this-firefox and network-location runtimes
   deviceName: PropTypes.string,
-
-  // version of the application coming from ADB, only available via USB. Useful for Fenix
-  // runtimes, because the version can't be retrieved from Service.appInfo.
-  adbPackageVersion: PropTypes.string,
 };
 
 const runtime = {
   // unique id for the runtime
   id: PropTypes.string.isRequired,
 
   // object containing non standard properties that depend on the runtime type,
   // unavailable on this-firefox runtime
@@ -128,21 +124,16 @@ const runtime = {
 
   // will be true if connecting to runtime is taking time, will be false after connecting
   // or failing.
   isConnectionNotResponding: PropTypes.bool.isRequired,
 
   // this flag will be true when the connection was timeout.
   isConnectionTimeout: PropTypes.bool.isRequired,
 
-  // this flag will be true when the detected runtime is Fenix (Firefox Preview).
-  // Fenix need specific logic to get their display name, version and logos.
-  // Discussion ongoing in https://github.com/mozilla-mobile/fenix/issues/2016
-  isFenix: PropTypes.bool.isRequired,
-
   // unavailable runtimes are placeholders for devices where the runtime has not been
   // started yet. For instance an ADB device connected without a compatible runtime
   // running.
   isUnavailable: PropTypes.bool.isRequired,
 
   // unplugged runtimes are placeholders for devices that are no longer available. For
   // instance a USB device that was unplugged from the computer.
   isUnplugged: PropTypes.bool.isRequired,
--- a/devtools/client/aboutdebugging-new/test/browser/browser.ini
+++ b/devtools/client/aboutdebugging-new/test/browser/browser.ini
@@ -65,17 +65,16 @@ skip-if = os == 'linux' && e10s && (asan
 [browser_aboutdebugging_devtoolstoolbox_reload.js]
 skip-if = verify || ccov # test loads the toolbox 2 times for each panel, might timeout or OOM
 [browser_aboutdebugging_devtoolstoolbox_shortcuts.js]
 skip-if = (os == "win" && ccov) # Bug 1521349
 [browser_aboutdebugging_devtoolstoolbox_splitconsole_key.js]
 [browser_aboutdebugging_devtoolstoolbox_target_destroyed.js]
 skip-if = debug || asan # This test leaks. See bug 1529005
 [browser_aboutdebugging_devtoolstoolbox_tooltip_markupview.js]
-[browser_aboutdebugging_fenix_runtime_display.js]
 [browser_aboutdebugging_message_close.js]
 [browser_aboutdebugging_navigate.js]
 [browser_aboutdebugging_persist_connection.js]
 [browser_aboutdebugging_process_category.js]
 [browser_aboutdebugging_process_main.js]
 [browser_aboutdebugging_profiler_dialog.js]
 [browser_aboutdebugging_real_usb_runtime_page_runtime_info.js]
 [browser_aboutdebugging_real_usb_sidebar.js]
deleted file mode 100644
--- a/devtools/client/aboutdebugging-new/test/browser/browser_aboutdebugging_fenix_runtime_display.js
+++ /dev/null
@@ -1,129 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
-   http://creativecommons.org/publicdomain/zero/1.0/ */
-
-"use strict";
-
-const RUNTIME_ID = "1337id";
-const DEVICE_NAME = "Fancy Phone";
-const SERVER_RUNTIME_NAME = "Mozilla Firefox";
-const ADB_RUNTIME_NAME = "Firefox Preview";
-const SERVER_VERSION = "v7.3.31";
-const ADB_VERSION = "v1.3.37";
-
-const FENIX_RELEASE_ICON_SRC = "chrome://devtools/skin/images/aboutdebugging-fenix.svg";
-const FENIX_NIGHTLY_ICON_SRC =
-  "chrome://devtools/skin/images/aboutdebugging-fenix-nightly.svg";
-
-/**
- * Check that Fenix runtime information is correctly displayed in about:debugging.
- */
-add_task(async function() {
-  const mocks = new Mocks();
-  mocks.createUSBRuntime(RUNTIME_ID, {
-    deviceName: DEVICE_NAME,
-    isFenix: true,
-    name: SERVER_RUNTIME_NAME,
-    shortName: ADB_RUNTIME_NAME,
-    versionName: ADB_VERSION,
-    version: SERVER_VERSION,
-  });
-
-  // open a remote runtime page
-  const { document, tab, window } = await openAboutDebugging();
-  await selectThisFirefoxPage(document, window.AboutDebugging.store);
-
-  mocks.emitUSBUpdate();
-  await connectToRuntime(DEVICE_NAME, document);
-  await selectRuntime(DEVICE_NAME, ADB_RUNTIME_NAME, document);
-
-  info("Check that the runtime information is displayed as expected");
-  const runtimeInfo = document.querySelector(".qa-runtime-name");
-  ok(runtimeInfo, "Runtime info for the Fenix runtime is displayed");
-  const runtimeInfoText = runtimeInfo.textContent;
-
-  ok(runtimeInfoText.includes(ADB_RUNTIME_NAME), "Name is the ADB name");
-  ok(!runtimeInfoText.includes(SERVER_RUNTIME_NAME),
-    "Name does not include the server name");
-
-  ok(runtimeInfoText.includes(ADB_VERSION), "Version contains the ADB version");
-  ok(!runtimeInfoText.includes(SERVER_VERSION),
-    "Version does not contain the server version");
-
-  const runtimeIcon = document.querySelector(".qa-runtime-icon");
-  is(runtimeIcon.src, FENIX_RELEASE_ICON_SRC, "The runtime icon is the Fenix icon");
-
-  info("Remove USB runtime");
-  mocks.removeUSBRuntime(RUNTIME_ID);
-  mocks.emitUSBUpdate();
-  await waitUntilUsbDeviceIsUnplugged(DEVICE_NAME, document);
-
-  await removeTab(tab);
-});
-
-/**
- * Check that Fenix runtime information is correctly displayed in about:devtools-toolbox.
- */
-add_task(async function() {
-  // We use a real local client combined with a mocked USB runtime to be able to open
-  // about:devtools-toolbox on a real target.
-  const clientWrapper = await createLocalClientWrapper();
-
-  // Mock getDeviceDescription() to force the local client to return "nightly" as the
-  // channel. Otherwise the value of the icon source would depend on the current channel.
-  const deviceDescription = await clientWrapper.getDeviceDescription();
-  clientWrapper.getDeviceDescription = function() {
-    return Object.assign({}, deviceDescription, {
-      channel: "nightly",
-    });
-  };
-
-  const mocks = new Mocks();
-  mocks.createUSBRuntime(RUNTIME_ID, {
-    clientWrapper: clientWrapper,
-    deviceName: DEVICE_NAME,
-    isFenix: true,
-    name: SERVER_RUNTIME_NAME,
-    shortName: ADB_RUNTIME_NAME,
-    versionName: ADB_VERSION,
-    version: SERVER_VERSION,
-  });
-
-  // open a remote runtime page
-  const { document, tab, window } = await openAboutDebugging();
-  await selectThisFirefoxPage(document, window.AboutDebugging.store);
-
-  mocks.emitUSBUpdate();
-  await connectToRuntime(DEVICE_NAME, document);
-  await selectRuntime(DEVICE_NAME, ADB_RUNTIME_NAME, document);
-
-  info("Wait for the about:debugging target to be available");
-  await waitUntil(() => findDebugTargetByText("about:debugging", document));
-  const { devtoolsDocument, devtoolsTab } =
-    await openAboutDevtoolsToolbox(document, tab, window);
-
-  const runtimeInfo = devtoolsDocument.querySelector(".qa-runtime-info");
-  const runtimeInfoText = runtimeInfo.textContent;
-  ok(runtimeInfoText.includes(ADB_RUNTIME_NAME), "Name is the ADB runtime name");
-  ok(runtimeInfoText.includes(ADB_VERSION), "Version is the ADB version");
-
-  const runtimeIcon = devtoolsDocument.querySelector(".qa-runtime-icon");
-  is(runtimeIcon.src, FENIX_NIGHTLY_ICON_SRC, "The runtime icon is the Fenix icon");
-
-  await closeAboutDevtoolsToolbox(document, devtoolsTab, window);
-  await removeTab(tab);
-});
-
-async function createLocalClientWrapper() {
-  info("Create a local DebuggerClient");
-  const { DebuggerServer } = require("devtools/server/main");
-  const { DebuggerClient } = require("devtools/shared/client/debugger-client");
-  const { ClientWrapper } =
-    require("devtools/client/aboutdebugging-new/src/modules/client-wrapper");
-
-  DebuggerServer.init();
-  DebuggerServer.registerAllActors();
-  const client = new DebuggerClient(DebuggerServer.connectPipe());
-
-  await client.connect();
-  return new ClientWrapper(client);
-}
--- a/devtools/client/aboutdebugging-new/test/browser/helper-mocks.js
+++ b/devtools/client/aboutdebugging-new/test/browser/helper-mocks.js
@@ -119,54 +119,44 @@ class Mocks {
   }
 
   /**
    * Creates a USB runtime for which a client conenction can be established.
    * @param {String} id
    *        The id of the runtime.
    * @param {Object} optional object used to create the fake runtime & device
    *        - channel: {String} Release channel, for instance "release", "nightly"
-   *        - clientWrapper: {ClientWrapper} optional ClientWrapper for this runtime
    *        - deviceId: {String} Device id
    *        - deviceName: {String} Device name
-   *        - isFenix: {Boolean} set by ADB if the package name matches a Fenix package
    *        - name: {String} Application name, for instance "Firefox"
    *        - shortName: {String} Short name for the device
    *        - socketPath: {String} (should only be used for connecting, so not here)
    *        - version: {String} Version, for instance "63.0a"
-   *        - versionName: {String} Version return by ADB "63.0a"
    * @return {Object} Returns the mock client created for this runtime so that methods
    * can be overridden on it.
    */
   createUSBRuntime(id, runtimeInfo = {}) {
     // Add a new runtime to the list of scanned runtimes.
     this._usbRuntimes.push({
+      id: id,
+      socketPath: runtimeInfo.socketPath || "test/path",
       deviceId: runtimeInfo.deviceId || "test device id",
       deviceName: runtimeInfo.deviceName || "test device name",
-      id: id,
-      isFenix: runtimeInfo.isFenix,
       shortName: runtimeInfo.shortName || "testshort",
-      socketPath: runtimeInfo.socketPath || "test/path",
-      versionName: runtimeInfo.versionName || "1.0",
     });
 
     // Add a valid client that can be returned for this particular runtime id.
-    let mockUsbClient = runtimeInfo.clientWrapper;
-    if (!mockUsbClient) {
-      // If no clientWrapper was provided, create a mock client here.
-      mockUsbClient = createClientMock();
-      mockUsbClient.getDeviceDescription = () => {
-        return {
-          channel: runtimeInfo.channel || "release",
-          name: runtimeInfo.name || "TestBrand",
-          version: runtimeInfo.version || "1.0",
-        };
+    const mockUsbClient = createClientMock();
+    mockUsbClient.getDeviceDescription = () => {
+      return {
+        channel: runtimeInfo.channel || "release",
+        name: runtimeInfo.name || "TestBrand",
+        version: runtimeInfo.version || "1.0",
       };
-    }
-
+    };
     this._clients[RUNTIMES.USB][id] = mockUsbClient;
 
     return mockUsbClient;
   }
 
   removeUSBRuntime(id) {
     this._usbRuntimes = this._usbRuntimes.filter(runtime => runtime.id !== id);
     delete this._clients[RUNTIMES.USB][id];
--- a/devtools/client/framework/components/DebugTargetInfo.js
+++ b/devtools/client/framework/components/DebugTargetInfo.js
@@ -13,20 +13,20 @@ const { CONNECTION_TYPES, DEBUG_TARGET_T
  * This is header that should be displayed on top of the toolbox when using
  * about:devtools-toolbox.
  */
 class DebugTargetInfo extends PureComponent {
   static get propTypes() {
     return {
       debugTargetData: PropTypes.shape({
         connectionType: PropTypes.oneOf(Object.values(CONNECTION_TYPES)).isRequired,
-        runtimeInfo: PropTypes.shape({
+        deviceDescription: PropTypes.shape({
+          brandName: PropTypes.string.isRequired,
+          channel: PropTypes.string.isRequired,
           deviceName: PropTypes.string,
-          icon: PropTypes.string.isRequired,
-          name: PropTypes.string.isRequired,
           version: PropTypes.string.isRequired,
         }).isRequired,
         targetType: PropTypes.oneOf(Object.values(DEBUG_TARGET_TYPES)).isRequired,
       }).isRequired,
       L10N: PropTypes.object.isRequired,
       toolbox: PropTypes.object.isRequired,
     };
   }
@@ -53,22 +53,22 @@ class DebugTargetInfo extends PureCompon
         targetTypeStr,
         title
       );
     }
   }
 
   getRuntimeText() {
     const { debugTargetData, L10N } = this.props;
-    const { name, version } = debugTargetData.runtimeInfo;
+    const { brandName, version } = debugTargetData.deviceDescription;
     const { connectionType } = debugTargetData;
 
     return (connectionType === CONNECTION_TYPES.THIS_FIREFOX)
       ? L10N.getFormatStr("toolbox.debugTargetInfo.runtimeLabel.thisFirefox", version)
-      : L10N.getFormatStr("toolbox.debugTargetInfo.runtimeLabel", name, version);
+      : L10N.getFormatStr("toolbox.debugTargetInfo.runtimeLabel", brandName, version);
   }
 
   getAssetsForConnectionType() {
     const { connectionType } = this.props.debugTargetData;
 
     switch (connectionType) {
       case CONNECTION_TYPES.USB:
         return {
@@ -138,23 +138,28 @@ class DebugTargetInfo extends PureCompon
         className: "iconized-label qa-connection-info",
       },
       dom.img({ src: image, alt: `${connectionType} icon`}),
       this.props.L10N.getStr(l10nId),
     );
   }
 
   renderRuntime() {
-    const { icon, deviceName } = this.props.debugTargetData.runtimeInfo;
+    const { channel, deviceName } = this.props.debugTargetData.deviceDescription;
+
+    const channelIcon =
+      (channel === "release" || channel === "beta" || channel === "aurora") ?
+      `chrome://devtools/skin/images/aboutdebugging-firefox-${ channel }.svg` :
+      "chrome://devtools/skin/images/aboutdebugging-firefox-nightly.svg";
 
     return dom.span(
       {
-        className: "iconized-label qa-runtime-info",
+        className: "iconized-label",
       },
-      dom.img({ src: icon, className: "channel-icon qa-runtime-icon" }),
+      dom.img({ src: channelIcon, className: "channel-icon" }),
       dom.b({ className: "devtools-ellipsis-text" }, this.getRuntimeText()),
       dom.span({ className: "devtools-ellipsis-text" }, deviceName),
     );
   }
 
   renderTarget() {
     const title = this.props.toolbox.target.name;
     const url = this.props.toolbox.target.url;
--- a/devtools/client/framework/components/ToolboxToolbar.js
+++ b/devtools/client/framework/components/ToolboxToolbar.js
@@ -93,17 +93,17 @@ class ToolboxToolbar extends Component {
       onTabsOrderUpdated: PropTypes.func.isRequired,
       // Count of visible toolbox buttons which is used by ToolboxTabs component
       // to recognize that the visibility of toolbox buttons were changed.
       // Because in the component we cannot compare the visibility since the
       // button definition instance in toolboxButtons will be unchanged.
       visibleToolboxButtonCount: PropTypes.number,
       // Data to show debug target info, if needed
       debugTargetData: PropTypes.shape({
-        runtimeInfo: PropTypes.object.isRequired,
+        deviceDescription: PropTypes.object.isRequired,
         targetType: PropTypes.string.isRequired,
       }),
     };
   }
 
   constructor(props) {
     super(props);
 
--- a/devtools/client/framework/test/jest/components/debug-target-info.test.js
+++ b/devtools/client/framework/test/jest/components/debug-target-info.test.js
@@ -36,52 +36,52 @@ const TEST_TOOLBOX = {
 
 const TEST_TOOLBOX_NO_NAME = {
   target: {
     url: "http://some.target/without/a/name",
   },
 };
 
 const USB_DEVICE_DESCRIPTION = {
+  brandName: "usbRuntimeBrandName",
+  channel: "release",
   deviceName: "usbDeviceName",
-  icon: "chrome://devtools/skin/images/aboutdebugging-firefox-release.svg",
-  name: "usbRuntimeBrandName",
   version: "1.0.0",
 };
 
 const THIS_FIREFOX_DEVICE_DESCRIPTION = {
-  icon: "chrome://devtools/skin/images/aboutdebugging-firefox-release.svg",
+  brandName: "thisFirefoxRuntimeBrandName",
+  channel: "release",
   version: "1.0.0",
-  name: "thisFirefoxRuntimeBrandName",
 };
 
 const USB_TARGET_INFO = {
   debugTargetData: {
     connectionType: CONNECTION_TYPES.USB,
-    runtimeInfo: USB_DEVICE_DESCRIPTION,
+    deviceDescription: USB_DEVICE_DESCRIPTION,
     targetType: DEBUG_TARGET_TYPES.TAB,
   },
   toolbox: TEST_TOOLBOX,
   L10N: stubL10N,
 };
 
 const THIS_FIREFOX_TARGET_INFO = {
   debugTargetData: {
     connectionType: CONNECTION_TYPES.THIS_FIREFOX,
-    runtimeInfo: THIS_FIREFOX_DEVICE_DESCRIPTION,
+    deviceDescription: THIS_FIREFOX_DEVICE_DESCRIPTION,
     targetType: DEBUG_TARGET_TYPES.TAB,
   },
   toolbox: TEST_TOOLBOX,
   L10N: stubL10N,
 };
 
 const THIS_FIREFOX_NO_NAME_TARGET_INFO = {
   debugTargetData: {
     connectionType: CONNECTION_TYPES.THIS_FIREFOX,
-    runtimeInfo: THIS_FIREFOX_DEVICE_DESCRIPTION,
+    deviceDescription: THIS_FIREFOX_DEVICE_DESCRIPTION,
     targetType: DEBUG_TARGET_TYPES.TAB,
   },
   toolbox: TEST_TOOLBOX_NO_NAME,
   L10N: stubL10N,
 };
 
 describe("DebugTargetInfo component", () => {
   describe("Connection info", () => {
--- a/devtools/client/framework/toolbox.js
+++ b/devtools/client/framework/toolbox.js
@@ -458,17 +458,17 @@ Toolbox.prototype = {
         // Update the URL so that onceDOMReady watch for the right url.
         this._URL = this.win.location.href;
       }
 
       if (this.hostType === Toolbox.HostType.PAGE) {
         // Displays DebugTargetInfo which shows the basic information of debug target,
         // if `about:devtools-toolbox` URL opens directly.
         // DebugTargetInfo requires this._debugTargetData to be populated
-        this._debugTargetData = this._getDebugTargetData();
+        this._debugTargetData = await this._getDebugTargetData();
       }
 
       const domHelper = new DOMHelpers(this.win);
       const domReady = new Promise(resolve => {
         domHelper.onceDOMReady(() => {
           resolve();
         }, this._URL);
       });
@@ -789,29 +789,30 @@ Toolbox.prototype = {
 
   _removeWindowHostShortcuts: function() {
     if (this._windowHostShortcuts) {
       this._windowHostShortcuts.destroy();
       this._windowHostShortcuts = null;
     }
   },
 
-  _getDebugTargetData: function() {
+  _getDebugTargetData: async function() {
     const url = new URL(this.win.location);
     const searchParams = new this.win.URLSearchParams(url.search);
 
     const targetType = searchParams.get("type") || DEBUG_TARGET_TYPES.TAB;
 
+    const deviceFront = await this.target.client.mainRoot.getFront("device");
+    const deviceDescription = await deviceFront.getDescription();
     const remoteId = searchParams.get("remoteId");
-    const runtimeInfo = remoteClientManager.getRuntimeInfoByRemoteId(remoteId);
     const connectionType = remoteClientManager.getConnectionTypeByRemoteId(remoteId);
 
     return {
       connectionType,
-      runtimeInfo,
+      deviceDescription,
       targetType,
     };
   },
 
   _onTargetClosed: async function() {
     const win = this.win; // .destroy() will set this.win to null
 
     // clean up the toolbox
--- a/devtools/client/jar.mn
+++ b/devtools/client/jar.mn
@@ -70,18 +70,16 @@ devtools.jar:
     skin/images/arrowhead-left.svg (themes/images/arrowhead-left.svg)
     skin/images/arrowhead-right.svg (themes/images/arrowhead-right.svg)
     skin/images/arrowhead-down.svg (themes/images/arrowhead-down.svg)
     skin/images/arrowhead-up.svg (themes/images/arrowhead-up.svg)
     skin/images/breadcrumbs-divider.svg (themes/images/breadcrumbs-divider.svg)
     skin/images/checkbox.svg (themes/images/checkbox.svg)
     skin/images/filter-swatch.svg (themes/images/filter-swatch.svg)
     skin/images/aboutdebugging-connect-icon.svg (themes/images/aboutdebugging-connect-icon.svg)
-    skin/images/aboutdebugging-fenix-nightly.svg (themes/images/aboutdebugging-fenix-nightly.svg)
-    skin/images/aboutdebugging-fenix.svg (themes/images/aboutdebugging-fenix.svg)
     skin/images/aboutdebugging-firefox-aurora.svg (themes/images/aboutdebugging-firefox-aurora.svg)
     skin/images/aboutdebugging-firefox-beta.svg (themes/images/aboutdebugging-firefox-beta.svg)
     skin/images/aboutdebugging-firefox-logo.svg (themes/images/aboutdebugging-firefox-logo.svg)
     skin/images/aboutdebugging-firefox-nightly.svg (themes/images/aboutdebugging-firefox-nightly.svg)
     skin/images/aboutdebugging-firefox-release.svg (themes/images/aboutdebugging-firefox-release.svg)
     skin/images/aboutdebugging-globe-icon.svg (themes/images/aboutdebugging-globe-icon.svg)
     skin/images/aboutdebugging-information.svg (themes/images/aboutdebugging-information.svg)
     skin/images/aboutdebugging-process-icon.svg (themes/images/aboutdebugging-process-icon.svg)
--- a/devtools/client/shared/remote-debugging/remote-client-manager.js
+++ b/devtools/client/shared/remote-debugging/remote-client-manager.js
@@ -8,37 +8,31 @@ const { CONNECTION_TYPES } = require("de
 
 /**
  * This class is designed to be a singleton shared by all DevTools to get access to
  * existing clients created for remote debugging.
  */
 class RemoteClientManager {
   constructor() {
     this._clients = new Map();
-    this._runtimeInfoMap = new Map();
     this._onClientClosed = this._onClientClosed.bind(this);
   }
 
   /**
    * Store a remote client that is already connected.
    *
    * @param {String} id
    *        Remote runtime id (see devtools/client/aboutdebugging-new/src/types).
    * @param {String} type
    *        Remote runtime type (see devtools/client/aboutdebugging-new/src/types).
    * @param {DebuggerClient} client
-   * @param {Object} runtimeInfo
-   *        See runtimeInfo type from client/aboutdebugging-new/src/types/runtime.js
    */
-  setClient(id, type, client, runtimeInfo) {
+  setClient(id, type, client) {
     const key = this._getKey(id, type);
     this._clients.set(key, client);
-    if (runtimeInfo) {
-      this._runtimeInfoMap.set(key, runtimeInfo);
-    }
     client.addOneTimeListener("closed", this._onClientClosed);
   }
 
   // See JSDoc for id, type from setClient.
   hasClient(id, type) {
     return this._clients.has(this._getKey(id, type));
   }
 
@@ -67,65 +61,47 @@ class RemoteClientManager {
     return encodeURIComponent(this._getKey(id, type));
   }
 
   /**
    * Retrieve a managed client for a remote id. The remote id should have been generated
    * using getRemoteId.
    */
   getClientByRemoteId(remoteId) {
-    const key = this._getKeyByRemoteId(remoteId);
+    const key = decodeURIComponent(remoteId);
     return this._clients.get(key);
   }
 
   /**
-   * Retrieve the runtime info for a remote id. To display metadata about a runtime, such
-   * as name, device name, version... this runtimeInfo should be used rather than calling
-   * APIs on the client.
-   */
-  getRuntimeInfoByRemoteId(remoteId) {
-    const key = this._getKeyByRemoteId(remoteId);
-    return this._runtimeInfoMap.get(key);
-  }
-
-  /**
    * Retrieve a managed client for a remote id. The remote id should have been generated
    * using getRemoteId.
    */
   getConnectionTypeByRemoteId(remoteId) {
-    const key = this._getKeyByRemoteId(remoteId);
+    if (!remoteId) {
+      return CONNECTION_TYPES.THIS_FIREFOX;
+    }
+
+    const key = decodeURIComponent(remoteId);
     for (const type of Object.values(CONNECTION_TYPES)) {
       if (key.endsWith(type)) {
         return type;
       }
     }
     return CONNECTION_TYPES.UNKNOWN;
   }
 
   _getKey(id, type) {
     return id + "-" + type;
   }
 
-  _getKeyByRemoteId(remoteId) {
-    if (!remoteId) {
-      // If no remote id was provided, return the key corresponding to the local
-      // this-firefox runtime.
-      const { THIS_FIREFOX } = CONNECTION_TYPES;
-      return this._getKey(THIS_FIREFOX, THIS_FIREFOX);
-    }
-
-    return decodeURIComponent(remoteId);
-  }
-
   _removeClientByKey(key) {
     const client = this._clients.get(key);
     if (client) {
       client.removeListener("closed", this._onClientClosed);
       this._clients.delete(key);
-      this._runtimeInfoMap.delete(key);
     }
   }
 
   /**
    * Cleanup all closed clients when a "closed" notification is received from a client.
    */
   _onClientClosed() {
     const closedClientKeys = [...this._clients.keys()].filter(key => {
--- a/devtools/client/shared/remote-debugging/test/unit/test_remote_client_manager.js
+++ b/devtools/client/shared/remote-debugging/test/unit/test_remote_client_manager.js
@@ -6,72 +6,46 @@
 const { remoteClientManager } =
   require("devtools/client/shared/remote-debugging/remote-client-manager");
 const { CONNECTION_TYPES } =
   require("devtools/client/shared/remote-debugging/constants");
 
 add_task(async function testRemoteClientManager() {
   for (const type of Object.values(CONNECTION_TYPES)) {
     const fakeClient = createFakeClient();
-    const runtimeInfo = {};
     const clientId = "clientId";
     const remoteId = remoteClientManager.getRemoteId(clientId, type);
 
     const connectionType = remoteClientManager.getConnectionTypeByRemoteId(remoteId);
     equal(connectionType, type,
       `[${type}]: Correct connection type was returned by getConnectionTypeByRemoteId`);
 
     equal(remoteClientManager.hasClient(clientId, type), false,
       `[${type}]: hasClient returns false if no client was set`);
     equal(remoteClientManager.getClient(clientId, type), null,
       `[${type}]: getClient returns null if no client was set`);
     equal(remoteClientManager.getClientByRemoteId(remoteId), null,
       `[${type}]: getClientByRemoteId returns null if no client was set`);
-    equal(remoteClientManager.getRuntimeInfoByRemoteId(remoteId), null,
-      `[${type}]: getRuntimeInfoByRemoteId returns null if no client was set`);
 
-    remoteClientManager.setClient(clientId, type, fakeClient, runtimeInfo);
+    remoteClientManager.setClient(clientId, type, fakeClient);
     equal(remoteClientManager.hasClient(clientId, type), true,
       `[${type}]: hasClient returns true`);
     equal(remoteClientManager.getClient(clientId, type), fakeClient,
       `[${type}]: getClient returns the correct client`);
     equal(remoteClientManager.getClientByRemoteId(remoteId), fakeClient,
       `[${type}]: getClientByRemoteId returns the correct client`);
-    equal(remoteClientManager.getRuntimeInfoByRemoteId(remoteId), runtimeInfo,
-      `[${type}]: getRuntimeInfoByRemoteId returns the correct object`);
 
     remoteClientManager.removeClient(clientId, type);
     equal(remoteClientManager.hasClient(clientId, type), false,
       `[${type}]: hasClient returns false after removing the client`);
     equal(remoteClientManager.getClient(clientId, type), null,
       `[${type}]: getClient returns null after removing the client`);
     equal(remoteClientManager.getClientByRemoteId(remoteId), null,
       `[${type}]: getClientByRemoteId returns null after removing the client`);
-    equal(remoteClientManager.getRuntimeInfoByRemoteId(), null,
-      `[${type}]: getRuntimeInfoByRemoteId returns null after removing the client`);
   }
-
-  // Test various fallback scenarios for APIs relying on remoteId, when called without a
-  // remoteId, we expect to get the information for the local this-firefox runtime.
-  const { THIS_FIREFOX } = CONNECTION_TYPES;
-  const thisFirefoxClient = createFakeClient();
-  const thisFirefoxInfo = {};
-  remoteClientManager.setClient(THIS_FIREFOX, THIS_FIREFOX, thisFirefoxClient,
-    thisFirefoxInfo);
-
-  equal(remoteClientManager.getClientByRemoteId(), thisFirefoxClient,
-    `[fallback]: getClientByRemoteId returns this-firefox if remoteId is null`);
-  equal(remoteClientManager.getRuntimeInfoByRemoteId(), thisFirefoxInfo,
-    `[fallback]: getRuntimeInfoByRemoteId returns this-firefox if remoteId is null`);
-
-  const otherRemoteId = remoteClientManager.getRemoteId("clientId", CONNECTION_TYPES.USB);
-  equal(remoteClientManager.getClientByRemoteId(otherRemoteId), null,
-    `[fallback]: getClientByRemoteId does not fallback if remoteId is non-null`);
-  equal(remoteClientManager.getRuntimeInfoByRemoteId(otherRemoteId), null,
-    `[fallback]: getRuntimeInfoByRemoteId does not fallback if remoteId is non-null`);
 });
 
 add_task(async function testRemoteClientManagerWithUnknownType() {
   const remoteId = remoteClientManager.getRemoteId("someClientId", "NotARealType");
   const connectionType = remoteClientManager.getConnectionTypeByRemoteId(remoteId);
   equal(connectionType, CONNECTION_TYPES.UNKNOWN,
     `Connection type UNKNOWN was returned by getConnectionTypeByRemoteId`);
 });
deleted file mode 100644
--- a/devtools/client/themes/images/aboutdebugging-fenix-nightly.svg
+++ /dev/null
@@ -1,13 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="26 26 56 56">
-  <defs>
-    <linearGradient id="a" x1="78.92" y1="25.09" x2="37.26" y2="74.45" gradientUnits="userSpaceOnUse">
-      <stop offset="0" stop-color="#88ffd1"/>
-      <stop offset=".04" stop-color="#7bfcd6"/>
-      <stop offset=".13" stop-color="#57f3e2"/>
-      <stop offset=".24" stop-color="#1ee5f5"/>
-      <stop offset=".29" stop-color="#0df"/>
-      <stop offset="1" stop-color="#9059ff"/>
-    </linearGradient>
-  </defs>
-  <path d="M78.12 44.5c-1.19-2.85-3.51-5.74-5.4-6.74a1 1 0 0 0-1 0 .91.91 0 0 0-.39.91c-.79-1-1.62-1.91-2.46-2.86A47.35 47.35 0 0 1 64 29.62c-.19-.31-.39-.61-.58-.93l-.24-.46a4.06 4.06 0 0 1-.3-.76 1 1 0 0 0-.79-.79.81.81 0 0 0-.31 0 .87.87 0 0 0-.38.11 19.31 19.31 0 0 0-9 13.78 9.61 9.61 0 0 0-2.3.66.91.91 0 0 0 .32 1.77.78.78 0 0 0 .36-.08 7.44 7.44 0 0 1 1.87-.52 22.18 22.18 0 0 1 2.29 0h.74l.68.11h.13l.55.13.2.06.55.17h.11l.64.25.16.07.48.22.18.08.6.33c.19.11.37.23.55.35l.18.12.46.33.09.07.53.44.11.09.26.24-.4-.08h-.08l-.36-.06h-1.98l-.41.05a1 1 0 0 0-.74.55.9.9 0 0 0 .44 1.16 9.25 9.25 0 0 1 4.59 10.83c-.08.3-.17.6-.27.88v.05c-.1.27-.21.53-.32.78a.25.25 0 0 0 0 .07 7.55 7.55 0 0 1-.37.69.41.41 0 0 1 0 .09c-.13.21-.27.42-.41.61l-.06.09c-.15.19-.3.38-.45.55l-.07.08c-.16.17-.32.34-.49.49l-.08.07c-.17.16-.35.3-.53.44l-.07.06c-.19.13-.37.26-.57.38h-.07c-.19.12-.39.23-.6.34L58 64l-.68.25-.72.22-.67.14h-.07l-.65.1h-.09l-.64.06h-1.32a10.18 10.18 0 0 1-3-.57l-.68-.28a3.39 3.39 0 0 1-.39-.18 9.69 9.69 0 0 1-5.41-7.26c.26-.64 1.71-3.49 7.38-3.49 1.2 0 3.59-2.3 3.9-3.43v-.28c0-.6-.34-.75-1.67-1.4a21.42 21.42 0 0 1-4.68-2.8l-.27-.26-.34-.33-.29-.29a4.12 4.12 0 0 0-.65-.77 7.34 7.34 0 0 0-.69-.52 10.76 10.76 0 0 1 .05-5.12.89.89 0 0 0-.42-1.1.94.94 0 0 0-.82 0 18.32 18.32 0 0 0-5.33 3.82 20.05 20.05 0 0 1-.32-4.51.71.71 0 0 0 0-.25.9.9 0 0 0-.56-.65c-.23-.1-.56-.23-1.69.54a18.75 18.75 0 0 0-2.58 2.2 22.19 22.19 0 0 0-2.45 2.91 21.89 21.89 0 0 0-3.51 7.88v.18c-.05.26-.23 1.38-.26 1.63-.09.44-.16.91-.23 1.45-.1.72-.16 1.4-.19 2.11v.13a26 26 0 0 0 51.7 4.35c0-.24.06-.48.08-.73v-.25a26.27 26.27 0 0 0-1.72-13zm-18.81-3h-.11c-.21-.09-.43-.17-.64-.24l-.23-.08a5.76 5.76 0 0 0-.59-.18h-.19c-.25-.07-.51-.13-.77-.18h-.15l-.63-.19h-.24l-.65-.07h-.89a18 18 0 0 1 4.51-9.27c0 .08-.05.16-.07.24a1.42 1.42 0 0 0-.07.22 3.57 3.57 0 0 0-.1.35l-.06.21c0 .13-.07.27-.1.4s0 .12 0 .18l-.12.59-.06.37v1.33a.41.41 0 0 0 0 .11v1.36a.31.31 0 0 1 0 .1v1.06c0 .04 0 .31.08.46 0 .16.07.32.11.49v.13c0 .13.07.26.1.39v.11c0 .17.1.33.16.5v.1l.15.41.06.14c.06.15.12.31.19.47.07.17.16.33.24.5v.06zm.49-6.5c0-.2 0-.4.05-.6a.88.88 0 0 0 0-.16c0-.16.05-.32.07-.47s0-.08 0-.12.07-.36.11-.54v-.13c0-.14.07-.28.1-.42s0-.09 0-.14l.15-.49a.14.14 0 0 1 0-.06c0-.14.09-.28.14-.41l.05-.14.14-.36v-.08l.18-.4a.47.47 0 0 1 0-.1 2.59 2.59 0 0 1 .14-.29V30q.09-.18.18-.33v-.06l.14-.25v-.13c0-.06.12.23.2.35l.6 1A49.71 49.71 0 0 0 67.51 37c2.44 2.76 4.75 5.36 6.38 9.35a7.53 7.53 0 0 1 .1.83 1.27 1.27 0 0 1 0 .2v1.9c0 .11 0 .4-.07.6a2.89 2.89 0 0 1 0 .29c0 .28-.09.57-.15.85-.06.3-.14.59-.22.87l-.09.28c-.06.2-.12.4-.19.6l-.12.31c-.07.19-.15.38-.23.57s-.09.2-.13.29-.21.44-.32.66l-.09.19c-.15.28-.3.55-.47.82l-.12.21c-.13.2-.26.41-.4.61l-.19.27-.4.54a2.47 2.47 0 0 1-.21.27c-.14.19-.3.37-.46.56l-.18.21a.23.23 0 0 1-.07.07c0-.18 0-.37.07-.55s0-.1 0-.15v-.47a.57.57 0 0 1 0-.13v-1.99a.19.19 0 0 1 0-.08c0-.18 0-.37-.07-.55s0-.11 0-.16a11.5 11.5 0 0 0-.32-1.27.75.75 0 0 0 0-.16c0-.19-.11-.38-.17-.56v-.09q-.1-.31-.24-.63l-.15-.1c-.07-.18-.15-.35-.24-.53l-.06-.12-.34-.62-.07-.12c-.11-.17-.21-.34-.33-.51l-.1-.14c-.14-.2-.28-.4-.44-.59l-.07-.08-.44-.51a1.85 1.85 0 0 1-.14-.14c-.18-.19-.37-.38-.57-.56l-.2-.16h-.05l-.06-.05v-.06c-.13-.23-.28-.47-.43-.69a.86.86 0 0 0-.07-.1c-.16-.23-.32-.46-.5-.69l-.06-.07c-.18-.24-.37-.47-.58-.7-.21-.24-.43-.47-.67-.71A11.58 11.58 0 0 1 59.8 35zm1.4 29.21l.66-.57.06-.06c.2-.2.4-.4.58-.6l.06-.08c.18-.2.35-.41.51-.62l.06-.09c.16-.21.31-.43.45-.65l.05-.08q.21-.34.39-.69a.25.25 0 0 0 0-.07 7.79 7.79 0 0 0 .38-.7v-.06c.1-.25.2-.5.29-.75q.13-.39.24-.78a11.22 11.22 0 0 0-2.86-11 8.1 8.1 0 0 1 2.44 1.12l.09.07c.11.09.22.17.3.25l.46.45.14.14.27.31.23.25.22.28a1.43 1.43 0 0 1 .14.2l.19.27.13.2c.06.09.12.18.17.27a2.12 2.12 0 0 1 .11.21l.15.28.1.21.12.27.09.21c0 .09.07.19.11.28s0 .14.07.2.06.19.09.29a1.17 1.17 0 0 1 .06.2c0 .1.06.2.08.29s0 .13 0 .19l.06.32v.16l.06.39v.55a3 3 0 0 1 0 .42.57.57 0 0 0 0 .13v.76a.81.81 0 0 1 0 .16 2.44 2.44 0 0 1 0 .27v.16a2.28 2.28 0 0 0 0 .26v.4A.59.59 0 0 1 68 58v.25a.5.5 0 0 0 0 .12v.26a.36.36 0 0 1 0 .1 1.84 1.84 0 0 1-.05.25V59l-.06.26v.05c-.1.41-.2.76-.29 1l-.06.18c0 .05 0 .09-.05.13l-.4.31c-.12.09-.24.19-.36.27a4.73 4.73 0 0 1-.46.32l-.33.24-.47.3-.32.2-.48.28-.3.18-.48.25-.29.16-.49.23-.28.13-.44.18-.83.33-.23.08zM51.39 51l-.18.12-.15.07h-1.14l-.78.07H49c-.27 0-.52.07-.77.12h-.19l-.62.14h-.1c-.22.06-.44.12-.64.19h-.16l-.5.19h-.1l-.53.25-.12.06-.4.22-.1.06a4.38 4.38 0 0 0-.42.28l-.09.06-.32.24-.08.07-.34.29-.06.06-.25.25-.06.07c-.09.1-.18.19-.26.29v.05l-.19.24v.07a2.11 2.11 0 0 0-.18.27l-.14.22v-.48a.25.25 0 0 0 0-.08v-1.46a.88.88 0 0 0-.23-.71.92.92 0 0 0-.68-.3 5.48 5.48 0 0 1-4.71-2.47 8.8 8.8 0 0 1 7.61.11l.5.22.19.07.32.13.22.07.27.1.23.07.27.07a1.55 1.55 0 0 0 .23.06l.25.07.24.05h4.52zm-7.07-11.81a12.42 12.42 0 0 0 0 2.72h-.05q-.3-.11-.6-.18h-.11l-.56-.19h-.07c-.45-.08-.89-.14-1.3-.19a17.12 17.12 0 0 1 2.69-2.16zM30 54.53a8.81 8.81 0 0 1 0-2.42c.07-.5.14-1 .22-1.38v-.06c0-.25.19-1.31.23-1.48v-.16a20 20 0 0 1 3.2-7.19l.06-.09A20.82 20.82 0 0 1 36 39.06a18.77 18.77 0 0 1 1.7-1.52c0 1.66.23 4.09 1.09 5.17a.91.91 0 0 0 .21.18l.1.06a.6.6 0 0 0 .19.06.65.65 0 0 0 .2 0h1.46a8.69 8.69 0 0 1 3.65.99l.5.33c.23.16.4.28.58.43s.7.65 1.41 1.34l.26.26.37.33.08.07.41.31.08.06.4.28h.09l.46.3.13.07.48.29.47.26.12.07.48.25h.1l.44.23H49c-.26 0-.53 0-.8-.07h-.99l-.21.01h-.18l-.25-.07-.18-.06-.26-.09-.17-.05-.29-.12h-.15l-.52-.28a10.36 10.36 0 0 0-10.16.45.89.89 0 0 0-.31 1.07 7.28 7.28 0 0 0 5.82 4.24c-.12 4.66 2.75 9 7.52 11.29l.33.16a14.56 14.56 0 0 0 7.17 1.66h.22a19.62 19.62 0 0 0 7.73-1.74l.19-.09c.21-.1.42-.19.63-.3l.34-.17.51-.27.45-.26L66 64l.52-.33.37-.24.61-.43.29-.21c.31-.22.61-.46.92-.7l.1-.11c.26-.22.52-.44.77-.67l.17-.16q.41-.36.78-.75l.11-.11c.24-.25.46-.5.69-.75l.09-.1c.23-.27.45-.54.67-.82a1.83 1.83 0 0 1 .13-.16l.61-.84.07-.11c.19-.28.38-.57.55-.86a.43.43 0 0 0 0-.07c.18-.3.35-.6.51-.91 0 0 .05-.09.07-.14.16-.3.31-.62.45-.93v-.07q.21-.5.39-1 .13-.34.24-.69v2.4a1.8 1.8 0 0 1 0 .22c0 .3-.06.6-.09.89v.18c0 .25-.07.51-.12.76v.19c-.05.29-.11.57-.17.84v.19c-.06.24-.11.48-.17.71a1.24 1.24 0 0 0 0 .16c-.08.26-.15.52-.23.78l-.06.18c-.07.23-.15.46-.23.68v.09c-.09.24-.18.48-.28.71l-.06.16c-.1.23-.2.46-.3.67-2.72 5.8-9.38 11.9-19.9 11.6-11.61-.35-21.6-8.8-23.45-19.68zm48 2.76v.26c0 .23 0 .46-.08.65a24.25 24.25 0 0 1-45.65 6.4l.15.2.15.23.52.69.07.09.6.74.18.21.51.58.15.16q.33.36.66.69l.18.17.55.53.2.18c.23.22.47.43.71.63l.13.11q.31.27.63.51l.23.18.7.52.09.07.79.54.24.15c.21.15.43.28.66.42a1.18 1.18 0 0 0 .19.11c.27.17.55.33.83.48l.22.12.68.35.24.12.88.41.16.07.76.32.26.1.88.32h.05c.31.11.63.21.94.3l.27.08.79.22h.19l1 .22.24.05.79.14h.25c.33 0 .66.1 1 .13h.17l.85.08h.28q.51 0 1 .06H54a22.6 22.6 0 0 0 19.56-10.17 22.29 22.29 0 0 0 1.28-2.32 23.44 23.44 0 0 0 .94-17.16c0-.1-.06-.2-.1-.3a23.75 23.75 0 0 0-.9-3.66 15.22 15.22 0 0 1 1.65 2.93A24.39 24.39 0 0 1 78 57.29z" fill="url(#a)" data-name="Foreground Layer"/>
-</svg>
deleted file mode 100644
--- a/devtools/client/themes/images/aboutdebugging-fenix.svg
+++ /dev/null
@@ -1,12 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="26 26 56 56">
-  <defs>
-    <linearGradient id="a" x1="78.92" y1="25.09" x2="37.26" y2="74.45" gradientUnits="userSpaceOnUse">
-      <stop offset=".09" stop-color="#ff980e"/>
-      <stop offset=".18" stop-color="#ff8b16"/>
-      <stop offset=".36" stop-color="#ff672a"/>
-      <stop offset=".56" stop-color="#ff3647"/>
-      <stop offset=".94" stop-color="#e31587"/>
-    </linearGradient>
-  </defs>
-  <path d="M78.12 44.5c-1.19-2.85-3.51-5.74-5.4-6.74a1 1 0 0 0-1 0 .91.91 0 0 0-.39.91c-.79-1-1.62-1.91-2.46-2.86A47.35 47.35 0 0 1 64 29.62c-.19-.31-.39-.61-.58-.93l-.24-.46a4.06 4.06 0 0 1-.3-.76 1 1 0 0 0-.79-.79.81.81 0 0 0-.31 0 .87.87 0 0 0-.38.11 19.31 19.31 0 0 0-9 13.78 9.61 9.61 0 0 0-2.3.66.91.91 0 0 0 .32 1.77.78.78 0 0 0 .36-.08 7.44 7.44 0 0 1 1.87-.52 22.18 22.18 0 0 1 2.29 0h.74l.68.11h.13l.55.13.2.06.55.17h.11l.64.25.16.07.48.22.18.08.6.33c.19.11.37.23.55.35l.18.12.46.33.09.07.53.44.11.09.26.24-.4-.08h-.08l-.36-.06h-1.98l-.41.05a1 1 0 0 0-.74.55.9.9 0 0 0 .44 1.16 9.25 9.25 0 0 1 4.59 10.83c-.08.3-.17.6-.27.88v.05c-.1.27-.21.53-.32.78a.25.25 0 0 0 0 .07 7.55 7.55 0 0 1-.37.69.41.41 0 0 1 0 .09c-.13.21-.27.42-.41.61l-.06.09c-.15.19-.3.38-.45.55l-.07.08c-.16.17-.32.34-.49.49l-.08.07c-.17.16-.35.3-.53.44l-.07.06c-.19.13-.37.26-.57.38h-.07c-.19.12-.39.23-.6.34L58 64l-.68.25-.72.22-.67.14h-.07l-.65.1h-.09l-.64.06h-1.32a10.18 10.18 0 0 1-3-.57l-.68-.28a3.39 3.39 0 0 1-.39-.18 9.69 9.69 0 0 1-5.41-7.26c.26-.64 1.71-3.49 7.38-3.49 1.2 0 3.59-2.3 3.9-3.43v-.28c0-.6-.34-.75-1.67-1.4a21.42 21.42 0 0 1-4.68-2.8l-.27-.26-.34-.33-.29-.29a4.12 4.12 0 0 0-.65-.77 7.34 7.34 0 0 0-.69-.52 10.76 10.76 0 0 1 .05-5.12.89.89 0 0 0-.42-1.1.94.94 0 0 0-.82 0 18.32 18.32 0 0 0-5.33 3.82 20.05 20.05 0 0 1-.32-4.51.71.71 0 0 0 0-.25.9.9 0 0 0-.56-.65c-.23-.1-.56-.23-1.69.54a18.75 18.75 0 0 0-2.58 2.2 22.19 22.19 0 0 0-2.45 2.91 21.89 21.89 0 0 0-3.51 7.88v.18c-.05.26-.23 1.38-.26 1.63-.09.44-.16.91-.23 1.45-.1.72-.16 1.4-.19 2.11v.13a26 26 0 0 0 51.7 4.35c0-.24.06-.48.08-.73v-.25a26.27 26.27 0 0 0-1.72-13zm-18.81-3h-.11c-.21-.09-.43-.17-.64-.24l-.23-.08a5.76 5.76 0 0 0-.59-.18h-.19c-.25-.07-.51-.13-.77-.18h-.15l-.63-.19h-.24l-.65-.07h-.89a18 18 0 0 1 4.51-9.27c0 .08-.05.16-.07.24a1.42 1.42 0 0 0-.07.22 3.57 3.57 0 0 0-.1.35l-.06.21c0 .13-.07.27-.1.4s0 .12 0 .18l-.12.59-.06.37v1.33a.41.41 0 0 0 0 .11v1.36a.31.31 0 0 1 0 .1v1.06c0 .04 0 .31.08.46 0 .16.07.32.11.49v.13c0 .13.07.26.1.39v.11c0 .17.1.33.16.5v.1l.15.41.06.14c.06.15.12.31.19.47.07.17.16.33.24.5v.06zm.49-6.5c0-.2 0-.4.05-.6a.88.88 0 0 0 0-.16c0-.16.05-.32.07-.47s0-.08 0-.12.07-.36.11-.54v-.13c0-.14.07-.28.1-.42s0-.09 0-.14l.15-.49a.14.14 0 0 1 0-.06c0-.14.09-.28.14-.41l.05-.14.14-.36v-.08l.18-.4a.47.47 0 0 1 0-.1 2.59 2.59 0 0 1 .14-.29V30q.09-.18.18-.33v-.06l.14-.25v-.13c0-.06.12.23.2.35l.6 1A49.71 49.71 0 0 0 67.51 37c2.44 2.76 4.75 5.36 6.38 9.35a7.53 7.53 0 0 1 .1.83 1.27 1.27 0 0 1 0 .2v1.9c0 .11 0 .4-.07.6a2.89 2.89 0 0 1 0 .29c0 .28-.09.57-.15.85-.06.3-.14.59-.22.87l-.09.28c-.06.2-.12.4-.19.6l-.12.31c-.07.19-.15.38-.23.57s-.09.2-.13.29-.21.44-.32.66l-.09.19c-.15.28-.3.55-.47.82l-.12.21c-.13.2-.26.41-.4.61l-.19.27-.4.54a2.47 2.47 0 0 1-.21.27c-.14.19-.3.37-.46.56l-.18.21a.23.23 0 0 1-.07.07c0-.18 0-.37.07-.55s0-.1 0-.15v-.47a.57.57 0 0 1 0-.13v-1.99a.19.19 0 0 1 0-.08c0-.18 0-.37-.07-.55s0-.11 0-.16a11.5 11.5 0 0 0-.32-1.27.75.75 0 0 0 0-.16c0-.19-.11-.38-.17-.56v-.09q-.1-.31-.24-.63l-.15-.1c-.07-.18-.15-.35-.24-.53l-.06-.12-.34-.62-.07-.12c-.11-.17-.21-.34-.33-.51l-.1-.14c-.14-.2-.28-.4-.44-.59l-.07-.08-.44-.51a1.85 1.85 0 0 1-.14-.14c-.18-.19-.37-.38-.57-.56l-.2-.16h-.05l-.06-.05v-.06c-.13-.23-.28-.47-.43-.69a.86.86 0 0 0-.07-.1c-.16-.23-.32-.46-.5-.69l-.06-.07c-.18-.24-.37-.47-.58-.7-.21-.24-.43-.47-.67-.71A11.58 11.58 0 0 1 59.8 35zm1.4 29.21l.66-.57.06-.06c.2-.2.4-.4.58-.6l.06-.08c.18-.2.35-.41.51-.62l.06-.09c.16-.21.31-.43.45-.65l.05-.08q.21-.34.39-.69a.25.25 0 0 0 0-.07 7.79 7.79 0 0 0 .38-.7v-.06c.1-.25.2-.5.29-.75q.13-.39.24-.78a11.22 11.22 0 0 0-2.86-11 8.1 8.1 0 0 1 2.44 1.12l.09.07c.11.09.22.17.3.25l.46.45.14.14.27.31.23.25.22.28a1.43 1.43 0 0 1 .14.2l.19.27.13.2c.06.09.12.18.17.27a2.12 2.12 0 0 1 .11.21l.15.28.1.21.12.27.09.21c0 .09.07.19.11.28s0 .14.07.2.06.19.09.29a1.17 1.17 0 0 1 .06.2c0 .1.06.2.08.29s0 .13 0 .19l.06.32v.16l.06.39v.55a3 3 0 0 1 0 .42.57.57 0 0 0 0 .13v.76a.81.81 0 0 1 0 .16 2.44 2.44 0 0 1 0 .27v.16a2.28 2.28 0 0 0 0 .26v.4A.59.59 0 0 1 68 58v.25a.5.5 0 0 0 0 .12v.26a.36.36 0 0 1 0 .1 1.84 1.84 0 0 1-.05.25V59l-.06.26v.05c-.1.41-.2.76-.29 1l-.06.18c0 .05 0 .09-.05.13l-.4.31c-.12.09-.24.19-.36.27a4.73 4.73 0 0 1-.46.32l-.33.24-.47.3-.32.2-.48.28-.3.18-.48.25-.29.16-.49.23-.28.13-.44.18-.83.33-.23.08zM51.39 51l-.18.12-.15.07h-1.14l-.78.07H49c-.27 0-.52.07-.77.12h-.19l-.62.14h-.1c-.22.06-.44.12-.64.19h-.16l-.5.19h-.1l-.53.25-.12.06-.4.22-.1.06a4.38 4.38 0 0 0-.42.28l-.09.06-.32.24-.08.07-.34.29-.06.06-.25.25-.06.07c-.09.1-.18.19-.26.29v.05l-.19.24v.07a2.11 2.11 0 0 0-.18.27l-.14.22v-.48a.25.25 0 0 0 0-.08v-1.46a.88.88 0 0 0-.23-.71.92.92 0 0 0-.68-.3 5.48 5.48 0 0 1-4.71-2.47 8.8 8.8 0 0 1 7.61.11l.5.22.19.07.32.13.22.07.27.1.23.07.27.07a1.55 1.55 0 0 0 .23.06l.25.07.24.05h4.52zm-7.07-11.81a12.42 12.42 0 0 0 0 2.72h-.05q-.3-.11-.6-.18h-.11l-.56-.19h-.07c-.45-.08-.89-.14-1.3-.19a17.12 17.12 0 0 1 2.69-2.16zM30 54.53a8.81 8.81 0 0 1 0-2.42c.07-.5.14-1 .22-1.38v-.06c0-.25.19-1.31.23-1.48v-.16a20 20 0 0 1 3.2-7.19l.06-.09A20.82 20.82 0 0 1 36 39.06a18.77 18.77 0 0 1 1.7-1.52c0 1.66.23 4.09 1.09 5.17a.91.91 0 0 0 .21.18l.1.06a.6.6 0 0 0 .19.06.65.65 0 0 0 .2 0h1.46a8.69 8.69 0 0 1 3.65.99l.5.33c.23.16.4.28.58.43s.7.65 1.41 1.34l.26.26.37.33.08.07.41.31.08.06.4.28h.09l.46.3.13.07.48.29.47.26.12.07.48.25h.1l.44.23H49c-.26 0-.53 0-.8-.07h-.99l-.21.01h-.18l-.25-.07-.18-.06-.26-.09-.17-.05-.29-.12h-.15l-.52-.28a10.36 10.36 0 0 0-10.16.45.89.89 0 0 0-.31 1.07 7.28 7.28 0 0 0 5.82 4.24c-.12 4.66 2.75 9 7.52 11.29l.33.16a14.56 14.56 0 0 0 7.17 1.66h.22a19.62 19.62 0 0 0 7.73-1.74l.19-.09c.21-.1.42-.19.63-.3l.34-.17.51-.27.45-.26L66 64l.52-.33.37-.24.61-.43.29-.21c.31-.22.61-.46.92-.7l.1-.11c.26-.22.52-.44.77-.67l.17-.16q.41-.36.78-.75l.11-.11c.24-.25.46-.5.69-.75l.09-.1c.23-.27.45-.54.67-.82a1.83 1.83 0 0 1 .13-.16l.61-.84.07-.11c.19-.28.38-.57.55-.86a.43.43 0 0 0 0-.07c.18-.3.35-.6.51-.91 0 0 .05-.09.07-.14.16-.3.31-.62.45-.93v-.07q.21-.5.39-1 .13-.34.24-.69v2.4a1.8 1.8 0 0 1 0 .22c0 .3-.06.6-.09.89v.18c0 .25-.07.51-.12.76v.19c-.05.29-.11.57-.17.84v.19c-.06.24-.11.48-.17.71a1.24 1.24 0 0 0 0 .16c-.08.26-.15.52-.23.78l-.06.18c-.07.23-.15.46-.23.68v.09c-.09.24-.18.48-.28.71l-.06.16c-.1.23-.2.46-.3.67-2.72 5.8-9.38 11.9-19.9 11.6-11.61-.35-21.6-8.8-23.45-19.68zm48 2.76v.26c0 .23 0 .46-.08.65a24.25 24.25 0 0 1-45.65 6.4l.15.2.15.23.52.69.07.09.6.74.18.21.51.58.15.16q.33.36.66.69l.18.17.55.53.2.18c.23.22.47.43.71.63l.13.11q.31.27.63.51l.23.18.7.52.09.07.79.54.24.15c.21.15.43.28.66.42a1.18 1.18 0 0 0 .19.11c.27.17.55.33.83.48l.22.12.68.35.24.12.88.41.16.07.76.32.26.1.88.32h.05c.31.11.63.21.94.3l.27.08.79.22h.19l1 .22.24.05.79.14h.25c.33 0 .66.1 1 .13h.17l.85.08h.28q.51 0 1 .06H54a22.6 22.6 0 0 0 19.56-10.17 22.29 22.29 0 0 0 1.28-2.32 23.44 23.44 0 0 0 .94-17.16c0-.1-.06-.2-.1-.3a23.75 23.75 0 0 0-.9-3.66 15.22 15.22 0 0 1 1.65 2.93A24.39 24.39 0 0 1 78 57.29z" fill="url(#a)" data-name="Foreground Layer"/>
-</svg>
--- a/devtools/shared/adb/adb-runtime.js
+++ b/devtools/shared/adb/adb-runtime.js
@@ -1,81 +1,39 @@
 /* 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 { RuntimeTypes } = require("devtools/client/webide/modules/runtime-types");
 const { prepareTCPConnection } = require("devtools/shared/adb/commands/index");
-const { shell } = require("devtools/shared/adb/commands/index");
 
 class AdbRuntime {
   constructor(adbDevice, socketPath) {
     this.type = RuntimeTypes.USB;
 
     this._adbDevice = adbDevice;
     this._socketPath = socketPath;
   }
 
-  async init() {
-    const packageName = this._packageName();
-    const query = `dumpsys package ${packageName} | grep versionName`;
-    const versionNameString = await shell(this._adbDevice.id, query);
-    const matches = versionNameString.match(/versionName=([\d.]+)/);
-    if (matches && matches[1]) {
-      this._versionName = matches[1];
-    }
-  }
-
   get id() {
     return this._adbDevice.id + "|" + this._socketPath;
   }
 
-  get isFenix() {
-    return this._packageName().includes("org.mozilla.fenix");
-  }
-
   get deviceId() {
     return this._adbDevice.id;
   }
 
   get deviceName() {
     return this._adbDevice.name;
   }
 
-  get versionName() {
-    return this._versionName;
-  }
-
   get shortName() {
-    const packageName = this._packageName();
-
-    switch (packageName) {
-      case "org.mozilla.firefox":
-        return "Firefox";
-      case "org.mozilla.firefox_beta":
-        return "Firefox Beta";
-      case "org.mozilla.fennec":
-      case "org.mozilla.fennec_aurora":
-        // This package name is now the one for Firefox Nightly distributed
-        // through the Google Play Store since "dawn project"
-        // cf. https://bugzilla.mozilla.org/show_bug.cgi?id=1357351#c8
-        return "Firefox Nightly";
-      case "org.mozilla.fenix":
-        // The current Nightly build for Fenix is available under this package name
-        // but the official packages will use fenix, fenix.beta and fenix.nightly.
-        return "Firefox Preview";
-      case "org.mozilla.fenix.beta":
-        return "Firefox Preview Beta";
-      case "org.mozilla.fenix.nightly":
-        return "Firefox Preview Nightly";
-      default:
-        return "Firefox Custom";
-    }
+    return `Firefox ${this._channel()}`;
   }
 
   get socketPath() {
     return this._socketPath;
   }
 
   get name() {
     return `${this.shortName} on Android (${this.deviceName})`;
@@ -84,16 +42,35 @@ class AdbRuntime {
   connect(connection) {
     return prepareTCPConnection(this.deviceId, this._socketPath).then(port => {
       connection.host = "localhost";
       connection.port = port;
       connection.connect();
     });
   }
 
+  _channel() {
+    const packageName = this._packageName();
+
+    switch (packageName) {
+      case "org.mozilla.firefox":
+        return "";
+      case "org.mozilla.firefox_beta":
+        return "Beta";
+      case "org.mozilla.fennec":
+      case "org.mozilla.fennec_aurora":
+        // This package name is now the one for Firefox Nightly distributed
+        // through the Google Play Store since "dawn project"
+        // cf. https://bugzilla.mozilla.org/show_bug.cgi?id=1357351#c8
+        return "Nightly";
+      default:
+        return "Custom";
+    }
+  }
+
   _packageName() {
     // If using abstract socket address, it is "@org.mozilla.firefox/..."
     // If using path base socket, it is "/data/data/<package>...""
     // Until Fennec 62 only supports path based UNIX domain socket, but
     // Fennec 63+ supports both path based and abstract socket.
     return this._socketPath.startsWith("@") ?
       this._socketPath.substr(1).split("/")[0] :
       this._socketPath.split("/")[3];
--- a/devtools/shared/adb/adb.js
+++ b/devtools/shared/adb/adb.js
@@ -129,19 +129,13 @@ class Adb extends EventEmitter {
   }
 
   _onNoDevicesDetected() {
     this.updateRuntimes();
   }
 
   async _getDeviceRuntimes(device) {
     const socketPaths = [...await device.getRuntimeSocketPaths()];
-    const runtimes = [];
-    for (const socketPath of socketPaths) {
-      const runtime = new AdbRuntime(device, socketPath);
-      await runtime.init();
-      runtimes.push(runtime);
-    }
-    return runtimes;
+    return socketPaths.map(socketPath => new AdbRuntime(device, socketPath));
   }
 }
 
 exports.adb = new Adb();