 Issue 29739594:
  Issue 6543 - Match requests without tabId/frameId in their originating context  (Closed)
    
  
    Issue 29739594:
  Issue 6543 - Match requests without tabId/frameId in their originating context  (Closed) 
  | 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, | 
| 
kzar
2018/04/03 12:49:30
How come you changed the logic to `originUrl && ..
 
Sebastian Noack
2018/04/04 01:04:45
It's the same semantics for checkWhitelisted(), ge
 | 
| + 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; |