tor-browser

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

test_blocked_order.js (4687B)


      1 /**
      2 * Any copyright is dedicated to the Public Domain.
      3 * http://creativecommons.org/publicdomain/zero/1.0/
      4 */
      5 
      6 /* exported testGenerator */
      7 var testGenerator = testSteps();
      8 
      9 function* testSteps() {
     10  const databaseName = "window" in this ? window.location.pathname : "Test";
     11  const databaseCount = 10;
     12 
     13  // Test 1: Make sure basic versionchange events work and that they don't
     14  //         trigger blocked events.
     15  info("Opening " + databaseCount + " databases with version 1");
     16 
     17  let databases = [];
     18 
     19  for (let i = 0; i < databaseCount; i++) {
     20    let thisIndex = i;
     21 
     22    info("Opening database " + thisIndex);
     23 
     24    let request = indexedDB.open(databaseName, 1);
     25    request.onerror = errorHandler;
     26    request.onblocked = errorHandler;
     27    request.onsuccess = grabEventAndContinueHandler;
     28 
     29    let event = yield undefined;
     30 
     31    is(event.type, "success", "Got success event");
     32 
     33    let db = request.result;
     34    is(db.version, 1, "Got version 1");
     35 
     36    db.onversionchange = function () {
     37      info("Closing database " + thisIndex);
     38      db.close();
     39 
     40      databases.splice(databases.indexOf(db), 1);
     41    };
     42 
     43    databases.push(db);
     44  }
     45 
     46  is(databases.length, databaseCount, "Created all databases with version 1");
     47 
     48  info("Opening database with version 2");
     49 
     50  let request = indexedDB.open(databaseName, 2);
     51  request.onerror = errorHandler;
     52  request.onsuccess = grabEventAndContinueHandler;
     53 
     54  request.onblocked = function () {
     55    ok(false, "Should not receive a blocked event");
     56  };
     57 
     58  let event = yield undefined;
     59 
     60  is(event.type, "success", "Got success event");
     61  is(databases.length, 0, "All databases with version 1 were closed");
     62 
     63  let db = request.result;
     64  is(db.version, 2, "Got version 2");
     65 
     66  info("Deleting database with version 2");
     67  db.close();
     68 
     69  request = indexedDB.deleteDatabase(databaseName);
     70  request.onerror = errorHandler;
     71  request.onsuccess = grabEventAndContinueHandler;
     72 
     73  event = yield undefined;
     74 
     75  is(event.type, "success", "Got success event");
     76 
     77  // Test 2: Make sure blocked events aren't delivered until all versionchange
     78  //         events have been delivered.
     79  info("Opening " + databaseCount + " databases with version 1");
     80 
     81  for (let i = 0; i < databaseCount; i++) {
     82    let thisIndex = i;
     83 
     84    info("Opening database " + thisIndex);
     85 
     86    let request = indexedDB.open(databaseName, 1);
     87    request.onerror = errorHandler;
     88    request.onblocked = errorHandler;
     89    request.onsuccess = grabEventAndContinueHandler;
     90 
     91    let event = yield undefined;
     92 
     93    is(event.type, "success", "Got success event");
     94 
     95    let db = request.result;
     96    is(db.version, 1, "Got version 1");
     97 
     98    db.onversionchange = function () {
     99      if (thisIndex == databaseCount - 1) {
    100        info("Closing all databases with version 1");
    101 
    102        for (let j = 0; j < databases.length; j++) {
    103          databases[j].close();
    104        }
    105 
    106        databases = [];
    107        info("Done closing all databases with version 1");
    108      } else {
    109        info("Not closing database " + thisIndex);
    110      }
    111    };
    112 
    113    databases.push(db);
    114  }
    115 
    116  is(databases.length, databaseCount, "Created all databases with version 1");
    117 
    118  info("Opening database with version 2");
    119 
    120  request = indexedDB.open(databaseName, 2);
    121  request.onerror = errorHandler;
    122  request.onsuccess = grabEventAndContinueHandler;
    123 
    124  request.onblocked = function () {
    125    ok(false, "Should not receive a blocked event");
    126  };
    127 
    128  event = yield undefined;
    129 
    130  is(event.type, "success", "Got success event");
    131  is(databases.length, 0, "All databases with version 1 were closed");
    132 
    133  db = request.result;
    134  is(db.version, 2, "Got version 2");
    135 
    136  info("Deleting database with version 2");
    137  db.close();
    138 
    139  request = indexedDB.deleteDatabase(databaseName);
    140  request.onerror = errorHandler;
    141  request.onsuccess = grabEventAndContinueHandler;
    142 
    143  event = yield undefined;
    144 
    145  is(event.type, "success", "Got success event");
    146 
    147  // Test 3: A blocked database left in that state should not hang shutdown.
    148  info("Opening 1 database with version 1");
    149 
    150  request = indexedDB.open(databaseName, 1);
    151  request.onerror = errorHandler;
    152  request.onblocked = errorHandler;
    153  request.onsuccess = grabEventAndContinueHandler;
    154 
    155  event = yield undefined;
    156 
    157  is(event.type, "success", "Got success event");
    158 
    159  db = request.result;
    160  is(db.version, 1, "Got version 1");
    161 
    162  info("Opening database with version 2");
    163 
    164  request = indexedDB.open(databaseName, 2);
    165  request.onerror = function (e) {
    166    e.preventDefault();
    167  };
    168  request.onsuccess = errorHandler;
    169 
    170  request.onblocked = grabEventAndContinueHandler;
    171 
    172  event = yield undefined;
    173  ok(true, "Got blocked");
    174  // Just allow this to remain blocked ...
    175 
    176  finishTest();
    177 }