     "http://suggestqueries.google.com/complete/search?ss_protocol=legace&client=toolbar&q=#{Utils.createSearchQuery queryTerms}"
 
   parse: (xhr) ->
-    try
-      for suggestion in xhr.responseXML.getElementsByTagName "suggestion"
-        continue unless suggestion = suggestion.getAttribute "data"
-        suggestion
-    catch
-      []
+    for suggestion in xhr.responseXML.getElementsByTagName "suggestion"
+      continue unless suggestion = suggestion.getAttribute "data"
+      suggestion
 
 class Youtube extends RegexpEngine
   constructor: ->

  getUrl: -> chrome.runtime.getURL "content_scripts/vimium.css"
  parse: -> []

completionEngines = [ Google, Youtube, DummySearchEngine ]

SearchEngines =
  cancel: (searchUrl, callback = null) ->


    engine = @lookupEngine searchUrl
    url = engine.getUrl queryTerms
    query = queryTerms.join(" ").toLowerCase()
    @get searchUrl, url, (xhr = null) =>
      # Parsing the response may fail if we receive an unexpected or an unexpectedly-formatted response.  In
      # all cases, we fall back to the catch clause, below.
      try
        suggestions = engine.parse xhr
        # Make sure we really do have an iterable of strings.
        suggestions = (suggestion for suggestion in suggestions when "string" == typeof suggestion)
        # Filter out the query itself. It's not adding anything.
        suggestions = (suggestion for suggestion in suggestions when suggestion.toLowerCase() != query)
        # We keep at most three suggestions, the top three.
        callback @completionCache.set completionCacheKey, suggestions[...3]
      catch
        callback @completionCache.set completionCacheKey, callback []
        # We cache failures, but remove them after just ten minutes.  This (it is hoped) avoids repeated
        # XMLHttpRequest failures over a short period of time.
