diff options
| author | Stephen Blott | 2015-05-17 13:24:46 +0100 | 
|---|---|---|
| committer | Stephen Blott | 2015-05-17 13:24:50 +0100 | 
| commit | 904398308debad22fedec227ec8e71adb2bc5720 (patch) | |
| tree | cf205e6a3f09f889a4c1f25e60fd1742780da945 | |
| parent | 6387f2e89774c1af7494f8507dfcc1fa245f2524 (diff) | |
| download | vimium-904398308debad22fedec227ec8e71adb2bc5720.tar.bz2 | |
TabToOpen: respect trailing options when extracting query terms.
A custom search engine like this...
i: https://www.google.ie/search?q=%s&num=30&newwindow=1&biw=1918&bih=1015&tbm=isch Google image search
Should not match a URL like this...
https://www.google.ie/search?q=bbc+sport
| -rw-r--r-- | lib/utils.coffee | 9 | ||||
| -rw-r--r-- | tests/unit_tests/utils_test.coffee | 10 | 
2 files changed, 17 insertions, 2 deletions
| diff --git a/lib/utils.coffee b/lib/utils.coffee index 63b8ba0e..03403644 100644 --- a/lib/utils.coffee +++ b/lib/utils.coffee @@ -121,10 +121,15 @@ Utils =      httpProtocolRegexp = new RegExp "^https?://"      (searchUrl, url) ->        url = url.replace httpProtocolRegexp -      searchUrl = searchUrl.split("%s")[0].replace httpProtocolRegexp +      searchUrl = searchUrl.replace httpProtocolRegexp +      [ searchUrl, suffixTerms... ] = searchUrl.split "%s" +      # We require the URL to start with the search URL. +      return null unless url.startsWith searchUrl +      # We require any remaining terms in the search URL to also be present in the URL. +      for suffix in suffixTerms +        return null unless 0 <= url.indexOf suffix        # We use try/catch because decodeURIComponent can throw an exception.        try -        if url.startsWith searchUrl            url[searchUrl.length..].split(queryTerminator)[0].split("+").map(decodeURIComponent).join " "        catch          null diff --git a/tests/unit_tests/utils_test.coffee b/tests/unit_tests/utils_test.coffee index 829c7042..9d71cc49 100644 --- a/tests/unit_tests/utils_test.coffee +++ b/tests/unit_tests/utils_test.coffee @@ -49,6 +49,16 @@ context "convertToUrl",      assert.equal "https://www.google.com/search?q=go+ogle.com", Utils.convertToUrl("go ogle.com")      assert.equal "https://www.google.com/search?q=%40twitter", Utils.convertToUrl("@twitter") +context "extractQuery", +  should "extract queries from search URLs", -> +    assert.equal "bbc sport 1", Utils.extractQuery "https://www.google.ie/search?q=%s", "https://www.google.ie/search?q=bbc+sport+1" +    assert.equal "bbc sport 2", Utils.extractQuery "http://www.google.ie/search?q=%s", "https://www.google.ie/search?q=bbc+sport+2" +    assert.equal "bbc sport 3", Utils.extractQuery "https://www.google.ie/search?q=%s", "http://www.google.ie/search?q=bbc+sport+3" +    assert.equal "bbc sport 4", Utils.extractQuery "https://www.google.ie/search?q=%s", "http://www.google.ie/search?q=bbc+sport+4&blah" + +  should "extract not queries from incorrect search URLs", -> +    assert.isFalse Utils.extractQuery "https://www.google.ie/search?q=%s&foo=bar", "https://www.google.ie/search?q=bbc+sport" +  context "hasChromePrefix",    should "detect chrome prefixes of URLs", ->      assert.isTrue Utils.hasChromePrefix "about:foobar" | 
