Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Unified Diff: lib/contentPolicy.js

Issue 29329547: Issue 3208 - Move isBlockableScheme call from shouldLoad() into processNode() (Closed)
Patch Set: Fixed typo Created Nov. 1, 2015, 12:23 p.m.
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: lib/contentPolicy.js
===================================================================
--- a/lib/contentPolicy.js
+++ b/lib/contentPolicy.js
@@ -117,16 +117,20 @@ var Policy = exports.Policy =
* @return {Boolean} false if the node should be blocked
*/
processNode: function(wnd, node, contentType, location, collapse)
{
let topWnd = wnd.top;
if (!topWnd || !topWnd.location || !topWnd.location.href)
return true;
+ // Ignore whitelisted schemes
+ if (!this.isBlockableScheme(location))
+ return true;
+
// Interpret unknown types as "other"
if (!this.contentTypes.has(contentType))
contentType = "OTHER";
let originWindow = Utils.getOriginWindow(wnd);
let wndLocation = originWindow.location.href;
let docDomain = getHostname(wndLocation);
let match = null;
@@ -250,39 +254,46 @@ var Policy = exports.Policy =
if (match)
addHit(match);
return !match || match instanceof WhitelistFilter;
},
/**
* Checks whether the location's scheme is blockable.
- * @param location {nsIURI}
+ * @param location {nsIURI|String}
* @return {Boolean}
*/
isBlockableScheme: function(location)
{
- return !this.whitelistSchemes.has(location.scheme);
+ let scheme;
+ if (typeof location == "string")
+ {
+ let match = /^([\w\-]+):/.exec(location);
+ scheme = match ? match[1] : null;
+ }
+ else
+ scheme = location.scheme;
+ return !this.whitelistSchemes.has(scheme);
},
/**
* Checks whether a page is whitelisted.
* @param {String} url
* @param {String} [parentUrl] location of the parent page
* @param {String} [sitekey] public key provided on the page
* @return {Filter} filter that matched the URL or null if not whitelisted
*/
isWhitelisted: function(url, parentUrl, sitekey)
{
if (!url)
return null;
// Do not apply exception rules to schemes on our whitelistschemes list.
- let match = /^([\w\-]+):/.exec(url);
- if (match && this.whitelistSchemes.has(match[1]))
+ if (!this.isBlockableScheme(url))
return null;
if (!parentUrl)
parentUrl = url;
// Ignore fragment identifier
let index = url.indexOf("#");
if (index >= 0)
@@ -375,21 +386,17 @@ var PolicyImplementation =
// Ignore standalone objects
if (contentType == Ci.nsIContentPolicy.TYPE_OBJECT && node.ownerDocument && !/^text\/|[+\/]xml$/.test(node.ownerDocument.contentType))
return Ci.nsIContentPolicy.ACCEPT;
let wnd = Utils.getWindow(node);
if (!wnd)
return Ci.nsIContentPolicy.ACCEPT;
- // Ignore whitelisted schemes
let location = Utils.unwrapURL(contentLocation);
- if (!Policy.isBlockableScheme(location))
- return Ci.nsIContentPolicy.ACCEPT;
-
let result = Policy.processNode(wnd, node, types.get(contentType), location.spec, false);
return (result ? Ci.nsIContentPolicy.ACCEPT : Ci.nsIContentPolicy.REJECT_REQUEST);
},
shouldProcess: function(contentType, contentLocation, requestOrigin, insecNode, mimeType, extra)
{
return Ci.nsIContentPolicy.ACCEPT;
},
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld