Index: lib/whitelisting.js |
=================================================================== |
--- a/lib/whitelisting.js |
+++ b/lib/whitelisting.js |
@@ -43,7 +43,7 @@ |
urlString, typeMask, docDomain, thirdParty, sitekey |
); |
- if (filter) |
+ if (filter && page) |
logWhitelistedDocument(page.id, urlString, typeMask, docDomain, filter); |
return filter; |
@@ -54,34 +54,35 @@ |
* Gets the active whitelisting filter for the document associated |
* with the given page/frame, or null if it's not whitelisted. |
* |
- * @param {Page} page |
- * @param {Frame} [frame] |
+ * @param {?Page} page |
+ * @param {?Frame} [frame] |
+ * @param {?URL} [originUrl] |
* @param {number} [typeMask=RegExpFilter.typeMap.DOCUMENT] |
* @return {?WhitelistFilter} |
*/ |
-exports.checkWhitelisted = (page, frame, typeMask) => |
+exports.checkWhitelisted = (page, frame, originUrl, |
+ typeMask = RegExpFilter.typeMap.DOCUMENT) => |
{ |
- if (typeof typeMask == "undefined") |
- typeMask = RegExpFilter.typeMap.DOCUMENT; |
- |
- if (frame) |
+ if (frame || originUrl) |
{ |
- let filter = null; |
- |
- while (frame && !filter) |
+ while (frame) |
{ |
- let {parent} = frame; |
- let docDomain = extractHostFromFrame(parent); |
- let sitekey = getKey(page, frame); |
+ let parentFrame = frame.parent; |
+ let filter = match(page, frame.url, typeMask, |
+ extractHostFromFrame(parentFrame, originUrl), |
+ getKey(page, frame, originUrl)); |
- filter = match(page, frame.url, typeMask, docDomain, sitekey); |
- frame = parent; |
+ if (filter) |
+ return filter; |
+ |
+ frame = parentFrame; |
} |
- return filter; |
+ return originUrl && match(page, originUrl, typeMask, null, |
+ getKey(null, null, originUrl)); |
} |
- return match(page, page.url, typeMask); |
+ return page && match(page, page.url, typeMask); |
}; |
port.on("filters.isWhitelisted", message => |
@@ -143,21 +144,35 @@ |
* Gets the public key, previously recorded for the given page |
* and frame, to be considered for the $sitekey filter option. |
* |
- * @param {Page} page |
- * @param {Frame} frame |
+ * @param {?Page} page |
+ * @param {?Frame} frame |
+ * @param {URL} [originUrl] |
* @return {string} |
*/ |
-exports.getKey = (page, frame) => |
+exports.getKey = (page, frame, originUrl) => |
{ |
- let keys = sitekeys.get(page); |
- if (!keys) |
- return null; |
+ if (page) |
+ { |
+ let keys = sitekeys.get(page); |
+ if (keys) |
+ { |
+ for (; frame; frame = frame.parent) |
+ { |
+ let key = keys.get(stringifyURL(frame.url)); |
+ if (key) |
+ return key; |
+ } |
+ } |
+ } |
- for (; frame != null; frame = frame.parent) |
+ if (originUrl) |
{ |
- let key = keys.get(stringifyURL(frame.url)); |
- if (key) |
- return key; |
+ for (let keys of sitekeys._map.values()) |
+ { |
+ let key = keys.get(stringifyURL(originUrl)); |
+ if (key) |
+ return key; |
+ } |
} |
return null; |