aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormrmr19932015-04-24 13:53:54 +0100
committermrmr19932015-04-24 14:39:46 +0100
commit6446cf04c7b44c3d419dc450a73b60bcaf5cdf02 (patch)
treea12709fe681514d543177f4a365baabb7cea95aa
parent16df2200b491e2463b784b4979ba5e9528604b64 (diff)
downloadvimium-6446cf04c7b44c3d419dc450a73b60bcaf5cdf02.tar.bz2
Always initialise event listeners early
The event listeners were registered late, potentially allowing the page to get priority over us for key events, etc., when: * the original URL was disabled by an exclusion rule * the URL was changed - without a page load (by history.pushState or modifying location.hash), and - the new URL isn't (completely) disabled by any exclusion rules. This forces the event listeners to be registered even when the current URL is disabled, to avoid this problem.
-rw-r--r--content_scripts/vimium_frontend.coffee7
-rw-r--r--tests/dom_tests/dom_tests.coffee2
2 files changed, 4 insertions, 5 deletions
diff --git a/content_scripts/vimium_frontend.coffee b/content_scripts/vimium_frontend.coffee
index 862118bc..cc97b515 100644
--- a/content_scripts/vimium_frontend.coffee
+++ b/content_scripts/vimium_frontend.coffee
@@ -200,7 +200,7 @@ installListener = (element, event, callback) ->
# Run this as early as possible, so the page can't register any event handlers before us.
#
installedListeners = false
-window.initializeWhenEnabled = ->
+window.initializeWithState = ->
unless installedListeners
# Key event handlers fire on window before they do on document. Prefer window for key events so the page
# can't set handlers to grab the keys before us.
@@ -555,9 +555,8 @@ checkIfEnabledForUrl = ->
updateEnabledForUrlState = (response) ->
{isEnabledForUrl, passKeys} = response
- if isEnabledForUrl
- initializeWhenEnabled()
- else if HUD.isReady()
+ initializeWithState()
+ if HUD.isReady() and not isEnabledForUrl
# Quickly hide any HUD we might already be showing, e.g. if we entered insert mode on page load.
HUD.hide()
handlerStack.bubbleEvent "registerStateChange",
diff --git a/tests/dom_tests/dom_tests.coffee b/tests/dom_tests/dom_tests.coffee
index f81982ac..59970d7c 100644
--- a/tests/dom_tests/dom_tests.coffee
+++ b/tests/dom_tests/dom_tests.coffee
@@ -1,6 +1,6 @@
# Install frontend event handlers.
-initializeWhenEnabled()
+initializeWithState()
installListener = (element, event, callback) ->
element.addEventListener event, (-> callback.apply(this, arguments)), true