Chromium Code Reviews| Index: third_party/WebKit/Source/devtools/front_end/product_registry/ProductNameForURL.js |
| diff --git a/third_party/WebKit/Source/devtools/front_end/product_registry/ProductNameForURL.js b/third_party/WebKit/Source/devtools/front_end/product_registry/ProductNameForURL.js |
| index edbbdff0b0ce68848ab920a28c89857131ea8041..80884e473b508e679cc32f2bdb983bdd0d12710d 100644 |
| --- a/third_party/WebKit/Source/devtools/front_end/product_registry/ProductNameForURL.js |
| +++ b/third_party/WebKit/Source/devtools/front_end/product_registry/ProductNameForURL.js |
| @@ -9,28 +9,56 @@ ProductRegistry.nameForUrl = function(parsedUrl) { |
| if (parsedUrl.isDataURL()) |
| return null; |
| // TODO(allada) This should be expanded to allow paths as as well as domain to find a product. |
| - var productsByDomain = ProductRegistry._productsByDomain; |
| + var productsByDomainHash = ProductRegistry._productsByDomainHash; |
| var domain = parsedUrl.domain(); |
| - var domainParts = domain.split('.'); |
| - while (domainParts.length > 1) { |
| + for (var domainParts = domain.split('.'); domainParts.length > 1; domainParts.shift()) { |
|
pfeldman
2017/03/23 20:32:24
for (var index = domain.indexOf('.'); index >= 0;
allada
2017/03/24 18:17:04
Done.
|
| var subDomain = domainParts.join('.'); |
| - var entry = productsByDomain.get(subDomain); |
| - if (entry && (!entry.exact || subDomain === domain)) |
| - return entry.name; |
| - domainParts.shift(); |
| + var prefixes = productsByDomainHash.get(ProductRegistry._hashForDomain(subDomain)); |
| + if (!prefixes) |
| + continue; |
| + // Exact match domains are always highest priority. |
| + if ('' in prefixes && domain === subDomain) |
| + return prefixes['']; |
| + for (var prefix of Object.keys(prefixes)) { |
|
pfeldman
2017/03/23 20:32:24
old way? for (var prefix in entry.prefixes) {}
allada
2017/03/24 18:17:04
Done.
|
| + var domainPrefix = subDomain.substr(0, prefix.length); |
|
pfeldman
2017/03/23 20:32:24
subDomain will never include the prefix, no?
allada
2017/03/24 18:17:04
Done.
|
| + if (domainPrefix === prefix && prefix !== '') |
| + return prefixes[prefix]; |
| + } |
| + // Process wildcard subdomain if no better match found. |
| + if ('*' in prefixes) |
| + return prefixes['*']; |
| + } |
| + if (domain.startsWith('www.')) { |
|
pfeldman
2017/03/23 20:32:24
This should have been handled above?
allada
2017/03/24 18:17:04
I spoke to my contact at 3pas team and their data
|
| + var prefixes = productsByDomainHash.get(ProductRegistry._hashForDomain(domain.substr(4))); |
| + if (prefixes && prefixes['']) |
| + return prefixes['']; |
| } |
| return null; |
| }; |
| /** |
| - * @param {!Array<!{url: string, name: string, exact: boolean}>} data |
| + * @param {string} domain |
| + * @return {string} |
| + */ |
| +ProductRegistry._hashForDomain = function(domain) { |
| + return ProductRegistry.sha1(domain).substr(0, 16); |
| +}; |
| + |
| +/** |
| + * @param {!Array<string>} productNames |
| + * @param {!Array<!{hash: string, prefixes: !Object<string, number>}>} data |
| */ |
| -ProductRegistry.register = function(data) { |
| +ProductRegistry.register = function(productNames, data) { |
| for (var i = 0; i < data.length; i++) { |
| var entry = data[i]; |
| - ProductRegistry._productsByDomain.set(entry.url, entry); |
| + var prefixes = {}; |
| + for (var prefix of Object.keys(entry.prefixes)) { |
|
pfeldman
2017/03/23 20:32:24
old way? for (var prefix in entry.prefixes) {}
allada
2017/03/24 18:17:04
Done.
|
| + var productNameIndex = entry.prefixes[prefix]; |
| + prefixes[prefix] = productNames[productNameIndex]; |
| + } |
| + ProductRegistry._productsByDomainHash.set(entry.hash, prefixes); |
| } |
| }; |
| -/** @type {!Map<string, !{url: string, name: string, exact: boolean}>} */ |
| -ProductRegistry._productsByDomain = new Map(); |
| +/** @type {!Map<string, !Object<string, string>>}} */ |
| +ProductRegistry._productsByDomainHash = new Map(); |