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

Unified Diff: third_party/WebKit/Source/devtools/front_end/audits/AuditRules.js

Issue 2627073003: [Devtools] Fixed url in Audits and added doctypes (Closed)
Patch Set: Created 3 years, 11 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/WebKit/Source/devtools/front_end/audits/AuditRules.js
diff --git a/third_party/WebKit/Source/devtools/front_end/audits/AuditRules.js b/third_party/WebKit/Source/devtools/front_end/audits/AuditRules.js
index 592c1df34a68c921ed8568b78376197a02c6bd39..54a76d31d8e6474f69eb810f7eb7ebb58d48e099 100644
--- a/third_party/WebKit/Source/devtools/front_end/audits/AuditRules.js
+++ b/third_party/WebKit/Source/devtools/front_end/audits/AuditRules.js
@@ -29,6 +29,7 @@
*/
Audits.AuditRules.IPAddressRegexp = /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/;
+/** @type {!Object<number, boolean>} */
Audits.AuditRules.CacheableResponseCodes = {
200: true,
203: true,
@@ -41,13 +42,12 @@ Audits.AuditRules.CacheableResponseCodes = {
};
/**
- * @param {!Array.<!SDK.NetworkRequest>} requests
- * @param {?Array.<!Common.ResourceType>} types
- * @param {boolean} needFullResources
- * @return {!Object.<string, !Array.<!SDK.NetworkRequest|string>>}
+ * @param {!Array<!SDK.NetworkRequest>} requests
+ * @param {?Array<!Common.ResourceType>} types
+ * @return {!Object<string, !Array<!SDK.NetworkRequest>>}
*/
-Audits.AuditRules.getDomainToResourcesMap = function(requests, types, needFullResources) {
- /** @type {!Object<string, !Array<!SDK.NetworkRequest|string>>} */
+Audits.AuditRules.getDomainToResourcesMap = function(requests, types) {
+ /** @type {!Object<string, !Array<!SDK.NetworkRequest>>} */
var domainToResourcesMap = {};
for (var i = 0, size = requests.length; i < size; ++i) {
var request = requests[i];
@@ -59,15 +59,29 @@ Audits.AuditRules.getDomainToResourcesMap = function(requests, types, needFullRe
var domain = parsedURL.host;
var domainResources = domainToResourcesMap[domain];
if (domainResources === undefined) {
- domainResources = /** @type {!Array<!SDK.NetworkRequest|string>} */ ([]);
+ domainResources = /** @type {!Array<!SDK.NetworkRequest>} */ ([]);
domainToResourcesMap[domain] = domainResources;
}
- domainResources.push(needFullResources ? request : request.url());
+ domainResources.push(request);
}
return domainToResourcesMap;
};
/**
+ * @param {!Array<!SDK.NetworkRequest>} requests
+ * @param {?Array<!Common.ResourceType>} types
+ * @return {!Object<string, !Array<string>>}
+ */
+Audits.AuditRules.getDomainToResourceUrlMap = function(requests, types) {
luoe 2017/01/13 08:05:22 I don't think this new function is needed. The pl
allada 2017/01/17 19:16:25 line: 245 does.
luoe 2017/01/17 19:40:16 Line 245 is using "domain", the keys of the map, n
allada 2017/01/17 19:50:11 Done.
+ var requestMap = Audits.AuditRules.getDomainToResourcesMap(requests, types);
+ /** @type {!Object<string, !Array<string>>} */
+ var output = {};
alph 2017/01/12 07:54:42 nit: can you plz use Map as assigning arbitrary ke
allada 2017/01/12 23:49:31 I don't want to do this because this patch is not
+ for (var domain of Object.keys(requestMap))
+ output[domain] = requestMap[domain].map(request => request.url());
+ return output;
+};
+
+/**
* @unrestricted
*/
Audits.AuditRules.GzipRule = class extends Audits.AuditRule {
@@ -157,7 +171,7 @@ Audits.AuditRules.CombineExternalResourcesRule = class extends Audits.AuditRule
* @param {!Common.Progress} progress
*/
doRun(target, requests, result, callback, progress) {
- var domainToResourcesMap = Audits.AuditRules.getDomainToResourcesMap(requests, [this._type], false);
+ var domainToResourcesMap = Audits.AuditRules.getDomainToResourceUrlMap(requests, [this._type]);
var penalizedResourceCount = 0;
// TODO: refactor according to the chosen i18n approach
var summary = result.addChild('', true);
@@ -224,7 +238,7 @@ Audits.AuditRules.MinimizeDnsLookupsRule = class extends Audits.AuditRule {
*/
doRun(target, requests, result, callback, progress) {
var summary = result.addChild('');
- var domainToResourcesMap = Audits.AuditRules.getDomainToResourcesMap(requests, null, false);
+ var domainToResourcesMap = Audits.AuditRules.getDomainToResourceUrlMap(requests, null);
for (var domain in domainToResourcesMap) {
if (domainToResourcesMap[domain].length > 1)
continue;
@@ -278,8 +292,9 @@ Audits.AuditRules.ParallelizeDownloadRule = class extends Audits.AuditRule {
}
var domainToResourcesMap = Audits.AuditRules.getDomainToResourcesMap(
- requests, [Common.resourceTypes.Stylesheet, Common.resourceTypes.Image], true);
+ requests, [Common.resourceTypes.Stylesheet, Common.resourceTypes.Image]);
+ /** @type {!Array<string>} */
var hosts = [];
for (var url in domainToResourcesMap)
hosts.push(url);
@@ -366,7 +381,9 @@ Audits.AuditRules.UnusedCssRule = class extends Audits.AuditRule {
if (!styleSheets.length)
return callback(null);
+ /** @type {!Array<string>} */
var selectors = [];
+ /** @type {!Object<string, number>} */
var testedSelectors = {};
for (var i = 0; i < styleSheets.length; ++i) {
var styleSheet = styleSheets[i];
@@ -379,6 +396,7 @@ Audits.AuditRules.UnusedCssRule = class extends Audits.AuditRule {
}
}
+ /** @type {!Object<string, boolean>} */
var foundSelectors = {};
/**
@@ -397,6 +415,7 @@ Audits.AuditRules.UnusedCssRule = class extends Audits.AuditRule {
for (var i = 0; i < styleSheets.length; ++i) {
var styleSheet = styleSheets[i];
+ /** @type {!Array<string>} */
var unusedRules = [];
for (var curRule = 0; curRule < styleSheet.rules.length; ++curRule) {
var rule = styleSheet.rules[curRule];
@@ -501,6 +520,7 @@ Audits.AuditRules.StyleSheetProcessor = class {
constructor(styleSheetHeaders, progress, styleSheetsParsedCallback) {
this._styleSheetHeaders = styleSheetHeaders;
this._progress = progress;
+ /** @type {!Array<!Audits.AuditRules.ParsedStyleSheet>} */
this._styleSheets = [];
this._styleSheetsParsedCallback = styleSheetsParsedCallback;
}
@@ -516,6 +536,7 @@ Audits.AuditRules.StyleSheetProcessor = class {
}
this._currentStyleSheetHeader = this._styleSheetHeaders.shift();
+ /** @type {!Array<!Common.FormatterWorkerPool.CSSRule>} */
var allRules = [];
this._currentStyleSheetHeader.requestContent().then(
content => Common.formatterWorkerPool.parseCSS(content || '', onRulesParsed.bind(this)));
@@ -526,7 +547,7 @@ Audits.AuditRules.StyleSheetProcessor = class {
* @this {Audits.AuditRules.StyleSheetProcessor}
*/
function onRulesParsed(isLastChunk, rules) {
- allRules.push(...rules);
+ allRules.push.apply(allRules, rules);
luoe 2017/01/13 08:05:21 I'm not sure how large the "rules" array gets, but
allada 2017/01/17 19:16:25 Apply is better per kozyatinskiy@
if (isLastChunk)
this._onStyleSheetParsed(allRules);
}
@@ -541,6 +562,7 @@ Audits.AuditRules.StyleSheetProcessor = class {
return;
}
+ /** @type {!Array<!Common.FormatterWorkerPool.CSSRule>} */
var styleRules = [];
for (var i = 0; i < rules.length; ++i) {
var rule = rules[i];
@@ -577,10 +599,19 @@ Audits.AuditRules.CacheControlRule = class extends Audits.AuditRule {
callback(result);
}
+ /**
+ * @param {!Array<!SDK.NetworkRequest>} requests
+ * @param {!Audits.AuditRuleResult} result
+ */
handleNonCacheableResources(requests, result) {
}
+ /**
+ * @param {!Array<!SDK.NetworkRequest>} requests
+ * @return {!Array<!Array<!SDK.NetworkRequest>>}
+ */
_cacheableAndNonCacheableResources(requests) {
+ /** @type {!Array<!Array<!SDK.NetworkRequest>>} */
var processedResources = [[], []];
for (var i = 0; i < requests.length; ++i) {
var request = requests[i];
@@ -594,12 +625,19 @@ Audits.AuditRules.CacheControlRule = class extends Audits.AuditRule {
return processedResources;
}
+ /**
+ * @param {string} messageText
+ * @param {function(!SDK.NetworkRequest):boolean} requestCheckFunction
+ * @param {!Array<!SDK.NetworkRequest>} requests
+ * @param {!Audits.AuditRuleResult} result
+ */
execCheck(messageText, requestCheckFunction, requests, result) {
var requestCount = requests.length;
+ /** @type {!Array<string>} */
var urls = [];
for (var i = 0; i < requestCount; ++i) {
if (requestCheckFunction.call(this, requests[i]))
- urls.push(requests[i].url);
+ urls.push(requests[i].url());
}
if (urls.length) {
var entry = result.addChild(messageText, true);
@@ -734,6 +772,8 @@ Audits.AuditRules.BrowserCacheControlRule = class extends Audits.AuditRules.Cach
/**
* @override
+ * @param {!Array<!SDK.NetworkRequest>} requests
+ * @param {!Audits.AuditRuleResult} result
*/
handleNonCacheableResources(requests, result) {
if (requests.length) {
@@ -743,11 +783,15 @@ Audits.AuditRules.BrowserCacheControlRule = class extends Audits.AuditRules.Cach
true);
result.violationCount += requests.length;
for (var i = 0; i < requests.length; ++i)
- entry.addURL(requests[i].url);
+ entry.addURL(requests[i].url());
}
}
- runChecks(requests, result, callback) {
+ /**
+ * @param {!Array<!SDK.NetworkRequest>} requests
+ * @param {!Audits.AuditRuleResult} result
+ */
+ runChecks(requests, result) {
this.execCheck(
Common.UIString(
'The following resources are missing a cache expiration. Resources that do not specify an expiration may not be cached by browsers:'),
@@ -767,11 +811,19 @@ Audits.AuditRules.BrowserCacheControlRule = class extends Audits.AuditRules.Cach
this._oneYearExpirationCheck, requests, result);
}
+ /**
+ * @param {!SDK.NetworkRequest} request
+ * @return {boolean}
+ */
_missingExpirationCheck(request) {
return this.isCacheableResource(request) && !this.hasResponseHeader(request, 'Set-Cookie') &&
!this.hasExplicitExpiration(request);
}
+ /**
+ * @param {!SDK.NetworkRequest} request
+ * @return {boolean}
+ */
_varyCheck(request) {
var varyHeader = this.responseHeader(request, 'Vary');
if (varyHeader) {
@@ -779,16 +831,25 @@ Audits.AuditRules.BrowserCacheControlRule = class extends Audits.AuditRules.Cach
varyHeader = varyHeader.replace(/Accept-Encoding/gi, '');
varyHeader = varyHeader.replace(/[, ]*/g, '');
}
- return varyHeader && varyHeader.length && this.isCacheableResource(request) &&
- this.freshnessLifetimeGreaterThan(request, 0);
+ return !!(
+ varyHeader && varyHeader.length && this.isCacheableResource(request) &&
+ this.freshnessLifetimeGreaterThan(request, 0));
}
+ /**
+ * @param {!SDK.NetworkRequest} request
+ * @return {boolean}
+ */
_oneMonthExpirationCheck(request) {
return this.isCacheableResource(request) && !this.hasResponseHeader(request, 'Set-Cookie') &&
!this.freshnessLifetimeGreaterThan(request, Audits.AuditRules.CacheControlRule.MillisPerMonth) &&
this.freshnessLifetimeGreaterThan(request, 0);
}
+ /**
+ * @param {!SDK.NetworkRequest} request
+ * @return {boolean}
+ */
_oneYearExpirationCheck(request) {
return this.isCacheableResource(request) && !this.hasResponseHeader(request, 'Set-Cookie') &&
!this.freshnessLifetimeGreaterThan(request, 11 * Audits.AuditRules.CacheControlRule.MillisPerMonth) &&
@@ -820,6 +881,7 @@ Audits.AuditRules.ImageDimensionsRule = class extends Audits.AuditRule {
return;
}
+ /** @type {!Object<string,number>} */
luoe 2017/01/13 08:05:22 Nit: space after comma
allada 2017/01/17 19:16:25 Done.
var urlToNoDimensionCount = {};
function doneCallback() {
@@ -838,6 +900,10 @@ Audits.AuditRules.ImageDimensionsRule = class extends Audits.AuditRule {
callback(entry ? result : null);
}
+ /**
+ * @param {number} imageId
+ * @param {!{nodeStyles: (!Array<!SDK.CSSStyleDeclaration>|undefined), computedStyle: (?Map<string, string>|undefined)}} styles
+ */
function imageStylesReady(imageId, styles) {
if (progress.isCanceled()) {
callback(null);
@@ -887,6 +953,7 @@ Audits.AuditRules.ImageDimensionsRule = class extends Audits.AuditRule {
callback(null);
return;
}
+ /** @type {!{nodeStyles: (!Array<!SDK.CSSStyleDeclaration>|undefined), computedStyle: (?Map<string, string>|undefined)}} */
var targetResult = {};
/**
@@ -908,8 +975,10 @@ Audits.AuditRules.ImageDimensionsRule = class extends Audits.AuditRule {
if (!nodeIds || !nodeIds.length)
doneCallback();
+ /** @type {!Array<!Promise>} */
var nodePromises = [];
for (var i = 0; nodeIds && i < nodeIds.length; ++i) {
+ /** @type {!Array<!Promise>} */
var stylePromises = [
cssModel.matchedStylesPromise(nodeIds[i]).then(matchedCallback),
cssModel.computedStylePromise(nodeIds[i]).then(computedCallback)
@@ -920,6 +989,9 @@ Audits.AuditRules.ImageDimensionsRule = class extends Audits.AuditRule {
Promise.all(nodePromises).catchException(null).then(doneCallback);
}
+ /**
+ * @param {!SDK.DOMDocument} root
+ */
function onDocumentAvailable(root) {
if (progress.isCanceled()) {
callback(null);
@@ -959,6 +1031,9 @@ Audits.AuditRules.CssInHeadRule = class extends Audits.AuditRule {
return;
}
+ /**
+ * @param {?Object<string, !Array<(number|!Array<string>)>>} evalResult
+ */
function evalCallback(evalResult) {
if (progress.isCanceled()) {
callback(null);
@@ -999,9 +1074,12 @@ Audits.AuditRules.CssInHeadRule = class extends Audits.AuditRule {
if (!nodeIds)
return;
var externalStylesheetNodeIds = nodeIds;
+ /** @type {?Object<string, !Array<(number|!Array<string>)>>} */
var result = null;
if (inlineStyleNodeIds.length || externalStylesheetNodeIds.length) {
+ /** @type {!Object<string, !Array<(number|!Array<string>)>>} */
var urlToViolationsArray = {};
+ /** @type {!Array<string>} */
var externalStylesheetHrefs = [];
for (var j = 0; j < externalStylesheetNodeIds.length; ++j) {
var linkNode = domModel.nodeForId(externalStylesheetNodeIds[j]);
@@ -1070,6 +1148,9 @@ Audits.AuditRules.StylesScriptsOrderRule = class extends Audits.AuditRule {
return;
}
+ /**
+ * @param {?Array<!Array<string>|number>} resultValue
+ */
function evalCallback(resultValue) {
if (progress.isCanceled()) {
callback(null);
@@ -1087,7 +1168,7 @@ Audits.AuditRules.StylesScriptsOrderRule = class extends Audits.AuditRule {
Common.UIString(
'The following external CSS files were included after an external JavaScript file in the document head. To ensure CSS files are downloaded in parallel, always include external CSS before external JavaScript.'),
true);
- entry.addURLs(lateCssUrls);
+ entry.addURLs(/** @type {!Array<string>} */ (lateCssUrls));
result.violationCount += lateCssUrls.length;
}
@@ -1114,8 +1195,10 @@ Audits.AuditRules.StylesScriptsOrderRule = class extends Audits.AuditRule {
return;
var cssBeforeInlineCount = nodeIds.length;
+ /** @type {?Array<!Array<string>|number>} */
var result = null;
if (lateStyleIds.length || cssBeforeInlineCount) {
+ /** @type {!Array<string>} */
var lateStyleUrls = [];
for (var i = 0; i < lateStyleIds.length; ++i) {
var lateStyleNode = domModel.nodeForId(lateStyleIds[i]);
@@ -1168,6 +1251,10 @@ Audits.AuditRules.StylesScriptsOrderRule = class extends Audits.AuditRule {
* @unrestricted
*/
Audits.AuditRules.CSSRuleBase = class extends Audits.AuditRule {
luoe 2017/01/13 08:05:22 Not related to typing, but it looks like this clas
allada 2017/01/17 19:16:25 I would rather not in this cl, I only want to prot
+ /**
+ * @param {string} id
+ * @param {string} name
+ */
constructor(id, name) {
super(id, name);
}
@@ -1192,6 +1279,7 @@ Audits.AuditRules.CSSRuleBase = class extends Audits.AuditRule {
callback(null);
return;
}
+ /** @type {!Array<!SDK.CSSStyleSheetHeader>} */
var activeHeaders = [];
for (var i = 0; i < headers.length; ++i) {
if (!headers[i].disabled)
@@ -1290,6 +1378,10 @@ Audits.AuditRules.CSSRuleBase = class extends Audits.AuditRule {
* @unrestricted
*/
Audits.AuditRules.CookieRuleBase = class extends Audits.AuditRule {
+ /**
+ * @param {string} id
+ * @param {string} name
+ */
constructor(id, name) {
super(id, name);
}
@@ -1304,6 +1396,9 @@ Audits.AuditRules.CookieRuleBase = class extends Audits.AuditRule {
*/
doRun(target, requests, result, callback, progress) {
var self = this;
+ /**
+ * @param {!Array<!SDK.Cookie>} receivedCookies
+ */
function resultCallback(receivedCookies) {
if (progress.isCanceled()) {
callback(result);
@@ -1317,6 +1412,11 @@ Audits.AuditRules.CookieRuleBase = class extends Audits.AuditRule {
SDK.Cookies.getCookiesAsync(resultCallback);
}
+ /**
+ * @param {!Object<string, !Array<!SDK.NetworkRequest>>} requestsByDomain
+ * @param {!Array<!SDK.Cookie>} allCookies
+ * @param {function(!SDK.NetworkRequest, !SDK.Cookie)} callback
+ */
mapResourceCookies(requestsByDomain, allCookies, callback) {
for (var i = 0; i < allCookies.length; ++i) {
for (var requestDomain in requestsByDomain) {
@@ -1326,11 +1426,16 @@ Audits.AuditRules.CookieRuleBase = class extends Audits.AuditRule {
}
}
+ /**
+ * @param {!Array<!SDK.NetworkRequest>} requests
+ * @param {!SDK.Cookie} cookie
+ * @param {function(!SDK.NetworkRequest, !SDK.Cookie)} callback
+ */
_callbackForResourceCookiePairs(requests, cookie, callback) {
if (!requests)
return;
for (var i = 0; i < requests.length; ++i) {
- if (SDK.Cookies.cookieMatchesResourceURL(cookie, requests[i].url))
+ if (SDK.Cookies.cookieMatchesResourceURL(cookie, requests[i].url()))
callback(requests[i], cookie);
}
}
@@ -1340,12 +1445,18 @@ Audits.AuditRules.CookieRuleBase = class extends Audits.AuditRule {
* @unrestricted
*/
Audits.AuditRules.CookieSizeRule = class extends Audits.AuditRules.CookieRuleBase {
+ /**
+ * @param {number} avgBytesThreshold
+ */
constructor(avgBytesThreshold) {
super('http-cookiesize', Common.UIString('Minimize cookie size'));
this._avgBytesThreshold = avgBytesThreshold;
this._maxBytesThreshold = 1000;
}
+ /**
+ * @param {!Array<!SDK.Cookie>} cookieArray
luoe 2017/01/13 08:05:22 @return {number}
allada 2017/01/17 19:16:25 Done.
+ */
_average(cookieArray) {
var total = 0;
for (var i = 0; i < cookieArray.length; ++i)
@@ -1353,6 +1464,9 @@ Audits.AuditRules.CookieSizeRule = class extends Audits.AuditRules.CookieRuleBas
return cookieArray.length ? Math.round(total / cookieArray.length) : 0;
}
+ /**
+ * @param {!Array<!SDK.Cookie>} cookieArray
luoe 2017/01/13 08:05:22 ditto
allada 2017/01/17 19:16:25 Done.
+ */
_max(cookieArray) {
var result = 0;
for (var i = 0; i < cookieArray.length; ++i)
@@ -1360,17 +1474,35 @@ Audits.AuditRules.CookieSizeRule = class extends Audits.AuditRules.CookieRuleBas
return result;
}
+ /**
+ * @param {!Array<!SDK.Cookie>} allCookies
+ * @param {!Array<!SDK.NetworkRequest>} requests
+ * @param {!Audits.AuditRuleResult} result
+ */
processCookies(allCookies, requests, result) {
+ /**
+ * @param {!{domain: string, avgCookieSize: number, maxCookieSize: number}} a
luoe 2017/01/13 08:05:23 typedef CookieStats? @return number
allada 2017/01/17 19:16:25 Done.
+ * @param {!{domain: string, avgCookieSize: number, maxCookieSize: number}} b
+ */
function maxSizeSorter(a, b) {
return b.maxCookieSize - a.maxCookieSize;
}
+ /**
+ * @param {!{domain: string, avgCookieSize: number, maxCookieSize: number}} a
luoe 2017/01/13 08:05:22 ditto
+ * @param {!{domain: string, avgCookieSize: number, maxCookieSize: number}} b
+ */
function avgSizeSorter(a, b) {
return b.avgCookieSize - a.avgCookieSize;
}
+ /** @type {!Object<string, !Array<!SDK.Cookie>>} */
var cookiesPerResourceDomain = {};
+ /**
+ * @param {!SDK.NetworkRequest} request
+ * @param {!SDK.Cookie} cookie
+ */
function collectorCallback(request, cookie) {
var cookies = cookiesPerResourceDomain[request.parsedURL.host];
if (!cookies) {
@@ -1383,9 +1515,10 @@ Audits.AuditRules.CookieSizeRule = class extends Audits.AuditRules.CookieRuleBas
if (!allCookies.length)
return;
+ /** @type {!Array<!{domain: string, avgCookieSize: number, maxCookieSize: number}>} */
var sortedCookieSizes = [];
- var domainToResourcesMap = Audits.AuditRules.getDomainToResourcesMap(requests, null, true);
+ var domainToResourcesMap = Audits.AuditRules.getDomainToResourcesMap(requests, null);
this.mapResourceCookies(domainToResourcesMap, allCookies, collectorCallback);
for (var requestDomain in cookiesPerResourceDomain) {
@@ -1395,6 +1528,7 @@ Audits.AuditRules.CookieSizeRule = class extends Audits.AuditRules.CookieRuleBas
}
var avgAllCookiesSize = this._average(allCookies);
+ /** @type {!Array<string>} */
var hugeCookieDomains = [];
sortedCookieSizes.sort(maxSizeSorter);
@@ -1407,6 +1541,7 @@ Audits.AuditRules.CookieSizeRule = class extends Audits.AuditRules.CookieRuleBas
}
}
+ /** @type {!Array<string>} */
var bigAvgCookieDomains = [];
sortedCookieSizes.sort(avgSizeSorter);
for (var i = 0, len = sortedCookieSizes.length; i < len; ++i) {
@@ -1445,14 +1580,22 @@ Audits.AuditRules.CookieSizeRule = class extends Audits.AuditRules.CookieRuleBas
* @unrestricted
*/
Audits.AuditRules.StaticCookielessRule = class extends Audits.AuditRules.CookieRuleBase {
+ /**
+ * @param {number} minResources
+ */
constructor(minResources) {
super('http-staticcookieless', Common.UIString('Serve static content from a cookieless domain'));
this._minResources = minResources;
}
+ /**
+ * @param {!Array<!SDK.Cookie>} allCookies
+ * @param {!Array<!SDK.NetworkRequest>} requests
+ * @param {!Audits.AuditRuleResult} result
+ */
processCookies(allCookies, requests, result) {
var domainToResourcesMap = Audits.AuditRules.getDomainToResourcesMap(
- requests, [Common.resourceTypes.Stylesheet, Common.resourceTypes.Image], true);
+ requests, [Common.resourceTypes.Stylesheet, Common.resourceTypes.Image]);
var totalStaticResources = 0;
for (var domain in domainToResourcesMap)
totalStaticResources += domainToResourcesMap[domain].length;
@@ -1462,6 +1605,7 @@ Audits.AuditRules.StaticCookielessRule = class extends Audits.AuditRules.CookieR
var matchingResourceData = {};
this.mapResourceCookies(domainToResourcesMap, allCookies, this._collectorCallback.bind(this, matchingResourceData));
+ /** @type {!Array<string>} */
var badUrls = [];
var cookieBytes = 0;
for (var url in matchingResourceData) {
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698