Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(157)

Side by Side Diff: third_party/WebKit/Source/devtools/front_end/product_registry/ProductNameForURL.js

Issue 2772493002: [Devtools] Product registry to support prefix & import of data (Closed)
Patch Set: Merge branch 'ADD_SHA1' into NEW_PRODUCT_REGISTRY_STRUCTURE Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | third_party/WebKit/Source/devtools/front_end/product_registry/ProductRegistryData.js » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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();
OLDNEW
« no previous file with comments | « no previous file | third_party/WebKit/Source/devtools/front_end/product_registry/ProductRegistryData.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698