diff options
| author | Stephen Blott | 2015-06-01 11:35:51 +0100 | 
|---|---|---|
| committer | Stephen Blott | 2015-06-01 11:35:53 +0100 | 
| commit | 0f90453d269c5f8ab700123aa356a3d41026d925 (patch) | |
| tree | 07fbf1e236211552eda8befb822ca336a32bf03b /pages/options.coffee | |
| parent | 5f0400ebac5867df74225b987ea1238bdaeb40b2 (diff) | |
| download | vimium-0f90453d269c5f8ab700123aa356a3d41026d925.tar.bz2 | |
Eliminate possibility of race condition.
See newly-added long comment for details.
Diffstat (limited to 'pages/options.coffee')
| -rw-r--r-- | pages/options.coffee | 13 | 
1 files changed, 10 insertions, 3 deletions
diff --git a/pages/options.coffee b/pages/options.coffee index ddab2bf4..99492291 100644 --- a/pages/options.coffee +++ b/pages/options.coffee @@ -2,6 +2,12 @@  $ = (id) -> document.getElementById id  bgExclusions = chrome.extension.getBackgroundPage().Exclusions +# We have to use Settings from the background page here (not Settings, directly) to avoid a race condition for +# the page popup.  Specifically, we must ensure that the settings have been updated on the background page +# *before* the popup closes.  This ensures that any exclusion-rule changes are in place before the page +# regains the focus. +bgSettings = chrome.extension.getBackgroundPage().Settings +  #  # Class hierarchy for various types of option.  class Option @@ -20,20 +26,21 @@ class Option    # Fetch a setting from localStorage, remember the @previous value and populate the DOM element.    # Return the fetched value.    fetch: -> -    @populateElement @previous = Settings.get @field +    @populateElement @previous = bgSettings.get @field      @previous    # Write this option's new value back to localStorage, if necessary.    save: ->      value = @readValueFromElement()      if not @areEqual value, @previous -      Settings.set @field, @previous = value +      bgSettings.set @field, @previous = value +      bgSettings.performPostUpdateHook @field, value    # Compare values; this is overridden by sub-classes.    areEqual: (a,b) -> a == b    restoreToDefault: -> -    Settings.clear @field +    bgSettings.clear @field      @fetch()    # Static method.  | 
