diff options
Diffstat (limited to 'src/bg/ReportingCSP.js')
-rw-r--r-- | src/bg/ReportingCSP.js | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/src/bg/ReportingCSP.js b/src/bg/ReportingCSP.js new file mode 100644 index 0000000..03926c2 --- /dev/null +++ b/src/bg/ReportingCSP.js @@ -0,0 +1,47 @@ +"use strict"; + +function ReportingCSP(reportURI, reportGroup) { + const REPORT_TO = { + name: "Report-To", + value: JSON.stringify({ "url": reportURI, + "group": reportGroup, + "max-age": 10886400 }), + }; + return Object.assign( + new CapsCSP(new NetCSP( + `report-uri ${reportURI};`, + `;report-to ${reportGroup};` + )), + { + reportURI, + reportGroup, + patchHeaders(responseHeaders, capabilities) { + let header = null; + let hasReportTo = false; + for (let h of responseHeaders) { + if (this.isMine(h)) { + header = h; + h.value = this.inject(h.value, ""); + } else if (h.name === REPORT_TO.name && h.value === REPORT_TO.value) { + hasReportTo = true; + } + } + + let blocker = capabilities && this.buildFromCapabilities(capabilities); + if (blocker) { + if (!hasReportTo) { + responseHeaders.push(REPORT_TO); + } + if (header) { + header.value = this.inject(header.value, blocker); + } else { + header = this.asHeader(blocker); + responseHeaders.push(header); + } + } + + return header; + } + } + ); +} |