test_add_actors.js (3192B)
1 /* Any copyright is dedicated to the Public Domain. 2 http://creativecommons.org/publicdomain/zero/1.0/ */ 3 4 "use strict"; 5 6 // Get the object, from the server side, for a given actor ID 7 function getActorInstance(connID, actorID) { 8 return DevToolsServer._connections[connID].getActor(actorID); 9 } 10 11 /** 12 * The purpose of these tests is to verify that it's possible to add actors 13 * both before and after the DevToolsServer has been initialized, so addons 14 * that add actors don't have to poll the object for its initialization state 15 * in order to add actors after initialization but rather can add actors anytime 16 * regardless of the object's state. 17 */ 18 add_task(async function () { 19 ActorRegistry.registerModule("resource://test/pre_init_global_actors.js", { 20 prefix: "preInitGlobal", 21 constructor: "PreInitGlobalActor", 22 type: { global: true }, 23 }); 24 ActorRegistry.registerModule( 25 "resource://test/pre_init_target_scoped_actors.js", 26 { 27 prefix: "preInitTargetScoped", 28 constructor: "PreInitTargetScopedActor", 29 type: { target: true }, 30 } 31 ); 32 33 const client = await startTestDevToolsServer("example tab"); 34 35 ActorRegistry.registerModule("resource://test/post_init_global_actors.js", { 36 prefix: "postInitGlobal", 37 constructor: "PostInitGlobalActor", 38 type: { global: true }, 39 }); 40 ActorRegistry.registerModule( 41 "resource://test/post_init_target_scoped_actors.js", 42 { 43 prefix: "postInitTargetScoped", 44 constructor: "PostInitTargetScopedActor", 45 type: { target: true }, 46 } 47 ); 48 49 let actors = await client.mainRoot.rootForm; 50 const tabs = await client.mainRoot.listTabs(); 51 const tabDescriptor = tabs[0]; 52 53 // These xpcshell tests use mocked actors (xpcshell-test/testactors) 54 // which still don't support watcher actor. 55 // Because of that we still can't enable server side targets and target swiching. 56 tabDescriptor.disableTargetSwitching(); 57 58 const tabTarget = await tabDescriptor.getTarget(); 59 60 Assert.equal(tabs.length, 1); 61 62 let reply = await client.request({ 63 to: actors.preInitGlobalActor, 64 type: "ping", 65 }); 66 Assert.equal(reply.message, "pong"); 67 68 reply = await client.request({ 69 to: tabTarget.targetForm.preInitTargetScopedActor, 70 type: "ping", 71 }); 72 Assert.equal(reply.message, "pong"); 73 74 reply = await client.request({ 75 to: actors.postInitGlobalActor, 76 type: "ping", 77 }); 78 Assert.equal(reply.message, "pong"); 79 80 reply = await client.request({ 81 to: tabTarget.targetForm.postInitTargetScopedActor, 82 type: "ping", 83 }); 84 Assert.equal(reply.message, "pong"); 85 86 // Consider that there is only one connection, and the first one is ours 87 const connID = Object.keys(DevToolsServer._connections)[0]; 88 const postInitGlobalActor = getActorInstance( 89 connID, 90 actors.postInitGlobalActor 91 ); 92 const preInitGlobalActor = getActorInstance( 93 connID, 94 actors.preInitGlobalActor 95 ); 96 actors = await client.mainRoot.getRoot(); 97 Assert.equal( 98 postInitGlobalActor, 99 getActorInstance(connID, actors.postInitGlobalActor) 100 ); 101 Assert.equal( 102 preInitGlobalActor, 103 getActorInstance(connID, actors.preInitGlobalActor) 104 ); 105 106 await client.close(); 107 });