Chromium Code Reviews| OLD | NEW | 
|---|---|
| 1 // Copyright 2017 The Chromium Authors. All rights reserved. | 1 // Copyright 2017 The Chromium Authors. All rights reserved. | 
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be | 
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. | 
| 4 /** | 4 /** | 
| 5 * @param {!Common.ParsedURL} parsedUrl | 5 * @param {!Common.ParsedURL} parsedUrl | 
| 6 * @return {?string} | 6 * @return {?string} | 
| 7 */ | 7 */ | 
| 8 ProductRegistry.nameForUrl = function(parsedUrl) { | 8 ProductRegistry.nameForUrl = function(parsedUrl) { | 
| 9 if (parsedUrl.isDataURL()) | 9 if (parsedUrl.isDataURL()) | 
| 10 return null; | 10 return null; | 
| 11 // TODO(allada) This should be expanded to allow paths as as well as domain to find a product. | 11 // TODO(allada) This should be expanded to allow paths as as well as domain to find a product. | 
| 12 var productsByDomain = ProductRegistry._productsByDomain; | 12 var productsByDomainHash = ProductRegistry._productsByDomainHash; | 
| 13 var domain = parsedUrl.domain(); | 13 var domain = parsedUrl.domain(); | 
| 14 var domainParts = domain.split('.'); | 14 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.
 
 | |
| 15 while (domainParts.length > 1) { | |
| 16 var subDomain = domainParts.join('.'); | 15 var subDomain = domainParts.join('.'); | 
| 17 var entry = productsByDomain.get(subDomain); | 16 var prefixes = productsByDomainHash.get(ProductRegistry._hashForDomain(subDo main)); | 
| 18 if (entry && (!entry.exact || subDomain === domain)) | 17 if (!prefixes) | 
| 19 return entry.name; | 18 continue; | 
| 20 domainParts.shift(); | 19 // Exact match domains are always highest priority. | 
| 20 if ('' in prefixes && domain === subDomain) | |
| 21 return prefixes['']; | |
| 22 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.
 
 | |
| 23 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.
 
 | |
| 24 if (domainPrefix === prefix && prefix !== '') | |
| 25 return prefixes[prefix]; | |
| 26 } | |
| 27 // Process wildcard subdomain if no better match found. | |
| 28 if ('*' in prefixes) | |
| 29 return prefixes['*']; | |
| 30 } | |
| 31 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
 
 | |
| 32 var prefixes = productsByDomainHash.get(ProductRegistry._hashForDomain(domai n.substr(4))); | |
| 33 if (prefixes && prefixes['']) | |
| 34 return prefixes['']; | |
| 21 } | 35 } | 
| 22 return null; | 36 return null; | 
| 23 }; | 37 }; | 
| 24 | 38 | 
| 25 /** | 39 /** | 
| 26 * @param {!Array<!{url: string, name: string, exact: boolean}>} data | 40 * @param {string} domain | 
| 41 * @return {string} | |
| 27 */ | 42 */ | 
| 28 ProductRegistry.register = function(data) { | 43 ProductRegistry._hashForDomain = function(domain) { | 
| 44 return ProductRegistry.sha1(domain).substr(0, 16); | |
| 45 }; | |
| 46 | |
| 47 /** | |
| 48 * @param {!Array<string>} productNames | |
| 49 * @param {!Array<!{hash: string, prefixes: !Object<string, number>}>} data | |
| 50 */ | |
| 51 ProductRegistry.register = function(productNames, data) { | |
| 29 for (var i = 0; i < data.length; i++) { | 52 for (var i = 0; i < data.length; i++) { | 
| 30 var entry = data[i]; | 53 var entry = data[i]; | 
| 31 ProductRegistry._productsByDomain.set(entry.url, entry); | 54 var prefixes = {}; | 
| 55 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.
 
 | |
| 56 var productNameIndex = entry.prefixes[prefix]; | |
| 57 prefixes[prefix] = productNames[productNameIndex]; | |
| 58 } | |
| 59 ProductRegistry._productsByDomainHash.set(entry.hash, prefixes); | |
| 32 } | 60 } | 
| 33 }; | 61 }; | 
| 34 | 62 | 
| 35 /** @type {!Map<string, !{url: string, name: string, exact: boolean}>} */ | 63 /** @type {!Map<string, !Object<string, string>>}} */ | 
| 36 ProductRegistry._productsByDomain = new Map(); | 64 ProductRegistry._productsByDomainHash = new Map(); | 
| OLD | NEW |