浏览上下文嵌入¶
嵌入元素到 nsDocShell¶
为了渲染 BrowsingContext
的内容,嵌入元素需要能够与当前用于承载其内容的 nsDocShell
通信。这可以通过 3 种不同的方式完成,具体取决于正在使用的进程组合。
进程内:
nsFrameLoader
直接嵌入nsDocShell
。远程标签页:父进程是嵌入者,并通过
BrowserHost
使用PBrowser
。BrowserChild
参与者保持实际的nsDocShell
保持活动状态。远程子框架:内容进程是嵌入者,并通过
BrowserBridgeHost
使用PBrowserBridge
与父进程通信。然后,父进程像在远程标签页情况下一样使用BrowserParent
与nsDocShell
通信。
图表¶
![digraph embedding {
node [shape=rectangle]
subgraph cluster_choice {
color=transparent;
node [shape=none];
"In-Process";
"Remote Tab";
"Remote Subframe";
}
"nsFrameLoaderOwner" [label="nsFrameLoaderOwner\ne.g. <iframe>, <xul:browser>, <embed>"]
"nsFrameLoaderOwner" -> "nsFrameLoader";
"nsFrameLoader" -> "In-Process" [dir=none];
"nsFrameLoader" -> "Remote Tab" [dir=none];
"nsFrameLoader" -> "Remote Subframe" [dir=none];
"In-Process" -> "nsDocShell";
"Remote Tab" -> "BrowserHost";
"Remote Subframe" -> "BrowserBridgeHost";
"BrowserHost" -> "BrowserParent";
"BrowserParent" -> "BrowserChild" [label="PBrowser" style=dotted];
"BrowserChild" -> "nsDocShell";
"BrowserBridgeHost" -> "BrowserBridgeChild";
"BrowserBridgeChild" -> "BrowserBridgeParent" [label="PBrowserBridge", style=dotted];
"BrowserBridgeParent" -> "BrowserParent";
}](../../_images/graphviz-752da06bcb5781dc6f676b26a2f5b2f379f46373.png)
nsDocShell 到文档¶
在 nsDocShell
中嵌入单个文档是在拥有该 docshell 的内容进程中完成的。
图表¶
此图表显示了参与承载给定 BrowsingContext
的内容进程中涉及的对象,以及它们之间的大致关系。虚线表示“当前”关系,而实线表示更强的生命周期关系。
![graph document {
node [shape=rectangle]
"BrowsingContext" -- "nsDocShell" [style=dotted];
"nsDocShell" -- "nsGlobalWindowOuter";
"nsGlobalWindowOuter" -- "nsGlobalWindowInner" [style=dotted];
"nsGlobalWindowInner" -- "Document" [style=dotted];
"nsDocShell" -- "nsDocumentViewer" [style=dotted];
"nsDocumentViewer" -- "Document";
"nsDocumentViewer" -- "PresShell";
"nsGlobalWindowInner" -- "WindowGlobalChild";
"BrowsingContext" -- "WindowContext" [style=dotted];
"WindowContext" -- "nsGlobalWindowInner";
subgraph cluster_synced {
label = "Synced Contexts";
"BrowsingContext" "WindowContext";
}
}](../../_images/graphviz-eaec3fbb04e12abd58bffff39c1be3156a1d30a9.png)