Remove webSqlStorage cruft as Stylus never used it
This commit is contained in:
parent
ac4a420e2b
commit
2ef87e003d
|
@ -19,7 +19,7 @@
|
||||||
"*://*/*"
|
"*://*/*"
|
||||||
],
|
],
|
||||||
"background": {
|
"background": {
|
||||||
"scripts": ["messaging.js", "storage-websql.js", "storage.js", "background.js", "update.js"]
|
"scripts": ["messaging.js", "storage.js", "background.js", "update.js"]
|
||||||
},
|
},
|
||||||
"commands": {
|
"commands": {
|
||||||
"openManage": {
|
"openManage": {
|
||||||
|
|
|
@ -1,241 +0,0 @@
|
||||||
/* global getDatabase, reportError */
|
|
||||||
'use strict';
|
|
||||||
|
|
||||||
const webSqlStorage = {
|
|
||||||
|
|
||||||
migrate() {
|
|
||||||
if (typeof openDatabase == 'undefined') {
|
|
||||||
// No WebSQL - no migration!
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
webSqlStorage.getStyles(styles => {
|
|
||||||
getDatabase(db => {
|
|
||||||
const tx = db.transaction(['styles'], 'readwrite');
|
|
||||||
const os = tx.objectStore('styles');
|
|
||||||
styles.forEach(s => {
|
|
||||||
webSqlStorage.cleanStyle(s);
|
|
||||||
os.add(s);
|
|
||||||
});
|
|
||||||
// While this was running, the styles were loaded from the (empty) indexed db
|
|
||||||
setTimeout(() => invalidateCache(true), 500);
|
|
||||||
});
|
|
||||||
}, null);
|
|
||||||
},
|
|
||||||
|
|
||||||
cleanStyle(s) {
|
|
||||||
delete s.id;
|
|
||||||
s.sections.forEach(section => {
|
|
||||||
delete section.id;
|
|
||||||
['urls', 'urlPrefixes', 'domains', 'regexps'].forEach(property => {
|
|
||||||
if (!section[property]) {
|
|
||||||
section[property] = [];
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
getStyles(callback) {
|
|
||||||
webSqlStorage.getDatabase(db => {
|
|
||||||
if (!db) {
|
|
||||||
callback([]);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
db.readTransaction(t => {
|
|
||||||
const where = '';
|
|
||||||
const params = [];
|
|
||||||
|
|
||||||
t.executeSql(
|
|
||||||
'SELECT DISTINCT ' +
|
|
||||||
's.*, se.id section_id, se.code, sm.name metaName, sm.value metaValue ' +
|
|
||||||
'FROM styles s ' +
|
|
||||||
'LEFT JOIN sections se ON se.style_id = s.id ' +
|
|
||||||
'LEFT JOIN section_meta sm ON sm.section_id = se.id ' +
|
|
||||||
'WHERE 1' + where + ' ' +
|
|
||||||
'ORDER BY s.id, se.id, sm.id',
|
|
||||||
params,
|
|
||||||
(t, r) => {
|
|
||||||
const styles = [];
|
|
||||||
let currentStyle = null;
|
|
||||||
let currentSection = null;
|
|
||||||
for (let i = 0; i < r.rows.length; i++) {
|
|
||||||
const values = r.rows.item(i);
|
|
||||||
let metaName = null;
|
|
||||||
switch (values.metaName) {
|
|
||||||
case null:
|
|
||||||
break;
|
|
||||||
case 'url':
|
|
||||||
metaName = 'urls';
|
|
||||||
break;
|
|
||||||
case 'url-prefix':
|
|
||||||
metaName = 'urlPrefixes';
|
|
||||||
break;
|
|
||||||
case 'domain':
|
|
||||||
metaName = 'domains';
|
|
||||||
break;
|
|
||||||
case 'regexps':
|
|
||||||
metaName = 'regexps';
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
metaName = values.metaName + 's';
|
|
||||||
}
|
|
||||||
const metaValue = values.metaValue;
|
|
||||||
if (currentStyle === null || currentStyle.id != values.id) {
|
|
||||||
currentStyle = {
|
|
||||||
id: values.id,
|
|
||||||
url: values.url,
|
|
||||||
updateUrl: values.updateUrl,
|
|
||||||
md5Url: values.md5Url,
|
|
||||||
name: values.name,
|
|
||||||
enabled: values.enabled == 'true',
|
|
||||||
originalMd5: values.originalMd5,
|
|
||||||
sections: []
|
|
||||||
};
|
|
||||||
styles.push(currentStyle);
|
|
||||||
}
|
|
||||||
if (values.section_id !== null) {
|
|
||||||
if (currentSection === null || currentSection.id != values.section_id) {
|
|
||||||
currentSection = {id: values.section_id, code: values.code};
|
|
||||||
currentStyle.sections.push(currentSection);
|
|
||||||
}
|
|
||||||
if (metaName && metaValue) {
|
|
||||||
if (currentSection[metaName]) {
|
|
||||||
currentSection[metaName].push(metaValue);
|
|
||||||
} else {
|
|
||||||
currentSection[metaName] = [metaValue];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
callback(styles);
|
|
||||||
}, reportError);
|
|
||||||
}, reportError);
|
|
||||||
}, reportError);
|
|
||||||
},
|
|
||||||
|
|
||||||
getDatabase(ready, error) {
|
|
||||||
let stylishDb;
|
|
||||||
try {
|
|
||||||
stylishDb = openDatabase('stylish', '', 'Stylish Styles', 5 * 1024 * 1024);
|
|
||||||
} catch (ex) {
|
|
||||||
error();
|
|
||||||
throw ex;
|
|
||||||
}
|
|
||||||
if (stylishDb.version == '') {
|
|
||||||
// It didn't already exist, we have nothing to migrate.
|
|
||||||
ready(null);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
switch (stylishDb.version) {
|
|
||||||
case '1.0': return webSqlStorage.dbV11(stylishDb, error, ready);
|
|
||||||
case '1.1': return webSqlStorage.dbV12(stylishDb, error, ready);
|
|
||||||
case '1.2': return webSqlStorage.dbV13(stylishDb, error, ready);
|
|
||||||
case '1.3': return webSqlStorage.dbV14(stylishDb, error, ready);
|
|
||||||
case '1.4': return webSqlStorage.dbV15(stylishDb, error, ready);
|
|
||||||
default: ready(stylishDb);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
dbV11(d, error, done) {
|
|
||||||
d.changeVersion(d.version, '1.1', t => {
|
|
||||||
t.executeSql(
|
|
||||||
'CREATE TABLE styles (' +
|
|
||||||
'id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, ' +
|
|
||||||
'url TEXT, ' +
|
|
||||||
'updateUrl TEXT, ' +
|
|
||||||
'md5Url TEXT, ' +
|
|
||||||
'name TEXT NOT NULL, ' +
|
|
||||||
'code TEXT NOT NULL, ' +
|
|
||||||
'enabled INTEGER NOT NULL, ' +
|
|
||||||
'originalCode TEXT NULL);');
|
|
||||||
t.executeSql(
|
|
||||||
'CREATE TABLE style_meta (' +
|
|
||||||
'id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, ' +
|
|
||||||
'style_id INTEGER NOT NULL, ' +
|
|
||||||
'name TEXT NOT NULL, ' +
|
|
||||||
'value TEXT NOT NULL);');
|
|
||||||
t.executeSql('CREATE INDEX style_meta_style_id ON style_meta (style_id);');
|
|
||||||
}, error, () => webSqlStorage.dbV12(d, error, done));
|
|
||||||
},
|
|
||||||
|
|
||||||
dbV12(d, error, done) {
|
|
||||||
d.changeVersion(d.version, '1.2', t => {
|
|
||||||
// add section table
|
|
||||||
t.executeSql(
|
|
||||||
'CREATE TABLE sections (' +
|
|
||||||
'id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, ' +
|
|
||||||
'style_id INTEGER NOT NULL, ' +
|
|
||||||
'code TEXT NOT NULL);');
|
|
||||||
t.executeSql(
|
|
||||||
'INSERT INTO sections (style_id, code) SELECT id, code FROM styles;');
|
|
||||||
// switch meta to sections
|
|
||||||
t.executeSql(
|
|
||||||
'DROP INDEX style_meta_style_id;');
|
|
||||||
t.executeSql(
|
|
||||||
'CREATE TABLE section_meta (' +
|
|
||||||
'id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, ' +
|
|
||||||
'section_id INTEGER NOT NULL, ' +
|
|
||||||
'name TEXT NOT NULL, ' +
|
|
||||||
'value TEXT NOT NULL);');
|
|
||||||
t.executeSql(
|
|
||||||
'INSERT INTO section_meta (section_id, name, value) ' +
|
|
||||||
'SELECT s.id, sm.name, sm.value FROM sections s ' +
|
|
||||||
'INNER JOIN style_meta sm ON sm.style_id = s.style_id;');
|
|
||||||
t.executeSql(
|
|
||||||
'CREATE INDEX section_meta_section_id ON section_meta (section_id);');
|
|
||||||
t.executeSql(
|
|
||||||
'DROP TABLE style_meta;');
|
|
||||||
// drop extra fields from styles table
|
|
||||||
t.executeSql(
|
|
||||||
'CREATE TABLE newstyles (' +
|
|
||||||
'id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, ' +
|
|
||||||
'url TEXT, ' +
|
|
||||||
'updateUrl TEXT, ' +
|
|
||||||
'md5Url TEXT, ' +
|
|
||||||
'name TEXT NOT NULL, ' +
|
|
||||||
'enabled INTEGER NOT NULL);');
|
|
||||||
t.executeSql(
|
|
||||||
'INSERT INTO newstyles (id, url, updateUrl, md5Url, name, enabled) ' +
|
|
||||||
'SELECT id, url, updateUrl, md5Url, name, enabled FROM styles;');
|
|
||||||
t.executeSql(
|
|
||||||
'DROP TABLE styles;');
|
|
||||||
t.executeSql(
|
|
||||||
'ALTER TABLE newstyles ' +
|
|
||||||
'RENAME TO styles;');
|
|
||||||
}, error, () => webSqlStorage.dbV13(d, error, done));
|
|
||||||
},
|
|
||||||
|
|
||||||
dbV13(d, error, done) {
|
|
||||||
d.changeVersion(d.version, '1.3', t => {
|
|
||||||
// clear out orphans
|
|
||||||
t.executeSql(
|
|
||||||
'DELETE FROM section_meta ' +
|
|
||||||
'WHERE section_id IN (' +
|
|
||||||
'SELECT sections.id FROM sections ' +
|
|
||||||
'LEFT JOIN styles ON styles.id = sections.style_id ' +
|
|
||||||
'WHERE styles.id IS NULL' +
|
|
||||||
');');
|
|
||||||
t.executeSql(
|
|
||||||
'DELETE FROM sections ' +
|
|
||||||
'WHERE id IN (' +
|
|
||||||
'SELECT sections.id FROM sections ' +
|
|
||||||
'LEFT JOIN styles ON styles.id = sections.style_id ' +
|
|
||||||
'WHERE styles.id IS NULL);');
|
|
||||||
}, error, () => webSqlStorage.dbV14(d, error, done));
|
|
||||||
},
|
|
||||||
|
|
||||||
dbV14(d, error, done) {
|
|
||||||
d.changeVersion(d.version, '1.4', t => {
|
|
||||||
t.executeSql(
|
|
||||||
'UPDATE styles SET url = null ' +
|
|
||||||
'WHERE url = "undefined";');
|
|
||||||
}, error, () => webSqlStorage.dbV15(d, error, done));
|
|
||||||
},
|
|
||||||
|
|
||||||
dbV15(d, error, done) {
|
|
||||||
d.changeVersion(d.version, '1.5', t => {
|
|
||||||
t.executeSql(
|
|
||||||
'ALTER TABLE styles ' +
|
|
||||||
'ADD COLUMN originalMd5 TEXT NULL;');
|
|
||||||
}, error, () => done(d));
|
|
||||||
}
|
|
||||||
};
|
|
40
storage.js
40
storage.js
|
@ -1,6 +1,5 @@
|
||||||
/* global cachedStyles: true, prefs: true, contextMenus: false */
|
/* global cachedStyles: true, prefs: true, contextMenus: false */
|
||||||
/* global handleUpdate, handleDelete */
|
/* global handleUpdate, handleDelete */
|
||||||
/* global webSqlStorage */
|
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
function getDatabase(ready, error) {
|
function getDatabase(ready, error) {
|
||||||
|
@ -20,7 +19,6 @@ function getDatabase(ready, error) {
|
||||||
keyPath: 'id',
|
keyPath: 'id',
|
||||||
autoIncrement: true,
|
autoIncrement: true,
|
||||||
});
|
});
|
||||||
webSqlStorage.migrate();
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -431,27 +429,27 @@ function getApplicableSections(style, url) {
|
||||||
|
|
||||||
|
|
||||||
function sectionAppliesToUrl(section, url) {
|
function sectionAppliesToUrl(section, url) {
|
||||||
// only http, https, file, ftp, and chrome-extension://OWN_EXTENSION_ID allowed
|
// only http, https, file, ftp, and chrome-extension://OWN_EXTENSION_ID allowed
|
||||||
if (!url.startsWith('http')
|
if (!url.startsWith('http')
|
||||||
&& !url.startsWith('ftp')
|
&& !url.startsWith('ftp')
|
||||||
&& !url.startsWith('file')
|
&& !url.startsWith('file')
|
||||||
&& !url.startsWith(OWN_ORIGIN)) {
|
&& !url.startsWith(OWN_ORIGIN)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (section.urls.length == 0
|
if (section.urls.length == 0
|
||||||
&& section.domains.length == 0
|
&& section.domains.length == 0
|
||||||
&& section.urlPrefixes.length == 0
|
&& section.urlPrefixes.length == 0
|
||||||
&& section.regexps.length == 0) {
|
&& section.regexps.length == 0) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (section.urls.indexOf(url) != -1) {
|
if (section.urls.indexOf(url) != -1) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
for (const urlPrefix of section.urlPrefixes) {
|
for (const urlPrefix of section.urlPrefixes) {
|
||||||
if (url.startsWith(urlPrefix)) {
|
if (url.startsWith(urlPrefix)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
if (section.domains.length) {
|
if (section.domains.length) {
|
||||||
for (const domain of getDomains(url)) {
|
for (const domain of getDomains(url)) {
|
||||||
if (section.domains.indexOf(domain) != -1) {
|
if (section.domains.indexOf(domain) != -1) {
|
||||||
|
@ -459,7 +457,7 @@ function sectionAppliesToUrl(section, url) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (const regexp of section.regexps) {
|
for (const regexp of section.regexps) {
|
||||||
// we want to match the full url, so add ^ and $ if not already present
|
// we want to match the full url, so add ^ and $ if not already present
|
||||||
const prefix = regexp.charAt(0) != '^' && '^';
|
const prefix = regexp.charAt(0) != '^' && '^';
|
||||||
const suffix = regexp.slice(-1) != '$' && '$';
|
const suffix = regexp.slice(-1) != '$' && '$';
|
||||||
|
@ -468,8 +466,8 @@ function sectionAppliesToUrl(section, url) {
|
||||||
console.warn('Regexp ' + regexp + ' is not valid');
|
console.warn('Regexp ' + regexp + ' is not valid');
|
||||||
} else if (re.test(url)) {
|
} else if (re.test(url)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user