aboutsummaryrefslogtreecommitdiffstats
path: root/pages
diff options
context:
space:
mode:
authorStephen Blott2015-05-28 15:56:18 +0100
committerStephen Blott2015-05-28 15:56:21 +0100
commit45157bc460494503ca2b90caa762e72d224a1ef3 (patch)
treef912e1536911fc8a783d31fb396d078144ec9d51 /pages
parenta975ce087c4beac442e5cfaeb7fb0510e54c82a4 (diff)
downloadvimium-45157bc460494503ca2b90caa762e72d224a1ef3.tar.bz2
Custom-only: fix long-standing race condition.
In omni mode, the vomnibar suggestions are updated asynchronously. Therefore, the contents of the primary custom search-engine suggestion may be behind the actual contents of the comnibar input. So, we reconstruct the custom search-engine query on "enter". (This fixes a long-standing race condition.)
Diffstat (limited to 'pages')
-rw-r--r--pages/vomnibar.coffee12
1 files changed, 10 insertions, 2 deletions
diff --git a/pages/vomnibar.coffee b/pages/vomnibar.coffee
index 4bf971e4..82de067f 100644
--- a/pages/vomnibar.coffee
+++ b/pages/vomnibar.coffee
@@ -138,15 +138,23 @@ class VomnibarUI
@selection = @completions.length - 1 if @selection < @initialSelectionValue
@updateSelection()
else if (action == "enter")
- if @selection == -1
+ isCustomSearchPrimarySuggestion = @completions[@selection]?.isPrimarySuggestion and @lastReponse.engine?.searchUrl?
+ if @selection == -1 or isCustomSearchPrimarySuggestion
query = @input.value.trim()
# <Enter> on an empty query is a no-op.
return unless 0 < query.length
+ # First case (@selection == -1).
# If the user types something and hits enter without selecting a completion from the list, then:
# - If a search URL has been provided, then use it. This is custom search engine request.
# - Otherwise, send the query to the background page, which will open it as a URL or create a
# default search, as appropriate.
- query = Utils.createSearchUrl query, @lastReponse.searchUrl if @lastReponse.searchUrl?
+ #
+ # Second case (isCustomSearchPrimarySuggestion).
+ # Alternatively, the selected completion could be the primary selection for a custom search engine.
+ # Because the the suggestions are updated asynchronously in omni mode, the user may have typed more
+ # text than that which is included in the URL associated with the primary suggestion. Therefore, to
+ # avoid a race condition, we construct the query from the actual contents of the input (query).
+ query = Utils.createSearchUrl query, @lastReponse.engine.searchUrl if isCustomSearchPrimarySuggestion
@hide ->
chrome.runtime.sendMessage
handler: if openInNewTab then "openUrlInNewTab" else "openUrlInCurrentTab"