test_slowStorageInitialization.js (2017B)
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 { IndexedDBUtils } = ChromeUtils.importESModule( 13 "resource://testing-common/dom/indexedDB/test/modules/IndexedDBUtils.sys.mjs" 14 ); 15 const { TestUtils } = ChromeUtils.importESModule( 16 "resource://testing-common/TestUtils.sys.mjs" 17 ); 18 19 async function testNewDatabase() { 20 const principal = PrincipalUtils.createPrincipal("https://example.com"); 21 const name = "test_slowStorageInitialization.js"; 22 23 info( 24 "Testing origin clearing requested after starting client directory opening" 25 ); 26 27 info("Starting database opening"); 28 29 const openPromise = (async function () { 30 const request = indexedDB.openForPrincipal(principal, name); 31 const promise = IndexedDBUtils.requestFinished(request); 32 return promise; 33 })(); 34 35 info("Waiting for client directory opening to start"); 36 37 await TestUtils.topicObserved("QuotaManager::ClientDirectoryOpeningStarted"); 38 39 info("Starting origin clearing"); 40 41 const clearPromise = (async function () { 42 const request = Services.qms.clearStoragesForPrincipal(principal); 43 const promise = QuotaUtils.requestFinished(request); 44 return promise; 45 })(); 46 47 info("Waiting for database to finish opening"); 48 49 try { 50 await openPromise; 51 ok(false, "Should have thrown"); 52 } catch (e) { 53 ok(true, "Should have thrown"); 54 Assert.strictEqual(e.name, "AbortError", "Threw right result code"); 55 } 56 57 info("Waiting for origin to finish clearing"); 58 59 await clearPromise; 60 } 61 62 /* exported testSteps */ 63 async function testSteps() { 64 add_task( 65 { 66 pref_set: [ 67 ["dom.quotaManager.storageInitialization.pauseOnIOThreadMs", 2000], 68 ], 69 }, 70 testNewDatabase 71 ); 72 }