aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/utils.coffee16
1 files changed, 12 insertions, 4 deletions
diff --git a/lib/utils.coffee b/lib/utils.coffee
index 1ff33300..a56340f5 100644
--- a/lib/utils.coffee
+++ b/lib/utils.coffee
@@ -39,6 +39,17 @@ Utils =
urlPrefix = new RegExp "^[a-z]{3,}://."
(url) -> urlPrefix.test url
+ # Decode valid escape sequences in a Javascript URI. This is intended to mimic the best-effort decoding
+ # Chrome itself seems to apply when a Javascript URI is enetered into the omnibox (or clicked).
+ # See https://code.google.com/p/chromium/issues/detail?id=483000, #1611 and #1636.
+ decodeJavascriptURI: (uri) ->
+ uri.split(/(?=%)/).map((uriComponent) ->
+ try
+ decodeURIComponent uriComponent
+ catch
+ uriComponent
+ ).join ""
+
# Completes a partial URL (without scheme)
createFullUrl: (partialUrl) ->
if @hasFullUrlPrefix(partialUrl) then partialUrl else ("http://" + partialUrl)
@@ -112,10 +123,7 @@ Utils =
if Utils.hasChromePrefix string
string
else if Utils.hasJavascriptPrefix string
- # We blindly URL decode javascript: URLs. That's what Chrome does when they're clicked, or entered into
- # the omnibox. However, Chrome does not URL decode such URLs in chrome.tabs.update.
- # This is arguably a Chrome bug. See https://code.google.com/p/chromium/issues/detail?id=483000.
- decodeURI string
+ Utils.decodeJavascriptURI string
else if Utils.isUrl string
Utils.createFullUrl string
else