diff --git a/core/interceptor.js b/core/interceptor.js index 520c7e43..0f07aad9 100644 --- a/core/interceptor.js +++ b/core/interceptor.js @@ -139,7 +139,7 @@ interceptor.relatedSettings.push(Setting.XHR_TEST_DOMAIN); interceptor.relatedSettings.push(Setting.BLOCK_MISSING); interceptor.relatedSettings.push(Setting.ALLOWED_DOMAINS_GOOGLE_FONTS); -chrome.storage.sync.get(interceptor.relatedSettings, function (items) { +storageManager.type.get(interceptor.relatedSettings, function (items) { interceptor.amountInjected = items.amountInjected || 0; interceptor.xhrTestDomain = items.xhrTestDomain || Address.LOCALCDN; interceptor.blockMissing = items.blockMissing || false; diff --git a/core/main.js b/core/main.js index 0ea8f769..c68fd7f8 100644 --- a/core/main.js +++ b/core/main.js @@ -30,7 +30,9 @@ var main = {}; main._initializeSettings = function () { - chrome.storage.sync.get(settingDefaults, function (items) { + storageManager.checkStorageType(); + + storageManager.type.get(SettingDefaults, function (items) { if (items === null) { items = SettingDefaults; // Restore setting defaults. @@ -47,21 +49,23 @@ main._initializeSettings = function () { 'path': stateManager.selectedIcon }, 'Enabled'); - chrome.storage.sync.set(items); + storageManager.type.set(items); }); }; main._showReleaseNotes = function (details) { + storageManager.checkStorageType(); + if (details.reason === chrome.runtime.OnInstalledReason.INSTALL) { - chrome.storage.sync.set({ + storageManager.type.set({ [Setting.LAST_MAPPING_UPDATE]: lastMappingUpdate }, function() { if (details.temporary !== true) { - chrome.storage.sync.get([Setting.HIDE_RELEASE_NOTES], function (items) { + storageManager.type.get([Setting.HIDE_RELEASE_NOTES], function (items) { if (items.hideReleaseNotes !== true) { @@ -75,17 +79,22 @@ main._showReleaseNotes = function (details) { }); } else if (details.reason === chrome.runtime.OnInstalledReason.UPDATE) { + // TODO: Remove me in v2.4.1 + storageManager.migrateData('local'); + // If add-on update true, check last update of mappings.js - chrome.storage.sync.get([Setting.LAST_MAPPING_UPDATE, Setting.HIDE_RELEASE_NOTES], function (items) { + storageManager.type.get([Setting.LAST_MAPPING_UPDATE, Setting.HIDE_RELEASE_NOTES], function (items) { let mappingUpdate = items.lastMappingUpdate !== lastMappingUpdate; if (mappingUpdate || !items.hideReleaseNotes) { // Updated mappings.js - chrome.storage.sync.set({ + storageManager.type.set({ [Setting.LAST_MAPPING_UPDATE]: lastMappingUpdate }, function() { - if (!items.hideReleaseNotes) { + // TODO: Remove me in v2.4.1 + // if (!items.hideReleaseNotes) { + if (true) { chrome.tabs.create({ 'url': chrome.extension.getURL('pages/updates/updates.html?mappingupdate=' + mappingUpdate), 'active': false diff --git a/core/request-analyzer.js b/core/request-analyzer.js index 9ddf3df5..00bb90c0 100644 --- a/core/request-analyzer.js +++ b/core/request-analyzer.js @@ -112,7 +112,7 @@ requestAnalyzer._matchBasePath = function (hostMappings, channelPath) { requestAnalyzer._findLocalTarget = function (resourceMappings, basePath, channelHost, channelPath, destinationSearchString) { let resourcePath, versionNumber, resourcePattern, filename, shorthandResource; - chrome.storage.sync.get(Setting.LOGGING, function (items) { + storageManager.type.get(Setting.LOGGING, function (items) { requestAnalyzer.logging = items.enableLogging; }); @@ -171,17 +171,17 @@ requestAnalyzer._findLocalTarget = function (resourceMappings, basePath, channel }; requestAnalyzer._applyWhitelistedDomains = function () { - chrome.storage.sync.get(Setting.WHITELISTED_DOMAINS, function (items) { + storageManager.type.get(Setting.WHITELISTED_DOMAINS, function (items) { requestAnalyzer.whitelistedDomains = items.whitelistedDomains || {}; }); }; requestAnalyzer._applyManipulateDOMDomains = function () { - chrome.storage.sync.get(Setting.DOMAINS_MANIPULATE_DOM, function (items) { + storageManager.type.get(Setting.DOMAINS_MANIPULATE_DOM, function (items) { requestAnalyzer.domainsManipulateDOM = items.domainsManipulateDOM || {}; }); }; requestAnalyzer._applyAllowedDomainsGoogleFonts = function () { - chrome.storage.sync.get(Setting.ALLOWED_DOMAINS_GOOGLE_FONTS, function (items) { + storageManager.type.get(Setting.ALLOWED_DOMAINS_GOOGLE_FONTS, function (items) { requestAnalyzer.domainsGoogleFonts = items.allowedDomainsGoogleFonts || {}; }); }; diff --git a/core/request-sanitizer.js b/core/request-sanitizer.js index d1ee45e5..2b3bd436 100644 --- a/core/request-sanitizer.js +++ b/core/request-sanitizer.js @@ -65,7 +65,7 @@ requestSanitizer._stripMetadata = function (requestDetails) { * Initializations */ -chrome.storage.sync.get({[Setting.STRIP_METADATA]: true}, function (items) { +storageManager.type.get({[Setting.STRIP_METADATA]: true}, function (items) { if (items === null || items.stripMetadata !== false) { requestSanitizer.enable(); diff --git a/core/state-manager.js b/core/state-manager.js index 14139ae3..e9161582 100644 --- a/core/state-manager.js +++ b/core/state-manager.js @@ -56,18 +56,18 @@ stateManager.registerInjection = function (tabIdentifier, injection) { if (isNaN(interceptor.amountInjected)) { - chrome.storage.sync.get(Setting.AMOUNT_INJECTED, function (items) { + storageManager.type.get(Setting.AMOUNT_INJECTED, function (items) { interceptor.amountInjected = items.amountInjected; - chrome.storage.sync.set({ + storageManager.type.set({ [Setting.AMOUNT_INJECTED]: ++interceptor.amountInjected }); }); } else { - chrome.storage.sync.set({ + chrome.storage.local.set({ [Setting.AMOUNT_INJECTED]: ++interceptor.amountInjected }); } @@ -83,7 +83,7 @@ stateManager.addDomainToWhitelist = function (domain) { let whitelistedDomains = requestAnalyzer.whitelistedDomains; whitelistedDomains[domain] = true; - chrome.storage.sync.set({whitelistedDomains}, resolve); + storageManager.type.set({whitelistedDomains}, resolve); }); }; @@ -94,7 +94,7 @@ stateManager.removeDomainFromWhitelist = function (domain) { let whitelistedDomains = requestAnalyzer.whitelistedDomains; delete whitelistedDomains[domain]; - chrome.storage.sync.set({whitelistedDomains}, resolve); + storageManager.type.set({whitelistedDomains}, resolve); }); }; @@ -105,7 +105,7 @@ stateManager.addDomainToManipulateDOMlist = function (domain) { let domainsManipulateDOM = requestAnalyzer.domainsManipulateDOM; domainsManipulateDOM[domain] = true; - chrome.storage.sync.set({domainsManipulateDOM}, resolve); + storageManager.type.set({domainsManipulateDOM}, resolve); }); }; @@ -116,7 +116,7 @@ stateManager.removeDomainFromManipulateDOMlist = function (domain) { let domainsManipulateDOM = requestAnalyzer.domainsManipulateDOM; delete domainsManipulateDOM[domain]; - chrome.storage.sync.set({domainsManipulateDOM}, resolve); + storageManager.type.set({domainsManipulateDOM}, resolve); }); }; @@ -288,7 +288,7 @@ chrome.tabs.query({}, function (tabs) { tabs.forEach(stateManager._createTab); }); -chrome.storage.sync.get([Setting.SHOW_ICON_BADGE, Setting.SELECTED_ICON], function (items) { +storageManager.type.get([Setting.SHOW_ICON_BADGE, Setting.SELECTED_ICON], function (items) { if (items.showIconBadge === undefined) { items.showIconBadge = true; diff --git a/pages/background/background.html b/pages/background/background.html index 86ba6d17..34c80698 100644 --- a/pages/background/background.html +++ b/pages/background/background.html @@ -6,6 +6,7 @@
+ diff --git a/pages/options/options.html b/pages/options/options.html index 1d0d5088..47d62e47 100644 --- a/pages/options/options.html +++ b/pages/options/options.html @@ -9,6 +9,7 @@ + diff --git a/pages/options/options.js b/pages/options/options.js index c496d183..402d86df 100644 --- a/pages/options/options.js +++ b/pages/options/options.js @@ -79,6 +79,7 @@ options._renderOptionsPanel = function () { elements.selectedIcon.value = options._optionValues.selectedIcon; elements.internalStatistics.checked = options._optionValues.internalStatistics; elements.allowedDomainsGoogleFonts.value = domainAllowedGoogleFonts; + elements.storageType = options._optionValues.storageType; options._registerOptionChangedEventListeners(elements); options._registerMiscellaneousEventListeners(); @@ -105,6 +106,8 @@ options._renderOptionsPanel = function () { document.getElementById('link-faq').addEventListener('click', options._onClickFaq); document.getElementById('ruleset-help-icon').addEventListener('click', options._onClickRulesetHelp); document.getElementById('link-statistic').addEventListener('click', options._onClickStatistics); + document.getElementById('storage-type-local').addEventListener('change', options._onStorageOptionChanged); + document.getElementById('storage-type-sync').addEventListener('change', options._onStorageOptionChanged); }; options._renderBlockMissingNotice = function () { @@ -157,7 +160,7 @@ options._determineOptionValues = function () { return new Promise((resolve) => { let optionKeys = Object.keys(options._optionElements); - chrome.storage.sync.get(optionKeys, function (items) { + storageManager.type.get(optionKeys, function (items) { options._optionValues = items; resolve(); }); @@ -166,8 +169,9 @@ options._determineOptionValues = function () { options._determineLocalOptionValues = function () { return new Promise((resolve) => { - chrome.storage.local.get([Setting.INTERNAL_STATISTICS], function (items) { + chrome.storage.local.get([Setting.INTERNAL_STATISTICS, Setting.STORAGE_TYPE], function (items) { options._internalStatistics = items.internalStatistics; + options._storageType = items.storageType; resolve(); }); }); @@ -193,6 +197,7 @@ options._getOptionElements = function () { [Setting.BLOCK_GOOGLE_FONTS]: options._getOptionElement(Setting.BLOCK_GOOGLE_FONTS), [Setting.SELECTED_ICON]: options._getOptionElement(Setting.SELECTED_ICON), [Setting.ALLOWED_DOMAINS_GOOGLE_FONTS]: options._getOptionElement(Setting.ALLOWED_DOMAINS_GOOGLE_FONTS), + [Setting.STORAGE_TYPE]: options._getOptionElement(Setting.STORAGE_TYPE) }; return optionElements; @@ -252,7 +257,7 @@ options._onDocumentLoaded = function () { }; options._onOptionChanged = function ({ target }) { - let optionKey, optionType, optionValue, storageType; + let optionKey, optionType, optionValue; optionKey = target.getAttribute('data-option'); optionType = target.getAttribute('type'); @@ -300,18 +305,17 @@ options._onOptionChanged = function ({ target }) { if (optionKey === Setting.SELECTED_ICON) { wrappers.setIcon({ path: optionValue }, 'Enabled'); } - - if (optionKey === Setting.INTERNAL_STATISTICS) { - storageType = chrome.storage.local; - } else { - storageType = chrome.storage.sync; - } - - storageType.set({ + storageManager.type.set({ [optionKey]: optionValue, }); }; +options._onStorageOptionChanged = function ({ target }) { + chrome.storage.local.set({ + [Setting.STORAGE_TYPE]: target.value, + }); +}; + options._onClickHTMLFilterWarning = function () { chrome.tabs.create({ url: 'https://codeberg.org/nobody/LocalCDN/wiki/Blank-websites-or-weird-characters', @@ -383,6 +387,7 @@ options._updatesDomainLists = function (changes) { * Initializations */ options._internalStatistics = false; +options._storageType = 'local'; document.addEventListener('DOMContentLoaded', options._onDocumentLoaded); diff --git a/pages/popup/popup.html b/pages/popup/popup.html index a5c7f21f..7db8f70c 100644 --- a/pages/popup/popup.html +++ b/pages/popup/popup.html @@ -9,6 +9,7 @@ +