- commit
- f4888c39857066c074c54e7e4dc85616479203c6
- parent
- 9fad505d76fe2725b3b38dc24270fe9900c9e426
- Author
- Tobias Bengfort <tobias.bengfort@posteo.de>
- Date
- 2023-12-08 18:01
split storage into separate module
Diffstat
| M | src/bg.js | 69 | ++++++++++++++----------------------------------------------- |
| A | src/storage.js | 39 | +++++++++++++++++++++++++++++++++++++++ |
2 files changed, 55 insertions, 53 deletions
diff --git a/src/bg.js b/src/bg.js
@@ -1,21 +1,7 @@ 1 1 /* global browser */ 2 2 3 3 import * as shared from './shared.js';4 -15 -1 var lock = Promise.resolve();6 -17 -1 var STORAGE_DEFAULTS = {8 -1 'rules': {},9 -1 'savedRules': {},10 -1 'requests': {},11 -1 'recording': true,12 -1 };13 -1 var STORAGE_AREAS = {14 -1 'rules': browser.storage.local,15 -1 'savedRules': browser.storage.local,16 -1 'requests': browser.storage.session,17 -1 'recording': browser.storage.local,18 -1 };-1 4 import * as storage from './storage.js'; 19 5 20 6 var glob = function(s, pattern) { 21 7 var p = pattern.split('*'); @@ -34,26 +20,9 @@ var getHostname = function(url, patterns) { 34 20 return u.hostname; 35 21 }; 36 2237 -1 var storageGet = async function(key) {38 -1 var data = await STORAGE_AREAS[key].get(key);39 -1 return data[key] ?? STORAGE_DEFAULTS[key];40 -1 };41 -142 -1 var _storageChange = async function(key, fn) {43 -1 var oldValue = await storageGet(key);44 -1 var data = {};45 -1 data[key] = fn(oldValue);46 -1 await STORAGE_AREAS[key].set(data);47 -1 };48 -149 -1 var storageChange = async function(key, fn) {50 -1 lock = lock.then(() => _storageChange(key, fn));51 -1 await lock;52 -1 };53 -154 23 var setRule = async function(context, hostname, type, rule) {55 -1 var savedRules = await storageGet('savedRules');56 -1 await storageChange('rules', rules => {-1 24 var savedRules = await storage.get('savedRules'); -1 25 await storage.change('rules', rules => { 57 26 if (hostname === 'first-party') { 58 27 context = '*'; 59 28 } @@ -79,14 +48,14 @@ var setRule = async function(context, hostname, type, rule) { 79 48 }; 80 49 81 50 var getPatterns = async function() {82 -1 var savedRules = await storageGet('savedRules');-1 51 var savedRules = await storage.get('savedRules'); 83 52 return savedRules._patterns || []; 84 53 }; 85 54 86 55 var getRules = async function(context) { 87 56 var [rules, savedRules] = await Promise.all([88 -1 storageGet('rules'),89 -1 storageGet('savedRules'),-1 57 storage.get('rules'), -1 58 storage.get('savedRules'), 90 59 ]); 91 60 var restricted = {}; 92 61 restricted['*'] = rules['*'] || savedRules['*'] || {}; @@ -96,9 +65,9 @@ var getRules = async function(context) { 96 65 }; 97 66 98 67 var pushRequest = async function(tabId, hostname, type) {99 -1 var recording = await storageGet('recording');-1 68 var recording = await storage.get('recording'); 100 69 if (recording) {101 -1 await storageChange('requests', requests => {-1 70 await storage.change('requests', requests => { 102 71 if (!requests[tabId]) { 103 72 requests[tabId] = {}; 104 73 } @@ -115,7 +84,7 @@ var pushRequest = async function(tabId, hostname, type) { 115 84 }; 116 85 117 86 var clearRequests = async function(tabId) {118 -1 await storageChange('requests', requests => {-1 87 await storage.change('requests', requests => { 119 88 if (requests[tabId]) { 120 89 delete requests[tabId]; 121 90 } @@ -140,8 +109,8 @@ browser.runtime.onMessage.addListener(async (msg, sender) => { 140 109 const context = getHostname(tab.url, patterns); 141 110 const [rules, requests, recording] = await Promise.all([ 142 111 getRules(context),143 -1 storageGet('requests'),144 -1 storageGet('recording'),-1 112 storage.get('requests'), -1 113 storage.get('recording'), 145 114 ]); 146 115 return { 147 116 context: context, @@ -159,12 +128,12 @@ browser.runtime.onMessage.addListener(async (msg, sender) => { 159 128 return await getRules(msg.data.context); 160 129 } else if (msg.type === 'commit') { 161 130 let r;162 -1 await storageChange('rules', rules => {-1 131 await storage.change('rules', rules => { 163 132 r = rules[msg.data]; 164 133 delete rules[msg.data]; 165 134 return rules; 166 135 });167 -1 await storageChange('savedRules', savedRules => {-1 136 await storage.change('savedRules', savedRules => { 168 137 if (Object.keys(r).length === 0) { 169 138 delete savedRules[msg.data]; 170 139 } else { @@ -173,14 +142,14 @@ browser.runtime.onMessage.addListener(async (msg, sender) => { 173 142 return savedRules; 174 143 }); 175 144 } else if (msg.type === 'reset') {176 -1 await storageChange('rules', rules => {-1 145 await storage.change('rules', rules => { 177 146 delete rules[msg.data]; 178 147 return rules; 179 148 }); 180 149 } else if (msg.type === 'securitypolicyviolation') { 181 150 await pushRequest(sender.tab.id, 'inline', msg.data); 182 151 } else if (msg.type === 'toggleRecording') {183 -1 await storageChange('recording', recording => !recording);-1 152 await storage.change('recording', recording => !recording); 184 153 } 185 154 }); 186 155 @@ -240,7 +209,7 @@ browser.webRequest.onHeadersReceived.addListener(async details => { 240 209 var context = getHostname(details.url, patterns); 241 210 var [rules, recording] = await Promise.all([ 242 211 getRules(context),243 -1 storageGet('recording'),-1 212 storage.get('recording'), 244 213 ]); 245 214 var csp = (type, value) => { 246 215 var name = 'Content-Security-Policy'; @@ -266,9 +235,3 @@ browser.webRequest.onHeadersReceived.addListener(async details => { 266 235 urls: ['<all_urls>'], 267 236 types: ['main_frame'], 268 237 }, ['blocking', 'responseHeaders']);269 -1270 -1 // migrations271 -1 browser.runtime.onInstalled.addListener(() => {272 -1 // 0.8.0: store requests to session storage273 -1 lock = lock.then(() => browser.storage.local.remove('requests'));274 -1 });
diff --git a/src/storage.js b/src/storage.js
@@ -0,0 +1,39 @@
-1 1 /* global browser */
-1 2
-1 3 var STORAGE_DEFAULTS = {
-1 4 'rules': {},
-1 5 'savedRules': {},
-1 6 'requests': {},
-1 7 'recording': true,
-1 8 };
-1 9 var STORAGE_AREAS = {
-1 10 'rules': browser.storage.local,
-1 11 'savedRules': browser.storage.local,
-1 12 'requests': browser.storage.session,
-1 13 'recording': browser.storage.local,
-1 14 };
-1 15
-1 16 var lock = Promise.resolve();
-1 17
-1 18 export var get = async function(key) {
-1 19 var data = await STORAGE_AREAS[key].get(key);
-1 20 return data[key] ?? STORAGE_DEFAULTS[key];
-1 21 };
-1 22
-1 23 var _change = async function(key, fn) {
-1 24 var oldValue = await get(key);
-1 25 var data = {};
-1 26 data[key] = fn(oldValue);
-1 27 await STORAGE_AREAS[key].set(data);
-1 28 };
-1 29
-1 30 export var change = async function(key, fn) {
-1 31 lock = lock.then(() => _change(key, fn));
-1 32 await lock;
-1 33 };
-1 34
-1 35 // migrations
-1 36 browser.runtime.onInstalled.addListener(() => {
-1 37 // 0.8.0: store requests to session storage
-1 38 lock = lock.then(() => browser.storage.local.remove('requests'));
-1 39 });