From b91e39033c36efc8643f3617f7d441c8e9a9c35f Mon Sep 17 00:00:00 2001 From: Eddy Bruel Date: Tue, 7 Jun 2016 12:47:20 +0200 Subject: [PATCH] Bug 1265728 - Decouple PromisesFront from PromisesActor; r=ejpbruel --- .../browser_dbg_promises-allocation-stack.js | 2 +- ...er_dbg_promises-chrome-allocation-stack.js | 2 +- .../browser_dbg_promises-fulfillment-stack.js | 2 +- .../browser_dbg_promises-rejection-stack.js | 2 +- devtools/server/actors/promises.js | 63 +++---------------- .../tests/unit/test_promises_actor_attach.js | 2 +- .../unit/test_promises_actor_list_promises.js | 2 +- .../unit/test_promises_actor_onnewpromise.js | 2 +- .../test_promises_actor_onpromisesettled.js | 2 +- ...st_promises_client_getdependentpromises.js | 2 +- .../test_promises_object_creationtimestamp.js | 2 +- .../test_promises_object_timetosettle-01.js | 2 +- .../test_promises_object_timetosettle-02.js | 2 +- devtools/shared/fronts/moz.build | 1 + devtools/shared/fronts/promises.js | 27 ++++++++ devtools/shared/specs/moz.build | 1 + devtools/shared/specs/promises.js | 56 +++++++++++++++++ 17 files changed, 105 insertions(+), 67 deletions(-) create mode 100644 devtools/shared/fronts/promises.js create mode 100644 devtools/shared/specs/promises.js diff --git a/devtools/client/debugger/test/mochitest/browser_dbg_promises-allocation-stack.js b/devtools/client/debugger/test/mochitest/browser_dbg_promises-allocation-stack.js index 5078377b2ff5..2d55c3a8d4b6 100644 --- a/devtools/client/debugger/test/mochitest/browser_dbg_promises-allocation-stack.js +++ b/devtools/client/debugger/test/mochitest/browser_dbg_promises-allocation-stack.js @@ -10,7 +10,7 @@ "use strict"; const TAB_URL = EXAMPLE_URL + "doc_promise-get-allocation-stack.html"; -const { PromisesFront } = require("devtools/server/actors/promises"); +const { PromisesFront } = require("devtools/shared/fronts/promises"); var events = require("sdk/event/core"); function test() { diff --git a/devtools/client/debugger/test/mochitest/browser_dbg_promises-chrome-allocation-stack.js b/devtools/client/debugger/test/mochitest/browser_dbg_promises-chrome-allocation-stack.js index b613c21ec12a..48e9ab229b71 100644 --- a/devtools/client/debugger/test/mochitest/browser_dbg_promises-chrome-allocation-stack.js +++ b/devtools/client/debugger/test/mochitest/browser_dbg_promises-chrome-allocation-stack.js @@ -11,7 +11,7 @@ "use strict"; const SOURCE_URL = "browser_dbg_promises-chrome-allocation-stack.js"; -const { PromisesFront } = require("devtools/server/actors/promises"); +const PromisesFront = require("devtools/shared/fronts/promises"); var events = require("sdk/event/core"); const STACK_DATA = [ diff --git a/devtools/client/debugger/test/mochitest/browser_dbg_promises-fulfillment-stack.js b/devtools/client/debugger/test/mochitest/browser_dbg_promises-fulfillment-stack.js index f8396d4b7585..a5f592eb6cb5 100644 --- a/devtools/client/debugger/test/mochitest/browser_dbg_promises-fulfillment-stack.js +++ b/devtools/client/debugger/test/mochitest/browser_dbg_promises-fulfillment-stack.js @@ -10,7 +10,7 @@ "use strict"; const TAB_URL = EXAMPLE_URL + "doc_promise-get-fulfillment-stack.html"; -const { PromisesFront } = require("devtools/server/actors/promises"); +const { PromisesFront } = require("devtools/shared/fronts/promises"); var events = require("sdk/event/core"); const TEST_DATA = [ diff --git a/devtools/client/debugger/test/mochitest/browser_dbg_promises-rejection-stack.js b/devtools/client/debugger/test/mochitest/browser_dbg_promises-rejection-stack.js index 62dd2d607755..9434024e39ea 100644 --- a/devtools/client/debugger/test/mochitest/browser_dbg_promises-rejection-stack.js +++ b/devtools/client/debugger/test/mochitest/browser_dbg_promises-rejection-stack.js @@ -10,7 +10,7 @@ "use strict"; const TAB_URL = EXAMPLE_URL + "doc_promise-get-rejection-stack.html"; -const { PromisesFront } = require("devtools/server/actors/promises"); +const { PromisesFront } = require("devtools/shared/fronts/promises"); var events = require("sdk/event/core"); const TEST_DATA = [ diff --git a/devtools/server/actors/promises.js b/devtools/server/actors/promises.js index da53a1384ce3..a9a56219d785 100644 --- a/devtools/server/actors/promises.js +++ b/devtools/server/actors/promises.js @@ -5,40 +5,17 @@ "use strict"; const protocol = require("devtools/shared/protocol"); -const { method, RetVal, Arg, types } = protocol; +const { promisesSpec } = require("devtools/shared/specs/promises"); const { expectState, ActorPool } = require("devtools/server/actors/common"); -const { ObjectActor, - createValueGrip } = require("devtools/server/actors/object"); +const { ObjectActor, createValueGrip } = require("devtools/server/actors/object"); const DevToolsUtils = require("devtools/shared/DevToolsUtils"); loader.lazyRequireGetter(this, "events", "sdk/event/core"); -// Teach protocol.js how to deal with legacy actor types -types.addType("ObjectActor", { - write: actor => actor.grip(), - read: grip => grip -}); - /** * The Promises Actor provides support for getting the list of live promises and * observing changes to their settlement state. */ -var PromisesActor = protocol.ActorClass({ - 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") - } - }, - +var PromisesActor = protocol.ActorClassWithSpec(promisesSpec, { /** * @param conn DebuggerServerConnection. * @param parent TabActor|RootActor @@ -78,7 +55,7 @@ var PromisesActor = protocol.ActorClass({ /** * Attach to the PromisesActor. */ - attach: method(expectState("detached", function () { + attach: expectState("detached", function () { this.dbg.addDebuggees(); this._navigationLifetimePool = this._createActorPool(); @@ -98,15 +75,12 @@ var PromisesActor = protocol.ActorClass({ events.on(this.parent, "window-ready", this._onWindowReady); this.state = "attached"; - }, "attaching to the PromisesActor"), { - request: {}, - response: {} - }), + }, "attaching to the PromisesActor"), /** * Detach from the PromisesActor upon Debugger closing. */ - detach: method(expectState("attached", function () { + detach: expectState("attached", function () { this.dbg.removeAllDebuggees(); this.dbg.enabled = false; this._dbg = null; @@ -121,9 +95,6 @@ var PromisesActor = protocol.ActorClass({ events.off(this.parent, "window-ready", this._onWindowReady); this.state = "detached"; - }, "detaching from the PromisesActor"), { - request: {}, - response: {} }), _createActorPool: function () { @@ -179,7 +150,7 @@ var PromisesActor = protocol.ActorClass({ /** * Get a list of ObjectActors for all live Promise Objects. */ - listPromises: method(function () { + listPromises: function () { let promises = this.dbg.findObjects({ class: "Promise" }); this.dbg.onNewPromise = this._makePromiseEventHandler(this._newPromises, @@ -188,13 +159,7 @@ var PromisesActor = protocol.ActorClass({ this._promisesSettled, "promises-settled"); return promises.map(p => this._createObjectActorForPromise(p)); - }, { - request: { - }, - response: { - promises: RetVal("array:ObjectActor") - } - }), + }, /** * Creates an event handler for onNewPromise that will add the new @@ -233,15 +198,3 @@ var PromisesActor = protocol.ActorClass({ }); exports.PromisesActor = PromisesActor; - -exports.PromisesFront = protocol.FrontClass(PromisesActor, { - initialize: function (client, form) { - protocol.Front.prototype.initialize.call(this, client, form); - this.actorID = form.promisesActor; - this.manage(this); - }, - - destroy: function () { - protocol.Front.prototype.destroy.call(this); - } -}); diff --git a/devtools/server/tests/unit/test_promises_actor_attach.js b/devtools/server/tests/unit/test_promises_actor_attach.js index 5cadb1ef3870..17c2a1f41620 100644 --- a/devtools/server/tests/unit/test_promises_actor_attach.js +++ b/devtools/server/tests/unit/test_promises_actor_attach.js @@ -6,7 +6,7 @@ * states. */ -const { PromisesFront } = require("devtools/server/actors/promises"); +const { PromisesFront } = require("devtools/shared/fronts/promises"); add_task(function* () { let client = yield startTestDebuggerServer("promises-actor-test"); diff --git a/devtools/server/tests/unit/test_promises_actor_list_promises.js b/devtools/server/tests/unit/test_promises_actor_list_promises.js index ebbd3f23c3e7..f5b27312100d 100644 --- a/devtools/server/tests/unit/test_promises_actor_list_promises.js +++ b/devtools/server/tests/unit/test_promises_actor_list_promises.js @@ -8,7 +8,7 @@ "use strict"; -const { PromisesFront } = require("devtools/server/actors/promises"); +const { PromisesFront } = require("devtools/shared/fronts/promises"); const SECRET = "MyLittleSecret"; add_task(function* () { diff --git a/devtools/server/tests/unit/test_promises_actor_onnewpromise.js b/devtools/server/tests/unit/test_promises_actor_onnewpromise.js index f560cc1e6e1e..04b3e6510569 100644 --- a/devtools/server/tests/unit/test_promises_actor_onnewpromise.js +++ b/devtools/server/tests/unit/test_promises_actor_onnewpromise.js @@ -8,7 +8,7 @@ "use strict"; -const { PromisesFront } = require("devtools/server/actors/promises"); +const { PromisesFront } = require("devtools/shared/fronts/promises"); var events = require("sdk/event/core"); diff --git a/devtools/server/tests/unit/test_promises_actor_onpromisesettled.js b/devtools/server/tests/unit/test_promises_actor_onpromisesettled.js index 2f5d9b286838..ab47747339e9 100644 --- a/devtools/server/tests/unit/test_promises_actor_onpromisesettled.js +++ b/devtools/server/tests/unit/test_promises_actor_onpromisesettled.js @@ -10,7 +10,7 @@ Cu.import("resource://testing-common/PromiseTestUtils.jsm", this); -const { PromisesFront } = require("devtools/server/actors/promises"); +const { PromisesFront } = require("devtools/shared/fronts/promises"); var events = require("sdk/event/core"); diff --git a/devtools/server/tests/unit/test_promises_client_getdependentpromises.js b/devtools/server/tests/unit/test_promises_client_getdependentpromises.js index b775c764e583..8900cf81cfc3 100644 --- a/devtools/server/tests/unit/test_promises_client_getdependentpromises.js +++ b/devtools/server/tests/unit/test_promises_client_getdependentpromises.js @@ -7,7 +7,7 @@ "use strict"; -const { PromisesFront } = require("devtools/server/actors/promises"); +const { PromisesFront } = require("devtools/shared/fronts/promises"); var events = require("sdk/event/core"); diff --git a/devtools/server/tests/unit/test_promises_object_creationtimestamp.js b/devtools/server/tests/unit/test_promises_object_creationtimestamp.js index 0c2372dacc76..1360be56ae98 100644 --- a/devtools/server/tests/unit/test_promises_object_creationtimestamp.js +++ b/devtools/server/tests/unit/test_promises_object_creationtimestamp.js @@ -7,7 +7,7 @@ "use strict"; -const { PromisesFront } = require("devtools/server/actors/promises"); +const { PromisesFront } = require("devtools/shared/fronts/promises"); var events = require("sdk/event/core"); diff --git a/devtools/server/tests/unit/test_promises_object_timetosettle-01.js b/devtools/server/tests/unit/test_promises_object_timetosettle-01.js index 8aea8d2aee4f..1b3240e3d66b 100644 --- a/devtools/server/tests/unit/test_promises_object_timetosettle-01.js +++ b/devtools/server/tests/unit/test_promises_object_timetosettle-01.js @@ -8,7 +8,7 @@ "use strict"; -const { PromisesFront } = require("devtools/server/actors/promises"); +const { PromisesFront } = require("devtools/shared/fronts/promises"); var events = require("sdk/event/core"); diff --git a/devtools/server/tests/unit/test_promises_object_timetosettle-02.js b/devtools/server/tests/unit/test_promises_object_timetosettle-02.js index 7c5cab63f23d..10224d0b99b1 100644 --- a/devtools/server/tests/unit/test_promises_object_timetosettle-02.js +++ b/devtools/server/tests/unit/test_promises_object_timetosettle-02.js @@ -7,7 +7,7 @@ "use strict"; -const { PromisesFront } = require("devtools/server/actors/promises"); +const { PromisesFront } = require("devtools/shared/fronts/promises"); const { setTimeout } = require("sdk/timers"); var events = require("sdk/event/core"); diff --git a/devtools/shared/fronts/moz.build b/devtools/shared/fronts/moz.build index 2b3459b1846a..2aad62800d1c 100644 --- a/devtools/shared/fronts/moz.build +++ b/devtools/shared/fronts/moz.build @@ -15,6 +15,7 @@ DevToolsModules( 'highlighters.js', 'inspector.js', 'preference.js', + 'promises.js', 'settings.js', 'storage.js', 'styles.js', diff --git a/devtools/shared/fronts/promises.js b/devtools/shared/fronts/promises.js new file mode 100644 index 000000000000..72896455d778 --- /dev/null +++ b/devtools/shared/fronts/promises.js @@ -0,0 +1,27 @@ +/* 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; diff --git a/devtools/shared/specs/moz.build b/devtools/shared/specs/moz.build index 8cd57f5e490f..3de3d2f06688 100644 --- a/devtools/shared/specs/moz.build +++ b/devtools/shared/specs/moz.build @@ -20,6 +20,7 @@ DevToolsModules( 'inspector.js', 'node.js', 'preference.js', + 'promises.js', 'script.js', 'settings.js', 'source.js', diff --git a/devtools/shared/specs/promises.js b/devtools/shared/specs/promises.js new file mode 100644 index 000000000000..ef57c3bae35d --- /dev/null +++ b/devtools/shared/specs/promises.js @@ -0,0 +1,56 @@ +/* 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.grip(), + 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;