From aa08e16e6613d5a3760761ab89557df41a50f784 Mon Sep 17 00:00:00 2001 From: Stephen Blott Date: Sat, 20 Jun 2015 07:47:09 +0100 Subject: Adding debugging infrastructure for settings. --- lib/settings.coffee | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) (limited to 'lib') diff --git a/lib/settings.coffee b/lib/settings.coffee index 5955e8ae..437e4d45 100644 --- a/lib/settings.coffee +++ b/lib/settings.coffee @@ -11,6 +11,7 @@ # In all cases except Settings.defaults, values are stored as jsonified strings. Settings = + debug: false storage: chrome.storage.sync cache: {} isLoaded: false @@ -36,6 +37,7 @@ Settings = # Called after @cache has been initialized. On extension pages, this will be called twice, but that does # not matter because it's idempotent. onLoaded: -> + @log "onLoaded: #{@onLoadedCallbacks.length} callback(s)" @isLoaded = true callback() while callback = @onLoadedCallbacks.pop() @@ -46,6 +48,7 @@ Settings = @handleUpdateFromChromeStorage key, change?.newValue for own key, change of changes handleUpdateFromChromeStorage: (key, value) -> + @log "handleUpdateFromChromeStorage: #{key}" # Note: value here is either null or a JSONified string. Therefore, even falsy settings values (like # false, 0 or "") are truthy here. Only null is falsy. if @shouldSyncKey key @@ -59,20 +62,26 @@ Settings = set: (key, value, shouldSetInSyncedStorage = true) -> @cache[key] = JSON.stringify value + @log "set: #{key} (length=#{@cache[key].length}, shouldSetInSyncedStorage=#{shouldSetInSyncedStorage})" if @shouldSyncKey key if shouldSetInSyncedStorage setting = {}; setting[key] = @cache[key] + @log " chrome.storage.sync.set(#{key})" @storage.set setting - # Remove settings installed by the "copyNonDefaultsToChromeStorage-20150717" migration; see below. - chrome.storage.local.remove key if Utils.isBackgroundPage() + if Utils.isBackgroundPage() + # Remove options installed by the "copyNonDefaultsToChromeStorage-20150717" migration; see below. + @log " chrome.storage.local.remove(#{key})" + chrome.storage.local.remove key @performPostUpdateHook key, value clear: (key) -> + @log "clear: #{key}" @set key, @defaults[key] has: (key) -> key of @cache use: (key, callback) -> + @log "use: #{key} (isLoaded=#{@isLoaded})" invokeCallback = => callback @get key if @isLoaded then invokeCallback() else @onLoadedCallbacks.push invokeCallback @@ -80,6 +89,10 @@ Settings = postUpdateHooks: {} performPostUpdateHook: (key, value) -> @postUpdateHooks[key]? value + # For development only. + log: (args...) -> + console.log "settings:", args... if @debug + # Default values for all settings. defaults: scrollStepSize: 60 -- cgit v1.2.3