Index: lib/contentPolicy.js |
=================================================================== |
--- a/lib/contentPolicy.js |
+++ b/lib/contentPolicy.js |
@@ -38,27 +38,27 @@ let {ElemHide} = require("elemHide"); |
var Policy = exports.Policy = |
{ |
/** |
* Set of explicitly supported content types |
* @type Set.<string> |
*/ |
contentTypes: new Set([ |
"OTHER", "SCRIPT", "IMAGE", "STYLESHEET", "OBJECT", "SUBDOCUMENT", "DOCUMENT", |
- "XMLHTTPREQUEST", "OBJECT_SUBREQUEST", "FONT", "MEDIA", "ELEMHIDE", "POPUP", |
- "GENERICHIDE", "GENERICBLOCK" |
+ "XMLHTTPREQUEST", "OBJECT_SUBREQUEST", "FONT", "MEDIA", "PING", "ELEMHIDE", |
+ "POPUP", "GENERICHIDE", "GENERICBLOCK" |
]), |
/** |
* Set of content types that aren't associated with a visual document area |
* @type Set.<string> |
*/ |
nonVisualTypes: new Set([ |
"SCRIPT", "STYLESHEET", "XMLHTTPREQUEST", "OBJECT_SUBREQUEST", "FONT", |
- "ELEMHIDE", "POPUP", "GENERICHIDE", "GENERICBLOCK" |
+ "PING", "ELEMHIDE", "POPUP", "GENERICHIDE", "GENERICBLOCK" |
]), |
/** |
* Map containing all schemes that should be ignored by content policy. |
* @type Set.<string> |
*/ |
whitelistSchemes: new Set(), |
@@ -120,16 +120,21 @@ var Policy = exports.Policy = |
{ |
return {allow, collapse, hits}; |
} |
// Ignore whitelisted schemes |
if (!this.isBlockableScheme(location)) |
return response(true, false); |
+ // Treat navigator.sendBeacon() the same as <a ping>, it's essentially the |
+ // same concept - merely generalized. |
Sebastian Noack
2015/12/23 13:34:45
I'm inclined to also add a note that we cannot dis
Wladimir Palant
2015/12/23 14:14:34
That means fairly little for Firefox - we wouldn't
Sebastian Noack
2015/12/23 14:18:18
Well, given that Chrome is our largest platform, I
|
+ if (contentType == "BEACON") |
+ contentType = "PING"; |
+ |
// Interpret unknown types as "other" |
if (!this.contentTypes.has(contentType)) |
contentType = "OTHER"; |
let wndLocation = frames[0].location; |
let docDomain = getHostname(wndLocation); |
let match = null; |
let [sitekey, sitekeyFrame] = getSitekey(frames); |