tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

browser_actor_error.js (3028B)


      1 /* Any copyright is dedicated to the Public Domain.
      2 * http://creativecommons.org/publicdomain/zero/1.0/ */
      3 
      4 "use strict";
      5 
      6 /**
      7 * Test that clients can catch errors in actors.
      8 */
      9 
     10 const ACTORS_URL =
     11  "chrome://mochitests/content/browser/devtools/server/tests/browser/error-actor.js";
     12 
     13 add_task(async function test_old_actor() {
     14  DevToolsServer.init();
     15  DevToolsServer.registerAllActors();
     16 
     17  ActorRegistry.registerModule(ACTORS_URL, {
     18    prefix: "error",
     19    constructor: "ErrorActor",
     20    type: { global: true },
     21  });
     22 
     23  const transport = DevToolsServer.connectPipe();
     24  const gClient = new DevToolsClient(transport);
     25  await gClient.connect();
     26 
     27  const { errorActor } = await gClient.mainRoot.rootForm;
     28  ok(errorActor, "Found the error actor.");
     29 
     30  await Assert.rejects(
     31    gClient.request({ to: errorActor, type: "error" }),
     32    err =>
     33      err.error == "unknownError" &&
     34      /error occurred while processing 'error/.test(err.message),
     35    "The request should be rejected"
     36  );
     37 
     38  await gClient.close();
     39 });
     40 
     41 const TEST_ERRORS_ACTOR_URL =
     42  "chrome://mochitests/content/browser/devtools/server/tests/browser/test-errors-actor.js";
     43 add_task(async function test_protocoljs_actor() {
     44  DevToolsServer.init();
     45  DevToolsServer.registerAllActors();
     46 
     47  info("Register the new TestErrorsActor");
     48  require(TEST_ERRORS_ACTOR_URL);
     49  ActorRegistry.registerModule(TEST_ERRORS_ACTOR_URL, {
     50    prefix: "testErrors",
     51    constructor: "TestErrorsActor",
     52    type: { global: true },
     53  });
     54 
     55  info("Create a DevTools client/server pair");
     56  const transport = DevToolsServer.connectPipe();
     57  const gClient = new DevToolsClient(transport);
     58  await gClient.connect();
     59 
     60  info("Retrieve a TestErrorsFront instance");
     61  const testErrorsFront = await gClient.mainRoot.getFront("testErrors");
     62  ok(testErrorsFront, "has a TestErrorsFront instance");
     63 
     64  await Assert.rejects(testErrorsFront.throwsComponentsException(), e => {
     65    return new RegExp(
     66      `NS_ERROR_NOT_IMPLEMENTED from: ${testErrorsFront.actorID} ` +
     67        `\\(${TEST_ERRORS_ACTOR_URL}:\\d+:\\d+\\)`
     68    ).test(e.message);
     69  });
     70  await Assert.rejects(testErrorsFront.throwsException(), e => {
     71    // Not asserting the specific error message here, as it changes depending
     72    // on the channel.
     73    return new RegExp(
     74      `Protocol error \\(TypeError\\):.* from: ${testErrorsFront.actorID} ` +
     75        `\\(${TEST_ERRORS_ACTOR_URL}:\\d+:\\d+\\)`
     76    ).test(e.message);
     77  });
     78  await Assert.rejects(testErrorsFront.throwsJSError(), e => {
     79    return new RegExp(
     80      `Protocol error \\(Error\\): JSError from: ${testErrorsFront.actorID} ` +
     81        `\\(${TEST_ERRORS_ACTOR_URL}:\\d+:\\d+\\)`
     82    ).test(e.message);
     83  });
     84  await Assert.rejects(testErrorsFront.throwsString(), e => {
     85    return new RegExp(`ErrorString from: ${testErrorsFront.actorID}`).test(
     86      e.message
     87    );
     88  });
     89  await Assert.rejects(testErrorsFront.throwsObject(), e => {
     90    return new RegExp(`foo from: ${testErrorsFront.actorID}`).test(e.message);
     91  });
     92 
     93  await gClient.close();
     94 });