summaryrefslogtreecommitdiff
path: root/src/bg/ReportingCSP.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/bg/ReportingCSP.js')
-rw-r--r--src/bg/ReportingCSP.js47
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;
+ }
+ }
+ );
+}