test_upgradeStorageFrom1_0_stripObsoleteOriginAttributes.js (4963B)
1 /** 2 * Any copyright is dedicated to the Public Domain. 3 * http://creativecommons.org/publicdomain/zero/1.0/ 4 */ 5 6 /** 7 * This test is mainly to verify MaybeStripObsoleteOriginAttributes method. 8 */ 9 10 loadScript("dom/quota/test/common/file.js"); 11 12 function* testSteps() { 13 const origins = [ 14 { 15 oldPath: 16 "storage/permanent/moz-extension+++8ea6d31b-917c-431f-a204-15b95e904d4f^addonId=indexedDB-test%40kmaglione.mozilla.com", 17 newPath: 18 "storage/permanent/moz-extension+++8ea6d31b-917c-431f-a204-15b95e904d4f", 19 url: "moz-extension://8ea6d31b-917c-431f-a204-15b95e904d4f", 20 persistence: "persistent", 21 }, 22 23 { 24 oldPath: 25 "storage/temporary/moz-extension+++8ea6d31b-917c-431f-a204-15b95e904d4f^addonId=indexedDB-test%40kmaglione.mozilla.com", 26 newPath: 27 "storage/temporary/moz-extension+++8ea6d31b-917c-431f-a204-15b95e904d4f", 28 url: "moz-extension://8ea6d31b-917c-431f-a204-15b95e904d4f", 29 persistence: "temporary", 30 }, 31 32 { 33 oldPath: 34 "storage/default/moz-extension+++8ea6d31b-917c-431f-a204-15b95e904d4f^addonId=indexedDB-test%40kmaglione.mozilla.com", 35 newPath: 36 "storage/default/moz-extension+++8ea6d31b-917c-431f-a204-15b95e904d4f", 37 url: "moz-extension://8ea6d31b-917c-431f-a204-15b95e904d4f", 38 persistence: "default", 39 }, 40 ]; 41 42 const metadataFileName = ".metadata-v2"; 43 44 const packages = [ 45 // Storage used by FF 49-54 (storage version 1.0 with obsolete origin 46 // attributes). 47 "version1_0_obsoleteOriginAttributes_profile", 48 "../defaultStorageDirectory_shared", 49 ]; 50 51 let metadataBuffers = []; 52 53 info("Clearing"); 54 55 clear(continueToNextStepSync); 56 yield undefined; 57 58 info("Verifying storage"); 59 60 verifyStorage(packages, "beforeInstall"); 61 62 info("Installing packages"); 63 64 installPackages(packages); 65 66 info("Verifying storage"); 67 68 verifyStorage(packages, "afterInstall"); 69 70 info("Checking origin directories"); 71 72 for (let origin of origins) { 73 let originDir = getRelativeFile(origin.oldPath); 74 let exists = originDir.exists(); 75 ok(exists, "Origin directory does exist"); 76 77 info("Reading out contents of metadata file"); 78 79 let metadataFile = originDir.clone(); 80 metadataFile.append(metadataFileName); 81 82 File.createFromNsIFile(metadataFile).then(grabArgAndContinueHandler); 83 let file = yield undefined; 84 85 let fileReader = new FileReader(); 86 fileReader.onload = continueToNextStepSync; 87 fileReader.readAsArrayBuffer(file); 88 89 yield undefined; 90 91 metadataBuffers.push(fileReader.result); 92 93 originDir = getRelativeFile(origin.newPath); 94 exists = originDir.exists(); 95 ok(!exists, "Origin directory doesn't exist"); 96 } 97 98 info("Initializing"); 99 100 let request = init(continueToNextStepSync); 101 yield undefined; 102 103 Assert.equal(request.resultCode, NS_OK, "Initialization succeeded"); 104 105 info("Verifying storage"); 106 107 verifyStorage(packages, "afterInit"); 108 109 // TODO: Remove this block once temporary storage initialization is able to 110 // ignore unknown directories. 111 getRelativeFile("storage/default/invalid+++example.com").remove(false); 112 getRelativeFile("storage/temporary/invalid+++example.com").remove(false); 113 114 info("Checking origin directories"); 115 116 for (let origin of origins) { 117 let originDir = getRelativeFile(origin.oldPath); 118 let exists = originDir.exists(); 119 ok(!exists, "Origin directory doesn't exist"); 120 121 originDir = getRelativeFile(origin.newPath); 122 exists = originDir.exists(); 123 ok(exists, "Origin directory does exist"); 124 125 info("Reading out contents of metadata file"); 126 127 let metadataFile = originDir.clone(); 128 metadataFile.append(metadataFileName); 129 130 File.createFromNsIFile(metadataFile).then(grabArgAndContinueHandler); 131 let file = yield undefined; 132 133 let fileReader = new FileReader(); 134 fileReader.onload = continueToNextStepSync; 135 fileReader.readAsArrayBuffer(file); 136 137 yield undefined; 138 139 let metadataBuffer = fileReader.result; 140 141 info("Verifying blobs differ"); 142 143 ok( 144 !compareBuffers(metadataBuffer, metadataBuffers.shift()), 145 "Metadata differ" 146 ); 147 } 148 149 info("Initializing temporary storage"); 150 151 request = initTemporaryStorage(continueToNextStepSync); 152 yield undefined; 153 154 Assert.equal(request.resultCode, NS_OK, "Initialization succeeded"); 155 156 info("Initializing origins"); 157 158 for (const origin of origins) { 159 info("Initializing origin"); 160 161 let principal = getPrincipal(origin.url); 162 if (origin.persistence == "persistent") { 163 request = initPersistentOrigin(principal, continueToNextStepSync); 164 } else { 165 request = initTemporaryOrigin( 166 origin.persistence, 167 principal, 168 /* createIfNonExistent */ true, 169 continueToNextStepSync 170 ); 171 } 172 yield undefined; 173 174 Assert.equal(request.resultCode, NS_OK, "Initialization succeeded"); 175 176 ok(!request.result, "Origin directory wasn't created"); 177 } 178 179 finishTest(); 180 }