ββββββββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββ β domainA page β
β β β β
β LISTING REMOTE FRAMES BEFORE β β ββββββββββββββββββββββ β
β β β β domainB iframe β β
βββββββββββββββββββββββββββββββββββββββ β β β β
β ββββββββββββββββββββββ β
ββββββββββββββββββββββββββββββ
ββββββββββββββββββββββββββββββββββ βββββββββββββββββββββββββββββ βββββββββββββββββββββββββββββββββ
β Client β β Server Parent β β Server Content domainA β
β β β β β β
β βββββββββββββββββββββ β β βββββββββββββββββββββ β β β
β β Root β β β β Root β β β β
ββΌβββΆβ Front ββββββββββΌββββββββββββΌββΆβ Actor ββββββΌβ β β
ββ βββββββββββββββββββββ β β βββββββββββββββββββββ ββ β β
ββ β β ββ β β
ββ β β ββ β βββββββββββββββββββββ β
ββ βββββββββββββββββββββ β β βββββββββββββββββββββ ββ β β BrowsingContext β β
list remote ββ β TabDescriptor β β β β TabDescriptor β ββ β β TargetActor β β
frames ββ β Front β β β β Actor β ββ β β (for domainA) β β
ββ βββββββββββ¬ββββββββββ β β βββββββββββ¬ββββββββββ ββ β βββββββββββββββββββββ β
ββ β β β β ββ β β
ββ βββββββββββ΄ββββββββββ β β βββββββββββ΄ββββββββββ ββ β β
ββ β BrowsingContext β β β β FrameConnector + β ββ β β
ββΌββββ TargetFront β β β β MessageManager β ββ β β
β β (for domainA) β β β βββββββββββββββββββββ ββ βββββββββββββββββββββββββββββββββ
β βββββββββββββββββββββ β β ββ
β β β ββ
β βββββββββββββββββββββ β β βββββββββββββββββββββ ββ βββββββββββββββββββββββββββββββββ
β β FrameDescriptor ββββββββββΌββββββββββββΌβββ FrameDescriptor ββββββΌβ β Server Content domainB β
β β Front ββββββββββΌββββββββββββΌββΆβ Actor ββββββΌβ β β
β βββββββββββ¬ββββββββββ βget target β βββββββββββ¬ββββββββββ ββ β β
β β β β βββββββββββ΄ββββββββββ ββ β β
β β β β β FrameConnector + ββββββΌβ β β
β β β β β JsWindowActors ββββββΌβ β β
β β β β βββββββββββ¬ββββββββββ ββ β β
β β β β βββββββββββ΄ββββββββββ ββ β βββββββββββββββββββββ β
β β β β β DevToolsFrame ββββββΌβ β β DevToolsFrame β β
β β β β β Parent.jsm ββββββΌβββββββββΌβββΆβ Child.jsm βββββββ β
β βββββββββββ΄ββββββββββ β β βββββββββββββββββββββ β β βββββββββββββββββββββ β β
β β BrowsingContext β β β β β βββββββββββββββββββββ β β
β β TargetFront ββββββββββΌββββββββββββΌββββββββββββββββββββββββββββΌβββββββββΌββββ BrowsingContext βββββββ β
β β (for domainB) β β β β β β TargetActor β β
β βββββββββββββββββββββ β β β β β (for domainB) β β
β β β β β βββββββββββββββββββββ β
ββββββββββββββββββββββββββββββββββ βββββββββββββββββββββββββββββ βββββββββββββββββββββββββββββββββ
ββββββββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββ β domainA page β
β β β β
β "LISTING" REMOTE FRAMES AFTER β β ββββββββββββββββββββββ β
β β β β domainB iframe β β
βββββββββββββββββββββββββββββββββββββββ β β β β
β ββββββββββββββββββββββ β
ββββββββββββββββββββββββββββββ
ββββββββββββββββββββββββββββββββββ βββββββββββββββββββββββββββββ βββββββββββββββββββββββββββββββββ
β Client β β Server Parent β β Server Content domainA β
β β β β β β
β βββββββββββββββββββββ β β βββββββββββββββββββββ β β β
β β Root β β β β Root β β β β
β β Front β β β β Actor β β β β
β βββββββββββββββββββββ β β βββββββββββββββββββββ β β β
β β β β β β
β βββββββββββββββββββββ β β β β βββββββββββββββββββββ β
β β BrowsingContext β β β βββββββββββββββββββββ β β β BrowsingContext β β
β β TargetFront β β β β FrameConnector + β β β β TargetActor β β
β β (for domainA) β β β β MessageManager β β β β (for domainA) β β
β βββββββββββ¬ββββββββββ β β βββββββββββ¬ββββββββββ β β βββββββββββββββββββββ β
β β β β β β β β
β βββββββββββ΄ββββββββββ get watcher βββββββββββ΄ββββββββββ β β β
β β TabDescriptor ββββββββββΌβββββββββΌββΆβ TabDescriptor ββββββΌβ β β
β β Front β β β β Actor β ββ β β
β βββββββββββ¦ββββββββββ β β βββββββββββ¦ββββββββββ ββ βββββββββββββββββββββββββββββββββ
β βββββββββββ©ββββββββββ β β βββββββββββ©ββββββββββ ββ
β β Watcher ββββββββββΌβββββββββΌβββ Watcher ββββββΌβ βββββββββββββββββββββββββββββββββ
β β Front ββββββββββΌβββββββββΌββΆβ Actor ββββββΌβ β Server Content domainB β
β βββββββββββββββββββββ watch targets βββββββββββββββββββββ ββ β β
β β β register + β β
β β β update sharedDataβ β
β β β ββ β β
β β β βββββββββββββββββββββ ββ β βββββββββββββββββββββ β
β β β β FrameWatchers.jsm ββββββΌβ ββΌβββΆβ DevToolsFrame ββββββ β
β β β β ββββββΌβ ββ β Child.jsm β β β
β β β βββββββββββββββββββββ create ββ βββββββββββ¬ββββββββββ β β
β β β βββββββββββββββββββββ ββ ββ create β β
β β β β DevToolsFrame ββββββΌβ ββ server + target β β
β βββββββββββββββββββββ β β β Parent.jsm ββββββΌβββββββββ β β β
β β BrowsingContext β β β βββββββββββββββββββββ "instantiateβ βββββββββββΌββββββββββ β β
β β TargetFront β β β -already β β BrowsingContext β β β
β β (for domainB) β β β -available" β β TargetActor β β β
β βββββββββββββββββββββ β β β β β (for domainB) β β β
β β² β β β β βββββββββββββββββββββ β β
βββββββββββββββΌβββββββββββββββββββ βββββββββββββββββββββββββββββ ββββββββββββββββββββββββββββββΌβββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
The "way back" is more complicated than this:
- the Child JsWindowActor sends the form of the target to the Parent JsWindowActor
- parent JsWindowActor finds the corresponding WatcherActor via FrameWatchers
- a "target-form-available" is finally emitted from the WatcherActor
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Shared Data: perPrefixMap (updated by WatcherActor, read by DevToolsFrameChild)
βββββββββββββββββββββββ¬ββββββββββββββββ¬βββββββββββββββββββββββββββββββββ€
β conn.prefix.12 β ["frames"] β browsingContextId for domainA β
βββββββββββββββββββββββΌββββββββββββββββΌβββββββββββββββββββββββββββββββββ€
β ... β ... β ... β
βββββββββββββββββββββββ΄ββββββββββββββββ΄βββββββββββββββββββββββββββββββββ
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β FrameWatchers.jsm: β
β β
β Parent process singleton which can create Parent DevTools β
β JsWindowActors for existing remote frames. β
β β
β It also contains a map of WatcherActors keyed by "parent connection β
β prefix". Combined with the info in SharedData:perPrefixMap, this β
β allows to find existing watchers when new remote frames are created. β
β β
β Finally it is responsible for registering the DevTools β
β JsWindowActors in the global ActorParentRegistry of the Browser. β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
ββββββββββββββββββββββββββββββββββββββββββββ
β β
β IF THE FRAME NAVIGATES TO DOMAIN C? β
β β
ββββββββββββββββββββββββββββββββββββββββββββ
ββββββββββββββββββββββββββββββββββ βββββββββββββββββββββββββββββ βββββββββββββββββββββββββββββββββ
β Client β β Server Parent β β Server Content domainA β
β β β β β β
β βββββββββββββββββββββ β β βββββββββββββββββββββ β β β
β β Root β β β β Root β β β β
β β Front β β β β Actor β β β β
β βββββββββββββββββββββ β β βββββββββββββββββββββ β β β
β β β β β β
β βββββββββββββββββββββ β β β β βββββββββββββββββββββ β
β β BrowsingContext β β β βββββββββββββββββββββ β β β BrowsingContext β β
β β TargetFront β β β β FrameConnector + β β β β TargetActor β β
β β (for domainA) β β β β MessageManager β β β β (for domainA) β β
β βββββββββββ¬ββββββββββ β β βββββββββββ¬ββββββββββ β β βββββββββββββββββββββ β
β β β β β β β β
β βββββββββββ΄ββββββββββ β β βββββββββββ΄ββββββββββ β β β
β β TabDescriptor β β β β TabDescriptor β β β β
β β Front β β β β Actor β β β β
β βββββββββββ¦ββββββββββ β β βββββββββββ¦ββββββββββ β βββββββββββββββββββββββββββββββββ
β βββββββββββ©ββββββββββ β β βββββββββββ©ββββββββββ β
β β Watcher β β β β Watcher β β βββββββββββββββββββββββββββββββββ
β β Front β β β β Actor β β β β
β βββββββββββββββββββββ β β βββββββββββββββββββββ β β Server Content domainB β
β β β β β β
β β β β β β
β β β β β β
β β β βββββββββββββββββββββ β β βββββββββββββββββββββ β
β β β β FrameWatchers.jsm β β β β DevToolsFrame β β
β β β β β β β β Child.jsm β β
β β β βββββββββββββββββββββ β β βββββββββββββββββββββ β
β β β βββββββββββββββββββββ β β β
β β β β DevToolsFrame β β β β
β βββββββββββββββββββββ β β β Parent.jsm β β β β
β β BrowsingContext β β β βββββββββββββββββββββ β β βββββββββββββββββββββ β
β β TargetFront β β β β β β BrowsingContext β β
β β (for domainB) β β β β β β TargetActor β β
β βββββββββββββββββββββ β β β β β (for domainB) β β
β β β β β βββββββββββββββββββββ β
ββββββββββββββββββββββββββββββββββ βββββββββββββββββββββββββββββ βββββββββββββββββββββββββββββββββ
First the JsWindowActors related to the domainB WindowGlobal will be destroyed.
Everything in red disappears.
ββββββββββββββββββββββββββββββββββ βββββββββββββββββββββββββββββ βββββββββββββββββββββββββββββββββ
β Client β β Server Parent β β Server Content domainA β
β β β β β β
β βββββββββββββββββββββ β β βββββββββββββββββββββ β β β
β β Root β β β β Root β β β β
β β Front β β β β Actor β β β β
β βββββββββββββββββββββ β β βββββββββββββββββββββ β β β
β β β β β β
β βββββββββββββββββββββ β β β β βββββββββββββββββββββ β
β β BrowsingContext β β β βββββββββββββββββββββ β β β BrowsingContext β β
β β TargetFront β β β β FrameConnector + β β β β TargetActor β β
β β (for domainA) β β β β MessageManager β β β β (for domainA) β β
β βββββββββββ¬ββββββββββ β β βββββββββββ¬ββββββββββ β β βββββββββββββββββββββ β
β β β β β β β β
β βββββββββββ΄ββββββββββ β β βββββββββββ΄ββββββββββ β β β
β β TabDescriptor β β β β TabDescriptor β β β β
β β Front β β β β Actor β β β β
β βββββββββββ¦ββββββββββ β β βββββββββββ¦ββββββββββ β βββββββββββββββββββββββββββββββββ
β βββββββββββ©ββββββββββ β β βββββββββββ©ββββββββββ β
β β Watcher β β β β Watcher β β
β β Front β β β β Actor β β
β βββββββββββββββββββββ β β βββββββββββββββββββββ β
β β β β
β β β β
β β β β
β β β βββββββββββββββββββββ β
β β β β FrameWatchers.jsm β β
β β β β β β
β β β βββββββββββββββββββββ β
β β β β
β β β β
β β β β
β β β β
β β β β
β β β β
β β β β
β β β β
ββββββββββββββββββββββββββββββββββ βββββββββββββββββββββββββββββ
A new window global is created for domainC. When FrameWatchers.jsm registered the DevTools JS
Window actors, it specified that the DevToolsWindowChild should be created for any
DOMWindowCreated event.
So here a new DevToolsFrameChild will automatically be created.
ββββββββββββββββββββββββββββββββββ βββββββββββββββββββββββββββββ βββββββββββββββββββββββββββββββββ
β Client β β Server Parent β β Server Content domainA β
β β β β β β
β βββββββββββββββββββββ β β βββββββββββββββββββββ β β β
β β Root β β β β Root β β β β
β β Front β β β β Actor β β β β
β βββββββββββββββββββββ β β βββββββββββββββββββββ β β β
β β β β β β
β βββββββββββββββββββββ β β β β βββββββββββββββββββββ β
β β BrowsingContext β β β βββββββββββββββββββββ β β β BrowsingContext β β
β β TargetFront β β β β FrameConnector + β β β β TargetActor β β
β β (for domainA) β β β β MessageManager β β β β (for domainA) β β
β βββββββββββ¬ββββββββββ β β βββββββββββ¬ββββββββββ β β βββββββββββββββββββββ β
β β β β β β β β
β βββββββββββ΄ββββββββββ β β βββββββββββ΄ββββββββββ β β β
β β TabDescriptor β β β β TabDescriptor β β β β
β β Front β β β β Actor β β β β
β βββββββββββ¦ββββββββββ β β βββββββββββ¦ββββββββββ β βββββββββββββββββββββββββββββββββ
β βββββββββββ©ββββββββββ β β βββββββββββ©ββββββββββ β
β β Watcher β β β β Watcher β β
β β Front β β β β Actor β β β β β β β β β β β β β β β β β β β
β βββββββββββββββββββββ β β βββββββββββββββββββββ β WindowGlobal for domainC
β β β β β β
β β β β
β β β β β β
β β β βββββββββββββββββββββ β βββββββββββββββββββββ
β β β β FrameWatchers.jsm β β β β DevToolsFrame β β
β β β β β β β Child.jsm β
β β β βββββββββββββββββββββ β β βββββββββββββββββββββ β
β β β β
β β β β β β
β β β β
β β β β β β
β β β β
β β β β β β
β β β β
β β β β β β
ββββββββββββββββββββββββββββββββββ βββββββββββββββββββββββββββββ β β β β β β β β β β β β β β β β
DevToolsFrameChild will now check SharedData:perPrefixMap to know if a Server and Target should
be created for this new WindowGlobal.
It will find that we are watching "frames" for the BrowsingContextID that corresponds to its
parent BrowsingContext (domainA), and will proceed to create a Server, Target and forward it to
its parent actor.
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Shared Data: perPrefixMap (updated by WatcherActor, read by DevToolsFrameChild)
βββββββββββββββββββββββ¬ββββββββββββββββ¬βββββββββββββββββββββββββββββββββ€
β conn.prefix.12 β ["frames"] β browsingContextId for domainA β
βββββββββββββββββββββββΌββββββββββββββββΌβββββββββββββββββββββββββββββββββ€
β ... β ... β ... β
βββββββββββββββββββββββ΄ββββββββββββββββ΄βββββββββββββββββββββββββββββββββ
βββββββββββββββββββββββββββββ βββββββββββββββββββββββββββββββββ
βββClientβββββββββββββββββββββββββ β Server Parent β β Server Content domainA β
β β β β β β
β βββββββββββββββββββββ β β βββββββββββββββββββββ β β β
β β Root β β β β Root β β β β
β β Front β β β β Actor β β β β
β βββββββββββββββββββββ β β βββββββββββββββββββββ β β β
β β β β β β
β βββββββββββββββββββββ β β β β βββββββββββββββββββββ β
β β BrowsingContext β β β βββββββββββββββββββββ β β β BrowsingContext β β
β β TargetFront β β β β FrameConnector + β β β β TargetActor β β
β β (for domainA) β β β β MessageManager β β β β (for domainA) β β
β βββββββββββ¬ββββββββββ β β βββββββββββ¬ββββββββββ β β βββββββββββββββββββββ β
β β β β β β β β
β βββββββββββ΄ββββββββββ β β βββββββββββ΄ββββββββββ β β β
β β TabDescriptor β β β β TabDescriptor β β β β
β β Front β β β β Actor β β β β
β βββββββββββ¦ββββββββββ emit: β βββββββββββ¦ββββββββββ β βββββββββββββββββββββββββββββββββ
β βββββββββββ©ββββββββββ target-form β βββββββββββ©ββββββββββ β
β β Watcher βββββ-availableββββΌβββ Watcher β β
β β Front β β ββΌββΆβ Actor β β βββββββββββββββββββββββββββββββββ
β βββββββββββββββββββββ β ββ βββββββββββββββββββββ β β Server Content domainC β
β β β ββ β β β
β β β watchers.get(..) β β β
β β β ββ β β β
β create β ββ βββββββββββββββββββββ β β βββββββββββββββββββββ β
β β β ββΌβββ FrameWatchers.jsm β β β β DevToolsFrame β β
β β β ββΌββΆβ β β ββββββΌββββ Child.jsm β β
β β β ββ βββββββββββββββββββββ β β β βββββββββββββββββββββ β
β βΌ β get watcher β connect from β
β βββββββββββββββββββββ β ββ βββββββββββββββββββββ β βcontent β
β β BrowsingContext β β ββΌβββ DevToolsFrame β β β β βββββββββββββββββββββ β
β β TargetFront β β β β Parent.jsm ββββββΌββββ β β BrowsingContext β β
β β (for domainC) β β β βββββββββββββββββββββ β β β TargetActor β β
β βββββββββββββββββββββ β β β β β (for domainC) β β
β β β β β βββββββββββββββββββββ β
β β β β β β
β β βββββββββββββββββββββββββββββ βββββββββββββββββββββββββββββββββ
ββββββββββββββββββββββββββββββββββ
Last active
April 26, 2024 22:51
-
-
Save juliandescottes/e23ce75aa2345f5cd13e7ba825032a60 to your computer and use it in GitHub Desktop.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment