           keyword: keyword
           searchUrl: url
           description: description
+          searchUrlPrefix: url.split("%s")[0]
 
       callback engines
 

    [ suggestions, continuations, filters ] = [ [], [], [] ]

    # Run each of the completers (asynchronously).
    jobs = new JobRunner completers.map (completer) ->
      (callback) ->
        completer.filter request, (newSuggestions = [], { continuation, filter } = {}) ->
          suggestions.push newSuggestions...


    # This distinguishes two very different kinds of vomnibar baviours, the newer bahviour (true) and the
    # legacy behavior (false).  We retain the latter for the default search engine, and for custom search
    # engines for which we do not have a completion engine.  By "exclusive vomnibar", we mean that
    # this completer exclusively controls which suggestions may or may not be included, including filtering
    # out suggestions from other completers.
    useExclusiveVomnibar = custom and haveCompletionEngine

    filter = null
    if useExclusiveVomnibar
      # We accept suggestions from this completer; and we also accept suggestions from other completers, but
      # only if their URL matches this search engine and the query (ie. they could have been generated by this
      # search engine previously).
      filter = (suggestion) ->
        suggestion.type == description or
          # This is a suggestion for the same search engine.
          (suggestion.url.startsWith(engine.searchUrlPrefix) and
            # And the URL suffix (which must contain the query part) matches the current query.
            RankingUtils.matches queryTerms, suggestion.url[engine.searchUrlPrefix.length..])

    # For custom search engines, we add a single, top-ranked entry for the unmodified query.  This
    # suggestion always appears at the top of the list.
