blob: 7c5a812736ef611e272ca4c7586ad4dcdb5a23d0 [file] [log] [blame]
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
/**
* @fileoverview 'site-favicon' is the section to display the favicon given the
* site URL.
*/
Polymer({
is: 'site-favicon',
properties: {
url: {
type: String,
value: '',
observer: 'urlChanged_',
}
},
/** @private */
urlChanged_: function() {
let url = this.removePatternWildcard_(this.url);
url = this.ensureUrlHasScheme_(url);
this.style.backgroundImage = cr.icon.getFavicon(url || '');
},
/**
* Removes the wildcard prefix from a pattern string.
* @param {string} pattern The pattern to remove the wildcard from.
* @return {string} The resulting pattern.
* @private
*/
removePatternWildcard_: function(pattern) {
if (!pattern || pattern.length === 0) {
return pattern;
}
if (pattern.startsWith('http://[*.]')) {
return pattern.replace('http://[*.]', 'http://');
} else if (pattern.startsWith('https://[*.]')) {
return pattern.replace('https://[*.]', 'https://');
} else if (pattern.startsWith('[*.]')) {
return pattern.substring(4, pattern.length);
}
return pattern;
},
/**
* Ensures the URL has a scheme (assumes http if omitted).
* @param {string} url The URL with or without a scheme.
* @return {string} The URL with a scheme, or an empty string.
* @private
*/
ensureUrlHasScheme_: function(url) {
if (!url || url.length === 0) {
return url;
}
return url.includes('://') ? url : 'http://' + url;
},
});