tor-browser

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

test_initializeTemporaryOrigin_failure.js (4386B)


      1 /**
      2 * Any copyright is dedicated to the Public Domain.
      3 * http://creativecommons.org/publicdomain/zero/1.0/
      4 */
      5 
      6 const { PrincipalUtils } = ChromeUtils.importESModule(
      7  "resource://testing-common/dom/quota/test/modules/PrincipalUtils.sys.mjs"
      8 );
      9 const { QuotaUtils } = ChromeUtils.importESModule(
     10  "resource://testing-common/dom/quota/test/modules/QuotaUtils.sys.mjs"
     11 );
     12 const { SimpleDBUtils } = ChromeUtils.importESModule(
     13  "resource://testing-common/dom/simpledb/test/modules/SimpleDBUtils.sys.mjs"
     14 );
     15 
     16 async function testCachedOrigins() {
     17  const origin = "https://example.com";
     18  const principal = PrincipalUtils.createPrincipal(origin);
     19 
     20  info("Clearing");
     21 
     22  {
     23    const request = Services.qms.clear();
     24    await QuotaUtils.requestFinished(request);
     25  }
     26 
     27  info("Initializing");
     28 
     29  {
     30    const request = Services.qms.init();
     31    await QuotaUtils.requestFinished(request);
     32  }
     33 
     34  info("Initializing temporary storage");
     35 
     36  {
     37    const request = Services.qms.initTemporaryStorage();
     38    await QuotaUtils.requestFinished(request);
     39  }
     40 
     41  info("Initializing origin");
     42 
     43  const ex = await QuotaUtils.withArtificialFailures(
     44    Ci.nsIQuotaArtificialFailure.CATEGORY_CREATE_DIRECTORY_METADATA2,
     45    /* probability */ 100,
     46    Cr.NS_ERROR_UNEXPECTED,
     47    async function () {
     48      const request = Services.qms.initializeTemporaryOrigin(
     49        "default",
     50        principal,
     51        /* aCreateIfNonExistent */ true
     52      );
     53      try {
     54        await QuotaUtils.requestFinished(request);
     55        return null;
     56      } catch (ex) {
     57        return ex;
     58      }
     59    }
     60  );
     61 
     62  Assert.ok(ex, "Should have thrown");
     63  Assert.strictEqual(
     64    ex.resultCode,
     65    NS_ERROR_UNEXPECTED,
     66    "Threw right result code"
     67  );
     68 
     69  info("Listing origins");
     70 
     71  const origins = await (async function () {
     72    const request = Services.qms.listOrigins();
     73    const result = await QuotaUtils.requestFinished(request);
     74    return result;
     75  })();
     76 
     77  Assert.equal(origins.length, 1, "Returned one origin");
     78  Assert.equal(origins[0], origin, "Returned correct origin");
     79 
     80  info("Listing cached origins");
     81 
     82  const cachedOrigins = await (async function () {
     83    const request = Services.qms.listCachedOrigins();
     84    const result = await QuotaUtils.requestFinished(request);
     85    return result;
     86  })();
     87 
     88  Assert.equal(cachedOrigins.length, 1, "Returned one origin");
     89  Assert.equal(cachedOrigins[0], origin, "Returned correct origin");
     90 
     91  info("Clearing storage");
     92 
     93  {
     94    const request = Services.qms.clear();
     95    await QuotaUtils.requestFinished(request);
     96  }
     97 }
     98 
     99 async function testCreateConnection() {
    100  const principal = PrincipalUtils.createPrincipal("https://example.com");
    101  const name = "test_initializeTemporaryOrigin_failure.js";
    102 
    103  info("Clearing");
    104 
    105  {
    106    const request = Services.qms.clear();
    107    await QuotaUtils.requestFinished(request);
    108  }
    109 
    110  info("Initializing");
    111 
    112  {
    113    const request = Services.qms.init();
    114    await QuotaUtils.requestFinished(request);
    115  }
    116 
    117  info("Initializing temporary storage");
    118 
    119  {
    120    const request = Services.qms.initTemporaryStorage();
    121    await QuotaUtils.requestFinished(request);
    122  }
    123 
    124  info("Initializing group");
    125 
    126  {
    127    const request = Services.qms.initializeTemporaryGroup(principal);
    128    await QuotaUtils.requestFinished(request);
    129  }
    130 
    131  info("Initializing origin");
    132 
    133  const ex = await QuotaUtils.withArtificialFailures(
    134    Ci.nsIQuotaArtificialFailure.CATEGORY_CREATE_DIRECTORY_METADATA2,
    135    /* probability */ 100,
    136    Cr.NS_ERROR_UNEXPECTED,
    137    async function () {
    138      const request = Services.qms.initializeTemporaryOrigin(
    139        "default",
    140        principal,
    141        /* aCreateIfNonExistent */ true
    142      );
    143      try {
    144        await QuotaUtils.requestFinished(request);
    145        return null;
    146      } catch (ex) {
    147        return ex;
    148      }
    149    }
    150  );
    151 
    152  Assert.ok(ex, "Should have thrown");
    153  Assert.strictEqual(
    154    ex.resultCode,
    155    NS_ERROR_UNEXPECTED,
    156    "Threw right result code"
    157  );
    158 
    159  info("Opening database");
    160 
    161  {
    162    const connection = SimpleDBUtils.createConnection(principal);
    163    const request = connection.open(name);
    164    await SimpleDBUtils.requestFinished(request);
    165  }
    166 
    167  info("Clearing storage");
    168 
    169  {
    170    const request = Services.qms.clear();
    171    await QuotaUtils.requestFinished(request);
    172  }
    173 }
    174 
    175 /* exported testSteps */
    176 async function testSteps() {
    177  add_task(testCachedOrigins);
    178  add_task(testCreateConnection);
    179 }