首先需要了解HTML中frame的概念。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
"http://www.w3.org/TR/html4/frameset.dtd">
<HTML>
<HEAD>
<TITLE>A simple frameset document</TITLE>
</HEAD>
<FRAMESET cols="20%, 80%">
<FRAMESET rows="100, 200">
<FRAME src="contents_of_frame1.html">
<FRAME src="contents_of_frame2.gif">
</FRAMESET>
<FRAME src="contents_of_frame3.html">
<NOFRAMES>
<P>This frameset document contains:
<UL>
<LI><A href="contents_of_frame1.html">Some neat contents</A>
<LI><IMG src="contents_of_frame2.gif" alt="A neat image">
<LI><A href="contents_of_frame3.html">Some other neat contents</A>
</UL>
</NOFRAMES>
</FRAMESET>
</HTML>
上面的代码会产生如下的网页效果:
---------------------------------------
| | |
| | |
| Frame 1 | |
| | |
| | |
|---------| |
| | Frame 3 |
| | |
| | |
| | |
| Frame 2 | |
| | |
| | |
| | |
| | |
---------------------------------------
上面网页中的frame(123)加上主frame会构成一个FrameTree,而FrameTreeNode正是用于描述每个frame的类。
而WebContents是content/层的核心类。因为在Browser进程中,一个网页使用一个WebContents对象描述。结合上图,一个WebContents对象又关联有一个FrameTree。其中,FrameTree的根Node描述的是主网页,子Node描述的是嵌入的子网页。
每一个WebContents有些只有一个NavigationController,而每一个NavigationController也只会属于唯一的WebContents。NavigationController负责加载URL的内容填充WebContents,并且维护一个back-forward 的列表用来管理所有和导航相关的操作。