test_artificialFailure.js (2458B)
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 testArtificialFailure() { 17 const categories = [ 18 Ci.nsIQuotaArtificialFailure.CATEGORY_NONE, 19 Ci.nsIQuotaArtificialFailure.CATEGORY_INITIALIZE_ORIGIN, 20 ]; 21 const principal = PrincipalUtils.createPrincipal("https://example.com"); 22 const name = "foo"; 23 24 for (let category of categories) { 25 info("Creating database"); 26 27 { 28 const connection = SimpleDBUtils.createConnection(principal); 29 30 const openRequest = connection.open(name); 31 await SimpleDBUtils.requestFinished(openRequest); 32 33 const closeRequest = connection.close(); 34 await SimpleDBUtils.requestFinished(closeRequest); 35 } 36 37 info("Resetting storage"); 38 39 { 40 const request = Services.qms.reset(); 41 await QuotaUtils.requestFinished(request); 42 } 43 44 info("Opening database"); 45 46 const ex = await QuotaUtils.withArtificialFailures( 47 category, 48 /* probability */ 100, 49 Cr.NS_ERROR_FILE_ACCESS_DENIED, 50 async function () { 51 const connection = SimpleDBUtils.createConnection(principal); 52 const request = connection.open(name); 53 try { 54 await SimpleDBUtils.requestFinished(request); 55 return null; 56 } catch (ex) { 57 return ex; 58 } 59 } 60 ); 61 62 if (category == Ci.nsIQuotaArtificialFailure.CATEGORY_NONE) { 63 Assert.ok(!ex, "Should not have thrown"); 64 } else { 65 Assert.ok(ex, "Should have thrown"); 66 Assert.strictEqual( 67 ex.resultCode, 68 // NS_ERROR_FILE_ACCESS_DENIED is mapped to NS_ERROR_FAILURE during error 69 // propagation. 70 NS_ERROR_FAILURE, 71 "Threw right result code" 72 ); 73 } 74 75 info("Clearing storage"); 76 77 { 78 const request = Services.qms.clear(); 79 await QuotaUtils.requestFinished(request); 80 } 81 } 82 } 83 84 async function testSteps() { 85 add_task( 86 { 87 pref_set: [["dom.quotaManager.loadQuotaFromCache", false]], 88 }, 89 testArtificialFailure 90 ); 91 }