diff options
| -rw-r--r-- | background_page.html | 5 | ||||
| -rw-r--r-- | lib/utils.js | 20 | ||||
| -rw-r--r-- | test_harnesses/automated.html | 13 | 
3 files changed, 36 insertions, 2 deletions
| diff --git a/background_page.html b/background_page.html index c62697b0..51f9d462 100644 --- a/background_page.html +++ b/background_page.html @@ -2,6 +2,7 @@  <head>  <script type="text/javascript" src="commands.js"></script>  <script type="text/javascript" src="lib/clipboard.js"></script> +<script type="text/javascript" src="lib/utils.js"></script>  <script type="text/javascript" charset="utf-8">    // Chromium #15242 will make this XHR request to access the manifest unnecessary.    var manifestRequest = new XMLHttpRequest(); @@ -268,11 +269,11 @@    }    function openCopiedUrlInCurrentTab(request) { -    openUrlInCurrentTab({ url: Clipboard.paste() }); +    openUrlInCurrentTab({ url: utils.ensureUrl(Clipboard.paste()) });    }    function openCopiedUrlInNewTab(request) { -    openUrlInNewTab({ url: Clipboard.paste() }); +    openUrlInNewTab({ url: utils.ensureUrl(Clipboard.paste()) });    }    /* diff --git a/lib/utils.js b/lib/utils.js index 0c86970e..a0668409 100644 --- a/lib/utils.js +++ b/lib/utils.js @@ -74,4 +74,24 @@ var utils = {      };      return null;    }, + +  /** +   * Tries to convert :str into a valid URL. +   * We don't bother with escaping characters, however, as Chrome will do that for us. +   */ +  ensureUrl: function(str) { +    // trim str +    str = str.replace(/^\s+|\s+$/g, ''); + +    // definitely not a valid URL; treat as a search query +    if (str.indexOf(" ") != -1 || (str.indexOf('.') == -1 && !/^((http|https|ftp):\/\/)?localhost/.test(str))) +      return "http://www.google.com/search?q=" + str; +    // possibly a valid URL, but not canonical +    else if (!/^(http|https|ftp|chrome):\/\//.test(str)) +      return "http://" + str; +    // cross our fingers and hope it is valid +    else +      return str; +  }, +  }; diff --git a/test_harnesses/automated.html b/test_harnesses/automated.html index 5e3ae93c..764b0d2f 100644 --- a/test_harnesses/automated.html +++ b/test_harnesses/automated.html @@ -250,6 +250,19 @@        ); +      context("Web query parsing", + +        should("Convert query string to valid URL", function() { +          assert.equal("http://www.google.com/", utils.ensureUrl("http://www.google.com/")); +          assert.equal("http://www.google.com/", utils.ensureUrl("    http://www.google.com/     ")); +          assert.equal("http://www.google.com", utils.ensureUrl("www.google.com")); +          assert.equal("http://google.com", utils.ensureUrl("google.com")); +          assert.equal("http://www.google.com/search?q=google", utils.ensureUrl("google")); +          assert.equal("http://www.google.com/search?q=go ogle.com", utils.ensureUrl("go ogle.com")); +        }) + +      ); +        Tests.outputMethod = function(output) {          var newOutput = Array.prototype.join.call(arguments, "\n");          newOutput = newOutput.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">"); // escape html | 
