aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStephen Blott2016-03-30 09:42:49 +0100
committerStephen Blott2016-03-30 09:42:52 +0100
commit39adee9090fc5aadfd5dd681f91b80025084858a (patch)
tree60448e5112ed53a1aa9005a9ad3487ac7e2e41ca
parentde2616493ea549c6eaa435b409f74438d8692f93 (diff)
downloadvimium-39adee9090fc5aadfd5dd681f91b80025084858a.tar.bz2
Fix link-hints race condition.
Because there is a small amount of time between link-hints mode being requested and it being activated, it was possible to launch other Vimium commands (e.g. the Vomnibar) after requesting link-hints mode, and before link-hints mode starts. This prevents that.
-rw-r--r--content_scripts/link_hints.coffee9
-rw-r--r--content_scripts/mode.coffee9
2 files changed, 15 insertions, 3 deletions
diff --git a/content_scripts/link_hints.coffee b/content_scripts/link_hints.coffee
index 374a6784..59649e5d 100644
--- a/content_scripts/link_hints.coffee
+++ b/content_scripts/link_hints.coffee
@@ -56,6 +56,10 @@ HintCoordinator =
chrome.runtime.sendMessage extend request, {handler: "linkHintsMessage", messageType, frameId}
prepareToActivateMode: (mode, onExit) ->
+ # We need to communicate with the background page (and other frames) to initiate link-hints mode. To
+ # prevent other Vimium commands from being triggered before link-hints mode is launched, we install a
+ # temporary mode to block keyboard events.
+ new SuppressAllKeyboardEvents singleton: "link-hints-mode"
@onExit = [onExit]
@sendMessage "prepareToActivateMode", modeIndex: availableModes.indexOf mode
@@ -130,6 +134,7 @@ class LinkHintsMode
@hintMode = new Mode
name: "hint/#{mode.name}"
indicator: false
+ singleton: "link-hints-mode"
passInitialKeyupEvents: true
suppressAllKeyboardEvents: true
suppressTrailingKeyEvents: true
@@ -402,7 +407,7 @@ class FilterHints
getMatchingHints: (hintMarkers, tabCount = 0) ->
# At this point, linkTextKeystrokeQueue and hintKeystrokeQueue have been updated to reflect the latest
- # input. use them to filter the link hints accordingly.
+ # input. Use them to filter the link hints accordingly.
matchString = @hintKeystrokeQueue.join ""
linksMatched = @filterLinkHints hintMarkers
linksMatched = linksMatched.filter (linkMarker) -> linkMarker.hintString.startsWith matchString
@@ -634,7 +639,7 @@ LocalHints =
false # This is not a false positive.
element
- # TODO(mrmr1993): Consider z-index. z-index affects behviour as follows:
+ # TODO(mrmr1993): Consider z-index. z-index affects behaviour as follows:
# * The document has a local stacking context.
# * An element with z-index specified
# - sets its z-order position in the containing stacking context, and
diff --git a/content_scripts/mode.coffee b/content_scripts/mode.coffee
index d5775ad7..07307d0d 100644
--- a/content_scripts/mode.coffee
+++ b/content_scripts/mode.coffee
@@ -211,5 +211,12 @@ class Mode
mode.exit() for mode in @modes
@modes = []
+class SuppressAllKeyboardEvents extends Mode
+ constructor: (options = {}) ->
+ defaults =
+ name: "suppressAllKeyboardEvents"
+ suppressallkeyboardevents: true
+ super extend defaults, options
+
root = exports ? window
-root.Mode = Mode
+extend root, {Mode, SuppressAllKeyboardEvents}