Skip to content
This repository was archived by the owner on Jan 31, 2025. It is now read-only.

Commit cb35951

Browse files
author
Daniel Brain
committed
Allow finding frames anywhere in hierarchy
1 parent 090955c commit cb35951

File tree

2 files changed

+61
-1
lines changed

2 files changed

+61
-1
lines changed

src/drivers/listeners.js

+18-1
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,23 @@ export function resetListeners() {
1313
global.listeners.response = [];
1414
}
1515

16+
function matchDomain(domain, origin) {
17+
18+
if (typeof domain === 'string') {
19+
return domain === '*' || origin === domain;
20+
}
21+
22+
if (Object.prototype.toString.call(domain) === '[object RegExp]') {
23+
return origin.match(domain);
24+
}
25+
26+
if (Array.isArray(domain)) {
27+
return domain.indexOf(origin) !== -1;
28+
}
29+
30+
return false;
31+
}
32+
1633
export function getRequestListener(name, win, domain) {
1734

1835
let result = {};
@@ -27,7 +44,7 @@ export function getRequestListener(name, win, domain) {
2744
let specifiedDomain = (requestListener.domain && requestListener.domain !== '*');
2845

2946
let matchedWin = (specifiedWin && requestListener.win === win);
30-
let matchedDomain = (specifiedDomain && requestListener.domain === domain);
47+
let matchedDomain = (specifiedDomain && matchDomain(requestListener.domain, domain));
3148

3249
if (specifiedWin && specifiedDomain) {
3350
if (matchedWin && matchedDomain) {

src/lib/windows.js

+43
Original file line numberDiff line numberDiff line change
@@ -306,6 +306,33 @@ export function getFrameByName(win, name) {
306306
}
307307
}
308308

309+
export function findFrameByName(win, name) {
310+
311+
let frame;
312+
313+
frame = getFrameByName(win, name);
314+
315+
if (frame) {
316+
return frame;
317+
}
318+
319+
for (let ancestor of getAncestors(win)) {
320+
frame = getFrameByName(ancestor, name);
321+
322+
if (frame) {
323+
return frame;
324+
}
325+
}
326+
327+
for (let childFrame of getFrames(win)) {
328+
frame = getFrameByName(childFrame, name);
329+
330+
if (frame) {
331+
return frame;
332+
}
333+
}
334+
}
335+
309336
export function isParent(win, frame) {
310337

311338
let frameParent = getParent(frame);
@@ -344,6 +371,22 @@ export function getAncestor(win) {
344371
}
345372
}
346373

374+
export function getAncestors(win) {
375+
376+
let results = [];
377+
378+
let ancestor = win;
379+
380+
while (ancestor) {
381+
ancestor = getAncestor(ancestor);
382+
if (ancestor) {
383+
results.push(ancestor);
384+
}
385+
}
386+
387+
return results;
388+
}
389+
347390

348391
export function isAncestor(parent, child) {
349392

0 commit comments

Comments
 (0)