EventTarget* EventPath::findRelatedNode(TreeScope& scope, RelatedTargetMap& relatedTargetMap) { WillBeHeapVector<RawPtrWillBeMember<TreeScope>, 32> parentTreeScopes; EventTarget* relatedNode = 0; for (TreeScope* current = &scope; current; current = current->olderShadowRootOrParentTreeScope()) { parentTreeScopes.append(current); RelatedTargetMap::const_iterator iter = relatedTargetMap.find(current); if (iter != relatedTargetMap.end() && iter->value) { relatedNode = iter->value; break; } } ASSERT(relatedNode); for (WillBeHeapVector<RawPtrWillBeMember<TreeScope>, 32>::iterator iter = parentTreeScopes.begin(); iter < parentTreeScopes.end(); ++iter) relatedTargetMap.add(*iter, relatedNode); return relatedNode; }