| <!-- |
| The common.js file must be included before this file. |
| |
| This in an HTML Import-able file that contains the definition |
| of the following elements: |
| |
| <fuzzer-summary-sk> |
| <fuzzer-tile> |
| |
| This element will request once from /json/fuzz-summary for the fuzz contents to display, which will be an array of FileDetails. |
| See fuzzer-collapse-file-sk.html for more information. |
| |
| To use this file import it: |
| |
| <link href="/res/imp/fuzzer-summary-sk.html" rel="import" /> |
| |
| Usage: |
| |
| <fuzzer-summary-sk></fuzzer-summary-sk> |
| |
| Properties: |
| None. |
| |
| Methods: |
| None. |
| |
| Events: |
| None. |
| --> |
| <link rel="import" href="/res/imp/bower_components/iron-ajax/iron-ajax.html"> |
| <link rel="import" href="/res/imp/bower_components/iron-flex-layout/iron-flex-layout-classes.html"> |
| |
| <dom-module id="fuzzer-summary-sk"> |
| <template> |
| <style include="iron-flex iron-flex-alignment"> |
| .summaryBox { |
| max-width: inherit; |
| } |
| </style> |
| <iron-ajax auto url="/json/fuzz-summary" handle-as="json" last-response="{{fuzzers}}"></iron-ajax> |
| <h2>Stable Fuzzers</h2> |
| <div class="summaryBox" class="horizontal layout wrap around-justified"> |
| <template is="dom-repeat" items="[[stable_fuzzers]]" as="fuzzer"> |
| <fuzzer-tile fuzzer=[[fuzzer]]></fuzzer-tile> |
| </template> |
| </div> |
| <h2>Experimental Fuzzers</h2> |
| <div class="summaryBox" class="horizontal layout wrap around-justified"> |
| <template is="dom-repeat" items="[[experimental_fuzzers]]" as="fuzzer"> |
| <fuzzer-tile fuzzer=[[fuzzer]]></fuzzer-tile> |
| </template> |
| </div> |
| </template> |
| <script> |
| Polymer({ |
| is: 'fuzzer-summary-sk', |
| |
| properties: { |
| fuzzers: { |
| type: Array, |
| value: function() { |
| return []; |
| } |
| }, |
| |
| experimental_fuzzers: { |
| type: Array, |
| computed: "experimental(fuzzers)", |
| }, |
| stable_fuzzers: { |
| type: Array, |
| computed: "stable(fuzzers)", |
| }, |
| }, |
| |
| experimental: function(fuzzers) { |
| fuzzers = fuzzers || []; |
| return fuzzers.filter(function(f){ |
| return f.status === "experimental"; |
| }); |
| }, |
| |
| stable: function(fuzzers) { |
| fuzzers = fuzzers || []; |
| return fuzzers.filter(function(f){ |
| return f.status === "stable"; |
| }); |
| }, |
| |
| }); |
| </script> |
| </dom-module> |
| |
| |
| <dom-module id="fuzzer-tile"> |
| <template> |
| <style> |
| :host { |
| margin: 5px; |
| } |
| /* This aligns the 4 counts in a nice grid structure, with the fuzz type as a header. */ |
| .countBox { |
| border: 1px solid black; |
| padding: 5px; |
| border-radius: 8px; |
| display: table-cell; |
| } |
| .countBox.alert { |
| border: 3px solid red; |
| } |
| a.alert { |
| font-weight: bold; |
| color: red; |
| } |
| .center { |
| text-align: center; |
| } |
| |
| .header { |
| text-align: center; |
| padding: 1px; |
| font-size: 1.3em; |
| } |
| .subheader { |
| text-align: center; |
| padding: 1px; |
| font-size: 1.0em; |
| } |
| </style> |
| <span class$="countBox [[_alertClass(fuzzer.highPriorityCount)]]"> |
| <div class="header"> |
| <a href$="[[_allFuzzesLink(fuzzer)]]">[[fuzzer.categoryDisplay]]</a> |
| </div> |
| <div class="subheader">Groomer: [[fuzzer.groomer]]</div> |
| <table> |
| <tr> |
| <td class="center" colspan=2> |
| <a class$="[[_alertClass(fuzzer.highPriorityCount)]]" href$="[[_hiFuzzesLink(fuzzer)]]">High Priority Fuzzes</a>: |
| [[fuzzer.highPriorityCount]] |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <a href$="[[_medFuzzesLink(fuzzer)]]">Medium Priority</a>: |
| [[fuzzer.mediumPriorityCount]] |
| </td> |
| <td> |
| <a href$="[[_lowFuzzesLink(fuzzer)]]">Low Priority</a>: |
| [[fuzzer.lowPriorityCount]] |
| </td> |
| </tr> |
| </table> |
| </span> |
| </template> |
| <script> |
| (function(){ |
| var HIGH_PRIORITY_FLAGS = [ |
| "ASAN_global-buffer-overflow", |
| "ASAN_heap-buffer-overflow", |
| "ASAN_stack-buffer-overflow", |
| "ASAN_heap-use-after-free", |
| ] |
| |
| var MEDIUM_PRIORITY_FLAGS = [ |
| "ClangCrashed", |
| "ASANCrashed", |
| "Other", |
| ] |
| |
| Polymer({ |
| is: 'fuzzer-tile', |
| properties: { |
| fuzzer: { |
| type: Object, |
| }, |
| }, |
| _alertClass: function(highPriorityCount) { |
| if (highPriorityCount) { |
| return "alert"; |
| } |
| return ""; |
| }, |
| _allFuzzesLink: function(fuzzer){ |
| return `/category/${fuzzer.category}?`; |
| }, |
| _hiFuzzesLink: function(fuzzer){ |
| let link = this._allFuzzesLink(fuzzer); |
| for (let f of HIGH_PRIORITY_FLAGS) { |
| link += `include=${f}&` |
| } |
| return link; |
| }, |
| _medFuzzesLink: function(fuzzer){ |
| let link = this._allFuzzesLink(fuzzer); |
| for (let f of MEDIUM_PRIORITY_FLAGS) { |
| link += `include=${f}&` |
| } |
| return link; |
| }, |
| _lowFuzzesLink: function(fuzzer){ |
| let link = this._allFuzzesLink(fuzzer); |
| for (let f of HIGH_PRIORITY_FLAGS) { |
| link += `exclude=${f}&` |
| } |
| for (let f of MEDIUM_PRIORITY_FLAGS) { |
| link += `exclude=${f}&` |
| } |
| return link; |
| }, |
| }); |
| })() |
| </script> |
| </dom-module> |