tor-browser

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

test_unregister_invalid_json.js (2564B)


      1 /* Any copyright is dedicated to the Public Domain.
      2   http://creativecommons.org/publicdomain/zero/1.0/ */
      3 
      4 "use strict";
      5 
      6 const userAgentID = "7f0af1bb-7e1f-4fb8-8e4a-e8de434abde3";
      7 
      8 function run_test() {
      9  do_get_profile();
     10  setPrefs({
     11    userAgentID,
     12    requestTimeout: 150,
     13    retryBaseInterval: 150,
     14  });
     15  run_next_test();
     16 }
     17 
     18 add_task(async function test_unregister_invalid_json() {
     19  let db = PushServiceWebSocket.newPushDB();
     20  registerCleanupFunction(() => {
     21    return db.drop().then(_ => db.close());
     22  });
     23  let records = [
     24    {
     25      channelID: "87902e90-c57e-4d18-8354-013f4a556559",
     26      pushEndpoint: "https://example.org/update/1",
     27      scope: "https://example.edu/page/1",
     28      originAttributes: "",
     29      version: 1,
     30      quota: Infinity,
     31    },
     32    {
     33      channelID: "057caa8f-9b99-47ff-891c-adad18ce603e",
     34      pushEndpoint: "https://example.com/update/2",
     35      scope: "https://example.net/page/1",
     36      originAttributes: "",
     37      version: 1,
     38      quota: Infinity,
     39    },
     40  ];
     41  for (let record of records) {
     42    await db.put(record);
     43  }
     44 
     45  let unregisterDone;
     46  let unregisterPromise = new Promise(
     47    resolve => (unregisterDone = after(2, resolve))
     48  );
     49  await PushService.init({
     50    serverURI: "wss://push.example.org/",
     51    db,
     52    makeWebSocket(uri) {
     53      return new MockWebSocket(uri, {
     54        onHello() {
     55          this.serverSendMsg(
     56            JSON.stringify({
     57              messageType: "hello",
     58              status: 200,
     59              uaid: userAgentID,
     60              use_webpush: true,
     61            })
     62          );
     63        },
     64        onUnregister() {
     65          this.serverSendMsg(");alert(1);(");
     66          unregisterDone();
     67        },
     68      });
     69    },
     70  });
     71 
     72  await Assert.rejects(
     73    PushService.unregister({
     74      scope: "https://example.edu/page/1",
     75      originAttributes: "",
     76    }),
     77    /Request timed out/,
     78    "Expected error for first invalid JSON response"
     79  );
     80 
     81  let record = await db.getByKeyID("87902e90-c57e-4d18-8354-013f4a556559");
     82  ok(!record, "Failed to delete unregistered record");
     83 
     84  await Assert.rejects(
     85    PushService.unregister({
     86      scope: "https://example.net/page/1",
     87      originAttributes: ChromeUtils.originAttributesToSuffix({
     88        inIsolatedMozBrowser: false,
     89      }),
     90    }),
     91    /Request timed out/,
     92    "Expected error for second invalid JSON response"
     93  );
     94 
     95  record = await db.getByKeyID("057caa8f-9b99-47ff-891c-adad18ce603e");
     96  ok(
     97    !record,
     98    "Failed to delete unregistered record after receiving invalid JSON"
     99  );
    100 
    101  await unregisterPromise;
    102 });