Index: fuzzer/res/imp/fuzzer-collapse-details-sk.html |
diff --git a/fuzzer/res/imp/fuzzer-collapse-details-sk.html b/fuzzer/res/imp/fuzzer-collapse-details-sk.html |
index 77cfff0e29dc72144ab09cd341b365bf7da5f9c2..93d253cbbb77e18c5fc6f31d14e06ee2351beb71 100644 |
--- a/fuzzer/res/imp/fuzzer-collapse-details-sk.html |
+++ b/fuzzer/res/imp/fuzzer-collapse-details-sk.html |
@@ -17,24 +17,29 @@ |
Properties: |
details - The details object. Expected to have the following attributes: |
lineNumber: Number, |
- count: Number, |
+ count: Number, The full number of reports. |
reports: Array of Reports. If non-empty, |
an expandable details panel will be created containing representations of the reports. |
If empty, just the summary will be shown. |
Reports are objects and have the following attributes: |
- name: String, The name of the binary, likely an md5 hash |
- type: String, The type of the binary |
- - flags: Array of String, The flags associated with the run (e.g. DebugDumped) |
+ - debugFlags: Array of String, Flags associated with the debug run (e.g. FailedGracefully) |
+ - releaseFlags: Array of String, Flags associated with the release run (e.g. ASANCrashed) |
- debugStackTrace: Object (see fuzzer-stacktrace-sk.html for schema) |
- releaseStackTrace: Object (see fuzzer-stacktrace-sk.html for schema) |
+ - category: String. |
detailsBase: String, the base url for details (should include file and function name) |
expand: Boolean, if this element should be auto expanded. |
+ exclude: Array of String, all fuzzes that have one or more of these strings as a flag will not |
+ be shown. This array must be sorted lexographically. |
+ include: Array of String, all fuzzes must have one or more of these strings as a flag to be |
+ shown. This array must be sorted lexographically. |
Methods: |
setDetails(details) - Programmatically set the details object. |
showMore() - Programmatically show up to 6 more details panels. |
showFewer() - Programmatically show up to 6 fewer details panels. |
- toggleDetails() - Programmticaly hide/show the details panels. |
Events: |
None. |
@@ -99,54 +104,48 @@ |
} |
</style> |
<div id="wrapper"> |
- <template is="dom-if" if="{{!_hasDetails(details)}}"> |
- <li> |
- <a href$="{{_getDetailsLink(detailsBase, details)}}">Line {{details.lineNumber}}</a> |
- -- {{details.count}} crash-causing fuzzes |
- </li> |
- </template> |
- <template is="dom-if" if="{{_hasDetails(details)}}"> |
- <li> |
- <details-sk open="[[expand]]"> |
- <summary-sk> |
- <a href$="{{_getDetailsLink(detailsBase, details)}}">Line {{details.lineNumber}}</a> |
- -- {{details.count}} crash-causing fuzzes |
- </summary-sk> |
- <div class="panel-container"> |
- <template is="dom-repeat" items="{{reports}}" as="report"> |
- <div class="panel"> |
- <div class="title"> |
- File: |
- <a href$="{{_getDownloadLink(report)}}">{{report.fuzzName}}</a> |
- |
- <a href$="{{_getPermaLink(report)}}"><iron-icon icon="icons:link" title="permalink"></iron-icon></a> |
- |
- <a href$="{{_getNewBugLink(report)}}" target="_blank"><iron-icon icon="icons:bug-report" title="file a bug about this fuzz"></iron-icon></a> |
- </div> |
- <div class="raw"> |
- <a href$="{{_getMetaLink(report,'debug','err')}}">debug_err</a> |
- <a href$="{{_getMetaLink(report,'release','err')}}">release_err</a> |
- <a href$="{{_getMetaLink(report,'debug','dump')}}">debug_dump</a> |
- <a href$="{{_getMetaLink(report,'release','dump')}}">release_dump</a> |
- </div> |
- <div>{{_getFlags(report)}}</div> |
- <h4>Debug Stack Trace</h4> |
- <fuzzer-stacktrace-sk trace="{{report.debugStackTrace}}"></fuzzer-stacktrace-sk> |
- <h4>Release Stack Trace</h4> |
- <fuzzer-stacktrace-sk trace="{{report.releaseStackTrace}}"></fuzzer-stacktrace-sk> |
+ <li> |
+ <details-sk open="[[expand]]"> |
+ <summary-sk> |
+ <a href$="{{_getDetailsLink(detailsBase, details)}}">Line {{details.lineNumber}}</a> |
+ -- {{numReports}} crash-causing fuzzes |
+ </summary-sk> |
+ <div class="panel-container"> |
+ <template is="dom-repeat" items="{{_getSomeReports(filteredReports, toShow)}}" as="report"> |
+ <div class="panel"> |
+ <div class="title"> |
+ File: |
+ <a href$="{{_getDownloadLink(report)}}">{{report.fuzzName}}</a> |
+ |
+ <a href$="{{_getPermaLink(report)}}"><iron-icon icon="icons:link" title="permalink"></iron-icon></a> |
+ |
+ <a href$="{{_getNewBugLink(report)}}" target="_blank"><iron-icon icon="icons:bug-report" title="file a bug about this fuzz"></iron-icon></a> |
</div> |
- </template> |
- <div class="show-more-less-bar"> |
- <paper-button disabled$="{{!hasFewer}}" on-click="showFewer">Show Fewer</paper-button> |
- <span class="status"> |
- <span class="center">Showing {{toShow}}/{{details.count}}</span> |
- </span> |
- <paper-button disabled$="{{!hasMore}}" on-click="showMore">Show More</paper-button> |
+ <div class="raw"> |
+ <a href$="{{_getMetaLink(report,'debug','asan')}}">debug_asan</a> |
+ <a href$="{{_getMetaLink(report,'release','asan')}}">release_asan</a> |
+ <a href$="{{_getMetaLink(report,'debug','err')}}">debug_err</a> |
+ <a href$="{{_getMetaLink(report,'release','err')}}">release_err</a> |
+ <a href$="{{_getMetaLink(report,'debug','dump')}}">debug_dump</a> |
+ <a href$="{{_getMetaLink(report,'release','dump')}}">release_dump</a> |
+ </div> |
+ <div>{{_getFlags(report)}}</div> |
+ <h4>Debug Stack Trace</h4> |
+ <fuzzer-stacktrace-sk trace="{{report.debugStackTrace}}"></fuzzer-stacktrace-sk> |
+ <h4>Release Stack Trace</h4> |
+ <fuzzer-stacktrace-sk trace="{{report.releaseStackTrace}}"></fuzzer-stacktrace-sk> |
</div> |
+ </template> |
+ <div class="show-more-less-bar"> |
+ <paper-button disabled$="{{!hasFewer}}" on-click="showFewer">Show Fewer</paper-button> |
+ <span class="status"> |
+ <span class="center">Showing {{_min(toShow, numReports)}}/{{numReports}}</span> |
+ </span> |
+ <paper-button disabled$="{{!hasMore}}" on-click="showMore">Show More</paper-button> |
</div> |
- </details-sk> |
- </li> |
- </template> |
+ </div> |
+ </details-sk> |
+ </li> |
</div> |
</template> |
<script> |
@@ -166,7 +165,7 @@ |
}, |
// detailsBase is the base url to the details page for the parent element. |
// We will use fuzzer.getLinkToDetails() to append the line information to the link. |
- detailsBase: { // expected to be provided |
+ detailsBase: { |
type: String, |
value: "" |
}, |
@@ -187,10 +186,24 @@ |
computed: "_hasFewer(toShow)" |
}, |
// Returns the amount of detail panels equal to 'toShow' |
- reports: { |
+ filteredReports: { |
type: Array, |
- computed: "_getSomeReports(details, toShow)", |
+ computed: "_filterReports(details, exclude, include)", |
}, |
+ exclude: { |
+ type: Array, |
+ value: [], |
+ }, |
+ include: { |
+ type: Array, |
+ value: [], |
+ }, |
+ numReports: { |
+ type: Number, |
+ computed: "_getNumFiltered(filteredReports)", |
+ reflectToAttribute: true, |
+ notify: true, |
+ } |
}, |
ready: function() { |
@@ -204,12 +217,15 @@ |
this._setToShow(Math.min(6, this.details.reports.length)); |
}, |
- _hasDetails: function(details) { |
- return this.details.reports && this.details.reports.length > 0; |
- }, |
- |
_getFlags: function(report) { |
- return report.flags.join(" | "); |
+ if (!report.debugFlags) { |
+ report.debugFlags = ["<none>"]; |
+ } |
+ if (!report.releaseFlags) { |
+ report.releaseFlags = ["<none>"]; |
+ } |
+ return "[Debug] " + report.debugFlags.join(" | ") + " [Release] " + |
+ report.releaseFlags.join(" | "); |
}, |
showMore: function() { |
@@ -228,15 +244,42 @@ |
return toShow > 0; |
}, |
+ _min: function(a, b) { |
+ return Math.min(a, b); |
+ }, |
+ |
+ _filterReports: function(details, exclude, include) { |
+ exclude = exclude || []; |
+ include = include || []; |
+ if (exclude.length === 0 && include.length === 0) { |
+ return details.reports; |
+ } |
+ |
+ return details.reports.filter(function(report){ |
+ if (sk.sharesElement(exclude, report.debugFlags) || |
+ sk.sharesElement(exclude, report.releaseFlags)) { |
+ return false; |
+ } |
+ if (include.length === 0) { |
+ return true; |
+ } |
+ if (!sk.sharesElement(include, report.debugFlags) && |
+ !sk.sharesElement(include, report.releaseFlags)) { |
+ return false; |
+ } |
+ return true; |
+ }); |
+ }, |
+ |
// _getSomeReports returns up to {{toShow}} reports from details |
- _getSomeReports: function(details, toShow) { |
- if (!details.reports) { |
+ _getSomeReports: function(filteredReports, toShow) { |
+ if (!filteredReports) { |
return []; |
} |
- if (toShow > details.reports.length) { |
- return details.reports; |
+ if (toShow > filteredReports.length) { |
+ return filteredReports; |
} |
- return details.reports.slice(0, toShow); |
+ return filteredReports.slice(0, toShow); |
}, |
_getDownloadLink: function(report) { |
@@ -259,6 +302,12 @@ |
_getNewBugLink: function(report) { |
return "/newBug?name=" + report.fuzzName + "&category="+report.category; |
}, |
+ _getNumFiltered: function(filteredReports) { |
+ if (!filteredReports) { |
+ return 0; |
+ } |
+ return filteredReports.length; |
+ }, |
}); |
</script> |
</dom-module> |