test_initializeTemporaryOrigin_failure.js (4386B)
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 testCachedOrigins() { 17 const origin = "https://example.com"; 18 const principal = PrincipalUtils.createPrincipal(origin); 19 20 info("Clearing"); 21 22 { 23 const request = Services.qms.clear(); 24 await QuotaUtils.requestFinished(request); 25 } 26 27 info("Initializing"); 28 29 { 30 const request = Services.qms.init(); 31 await QuotaUtils.requestFinished(request); 32 } 33 34 info("Initializing temporary storage"); 35 36 { 37 const request = Services.qms.initTemporaryStorage(); 38 await QuotaUtils.requestFinished(request); 39 } 40 41 info("Initializing origin"); 42 43 const ex = await QuotaUtils.withArtificialFailures( 44 Ci.nsIQuotaArtificialFailure.CATEGORY_CREATE_DIRECTORY_METADATA2, 45 /* probability */ 100, 46 Cr.NS_ERROR_UNEXPECTED, 47 async function () { 48 const request = Services.qms.initializeTemporaryOrigin( 49 "default", 50 principal, 51 /* aCreateIfNonExistent */ true 52 ); 53 try { 54 await QuotaUtils.requestFinished(request); 55 return null; 56 } catch (ex) { 57 return ex; 58 } 59 } 60 ); 61 62 Assert.ok(ex, "Should have thrown"); 63 Assert.strictEqual( 64 ex.resultCode, 65 NS_ERROR_UNEXPECTED, 66 "Threw right result code" 67 ); 68 69 info("Listing origins"); 70 71 const origins = await (async function () { 72 const request = Services.qms.listOrigins(); 73 const result = await QuotaUtils.requestFinished(request); 74 return result; 75 })(); 76 77 Assert.equal(origins.length, 1, "Returned one origin"); 78 Assert.equal(origins[0], origin, "Returned correct origin"); 79 80 info("Listing cached origins"); 81 82 const cachedOrigins = await (async function () { 83 const request = Services.qms.listCachedOrigins(); 84 const result = await QuotaUtils.requestFinished(request); 85 return result; 86 })(); 87 88 Assert.equal(cachedOrigins.length, 1, "Returned one origin"); 89 Assert.equal(cachedOrigins[0], origin, "Returned correct origin"); 90 91 info("Clearing storage"); 92 93 { 94 const request = Services.qms.clear(); 95 await QuotaUtils.requestFinished(request); 96 } 97 } 98 99 async function testCreateConnection() { 100 const principal = PrincipalUtils.createPrincipal("https://example.com"); 101 const name = "test_initializeTemporaryOrigin_failure.js"; 102 103 info("Clearing"); 104 105 { 106 const request = Services.qms.clear(); 107 await QuotaUtils.requestFinished(request); 108 } 109 110 info("Initializing"); 111 112 { 113 const request = Services.qms.init(); 114 await QuotaUtils.requestFinished(request); 115 } 116 117 info("Initializing temporary storage"); 118 119 { 120 const request = Services.qms.initTemporaryStorage(); 121 await QuotaUtils.requestFinished(request); 122 } 123 124 info("Initializing group"); 125 126 { 127 const request = Services.qms.initializeTemporaryGroup(principal); 128 await QuotaUtils.requestFinished(request); 129 } 130 131 info("Initializing origin"); 132 133 const ex = await QuotaUtils.withArtificialFailures( 134 Ci.nsIQuotaArtificialFailure.CATEGORY_CREATE_DIRECTORY_METADATA2, 135 /* probability */ 100, 136 Cr.NS_ERROR_UNEXPECTED, 137 async function () { 138 const request = Services.qms.initializeTemporaryOrigin( 139 "default", 140 principal, 141 /* aCreateIfNonExistent */ true 142 ); 143 try { 144 await QuotaUtils.requestFinished(request); 145 return null; 146 } catch (ex) { 147 return ex; 148 } 149 } 150 ); 151 152 Assert.ok(ex, "Should have thrown"); 153 Assert.strictEqual( 154 ex.resultCode, 155 NS_ERROR_UNEXPECTED, 156 "Threw right result code" 157 ); 158 159 info("Opening database"); 160 161 { 162 const connection = SimpleDBUtils.createConnection(principal); 163 const request = connection.open(name); 164 await SimpleDBUtils.requestFinished(request); 165 } 166 167 info("Clearing storage"); 168 169 { 170 const request = Services.qms.clear(); 171 await QuotaUtils.requestFinished(request); 172 } 173 } 174 175 /* exported testSteps */ 176 async function testSteps() { 177 add_task(testCachedOrigins); 178 add_task(testCreateConnection); 179 }