test_slowStorageInitialization.js (2079B)
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: [ 22 ["dom.quotaManager.storageInitialization.pauseOnIOThreadMs", 2000], 23 ], 24 }, 25 async function testSteps() { 26 const principal = PrincipalUtils.createPrincipal("https://example.com"); 27 const name = "test_slowStorageInitialization.js"; 28 29 info( 30 "Testing origin clearing requested after starting client directory opening" 31 ); 32 33 info("Starting database opening"); 34 35 const openPromise = (async function () { 36 const connection = SimpleDBUtils.createConnection(principal); 37 const request = connection.open(name); 38 const promise = SimpleDBUtils.requestFinished(request); 39 return promise; 40 })(); 41 42 info("Waiting for client directory opening to start"); 43 44 await TestUtils.topicObserved( 45 "QuotaManager::ClientDirectoryOpeningStarted" 46 ); 47 48 info("Starting origin clearing"); 49 50 const clearPromise = (async function () { 51 const request = Services.qms.clearStoragesForPrincipal(principal); 52 const promise = QuotaUtils.requestFinished(request); 53 return promise; 54 })(); 55 56 info("Waiting for database to finish opening"); 57 58 try { 59 await openPromise; 60 ok(false, "Should have thrown"); 61 } catch (e) { 62 ok(true, "Should have thrown"); 63 Assert.strictEqual( 64 e.resultCode, 65 Cr.NS_ERROR_ABORT, 66 "Threw right result code" 67 ); 68 } 69 70 info("Waiting for origin to finish clearing"); 71 72 await clearPromise; 73 } 74 );