Commit 949a29bd authored by dschuyler's avatar dschuyler Committed by Commit bot

[MD settings] Page title in site details through direct link

This CL moves some code from site_lists.js to site_settings_behavior.js
so that it can be used from site_details.js. As a result, we can
complete the initialization of the SiteException received in
site_details.js and show the URL in that UI.

BUG=635874
CQ_INCLUDE_TRYBOTS=master.tryserver.chromium.linux:closure_compilation

Review-Url: https://codereview.chromium.org/2338133008
Cr-Commit-Position: refs/heads/master@{#419216}
parent d8df3771
...@@ -54,9 +54,7 @@ Polymer({ ...@@ -54,9 +54,7 @@ Polymer({
if (!site) if (!site)
return; return;
this.browserProxy.getSiteDetails(site).then(function(siteInfo) { this.browserProxy.getSiteDetails(site).then(function(siteInfo) {
this.site = siteInfo; this.site = this.expandSiteException(siteInfo);
// TODO(dschuyler): set originForDisplay for fetchUsageTotal.
// TODO(dschuyler): set the page title to originForDisplay.
}.bind(this)); }.bind(this));
}, },
......
...@@ -319,25 +319,6 @@ Polymer({ ...@@ -319,25 +319,6 @@ Polymer({
return sites; return sites;
}, },
/**
* Converts a string origin/pattern to a URL.
* @param {string} originOrPattern The origin/pattern to convert to URL.
* @return {URL} The URL to return (or null if origin is not a valid URL).
* @private
*/
toUrl_: function(originOrPattern) {
if (originOrPattern.length == 0)
return null;
// TODO(finnur): Hmm, it would probably be better to ensure scheme on the
// JS/C++ boundary.
// TODO(dschuyler): I agree. This filtering should be done in one go, rather
// that during the sort. The URL generation should be wrapped in a try/catch
// as well.
originOrPattern = originOrPattern.replace('*://', '');
originOrPattern = originOrPattern.replace('[*.]', '');
return new URL(this.ensureUrlHasScheme(originOrPattern));
},
/** /**
* Converts an unordered site list to an ordered array, sorted by site name * Converts an unordered site list to an ordered array, sorted by site name
* then protocol and de-duped (by origin). * then protocol and de-duped (by origin).
...@@ -348,8 +329,8 @@ Polymer({ ...@@ -348,8 +329,8 @@ Polymer({
toSiteArray_: function(sites) { toSiteArray_: function(sites) {
var self = this; var self = this;
sites.sort(function(a, b) { sites.sort(function(a, b) {
var url1 = self.toUrl_(a.origin); var url1 = self.toUrl(a.origin);
var url2 = self.toUrl_(b.origin); var url2 = self.toUrl(b.origin);
var comparison = url1.host.localeCompare(url2.host); var comparison = url1.host.localeCompare(url2.host);
if (comparison == 0) { if (comparison == 0) {
comparison = url1.protocol.localeCompare(url2.protocol); comparison = url1.protocol.localeCompare(url2.protocol);
...@@ -357,8 +338,8 @@ Polymer({ ...@@ -357,8 +338,8 @@ Polymer({
comparison = url1.port.localeCompare(url2.port); comparison = url1.port.localeCompare(url2.port);
if (comparison == 0) { if (comparison == 0) {
// Compare hosts for the embedding origins. // Compare hosts for the embedding origins.
var host1 = self.toUrl_(a.embeddingOrigin); var host1 = self.toUrl(a.embeddingOrigin);
var host2 = self.toUrl_(b.embeddingOrigin); var host2 = self.toUrl(b.embeddingOrigin);
host1 = (host1 == null) ? '' : host1.host; host1 = (host1 == null) ? '' : host1.host;
host2 = (host2 == null) ? '' : host2.host; host2 = (host2 == null) ? '' : host2.host;
return host1.localeCompare(host2); return host1.localeCompare(host2);
...@@ -371,34 +352,18 @@ Polymer({ ...@@ -371,34 +352,18 @@ Polymer({
var lastOrigin = ''; var lastOrigin = '';
var lastEmbeddingOrigin = ''; var lastEmbeddingOrigin = '';
for (var i = 0; i < sites.length; ++i) { for (var i = 0; i < sites.length; ++i) {
var origin = sites[i].origin; /** @type {!SiteException} */
var originForDisplay = this.sanitizePort(this.toUrl_(origin).origin); var siteException = this.expandSiteException(sites[i]);
var embeddingOrigin = sites[i].embeddingOrigin;
var embeddingOriginForDisplay = '';
if (origin != embeddingOrigin) {
embeddingOriginForDisplay =
this.getEmbedderString(embeddingOrigin, this.category);
}
// The All Sites category can contain duplicates (from other categories). // The All Sites category can contain duplicates (from other categories).
if (originForDisplay == lastOrigin && if (siteException.originForDisplay == lastOrigin &&
embeddingOriginForDisplay == lastEmbeddingOrigin) { siteException.embeddingOriginForDisplay == lastEmbeddingOrigin) {
continue; continue;
} }
results.push({ results.push(siteException);
origin: origin, lastOrigin = siteException.originForDisplay;
originForDisplay: originForDisplay, lastEmbeddingOrigin = siteException.embeddingOriginForDisplay;
embeddingOrigin: embeddingOrigin,
embeddingOriginForDisplay: embeddingOriginForDisplay,
incognito: sites[i].incognito,
setting: sites[i].setting,
source: sites[i].source,
});
lastOrigin = originForDisplay;
lastEmbeddingOrigin = embeddingOriginForDisplay;
} }
return results; return results;
}, },
......
...@@ -441,6 +441,55 @@ var SiteSettingsBehaviorImpl = { ...@@ -441,6 +441,55 @@ var SiteSettingsBehaviorImpl = {
setting != settings.PermissionValues.ASK : setting != settings.PermissionValues.ASK :
setting != settings.PermissionValues.BLOCK; setting != settings.PermissionValues.BLOCK;
}, },
/**
* Converts a string origin/pattern to a URL.
* @param {string} originOrPattern The origin/pattern to convert to URL.
* @return {URL} The URL to return (or null if origin is not a valid URL).
* @private
*/
toUrl: function(originOrPattern) {
if (originOrPattern.length == 0)
return null;
// TODO(finnur): Hmm, it would probably be better to ensure scheme on the
// JS/C++ boundary.
// TODO(dschuyler): I agree. This filtering should be done in one go, rather
// that during the sort. The URL generation should be wrapped in a try/catch
// as well.
originOrPattern = originOrPattern.replace('*://', '');
originOrPattern = originOrPattern.replace('[*.]', '');
return new URL(this.ensureUrlHasScheme(originOrPattern));
},
/**
* Convert an exception (received from the C++ handler) to a full
* SiteException.
* @param {!Object} exception The raw site exception from C++.
* @return {SiteException} The expanded (full) SiteException.
* @private
*/
expandSiteException: function(exception) {
var origin = exception.origin;
var originForDisplay = this.sanitizePort(this.toUrl(origin).origin);
var embeddingOrigin = exception.embeddingOrigin;
var embeddingOriginForDisplay = '';
if (origin != embeddingOrigin) {
embeddingOriginForDisplay =
this.getEmbedderString(embeddingOrigin, this.category);
}
return {
origin: origin,
originForDisplay: originForDisplay,
embeddingOrigin: embeddingOrigin,
embeddingOriginForDisplay: embeddingOriginForDisplay,
incognito: exception.incognito,
setting: exception.setting,
source: exception.source,
};
},
}; };
/** @polymerBehavior */ /** @polymerBehavior */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment