Bug 1496025 - Remove Promises actor r=gl
☠☠ backed out by 632c0d2d8c24 ☠ ☠
authorAlexandre Poirot <poirot.alex@gmail.com>
Mon, 08 Oct 2018 11:12:40 +0000
changeset 495711 c9a6fdac66bb16e6a5cff14ecf2a27514ef4df88
parent 495710 0e28323e25ef72bc60ce7238f982d071feb6f509
child 495712 1292fd4850a754a543f04b3b5f399f2b73597d23
push id9984
push userffxbld-merge
push dateMon, 15 Oct 2018 21:07:35 +0000
treeherdermozilla-beta@183d27ea8570 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersgl
bugs1496025
milestone64.0a1
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
Bug 1496025 - Remove Promises actor r=gl MozReview-Commit-ID: 55Y9FrpXCL1 Differential Revision: https://phabricator.services.mozilla.com/D7689
devtools/client/debugger/test/mochitest/browser2.ini
devtools/client/debugger/test/mochitest/browser_dbg_promises-allocation-stack.js
devtools/client/debugger/test/mochitest/browser_dbg_promises-chrome-allocation-stack.js
devtools/client/debugger/test/mochitest/browser_dbg_promises-fulfillment-stack.js
devtools/client/debugger/test/mochitest/browser_dbg_promises-rejection-stack.js
devtools/server/actors/moz.build
devtools/server/actors/promises.js
devtools/server/actors/utils/actor-registry.js
devtools/server/tests/unit/test_promises_actor_attach.js
devtools/server/tests/unit/test_promises_actor_exist.js
devtools/server/tests/unit/test_promises_actor_list_promises.js
devtools/server/tests/unit/test_promises_actor_onnewpromise.js
devtools/server/tests/unit/test_promises_actor_onpromisesettled.js
devtools/server/tests/unit/test_promises_client_getdependentpromises.js
devtools/server/tests/unit/test_promises_object_creationtimestamp.js
devtools/server/tests/unit/test_promises_object_timetosettle-01.js
devtools/server/tests/unit/test_promises_object_timetosettle-02.js
devtools/server/tests/unit/xpcshell.ini
devtools/shared/fronts/moz.build
devtools/shared/fronts/promises.js
devtools/shared/specs/index.js
devtools/shared/specs/moz.build
devtools/shared/specs/promises.js
--- a/devtools/client/debugger/test/mochitest/browser2.ini
+++ b/devtools/client/debugger/test/mochitest/browser2.ini
@@ -132,28 +132,16 @@ uses-unsafe-cpows = true
 skip-if = e10s && debug
 [browser_dbg_paused-keybindings.js]
 skip-if = e10s
 [browser_dbg_post-page.js]
 uses-unsafe-cpows = true
 [browser_dbg_progress-listener-bug.js]
 uses-unsafe-cpows = true
 skip-if = e10s && debug
-[browser_dbg_promises-allocation-stack.js]
-uses-unsafe-cpows = true
-skip-if = e10s && debug
-[browser_dbg_promises-chrome-allocation-stack.js]
-uses-unsafe-cpows = true
-skip-if = true # Bug 1177730
-[browser_dbg_promises-fulfillment-stack.js]
-uses-unsafe-cpows = true
-skip-if = e10s && debug
-[browser_dbg_promises-rejection-stack.js]
-uses-unsafe-cpows = true
-skip-if = e10s && debug
 [browser_dbg_sources-cache.js]
 uses-unsafe-cpows = true
 [browser_dbg_sources-iframe-reload.js]
 uses-unsafe-cpows = true
 skip-if = (os == "linux" && debug && bits == 64) #Bug 1455225, disable on Linux x64 debug for frequent failures
 [browser_dbg_sources-bookmarklet.js]
 uses-unsafe-cpows = true
 skip-if = e10s && debug
