diff options
| -rw-r--r-- | background_scripts/sync.coffee | 7 | ||||
| -rw-r--r-- | tests/unit_tests/settings_test.coffee | 9 | ||||
| -rw-r--r-- | tests/unit_tests/test_chrome_stubs.coffee | 9 |
3 files changed, 22 insertions, 3 deletions
diff --git a/background_scripts/sync.coffee b/background_scripts/sync.coffee index 3a829722..3b34c5a6 100644 --- a/background_scripts/sync.coffee +++ b/background_scripts/sync.coffee @@ -56,7 +56,7 @@ root.Sync = Sync = @log "ignoring: #{key}" return # Ignore, it's unchanged - if localStorage[key] is value + if key of localStorage and localStorage[key] is value @log "unchanged: #{key}" return @@ -64,7 +64,7 @@ root.Sync = Sync = defaultValue = Settings.defaults[key] defaultValueJSON = JSON.stringify(defaultValue) - if value && value != defaultValueJSON + if value and value != defaultValueJSON # Key/value has been changed to non-default value at remote instance. @log "update: #{key}=#{value}" localStorage[key] = value @@ -72,7 +72,8 @@ root.Sync = Sync = else # Key has been reset to default value at remote instance. @log "clear: #{key}" - delete localStorage[key] + if key of localStorage + delete localStorage[key] Settings.doPostUpdateHook key, defaultValue # Only called synchronously from within vimium, never on a callback. diff --git a/tests/unit_tests/settings_test.coffee b/tests/unit_tests/settings_test.coffee index 07b96a30..9aec95dd 100644 --- a/tests/unit_tests/settings_test.coffee +++ b/tests/unit_tests/settings_test.coffee @@ -64,3 +64,12 @@ context "settings", # Pull Sync's version of scrollStepSize, this should delete scrollStepSize in localStorage, because it's a default value. Sync.pull() assert.isFalse Settings.has 'scrollStepSize' + + should "remote setting cleared", -> + # Prime localStorage. + Settings.set 'scrollStepSize', 20 + assert.equal Settings.get('scrollStepSize'), 20 + # Prime Sync with a non-default value. + chrome.storage.sync.set { scrollStepSize: JSON.stringify(40) } + chrome.storage.sync.remove 'scrollStepSize' + assert.isFalse Settings.has 'scrollStepSize' diff --git a/tests/unit_tests/test_chrome_stubs.coffee b/tests/unit_tests/test_chrome_stubs.coffee index f32de24f..dd8dccf8 100644 --- a/tests/unit_tests/test_chrome_stubs.coffee +++ b/tests/unit_tests/test_chrome_stubs.coffee @@ -16,6 +16,13 @@ global.chrome.storage.onChanged ||= if @func @func( @mkKeyValue(key,value), 'synced storage stub' ) + callEmpty: (key) -> + chrome.runtime = { lastError: undefined } + if @func + items = {} + items[key] = {} + @func( items, 'synced storage stub' ) + mkKeyValue: (key, value) -> obj = {} obj[key] = { newValue: value } @@ -53,4 +60,6 @@ global.chrome.storage.sync ||= delete @store[key] if callback callback() + # Now, generate (supposedly asynchronous) notification for listeners. + global.chrome.storage.onChanged.callEmpty(key) |
