Remove webSqlStorage cruft as Stylus never used it

This commit is contained in:
tophf 2017-03-26 13:05:05 +03:00
parent ac4a420e2b
commit 2ef87e003d
3 changed files with 20 additions and 263 deletions

View File

@ -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": {

View File

@ -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));
}
};

View File

@ -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;
} }