test_upgradeFromFlatOriginDirectories.js (5405B)
1 /** 2 * Any copyright is dedicated to the Public Domain. 3 * http://creativecommons.org/publicdomain/zero/1.0/ 4 */ 5 6 // A flat origin directory is an origin directory with no sub directories for 7 // quota clients. The upgrade was initially done lazily and an empty .metadata 8 // file was used to indicate a successful upgrade. 9 10 function* testSteps() { 11 const setups = [ 12 { 13 packages: [ 14 // Storage used prior FF 22 (indexedDB/ directory with flat origin 15 // directories). 16 // FF 26 renamed indexedDB/ to storage/persistent and the lazy upgrade 17 // of flat origin directories remained. There's a test for that below. 18 "indexedDBDirectory_flatOriginDirectories_profile", 19 "../indexedDBDirectory_shared", 20 ], 21 origins: [ 22 { 23 oldPath: "indexedDB/1007+f+app+++system.gaiamobile.org", 24 }, 25 26 { 27 oldPath: "indexedDB/1007+t+https+++developer.cdn.mozilla.net", 28 }, 29 30 { 31 oldPath: "indexedDB/http+++www.mozilla.org", 32 newPath: "storage/default/http+++www.mozilla.org", 33 url: "http://www.mozilla.org", 34 persistence: "default", 35 }, 36 ], 37 }, 38 39 { 40 packages: [ 41 // Storage used by FF 26-35 (storage/persistent/ directory with not yet 42 // upgraded flat origin directories). 43 // FF 36 renamed storage/persistent/ to storage/default/ and all not 44 // yet upgraded flat origin directories were upgraded. There's a 45 // separate test for that: 46 // test_upgradeFromPersistentStorageDirectory_upgradeOriginDirectories. 47 "persistentStorageDirectory_flatOriginDirectories_profile", 48 "../persistentStorageDirectory_shared", 49 ], 50 origins: [ 51 { 52 oldPath: "storage/persistent/1007+f+app+++system.gaiamobile.org", 53 }, 54 55 { 56 oldPath: 57 "storage/persistent/1007+t+https+++developer.cdn.mozilla.net", 58 }, 59 60 { 61 oldPath: "storage/persistent/http+++www.mozilla.org", 62 newPath: "storage/default/http+++www.mozilla.org", 63 url: "http://www.mozilla.org", 64 persistence: "default", 65 }, 66 ], 67 }, 68 ]; 69 70 const metadataFileName = ".metadata"; 71 72 for (const setup of setups) { 73 clear(continueToNextStepSync); 74 yield undefined; 75 76 info("Verifying storage"); 77 78 verifyStorage(setup.packages, "beforeInstall"); 79 80 info("Installing packages"); 81 82 installPackages(setup.packages); 83 84 info("Verifying storage"); 85 86 verifyStorage(setup.packages, "afterInstall"); 87 88 info("Checking origin directories"); 89 90 for (const origin of setup.origins) { 91 let originDir = getRelativeFile(origin.oldPath); 92 let exists = originDir.exists(); 93 ok(exists, "Origin directory does exist"); 94 95 let idbDir = originDir.clone(); 96 idbDir.append("idb"); 97 98 exists = idbDir.exists(); 99 ok(!exists, "idb directory doesn't exist"); 100 101 let metadataFile = originDir.clone(); 102 metadataFile.append(metadataFileName); 103 104 exists = metadataFile.exists(); 105 ok(!exists, "Metadata file doesn't exist"); 106 107 if (origin.newPath) { 108 originDir = getRelativeFile(origin.newPath); 109 exists = originDir.exists(); 110 ok(!exists, "Origin directory doesn't exist"); 111 } 112 } 113 114 info("Initializing"); 115 116 let request = init(continueToNextStepSync); 117 yield undefined; 118 119 Assert.equal(request.resultCode, NS_OK, "Initialization succeeded"); 120 121 info("Verifying storage"); 122 123 verifyStorage(setup.packages, "afterInit"); 124 125 // TODO: Remove this block once temporary storage initialization is able to 126 // ignore unknown directories. 127 getRelativeFile("storage/default/invalid+++example.com").remove(false); 128 try { 129 getRelativeFile("storage/temporary/invalid+++example.com").remove(false); 130 } catch (ex) {} 131 132 info("Checking origin directories"); 133 134 for (const origin of setup.origins) { 135 let originDir = getRelativeFile(origin.oldPath); 136 let exists = originDir.exists(); 137 ok(!exists, "Origin directory doesn't exist"); 138 139 if (origin.newPath) { 140 originDir = getRelativeFile(origin.newPath); 141 exists = originDir.exists(); 142 ok(exists, "Origin directory does exist"); 143 144 let idbDir = originDir.clone(); 145 idbDir.append("idb"); 146 147 exists = idbDir.exists(); 148 ok(exists, "idb directory does exist"); 149 150 let metadataFile = originDir.clone(); 151 metadataFile.append(metadataFileName); 152 153 exists = metadataFile.exists(); 154 ok(exists, "Metadata file does exist"); 155 } 156 } 157 158 info("Initializing temporary storage"); 159 160 request = initTemporaryStorage(continueToNextStepSync); 161 yield undefined; 162 163 Assert.equal(request.resultCode, NS_OK, "Initialization succeeded"); 164 165 info("Initializing origins"); 166 167 for (const origin of setup.origins) { 168 if (origin.newPath) { 169 info("Initializing origin"); 170 171 let principal = getPrincipal(origin.url); 172 request = initTemporaryOrigin( 173 origin.persistence, 174 principal, 175 /* createIfNonExistent */ true, 176 continueToNextStepSync 177 ); 178 yield undefined; 179 180 Assert.equal(request.resultCode, NS_OK, "Initialization succeeded"); 181 182 ok(!request.result, "Origin directory wasn't created"); 183 } 184 } 185 } 186 187 finishTest(); 188 }