Chromium Code Reviews| Index: chrome/browser/resources/settings/site_settings/site_list.js |
| diff --git a/chrome/browser/resources/settings/site_settings/site_list.js b/chrome/browser/resources/settings/site_settings/site_list.js |
| index e724ab81998b8c67b5220030c6c6cfe741077ab3..b06cc8213c412036c31bf10c48f80b037940f01b 100644 |
| --- a/chrome/browser/resources/settings/site_settings/site_list.js |
| +++ b/chrome/browser/resources/settings/site_settings/site_list.js |
| @@ -268,14 +268,6 @@ Polymer({ |
| }, |
| /** |
| - * Ensures the URL has a scheme (assumes http if omitted). |
| - */ |
| - ensureUrlHasScheme_: function(url) { |
| - if (url.length == 0) return url; |
| - return url.indexOf('://') != -1 ? url : 'http://' + url; |
| - }, |
| - |
| - /** |
| * Converts an unordered site list to an ordered array, sorted by site name |
| * then protocol and de-duped (by origin). |
| * @param {!Array<SiteException>} sites A list of sites to sort and de-dup. |
| @@ -286,23 +278,30 @@ Polymer({ |
| sites.sort(function(a, b) { |
| // TODO(finnur): Hmm, it would probably be better to ensure scheme on the |
| // JS/C++ boundary. |
| - var originA = self.ensureUrlHasScheme_(a.origin); |
| - var originB = self.ensureUrlHasScheme_(b.origin); |
| - var embeddingOriginA = self.ensureUrlHasScheme_(a.embeddingOrigin); |
| - var embeddingOriginB = self.ensureUrlHasScheme_(b.embeddingOrigin); |
| - var url1 = new URL(originA); |
| - var url2 = new URL(originB); |
| + var originA = self.ensureUrlHasScheme(a.origin); |
| + var originB = self.ensureUrlHasScheme(b.origin); |
| + var embeddingOriginA = self.ensureUrlHasScheme(a.embeddingOrigin); |
|
michaelpg
2016/04/11 03:55:35
you don't use these embedding* vars until 299, so
Finnur
2016/04/11 11:45:33
Done.
|
| + var embeddingOriginB = self.ensureUrlHasScheme(b.embeddingOrigin); |
| + // Sorting needs protocol, port and host, but doesn't care about |
| + // wildcards, which cause the generated URL to be invalid. |
| + var url1 = new URL(originA.replace('[*.]', '')); |
| + var url2 = new URL(originB.replace('[*.]', '')); |
| var embeddingUrl1 = embeddingOriginA.length == 0 ? '' : |
| - new URL(embeddingOriginA); |
| + new URL(embeddingOriginA.replace('[*.]')); |
|
michaelpg
2016/04/11 03:55:35
missing 2nd arg (apparently results in String(unde
Finnur
2016/04/11 11:45:33
Good catch. Explains the weirdness I was facing be
|
| var embeddingUrl2 = embeddingOriginB.length == 0 ? '' : |
| - new URL(embeddingOriginB); |
| + new URL(embeddingOriginB.replace('[*.]')); |
| var comparison = url1.host.localeCompare(url2.host); |
| if (comparison == 0) { |
| comparison = url1.protocol.localeCompare(url2.protocol); |
| if (comparison == 0) { |
| comparison = url1.port.localeCompare(url2.port); |
| - if (comparison == 0) |
| - return embeddingUrl1.host.localeCompare(embeddingUrl2.host); |
| + if (comparison == 0) { |
| + var host1 = embeddingUrl1.host === undefined ? |
| + '' : embeddingUrl1.host; |
| + var host2 = embeddingUrl2.host === undefined ? |
| + '' : embeddingUrl2.host; |
| + return host1.localeCompare(host2); |
| + } |
| } |
| } |
| return comparison; |
| @@ -314,22 +313,26 @@ Polymer({ |
| var origin = sites[i].origin; |
| var embeddingOrigin = sites[i].embeddingOrigin; |
| - // The All Sites category can contain duplicates (from other categories). |
| - if (origin == lastOrigin && embeddingOrigin == lastEmbeddingOrigin) |
| - continue; |
| - |
| + var originForDisplay = origin.replace('[*.]', ''); |
| var embeddingOriginForDisplay = ''; |
| if (embeddingOrigin != '*' && origin != embeddingOrigin) |
| embeddingOriginForDisplay = embeddingOrigin; |
| + // The All Sites category can contain duplicates (from other categories). |
| + if (originForDisplay == lastOrigin && |
| + embeddingOriginForDisplay == lastEmbeddingOrigin) { |
| + continue; |
| + } |
| + |
| results.push({ |
| origin: origin, |
| + originForDisplay: originForDisplay, |
| embeddingOrigin: embeddingOrigin, |
| embeddingOriginForDisplay: embeddingOriginForDisplay, |
| }); |
| - lastOrigin = origin; |
| - lastEmbeddingOrigin = embeddingOrigin; |
| + lastOrigin = originForDisplay; |
| + lastEmbeddingOrigin = embeddingOriginForDisplay; |
| } |
| return results; |
| }, |