deleted file mode 100644
--- a/devtools/client/debugger/test/mochitest/browser_dbg_promises-allocation-stack.js
+++ /dev/null
@@ -1,87 +0,0 @@
-/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
-/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
-/* Any copyright is dedicated to the Public Domain.
- * http://creativecommons.org/publicdomain/zero/1.0/ */
-
-/**
- * Test that we can get a stack to a promise's allocation point.
- */
-
-"use strict";
-
-const TAB_URL = EXAMPLE_URL + "doc_promise-get-allocation-stack.html";
-const { PromisesFront } = require("devtools/shared/fronts/promises");
-var EventEmitter = require("devtools/shared/event-emitter");
-
-function test() {
-  Task.spawn(function* () {
-    DebuggerServer.init();
-    DebuggerServer.registerAllActors();
-
-    let options = {
-      source: TAB_URL,
-      line: 1
-    };
-    const [ tab, panel ] = yield initDebugger(TAB_URL, options);
-
-    let client = new DebuggerClient(DebuggerServer.connectPipe());
-    yield connect(client);
-
-    let { tabs } = yield listTabs(client);
-    let targetTab = findTab(tabs, TAB_URL);
-    yield attachTarget(client, targetTab);
-
-    yield testGetAllocationStack(client, targetTab, tab);
-
-    yield close(client);
-    yield closeDebuggerAndFinish(panel);
-  }).catch(error => {
-    ok(false, "Got an error: " + error.message + "\n" + error.stack);
-  });
-}
-
-function* testGetAllocationStack(client, form, tab) {
-  let front = PromisesFront(client, form);
-
-  yield front.attach();
-  yield front.listPromises();
-
-  // Get the grip for promise p
-  let onNewPromise = new Promise(resolve => {
-    EventEmitter.on(front, "new-promises", promises => {
-      for (let p of promises) {
-        if (p.preview.ownProperties.name &&
-            p.preview.ownProperties.name.value === "p") {
-          resolve(p);
-        }
-      }
-    });
-  });
-
-  callInTab(tab, "makePromises");
-
-  let grip = yield onNewPromise;
-  ok(grip, "Found our promise p");
-
-  let objectClient = new ObjectClient(client, grip);
-  ok(objectClient, "Got Object Client");
-
-  yield new Promise(resolve => {
-    objectClient.getPromiseAllocationStack(response => {
-      ok(response.allocationStack.length, "Got promise allocation stack.");
-
-      for (let stack of response.allocationStack) {
-        is(stack.source.url, TAB_URL, "Got correct source URL.");
-        is(stack.functionDisplayName, "makePromises",
-           "Got correct function display name.");
-        is(typeof stack.line, "number", "Expect stack line to be a number.");
-        is(typeof stack.column, "number",
-           "Expect stack column to be a number.");
-      }
-
-      resolve();
-    });
-  });
-
-  yield front.detach();
-}
deleted file mode 100644
--- a/devtools/client/debugger/test/mochitest/browser_dbg_promises-chrome-allocation-stack.js
+++ /dev/null
@@ -1,100 +0,0 @@
-/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
-/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
-/* Any copyright is dedicated to the Public Domain.
- * http://creativecommons.org/publicdomain/zero/1.0/ */
-
-/**
- * Test that we can get a stack to a promise's allocation point in the chrome
- * process.
- */
-
-"use strict";
-
-const SOURCE_URL = "browser_dbg_promises-chrome-allocation-stack.js";
-const PromisesFront = require("devtools/shared/fronts/promises");
-var EventEmitter = require("devtools/shared/event-emitter");
-
-const STACK_DATA = [
-  { functionDisplayName: "test/</<" },
-  { functionDisplayName: "testGetAllocationStack" },
-];
-
-function test() {
-  Task.spawn(function* () {
-    requestLongerTimeout(10);
-
-    DebuggerServer.init();
-    DebuggerServer.registerAllActors();
-    DebuggerServer.allowChromeProcess = true;
-
-    let client = new DebuggerClient(DebuggerServer.connectPipe());
-    yield connect(client);
-    let chrome = yield client.getProcess();
-    let [, tabClient] = yield attachTarget(client, chrome.form);
-    yield tabClient.attachThread();
-
-    yield testGetAllocationStack(client, chrome.form, () => {
-      let p = new Promise(() => {});
-      p.name = "p";
-      let q = p.then();
-      q.name = "q";
-      let r = p.catch(() => {});
-      r.name = "r";
-    });
-
-    yield close(client);
-    finish();
-  }).catch(error => {
-    ok(false, "Got an error: " + error.message + "\n" + error.stack);
-  });
-}
-
-function* testGetAllocationStack(client, form, makePromises) {
-  let front = PromisesFront(client, form);
-
-  yield front.attach();
-  yield front.listPromises();
-
-  // Get the grip for promise p
-  let onNewPromise = new Promise(resolve => {
-    EventEmitter.on(front, "new-promises", promises => {
-      for (let p of promises) {
-        if (p.preview.ownProperties.name &&
-            p.preview.ownProperties.name.value === "p") {
-          resolve(p);
-        }
-      }
-    });
-  });
-
-  makePromises();
-
-  let grip = yield onNewPromise;
-  ok(grip, "Found our promise p");
-
-  let objectClient = new ObjectClient(client, grip);
-  ok(objectClient, "Got Object Client");
-
-  yield new Promise(resolve => {
-    objectClient.getPromiseAllocationStack(response => {
-      ok(response.allocationStack.length, "Got promise allocation stack.");
-
-      for (let i = 0; i < STACK_DATA.length; i++) {
-        let data = STACK_DATA[i];
-        let stack = response.allocationStack[i];
-
-        ok(stack.source.url.startsWith("chrome:"), "Got a chrome source URL");
-        ok(stack.source.url.endsWith(SOURCE_URL), "Got correct source URL.");
-        is(stack.functionDisplayName, data.functionDisplayName,
-           "Got correct function display name.");
-        is(typeof stack.line, "number", "Expect stack line to be a number.");
-        is(typeof stack.column, "number",
-           "Expect stack column to be a number.");
-      }
-
-      resolve();
-    });
-  });
-
-  yield front.detach();
-}
deleted file mode 100644
--- a/devtools/client/debugger/test/mochitest/browser_dbg_promises-fulfillment-stack.js
+++ /dev/null
@@ -1,106 +0,0 @@
-/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
-/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
-/* Any copyright is dedicated to the Public Domain.
- * http://creativecommons.org/publicdomain/zero/1.0/ */
-
-/**
- * Test that we can get a stack to a promise's fulfillment point.
- */
-
-"use strict";
-
-const TAB_URL = EXAMPLE_URL + "doc_promise-get-fulfillment-stack.html";
-const { PromisesFront } = require("devtools/shared/fronts/promises");
-var EventEmitter = require("devtools/shared/event-emitter");
-
-const TEST_DATA = [
-  {
-    functionDisplayName: "returnPromise/<",
-    line: 19,
-    column: 37
-  },
-  {
-    functionDisplayName: "returnPromise",
-    line: 19,
-    column: 14
-  },
-  {
-    functionDisplayName: "makePromise",
-    line: 14,
-    column: 15
-  },
-];
-
-function test() {
-  Task.spawn(function* () {
-    DebuggerServer.init();
-    DebuggerServer.registerAllActors();
-
-    let options = {
-      source: TAB_URL,
-      line: 1
-    };
-    const [ tab, panel ] = yield initDebugger(TAB_URL, options);
-
-    let client = new DebuggerClient(DebuggerServer.connectPipe());
-    yield connect(client);
-
-    let { tabs } = yield listTabs(client);
-    let targetTab = findTab(tabs, TAB_URL);
-    yield attachTarget(client, targetTab);
-
-    yield testGetFulfillmentStack(client, targetTab, tab);
-
-    yield close(client);
-    yield closeDebuggerAndFinish(panel);
-  }).catch(error => {
-    ok(false, "Got an error: " + error.message + "\n" + error.stack);
-  });
-}
-
-function* testGetFulfillmentStack(client, form, tab) {
-  let front = PromisesFront(client, form);
-
-  yield front.attach();
-  yield front.listPromises();
-
-  // Get the grip for promise p
-  let onNewPromise = new Promise(resolve => {
-    EventEmitter.on(front, "new-promises", promises => {
-      for (let p of promises) {
-        if (p.preview.ownProperties.name &&
-            p.preview.ownProperties.name.value === "p") {
-          resolve(p);
-        }
-      }
-    });
-  });
-
-  callInTab(tab, "makePromise");
-
-  let grip = yield onNewPromise;
-  ok(grip, "Found our promise p");
-
-  let objectClient = new ObjectClient(client, grip);
-  ok(objectClient, "Got Object Client");
-
-  yield new Promise(resolve => {
-    objectClient.getPromiseFulfillmentStack(response => {
-      ok(response.fulfillmentStack.length, "Got promise allocation stack.");
-
-      for (let i = 0; i < TEST_DATA.length; i++) {
-        let stack = response.fulfillmentStack[i];
-        let data = TEST_DATA[i];
-        is(stack.source.url, TAB_URL, "Got correct source URL.");
-        is(stack.functionDisplayName, data.functionDisplayName,
-           "Got correct function display name.");
-        is(stack.line, data.line, "Got correct stack line number.");
-        is(stack.column, data.column, "Got correct stack column number.");
-      }
-
-      resolve();
-    });
-  });
-
-  yield front.detach();
-}
deleted file mode 100644
--- a/devtools/client/debugger/test/mochitest/browser_dbg_promises-rejection-stack.js
+++ /dev/null
@@ -1,113 +0,0 @@
-/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
-/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
-/* Any copyright is dedicated to the Public Domain.
- * http://creativecommons.org/publicdomain/zero/1.0/ */
-
-/**
- * Test that we can get a stack to a promise's rejection point.
- */
-
-"use strict";
-
-const TAB_URL = EXAMPLE_URL + "doc_promise-get-rejection-stack.html";
-const { PromisesFront } = require("devtools/shared/fronts/promises");
-var EventEmitter = require("devtools/shared/event-emitter");
-
-// The code in the document above leaves an uncaught rejection. This is only
-// reported to the testing framework if the code is loaded in the main process.
-if (!gMultiProcessBrowser) {
-  ChromeUtils.import("resource://testing-common/PromiseTestUtils.jsm", this);
-  PromiseTestUtils.expectUncaughtRejection(/hello/);
-}
-
-const TEST_DATA = [
-  {
-    functionDisplayName: "returnPromise/<",
-    line: 19,
-    column: 47
-  },
-  {
-    functionDisplayName: "returnPromise",
-    line: 19,
-    column: 14
-  },
-  {
-    functionDisplayName: "makePromise",
-    line: 14,
-    column: 15
-  },
-];
-
-function test() {
-  Task.spawn(function* () {
-    DebuggerServer.init();
-    DebuggerServer.registerAllActors();
-
-    let options = {
-      source: TAB_URL,
-      line: 1
-    };
-    const [ tab, panel ] = yield initDebugger(TAB_URL, options);
-
-    let client = new DebuggerClient(DebuggerServer.connectPipe());
-    yield connect(client);
-
-    let { tabs } = yield listTabs(client);
-    let targetTab = findTab(tabs, TAB_URL);
-    yield attachTarget(client, targetTab);
-
-    yield testGetRejectionStack(client, targetTab, tab);
-
-    yield close(client);
-    yield closeDebuggerAndFinish(panel);
-  }).catch(error => {
-    ok(false, "Got an error: " + error.message + "\n" + error.stack);
-  });
-}
-
-function* testGetRejectionStack(client, form, tab) {
-  let front = PromisesFront(client, form);
-
-  yield front.attach();
-  yield front.listPromises();
-
-  // Get the grip for promise p
-  let onNewPromise = new Promise(resolve => {
-    EventEmitter.on(front, "new-promises", promises => {
-      for (let p of promises) {
-        if (p.preview.ownProperties.name &&
-            p.preview.ownProperties.name.value === "p") {
-          resolve(p);
-        }
-      }
-    });
-  });
-
-  callInTab(tab, "makePromise");
-
-  let grip = yield onNewPromise;
-  ok(grip, "Found our promise p");
-
-  let objectClient = new ObjectClient(client, grip);
-  ok(objectClient, "Got Object Client");
-
-  yield new Promise(resolve => {
-    objectClient.getPromiseRejectionStack(response => {
-      ok(response.rejectionStack.length, "Got promise allocation stack.");
-
-      for (let i = 0; i < TEST_DATA.length; i++) {
-        let stack = response.rejectionStack[i];
-        let data = TEST_DATA[i];
-        is(stack.source.url, TAB_URL, "Got correct source URL.");
-        is(stack.functionDisplayName, data.functionDisplayName,
-           "Got correct function display name.");
-        is(stack.line, data.line, "Got correct stack line number.");
-        is(stack.column, data.column, "Got correct stack column number.");
-      }
-
-      resolve();
-    });
-  });
-
-  yield front.detach();
-}
--- a/devtools/server/actors/moz.build
+++ b/devtools/server/actors/moz.build
@@ -47,17 +47,16 @@ DevToolsModules(
     'object.js',
     'pause-scoped.js',
     'perf.js',
     'performance-recording.js',
     'performance.js',
     'preference.js',
     'pretty-print-worker.js',
     'process.js',
-    'promises.js',
     'reflow.js',
     'root.js',
     'screenshot.js',
     'source.js',
     'storage.js',
     'string.js',
     'styles.js',
     'stylesheets.js',
deleted file mode 100644
--- a/devtools/server/actors/promises.js
+++ /dev/null
@@ -1,200 +0,0 @@
-/* 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 protocol = require("devtools/shared/protocol");
-const { promisesSpec } = require("devtools/shared/specs/promises");
-const { expectState, ActorPool } = require("devtools/server/actors/common");
-const { ObjectActor } = require("devtools/server/actors/object");
-const { createValueGrip } = require("devtools/server/actors/object/utils");
-const DevToolsUtils = require("devtools/shared/DevToolsUtils");
-const EventEmitter = require("devtools/shared/event-emitter");
-
-/**
- * The Promises Actor provides support for getting the list of live promises and
- * observing changes to their settlement state.
- */
-var PromisesActor = protocol.ActorClassWithSpec(promisesSpec, {
-  /**
-   * @param conn DebuggerServerConnection.
-   * @param parentActor BrowsingContextTargetActor|RootActor
-   */
-  initialize: function(conn, parentActor) {
-    protocol.Actor.prototype.initialize.call(this, conn);
-
-    this.conn = conn;
-    this.parentActor = parentActor;
-    this.state = "detached";
-    this._dbg = null;
-    this._gripDepth = 0;
-    this._navigationLifetimePool = null;
-    this._newPromises = null;
-    this._promisesSettled = null;
-
-    this.objectGrip = this.objectGrip.bind(this);
-    this._makePromiseEventHandler = this._makePromiseEventHandler.bind(this);
-    this._onWindowReady = this._onWindowReady.bind(this);
-  },
-
-  destroy: function() {
-    if (this.state === "attached") {
-      this.detach();
-    }
-
-    protocol.Actor.prototype.destroy.call(this, this.conn);
-  },
-
-  get dbg() {
-    if (!this._dbg) {
-      this._dbg = this.parentActor.makeDebugger();
-    }
-    return this._dbg;
-  },
-
-  /**
-   * Attach to the PromisesActor.
-   */
-  attach: expectState("detached", function() {
-    this.dbg.addDebuggees();
-
-    this._navigationLifetimePool = this._createActorPool();
-    this.conn.addActorPool(this._navigationLifetimePool);
-
-    this._newPromises = [];
-    this._promisesSettled = [];
-
-    this.dbg.findScripts().forEach(s => {
-      this.parentActor.sources.createSourceActors(s.source);
-    });
-
-    this.dbg.onNewScript = s => {
-      this.parentActor.sources.createSourceActors(s.source);
-    };
-
-    EventEmitter.on(this.parentActor, "window-ready", this._onWindowReady);
-
-    this.state = "attached";
-  }, "attaching to the PromisesActor"),
-
-  /**
-   * Detach from the PromisesActor upon Debugger closing.
-   */
-  detach: expectState("attached", function() {
-    this.dbg.removeAllDebuggees();
-    this.dbg.enabled = false;
-    this._dbg = null;
-    this._newPromises = null;
-    this._promisesSettled = null;
-
-    if (this._navigationLifetimePool) {
-      this.conn.removeActorPool(this._navigationLifetimePool);
-      this._navigationLifetimePool = null;
-    }
-
-    EventEmitter.off(this.parentActor, "window-ready", this._onWindowReady);
-
-    this.state = "detached";
-  }),
-
-  _createActorPool: function() {
-    const pool = new ActorPool(this.conn);
-    pool.objectActors = new WeakMap();
-    return pool;
-  },
-
-  /**
-   * Create an ObjectActor for the given Promise object.
-   *
-   * @param object promise
-   *        The promise object
-   * @return object
-   *        An ObjectActor object that wraps the given Promise object
-   */
-  _createObjectActorForPromise: function(promise) {
-    if (this._navigationLifetimePool.objectActors.has(promise)) {
-      return this._navigationLifetimePool.objectActors.get(promise);
-    }
-
-    const actor = new ObjectActor(promise, {
-      getGripDepth: () => this._gripDepth,
-      incrementGripDepth: () => this._gripDepth++,
-      decrementGripDepth: () => this._gripDepth--,
-      createValueGrip: v =>
-        createValueGrip(v, this._navigationLifetimePool, this.objectGrip),
-      sources: () => this.parentActor.sources,
-      createEnvironmentActor: () => DevToolsUtils.reportException(
-        "PromisesActor", Error("createEnvironmentActor not yet implemented")),
-      getGlobalDebugObject: () => null,
-    }, this.conn);
-
-    this._navigationLifetimePool.addActor(actor);
-    this._navigationLifetimePool.objectActors.set(promise, actor);
-
-    return actor;
-  },
-
-  /**
-   * Get a grip for the given Promise object.
-   *
-   * @param object value
-   *        The Promise object
-   * @return object
-   *        The grip for the given Promise object
-   */
-  objectGrip: function(value) {
-    return this._createObjectActorForPromise(value).form();
-  },
-
-  /**
-   * Get a list of ObjectActors for all live Promise Objects.
-   */
-  listPromises: function() {
-    const promises = this.dbg.findObjects({ class: "Promise" });
-
-    this.dbg.onNewPromise = this._makePromiseEventHandler(this._newPromises,
-      "new-promises");
-    this.dbg.onPromiseSettled = this._makePromiseEventHandler(
-      this._promisesSettled, "promises-settled");
-
-    return promises.map(p => this._createObjectActorForPromise(p));
-  },
-
-  /**
-   * Creates an event handler for onNewPromise that will add the new
-   * Promise ObjectActor to the array and schedule it to be emitted as a
-   * batch for the provided event.
-   *
-   * @param array array
-   *        The list of Promise ObjectActors to emit
-   * @param string eventName
-   *        The event name
-   */
-  _makePromiseEventHandler: function(array, eventName) {
-    return promise => {
-      const actor = this._createObjectActorForPromise(promise);
-      const needsScheduling = array.length == 0;
-
-      array.push(actor);
-
-      if (needsScheduling) {
-        DevToolsUtils.executeSoon(() => {
-          this.emit(eventName, array.splice(0, array.length));
-        });
-      }
-    };
-  },
-
-  _onWindowReady: expectState("attached", function({ isTopLevel }) {
-    if (!isTopLevel) {
-      return;
-    }
-
-    this._navigationLifetimePool.cleanup();
-    this.dbg.removeAllDebuggees();
-    this.dbg.addDebuggees();
-  })
-});
-
-exports.PromisesActor = PromisesActor;
--- a/devtools/server/actors/utils/actor-registry.js
+++ b/devtools/server/actors/utils/actor-registry.js
@@ -226,21 +226,16 @@ const ActorRegistry = {
         type: { target: true }
       });
     }
     this.registerModule("devtools/server/actors/animation", {
       prefix: "animations",
       constructor: "AnimationsActor",
       type: { target: true }
     });
