test_slowDatabaseInitialization.js (1997B)
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 const { TestUtils } = ChromeUtils.importESModule( 16 "resource://testing-common/TestUtils.sys.mjs" 17 ); 18 19 add_task( 20 { 21 pref_set: [["dom.simpledb.databaseInitialization.pauseOnIOThreadMs", 2000]], 22 }, 23 async function testSteps() { 24 const principal = PrincipalUtils.createPrincipal("https://example.com"); 25 const name = "test_slowStorageInitialization.js"; 26 27 info("Testing origin clearing requested after starting database work"); 28 29 info("Starting database opening"); 30 31 const openPromise = (function () { 32 const connection = SimpleDBUtils.createConnection(principal); 33 const request = connection.open(name); 34 const promise = SimpleDBUtils.requestFinished(request); 35 return promise; 36 })(); 37 38 info("Waiting for database work to start"); 39 40 await TestUtils.topicObserved("SimpleDB::DatabaseWorkStarted"); 41 42 info("Starting origin clearing"); 43 44 const clearPromise = (async function () { 45 const request = Services.qms.clearStoragesForPrincipal(principal); 46 const promise = QuotaUtils.requestFinished(request); 47 return promise; 48 })(); 49 50 info("Waiting for database to finish opening"); 51 52 try { 53 await openPromise; 54 ok(false, "Should have thrown"); 55 } catch (e) { 56 ok(true, "Should have thrown"); 57 Assert.strictEqual( 58 e.resultCode, 59 Cr.NS_ERROR_ABORT, 60 "Threw right result code" 61 ); 62 } 63 64 info("Waiting for origin to finish clearing"); 65 66 await clearPromise; 67 } 68 );