browser_dbg_globalactor.js (2090B)
1 /* Any copyright is dedicated to the Public Domain. 2 * http://creativecommons.org/publicdomain/zero/1.0/ */ 3 4 /** 5 * Check extension-added global actor API. 6 */ 7 8 "use strict"; 9 10 var { 11 DevToolsServer, 12 } = require("resource://devtools/server/devtools-server.js"); 13 var { 14 ActorRegistry, 15 } = require("resource://devtools/server/actors/utils/actor-registry.js"); 16 var { 17 DevToolsClient, 18 } = require("resource://devtools/client/devtools-client.js"); 19 20 const ACTORS_URL = EXAMPLE_URL + "testactors.js"; 21 22 add_task(async function () { 23 DevToolsServer.init(); 24 DevToolsServer.registerAllActors(); 25 26 ActorRegistry.registerModule(ACTORS_URL, { 27 prefix: "testOne", 28 constructor: "TestActor1", 29 type: { global: true }, 30 }); 31 32 const transport = DevToolsServer.connectPipe(); 33 const client = new DevToolsClient(transport); 34 const [type] = await client.connect(); 35 is(type, "browser", "Root actor should identify itself as a browser."); 36 37 let response = await client.mainRoot.rootForm; 38 const globalActor = response.testOneActor; 39 ok(globalActor, "Found the test global actor."); 40 ok( 41 globalActor.includes("testOne"), 42 "testGlobalActor1's typeName should be used." 43 ); 44 45 response = await client.request({ to: globalActor, type: "ping" }); 46 is(response.pong, "pong", "Actor should respond to requests."); 47 48 // Send another ping to see if the same actor is used. 49 response = await client.request({ to: globalActor, type: "ping" }); 50 is(response.pong, "pong", "Actor should respond to requests."); 51 52 // Make sure that lazily-created actors are created only once. 53 let count = 0; 54 for (const connID of Object.getOwnPropertyNames( 55 DevToolsServer._connections 56 )) { 57 const conn = DevToolsServer._connections[connID]; 58 const computedPrefix = conn._prefix + "testOne"; 59 for (const pool of conn._extraPools) { 60 for (const actor of pool.poolChildren()) { 61 if (actor.actorID.startsWith(computedPrefix)) { 62 count++; 63 } 64 } 65 } 66 } 67 68 is(count, 1, "Only one actor exists in all pools. One global actor."); 69 70 await client.close(); 71 });