diff --git a/chromium/background-scripts/background.js b/chromium/background-scripts/background.js index 7782bf158bc2..26c536ab69f5 100644 --- a/chromium/background-scripts/background.js +++ b/chromium/background-scripts/background.js @@ -188,10 +188,11 @@ function updateState () { return; } + // tabUrl.host instead of hostname should be used to show the "disabled" status properly (#19293) const tabUrl = new URL(tabs[0].url); - const hostname = util.getNormalisedHostname(tabUrl.hostname); + const host = util.getNormalisedHostname(tabUrl.host); - if (isExtensionDisabledOnSite(hostname) || iconState == "disabled") { + if (isExtensionDisabledOnSite(host) || iconState == "disabled") { if ('setIcon' in chrome.browserAction) { chrome.browserAction.setIcon({ path: { diff --git a/chromium/background-scripts/util.js b/chromium/background-scripts/util.js index 5a4097c0eca0..0879588e4bef 100644 --- a/chromium/background-scripts/util.js +++ b/chromium/background-scripts/util.js @@ -62,11 +62,16 @@ function loadExtensionFile(url, returnType) { /** * Remove tailing dots from hostname, e.g. "www.example.com." + * Preserve port numbers if they are used */ -function getNormalisedHostname(hostname) { +function getNormalisedHostname(host) { + let [ hostname, port ] = host.split(":"); while (hostname && hostname[hostname.length - 1] === '.' && hostname !== '.') { hostname = hostname.slice(0, -1); } + if (port) { + return `${hostname}:${port}`; + } return hostname; } diff --git a/chromium/test/util_test.js b/chromium/test/util_test.js index 211b41f923bd..af43df7440d1 100644 --- a/chromium/test/util_test.js +++ b/chromium/test/util_test.js @@ -49,9 +49,16 @@ describe('util.js', function() { }); describe('getNormalisedHostname', function() { - it('removes tailing dots', function() { + it('preserve port numbers', function() { + assert.strictEqual(util.getNormalisedHostname('example.com'), 'example.com'); + assert.strictEqual(util.getNormalisedHostname('example.com:8080'), 'example.com:8080'); + }); + + it('removes tailing dots and preserve port numbers', function() { assert.strictEqual(util.getNormalisedHostname('example.com.'), 'example.com'); + assert.strictEqual(util.getNormalisedHostname('example.com.:8080'), 'example.com:8080'); assert.strictEqual(util.getNormalisedHostname('example.com..'), 'example.com'); + assert.strictEqual(util.getNormalisedHostname('example.com..:8080'), 'example.com:8080'); }); it('preserves a single dot', function() {