-    this.registerModule("devtools/server/actors/promises", {
-      prefix: "promises",
-      constructor: "PromisesActor",
-      type: { target: true }
-    });
     this.registerModule("devtools/server/actors/emulation", {
       prefix: "emulation",
       constructor: "EmulationActor",
       type: { target: true }
     });
     this.registerModule("devtools/server/actors/addon/webextension-inspected-window", {
       prefix: "webExtensionInspectedWindow",
       constructor: "WebExtensionInspectedWindowActor",
deleted file mode 100644
--- a/devtools/server/tests/unit/test_promises_actor_attach.js
+++ /dev/null
@@ -1,53 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
-   http://creativecommons.org/publicdomain/zero/1.0/ */
-
-"use strict";
-
-/**
- * Test that we can attach and detach to the PromisesActor under the correct
- * states.
- */
-
-const { PromisesFront } = require("devtools/shared/fronts/promises");
-
-add_task(async function() {
-  const client = await startTestDebuggerServer("promises-actor-test");
-  const parentProcessActors = await getParentProcessActors(client);
-
-  // We have to attach the chrome target actor before playing with the PromiseActor
-  await attachTarget(client, parentProcessActors);
-  await testAttach(client, parentProcessActors);
-
-  const response = await listTabs(client);
-  const targetTab = findTab(response.tabs, "promises-actor-test");
-  ok(targetTab, "Found our target tab.");
-
-  await attachTarget(client, targetTab);
-  await testAttach(client, targetTab);
-
-  await close(client);
-});
-
-async function testAttach(client, parent) {
-  const promises = PromisesFront(client, parent);
-
-  try {
-    await promises.detach();
-    ok(false, "Should not be able to detach when in a detached state.");
-  } catch (e) {
-    ok(true, "Expected detach to fail when already in a detached state.");
-  }
-
-  await promises.attach();
-  ok(true, "Expected attach to succeed.");
-
-  try {
-    await promises.attach();
-    ok(false, "Should not be able to attach when in an attached state.");
-  } catch (e) {
-    ok(true, "Expected attach to fail when already in an attached state.");
-  }
-
-  await promises.detach();
-  ok(true, "Expected detach to succeed.");
-}
deleted file mode 100644
--- a/devtools/server/tests/unit/test_promises_actor_exist.js
+++ /dev/null
@@ -1,34 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
-   http://creativecommons.org/publicdomain/zero/1.0/ */
-/* eslint-disable no-shadow */
-
-"use strict";
-
-/**
- * Test that the PromisesActor exists in the BrowsingContextTargetActors and
- * ParentProcessTargetActors.
- */
-
-add_task(async function() {
-  const client = await startTestDebuggerServer("promises-actor-test");
-
-  const response = await listTabs(client);
-  const targetTab = findTab(response.tabs, "promises-actor-test");
-  Assert.ok(targetTab, "Found our target tab.");
-
-  // Attach to the BrowsingContextTargetActor and check the response
-  await new Promise(resolve => {
-    client.request({ to: targetTab.actor, type: "attach" }, response => {
-      Assert.ok(!("error" in response), "Expect no error in response.");
-      Assert.equal(response.from, targetTab.actor,
-        "Expect the target BrowsingContextTargetActor in response form field.");
-      Assert.equal(response.type, "tabAttached",
-        "Expect tabAttached in the response type.");
-      resolve();
-    });
-  });
-
-  const parentProcessActors = await getParentProcessActors(client);
-  Assert.ok(typeof parentProcessActors.promisesActor === "string",
-    "Should have a chrome context PromisesActor.");
-});
deleted file mode 100644
--- a/devtools/server/tests/unit/test_promises_actor_list_promises.js
+++ /dev/null
@@ -1,65 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
-   http://creativecommons.org/publicdomain/zero/1.0/ */
-
-/**
- * Test that we can get the list of all live Promise objects from the
- * PromisesActor.
- */
-
-"use strict";
-
-const { PromisesFront } = require("devtools/shared/fronts/promises");
-const SECRET = "MyLittleSecret";
-
-add_task(async function() {
-  const client = await startTestDebuggerServer("promises-actor-test");
-  const parentProcessActors = await getParentProcessActors(client);
-
-  // We have to attach the chrome target actor before playing with the PromiseActor
-  await attachTarget(client, parentProcessActors);
-  await testListPromises(client, parentProcessActors, v =>
-    new Promise(resolve => resolve(v)));
-
-  const response = await listTabs(client);
-  const targetTab = findTab(response.tabs, "promises-actor-test");
-  ok(targetTab, "Found our target tab.");
-
-  await testListPromises(client, targetTab, v => {
-    const debuggee = DebuggerServer.getTestGlobal("promises-actor-test");
-    return debuggee.Promise.resolve(v);
-  });
-
-  await close(client);
-});
-
-async function testListPromises(client, form, makePromise) {
-  const resolution = SECRET + Math.random();
-  const promise = makePromise(resolution);
-  const front = PromisesFront(client, form);
-
-  await front.attach();
-
-  const promises = await front.listPromises();
-
-  let found = false;
-  for (const p of promises) {
-    equal(p.type, "object", "Expect type to be Object");
-    equal(p.class, "Promise", "Expect class to be Promise");
-    equal(typeof p.promiseState.creationTimestamp, "number",
-      "Expect creation timestamp to be a number");
-    if (p.promiseState.state !== "pending") {
-      equal(typeof p.promiseState.timeToSettle, "number",
-        "Expect time to settle to be a number");
-    }
-
-    if (p.promiseState.state === "fulfilled" &&
-        p.promiseState.value === resolution) {
-      found = true;
-    }
-  }
-
-  ok(found, "Found our promise");
-  await front.detach();
-  // Appease eslint
-  void promise;
-}
deleted file mode 100644
--- a/devtools/server/tests/unit/test_promises_actor_onnewpromise.js
+++ /dev/null
@@ -1,72 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
-   http://creativecommons.org/publicdomain/zero/1.0/ */
-
-/**
- * Test that we can get the list of all new Promise objects from the
- * PromisesActor onNewPromise event handler.
- */
-
-"use strict";
-
-const { PromisesFront } = require("devtools/shared/fronts/promises");
-
-var EventEmitter = require("devtools/shared/event-emitter");
-
-add_task(async function() {
-  const client = await startTestDebuggerServer("promises-actor-test");
-  const parentProcessActors = await getParentProcessActors(client);
-
-  ok(Promise.toString().includes("native code"), "Expect native DOM Promise");
-
-  // We have to attach the chrome target actor before playing with the PromiseActor
-  await attachTarget(client, parentProcessActors);
-  await testNewPromisesEvent(client, parentProcessActors,
-    v => new Promise(resolve => resolve(v)));
-
-  const response = await listTabs(client);
-  const targetTab = findTab(response.tabs, "promises-actor-test");
-  ok(targetTab, "Found our target tab.");
-
-  await testNewPromisesEvent(client, targetTab, v => {
-    const debuggee = DebuggerServer.getTestGlobal("promises-actor-test");
-    return debuggee.Promise.resolve(v);
-  });
-
-  await close(client);
-});
-
-async function testNewPromisesEvent(client, form, makePromise) {
-  const front = PromisesFront(client, form);
-  const resolution = "MyLittleSecret" + Math.random();
-  let found = false;
-
-  await front.attach();
-  await front.listPromises();
-
-  const onNewPromise = new Promise(resolve => {
-    EventEmitter.on(front, "new-promises", promises => {
-      for (const p of promises) {
-        equal(p.type, "object", "Expect type to be Object");
-        equal(p.class, "Promise", "Expect class to be Promise");
-        equal(typeof p.promiseState.creationTimestamp, "number",
-          "Expect creation timestamp to be a number");
-
-        if (p.promiseState.state === "fulfilled" &&
-            p.promiseState.value === resolution) {
-          found = true;
-          resolve();
-        } else {
-          dump("Found non-target promise\n");
-        }
-      }
-    });
-  });
-
-  const promise = makePromise(resolution);
-
-  await onNewPromise;
-  ok(found, "Found our new promise");
-  await front.detach();
-  // Appease eslint
-  void promise;
-}
deleted file mode 100644
--- a/devtools/server/tests/unit/test_promises_actor_onpromisesettled.js
+++ /dev/null
@@ -1,92 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
-   http://creativecommons.org/publicdomain/zero/1.0/ */
-
-/**
- * Test that we can get the list of Promise objects that have settled from the
- * PromisesActor onPromiseSettled event handler.
- */
-
-"use strict";
-
-ChromeUtils.import("resource://testing-common/PromiseTestUtils.jsm", this);
-
-const { PromisesFront } = require("devtools/shared/fronts/promises");
-
-var EventEmitter = require("devtools/shared/event-emitter");
-
-add_task(async function() {
-  const client = await startTestDebuggerServer("promises-actor-test");
-  const parentProcessActors = await getParentProcessActors(client);
-
-  ok(Promise.toString().includes("native code"), "Expect native DOM Promise");
-
-  // We have to attach the chrome target actor before playing with the PromiseActor
-  await attachTarget(client, parentProcessActors);
-  await testPromisesSettled(client, parentProcessActors,
-    v => new Promise(resolve => resolve(v)),
-    v => new Promise((resolve, reject) => reject(v)));
-
-  const response = await listTabs(client);
-  const targetTab = findTab(response.tabs, "promises-actor-test");
-  ok(targetTab, "Found our target tab.");
-
-  await testPromisesSettled(client, targetTab, v => {
-    const debuggee = DebuggerServer.getTestGlobal("promises-actor-test");
-    return debuggee.Promise.resolve(v);
-  }, v => {
-    const debuggee = DebuggerServer.getTestGlobal("promises-actor-test");
-    return debuggee.Promise.reject(v);
-  });
-
-  await close(client);
-});
-
-async function testPromisesSettled(client, form, makeResolvePromise,
-    makeRejectPromise) {
-  const front = PromisesFront(client, form);
-  const resolution = "MyLittleSecret" + Math.random();
-
-  await front.attach();
-  await front.listPromises();
-
-  let onPromiseSettled = oncePromiseSettled(front, resolution, true, false);
-  const resolvedPromise = makeResolvePromise(resolution);
-  const foundResolvedPromise = await onPromiseSettled;
-  ok(foundResolvedPromise, "Found our resolved promise");
-
-  PromiseTestUtils.expectUncaughtRejection(r => r.message == resolution);
-  onPromiseSettled = oncePromiseSettled(front, resolution, false, true);
-  const rejectedPromise = makeRejectPromise(resolution);
-  const foundRejectedPromise = await onPromiseSettled;
-  ok(foundRejectedPromise, "Found our rejected promise");
-
-  await front.detach();
-  // Appease eslint
-  void resolvedPromise;
-  void rejectedPromise;
-}
-
-function oncePromiseSettled(front, resolution, resolveValue, rejectValue) {
-  return new Promise(resolve => {
-    EventEmitter.on(front, "promises-settled", promises => {
-      for (const p of promises) {
-        equal(p.type, "object", "Expect type to be Object");
-        equal(p.class, "Promise", "Expect class to be Promise");
-        equal(typeof p.promiseState.creationTimestamp, "number",
-          "Expect creation timestamp to be a number");
-        equal(typeof p.promiseState.timeToSettle, "number",
-          "Expect time to settle to be a number");
-
-        if (p.promiseState.state === "fulfilled" &&
-            p.promiseState.value === resolution) {
-          resolve(resolveValue);
-        } else if (p.promiseState.state === "rejected" &&
-                   p.promiseState.reason === resolution) {
-          resolve(rejectValue);
-        } else {
-          dump("Found non-target promise\n");
-        }
-      }
-    });
-  });
-}
deleted file mode 100644
--- a/devtools/server/tests/unit/test_promises_client_getdependentpromises.js
+++ /dev/null
@@ -1,112 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
-   http://creativecommons.org/publicdomain/zero/1.0/ */
-
-/**
- * Test that we can get the list of dependent promises from the ObjectClient.
- */
-
-"use strict";
-
-const { PromisesFront } = require("devtools/shared/fronts/promises");
-
-var EventEmitter = require("devtools/shared/event-emitter");
-
-add_task(async function() {
-  const client = await startTestDebuggerServer("test-promises-dependentpromises");
-  const parentProcessActors = await getParentProcessActors(client);
-  await attachTarget(client, parentProcessActors);
-
-  ok(Promise.toString().includes("native code"), "Expect native DOM Promise.");
-
-  await testGetDependentPromises(client, parentProcessActors, () => {
-    const p = new Promise(() => {});
-    p.name = "p";
-    const q = p.then();
-    q.name = "q";
-    const r = p.catch(() => {});
-    r.name = "r";
-
-    return p;
-  });
-
-  const response = await listTabs(client);
-  const targetTab = findTab(response.tabs, "test-promises-dependentpromises");
-  ok(targetTab, "Found our target tab.");
-  await attachTarget(client, targetTab);
-
-  await testGetDependentPromises(client, targetTab, () => {
-    const debuggee =
-      DebuggerServer.getTestGlobal("test-promises-dependentpromises");
-
-    const p = new debuggee.Promise(() => {});
-    p.name = "p";
-    const q = p.then();
-    q.name = "q";
-    const r = p.catch(() => {});
-    r.name = "r";
-
-    return p;
-  });
-
-  await close(client);
-});
-
-async function testGetDependentPromises(client, form, makePromises) {
-  const front = PromisesFront(client, form);
-
-  await front.attach();
-  await front.listPromises();
-
-  // Get the grip for promise p
-  const onNewPromise = new Promise(resolve => {
-    EventEmitter.on(front, "new-promises", promises => {
-      for (const p of promises) {
-        if (p.preview.ownProperties.name &&
-            p.preview.ownProperties.name.value === "p") {
-          resolve(p);
-        }
-      }
-    });
-  });
-
-  const promise = makePromises();
-
-  const grip = await onNewPromise;
-  ok(grip, "Found our promise p.");
-
-  const objectClient = new ObjectClient(client, grip);
-  ok(objectClient, "Got Object Client.");
-
-  // Get the dependent promises for promise p and assert that the list of
-  // dependent promises is correct
-  await new Promise(resolve => {
-    objectClient.getDependentPromises(response => {
-      const dependentNames = response.promises.map(p =>
-        p.preview.ownProperties.name.value);
-      const expectedDependentNames = ["q", "r"];
-
-      equal(dependentNames.length, expectedDependentNames.length,
-        "Got expected number of dependent promises.");
-
-      for (let i = 0; i < dependentNames.length; i++) {
-        equal(dependentNames[i], expectedDependentNames[i],
-          "Got expected dependent name.");
-      }
-
-      for (const p of response.promises) {
-        equal(p.type, "object", "Expect type to be Object.");
-        equal(p.class, "Promise", "Expect class to be Promise.");
-        equal(typeof p.promiseState.creationTimestamp, "number",
-          "Expect creation timestamp to be a number.");
-        ok(!p.promiseState.timeToSettle,
-          "Expect time to settle to be undefined.");
-      }
-
-      resolve();
-    });
-  });
-
-  await front.detach();
-  // Appease eslint
-  void promise;
-}
deleted file mode 100644
--- a/devtools/server/tests/unit/test_promises_object_creationtimestamp.js
+++ /dev/null
@@ -1,82 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
-   http://creativecommons.org/publicdomain/zero/1.0/ */
-
-/**
- * Test that we get the approximate time range for promise creation timestamp.
- */
-
-"use strict";
-
-const { PromisesFront } = require("devtools/shared/fronts/promises");
-
-var EventEmitter = require("devtools/shared/event-emitter");
-
-ChromeUtils.defineModuleGetter(this, "Preferences",
-                               "resource://gre/modules/Preferences.jsm");
-
-add_task(async function() {
-  const timerPrecision = Preferences.get("privacy.reduceTimerPrecision");
-  Preferences.set("privacy.reduceTimerPrecision", false);
-
-  registerCleanupFunction(function() {
-    Preferences.set("privacy.reduceTimerPrecision", timerPrecision);
-  });
-
-  const client = await startTestDebuggerServer("promises-object-test");
-  const parentProcessActors = await getParentProcessActors(client);
-
-  ok(Promise.toString().includes("native code"), "Expect native DOM Promise.");
-
-  // We have to attach the chrome target actor before playing with the PromiseActor
-  await attachTarget(client, parentProcessActors);
-  await testPromiseCreationTimestamp(client, parentProcessActors, v => {
-    return new Promise(resolve => resolve(v));
-  });
-
-  const response = await listTabs(client);
-  const targetTab = findTab(response.tabs, "promises-object-test");
-  ok(targetTab, "Found our target tab.");
-
-  await testPromiseCreationTimestamp(client, targetTab, v => {
-    const debuggee = DebuggerServer.getTestGlobal("promises-object-test");
-    return debuggee.Promise.resolve(v);
-  });
-
-  await close(client);
-});
-
-async function testPromiseCreationTimestamp(client, form, makePromise) {
-  const front = PromisesFront(client, form);
-  const resolution = "MyLittleSecret" + Math.random();
-
-  await front.attach();
-  await front.listPromises();
-
-  const onNewPromise = new Promise(resolve => {
-    EventEmitter.on(front, "new-promises", promises => {
-      for (const p of promises) {
-        if (p.promiseState.state === "fulfilled" &&
-            p.promiseState.value === resolution) {
-          resolve(p);
-        }
-      }
-    });
-  });
-
-  const start = Date.now();
-  const promise = makePromise(resolution);
-  const end = Date.now();
-
-  const grip = await onNewPromise;
-  ok(grip, "Found our new promise.");
-
-  const creationTimestamp = grip.promiseState.creationTimestamp;
-
-  ok(start - 1 <= creationTimestamp && creationTimestamp <= end + 1,
-    "Expect promise creation timestamp to be within elapsed time range: " +
-     (start - 1) + " <= " + creationTimestamp + " <= " + (end + 1));
-
-  await front.detach();
-  // Appease eslint
-  void promise;
-}
deleted file mode 100644
--- a/devtools/server/tests/unit/test_promises_object_timetosettle-01.js
+++ /dev/null
@@ -1,80 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
-   http://creativecommons.org/publicdomain/zero/1.0/ */
-
-/**
- * Test whether or not we get the time to settle depending on the state of the
- * promise.
- */
-
-"use strict";
-
-const { PromisesFront } = require("devtools/shared/fronts/promises");
-
-var EventEmitter = require("devtools/shared/event-emitter");
-
-add_task(async function() {
-  const client = await startTestDebuggerServer("test-promises-timetosettle");
-  const parentProcessActors = await getParentProcessActors(client);
-
-  ok(Promise.toString().includes("native code"), "Expect native DOM Promise.");
-
-  // We have to attach the chrome target actor before playing with the PromiseActor
-  await attachTarget(client, parentProcessActors);
-  await testGetTimeToSettle(client, parentProcessActors, () => {
-    const p = new Promise(() => {});
-    p.name = "p";
-    const q = p.then();
-    q.name = "q";
-
-    return p;
-  });
-
-  const response = await listTabs(client);
-  const targetTab = findTab(response.tabs, "test-promises-timetosettle");
-  ok(targetTab, "Found our target tab.");
-
-  await testGetTimeToSettle(client, targetTab, () => {
-    const debuggee =
-      DebuggerServer.getTestGlobal("test-promises-timetosettle");
-
-    const p = new debuggee.Promise(() => {});
-    p.name = "p";
-    const q = p.then();
-    q.name = "q";
-
-    return p;
-  });
-
-  await close(client);
-});
-
-async function testGetTimeToSettle(client, form, makePromises) {
-  const front = PromisesFront(client, form);
-
-  await front.attach();
-  await front.listPromises();
-
-  const onNewPromise = new Promise(resolve => {
-    EventEmitter.on(front, "new-promises", promises => {
-      for (const p of promises) {
-        if (p.promiseState.state === "pending") {
-          ok(!p.promiseState.timeToSettle,
-            "Expect no time to settle for unsettled promise.");
-        } else {
-          ok(p.promiseState.timeToSettle,
-            "Expect time to settle for settled promise.");
-          equal(typeof p.promiseState.timeToSettle, "number",
-            "Expect time to settle to be a number.");
-        }
-      }
-      resolve();
-    });
-  });
-
-  const promise = makePromises();
-
-  await onNewPromise;
-  await front.detach();
-  // Appease eslint
-  void promise;
-}
deleted file mode 100644
--- a/devtools/server/tests/unit/test_promises_object_timetosettle-02.js
+++ /dev/null
@@ -1,75 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
-   http://creativecommons.org/publicdomain/zero/1.0/ */
-/* eslint-disable mozilla/no-arbitrary-setTimeout */
-
-/**
- * Test that we get the expected settlement time for promise time to settle.
- */
-
-"use strict";
-
-const { PromisesFront } = require("devtools/shared/fronts/promises");
-const { setTimeout } = ChromeUtils.import("resource://gre/modules/Timer.jsm", {});
-
-var EventEmitter = require("devtools/shared/event-emitter");
-
-add_task(async function() {
-  const client = await startTestDebuggerServer("test-promises-timetosettle");
-  const parentProcessActors = await getParentProcessActors(client);
-  await attachTarget(client, parentProcessActors);
-
-  ok(Promise.toString().includes("native code"), "Expect native DOM Promise.");
-
-  // We have to attach the chrome target actor before playing with the PromiseActor
-  await attachTarget(client, parentProcessActors);
-  await testGetTimeToSettle(client, parentProcessActors,
-    v => new Promise(resolve => setTimeout(() => resolve(v), 100)));
-
-  const response = await listTabs(client);
-  const targetTab = findTab(response.tabs, "test-promises-timetosettle");
-  ok(targetTab, "Found our target tab.");
-  await attachTarget(client, targetTab);
-
-  await testGetTimeToSettle(client, targetTab, v => {
-    const debuggee =
-      DebuggerServer.getTestGlobal("test-promises-timetosettle");
-    return new debuggee.Promise(resolve => setTimeout(() => resolve(v), 100));
-  });
-
-  await close(client);
-});
-
-async function testGetTimeToSettle(client, form, makePromise) {
-  const front = PromisesFront(client, form);
-  const resolution = "MyLittleSecret" + Math.random();
-  let found = false;
-
-  await front.attach();
-  await front.listPromises();
-
-  const onNewPromise = new Promise(resolve => {
-    EventEmitter.on(front, "promises-settled", promises => {
-      for (const p of promises) {
-        if (p.promiseState.state === "fulfilled" &&
-            p.promiseState.value === resolution) {
-          const timeToSettle = Math.floor(p.promiseState.timeToSettle / 100) * 100;
-          ok(timeToSettle >= 100,
-            "Expect time to settle for resolved promise to be " +
-            "at least 100ms, got " + timeToSettle + "ms.");
-          found = true;
-          resolve();
-        } else {
-          dump("Found non-target promise.\n");
-        }
-      }
-    });
-  });
-
-  const promise = makePromise(resolution);
-
-  await onNewPromise;
-  ok(found, "Found our new promise.");
-  await front.detach();
-  // Appease eslint
-  void promise;
-}
--- a/devtools/server/tests/unit/xpcshell.ini
+++ b/devtools/server/tests/unit/xpcshell.ini
@@ -84,26 +84,16 @@ skip-if = (verify && !debug && (os == 'w
 [test_nativewrappers.js]
 [test_nodelistactor.js]
 [test_eval-01.js]
 [test_eval-02.js]
 [test_eval-03.js]
 [test_eval-04.js]
 [test_eval-05.js]
 [test_format_command.js]
-[test_promises_actor_attach.js]
-[test_promises_actor_exist.js]
-[test_promises_actor_list_promises.js]
-skip-if = coverage # bug 1336670
-[test_promises_actor_onnewpromise.js]
-[test_promises_actor_onpromisesettled.js]
-[test_promises_client_getdependentpromises.js]
-[test_promises_object_creationtimestamp.js]
-[test_promises_object_timetosettle-01.js]
-[test_promises_object_timetosettle-02.js]
 [test_protocol_abort.js]
 [test_protocol_async.js]
 [test_protocol_children.js]
 [test_protocol_formtype.js]
 [test_protocol_longstring.js]
 [test_protocol_simple.js]
 [test_protocol_stack.js]
 [test_protocol_unregister.js]
--- a/devtools/shared/fronts/moz.build
+++ b/devtools/shared/fronts/moz.build
@@ -23,17 +23,16 @@ DevToolsModules(
     'inspector.js',
     'layout.js',
     'memory.js',
     'node.js',
     'perf.js',
     'performance-recording.js',
     'performance.js',
     'preference.js',
-    'promises.js',
     'reflow.js',
     'screenshot.js',
     'storage.js',
     'string.js',
     'styles.js',
     'stylesheets.js',
     'timeline.js',
     'webaudio.js',
deleted file mode 100644
--- a/devtools/shared/fronts/promises.js
+++ /dev/null
@@ -1,27 +0,0 @@
-/* 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 {
-  Front,
-  FrontClassWithSpec,
-} = require("devtools/shared/protocol");
-const { promisesSpec } = require("devtools/shared/specs/promises");
-
-/**
- * PromisesFront, the front for the PromisesActor.
- */
-const PromisesFront = FrontClassWithSpec(promisesSpec, {
-  initialize: function(client, form) {
-    Front.prototype.initialize.call(this, client, form);
-    this.actorID = form.promisesActor;
-    this.manage(this);
-  },
-
-  destroy: function() {
-    Front.prototype.destroy.call(this);
-  }
-});
-
-exports.PromisesFront = PromisesFront;
--- a/devtools/shared/specs/index.js
+++ b/devtools/shared/specs/index.js
@@ -163,21 +163,16 @@ const Types = exports.__TypesForTests = 
     front: "devtools/shared/fronts/performance-recording",
   },
   {
     types: ["preference"],
     spec: "devtools/shared/specs/preference",
     front: "devtools/shared/fronts/preference",
   },
   {
-    types: ["promises"],
-    spec: "devtools/shared/specs/promises",
-    front: "devtools/shared/fronts/promises",
-  },
-  {
     types: ["propertyIterator"],
     spec: "devtools/shared/specs/property-iterator",
     front: null,
   },
   {
     types: ["reflow"],
     spec: "devtools/shared/specs/reflow",
     front: "devtools/shared/fronts/reflow",
--- a/devtools/shared/specs/moz.build
+++ b/devtools/shared/specs/moz.build
@@ -33,17 +33,16 @@ DevToolsModules(
     'network-event.js',
     'network-monitor.js',
     'node.js',
     'object.js',
     'perf.js',
     'performance-recording.js',
     'performance.js',
     'preference.js',
-    'promises.js',
     'property-iterator.js',
     'reflow.js',
     'screenshot.js',
     'script.js',
     'source.js',
     'storage.js',
     'string.js',
     'styles.js',
deleted file mode 100644
--- a/devtools/shared/specs/promises.js
+++ /dev/null
@@ -1,56 +0,0 @@
-/* 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 {
-  Arg,
-  RetVal,
-  generateActorSpec,
-  types
-} = require("devtools/shared/protocol");
-
-// Teach protocol.js how to deal with legacy actor types
-types.addType("ObjectActor", {
-  write: actor => actor.form(),
-  read: grip => grip
-});
-
-const promisesSpec = generateActorSpec({
-  typeName: "promises",
-
-  events: {
-    // Event emitted for new promises allocated in debuggee and bufferred by
-    // sending the list of promise objects in a batch.
-    "new-promises": {
-      type: "new-promises",
-      data: Arg(0, "array:ObjectActor"),
-    },
-    // Event emitted for promise settlements.
-    "promises-settled": {
-      type: "promises-settled",
-      data: Arg(0, "array:ObjectActor")
-    }
-  },
-
-  methods: {
-    attach: {
-      request: {},
-      response: {},
-    },
-
-    detach: {
-      request: {},
-      response: {},
-    },
-
-    listPromises: {
-      request: {},
-      response: {
-        promises: RetVal("array:ObjectActor"),
-      },
-    }
-  }
-});
-
-exports.promisesSpec = promisesSpec;