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(); |