| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2010 Google Inc. All rights reserved. | 2 * Copyright (C) 2010 Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
| 6 * met: | 6 * met: |
| 7 * | 7 * |
| 8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
| (...skipping 729 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 740 (this.hasResponseHeader(request, "Expires") || !!this.responseHeader
Match(request, "Cache-Control", "max-age")); | 740 (this.hasResponseHeader(request, "Expires") || !!this.responseHeader
Match(request, "Cache-Control", "max-age")); |
| 741 }, | 741 }, |
| 742 | 742 |
| 743 /** | 743 /** |
| 744 * @param {!WebInspector.NetworkRequest} request | 744 * @param {!WebInspector.NetworkRequest} request |
| 745 * @return {boolean} | 745 * @return {boolean} |
| 746 */ | 746 */ |
| 747 _isExplicitlyNonCacheable: function(request) | 747 _isExplicitlyNonCacheable: function(request) |
| 748 { | 748 { |
| 749 var hasExplicitExp = this.hasExplicitExpiration(request); | 749 var hasExplicitExp = this.hasExplicitExpiration(request); |
| 750 return !!this.responseHeaderMatch(request, "Cache-Control", "(no-cache|n
o-store|must-revalidate)") || | 750 return !!this.responseHeaderMatch(request, "Cache-Control", "(no-cache|n
o-store)") || |
| 751 !!this.responseHeaderMatch(request, "Pragma", "no-cache") || | 751 !!this.responseHeaderMatch(request, "Pragma", "no-cache") || |
| 752 (hasExplicitExp && !this.freshnessLifetimeGreaterThan(request, 0)) |
| | 752 (hasExplicitExp && !this.freshnessLifetimeGreaterThan(request, 0)) |
| |
| 753 (!hasExplicitExp && !!request.url && request.url.indexOf("?") >= 0)
|| | 753 (!hasExplicitExp && !!request.url && request.url.indexOf("?") >= 0)
|| |
| 754 (!hasExplicitExp && !this.isCacheableResource(request)); | 754 (!hasExplicitExp && !this.isCacheableResource(request)); |
| 755 }, | 755 }, |
| 756 | 756 |
| 757 /** | 757 /** |
| 758 * @param {!WebInspector.NetworkRequest} request | 758 * @param {!WebInspector.NetworkRequest} request |
| 759 * @return {boolean} | 759 * @return {boolean} |
| 760 */ | 760 */ |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 830 !this.hasResponseHeader(request, "Set-Cookie") && | 830 !this.hasResponseHeader(request, "Set-Cookie") && |
| 831 !this.freshnessLifetimeGreaterThan(request, 11 * WebInspector.AuditR
ules.CacheControlRule.MillisPerMonth) && | 831 !this.freshnessLifetimeGreaterThan(request, 11 * WebInspector.AuditR
ules.CacheControlRule.MillisPerMonth) && |
| 832 this.freshnessLifetimeGreaterThan(request, WebInspector.AuditRules.C
acheControlRule.MillisPerMonth); | 832 this.freshnessLifetimeGreaterThan(request, WebInspector.AuditRules.C
acheControlRule.MillisPerMonth); |
| 833 }, | 833 }, |
| 834 | 834 |
| 835 __proto__: WebInspector.AuditRules.CacheControlRule.prototype | 835 __proto__: WebInspector.AuditRules.CacheControlRule.prototype |
| 836 } | 836 } |
| 837 | 837 |
| 838 /** | 838 /** |
| 839 * @constructor | 839 * @constructor |
| 840 * @extends {WebInspector.AuditRules.CacheControlRule} | |
| 841 */ | |
| 842 WebInspector.AuditRules.ProxyCacheControlRule = function() { | |
| 843 WebInspector.AuditRules.CacheControlRule.call(this, "http-proxycache", WebIn
spector.UIString("Leverage proxy caching")); | |
| 844 } | |
| 845 | |
| 846 WebInspector.AuditRules.ProxyCacheControlRule.prototype = { | |
| 847 runChecks: function(requests, result, callback) | |
| 848 { | |
| 849 this.execCheck(WebInspector.UIString("Resources with a \"?\" in the URL
are not cached by most proxy caching servers:"), | |
| 850 this._questionMarkCheck, requests, result); | |
| 851 this.execCheck(WebInspector.UIString("Consider adding a \"Cache-Control:
public\" header to the following resources:"), | |
| 852 this._publicCachingCheck, requests, result); | |
| 853 this.execCheck(WebInspector.UIString("The following publicly cacheable r
esources contain a Set-Cookie header. This security vulnerability can cause cook
ies to be shared by multiple users."), | |
| 854 this._setCookieCacheableCheck, requests, result); | |
| 855 }, | |
| 856 | |
| 857 _questionMarkCheck: function(request) | |
| 858 { | |
| 859 return request.url.indexOf("?") >= 0 && !this.hasResponseHeader(request,
"Set-Cookie") && this.isPubliclyCacheable(request); | |
| 860 }, | |
| 861 | |
| 862 _publicCachingCheck: function(request) | |
| 863 { | |
| 864 return this.isCacheableResource(request) && | |
| 865 !this.isCompressible(request) && | |
| 866 !this.responseHeaderMatch(request, "Cache-Control", "public") && | |
| 867 !this.hasResponseHeader(request, "Set-Cookie"); | |
| 868 }, | |
| 869 | |
| 870 _setCookieCacheableCheck: function(request) | |
| 871 { | |
| 872 return this.hasResponseHeader(request, "Set-Cookie") && this.isPubliclyC
acheable(request); | |
| 873 }, | |
| 874 | |
| 875 __proto__: WebInspector.AuditRules.CacheControlRule.prototype | |
| 876 } | |
| 877 | |
| 878 /** | |
| 879 * @constructor | |
| 880 * @extends {WebInspector.AuditRule} | 840 * @extends {WebInspector.AuditRule} |
| 881 */ | 841 */ |
| 882 WebInspector.AuditRules.ImageDimensionsRule = function() | 842 WebInspector.AuditRules.ImageDimensionsRule = function() |
| 883 { | 843 { |
| 884 WebInspector.AuditRule.call(this, "page-imagedims", WebInspector.UIString("S
pecify image dimensions")); | 844 WebInspector.AuditRule.call(this, "page-imagedims", WebInspector.UIString("S
pecify image dimensions")); |
| 885 } | 845 } |
| 886 | 846 |
| 887 WebInspector.AuditRules.ImageDimensionsRule.prototype = { | 847 WebInspector.AuditRules.ImageDimensionsRule.prototype = { |
| 888 /** | 848 /** |
| 889 * @override | 849 * @override |
| (...skipping 797 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1687 result.violationCount = badUrls.length; | 1647 result.violationCount = badUrls.length; |
| 1688 }, | 1648 }, |
| 1689 | 1649 |
| 1690 _collectorCallback: function(matchingResourceData, request, cookie) | 1650 _collectorCallback: function(matchingResourceData, request, cookie) |
| 1691 { | 1651 { |
| 1692 matchingResourceData[request.url] = (matchingResourceData[request.url] |
| 0) + cookie.size(); | 1652 matchingResourceData[request.url] = (matchingResourceData[request.url] |
| 0) + cookie.size(); |
| 1693 }, | 1653 }, |
| 1694 | 1654 |
| 1695 __proto__: WebInspector.AuditRules.CookieRuleBase.prototype | 1655 __proto__: WebInspector.AuditRules.CookieRuleBase.prototype |
| 1696 } | 1656 } |
| OLD | NEW |