WebKit內核源碼分析(一)---dlmu2001

WebKit內核源碼分析(一)---dlmu2001

[email protected]

 

摘要:本系列通過分析WebKit的源代碼,試圖分析WebKit的內核設計架構,模塊之間的關係,分析的時候以Qt的移植爲參考,涉及移植的東西不多,主要還是以內核爲主。在分析內核的時候,Frame是首當其衝的一個類,本文將分析Frame類的代碼。

1.    描述

Frame類是WebCore內核同應用之間聯繫的一個重要的類。它有點像設計模式中的Façade,將內核的各個不同的零配件組裝在了一起,但又不是Façade,因爲用戶很多時候還是要直接去操作裏面的組件。除了設計上的考慮,Frame還有語法上的意義,它對應於Page裏面的幀。

2.    類結構

 

 

1)              FrameTree對象用來協助管理父幀和子幀的關係,常見的比如main frame之中有iframe元素,就會調用FrameLoaderClientQt::createFrame來產生子幀,產生的子幀會通過appendChild添加到主幀的樹狀結構中。Frame通過FrameTree對象,可以方便地訪問它的父幀,子幀,兄弟幀。

2)              維護FrameLoader對象用來完成frame的加載,FrameLoader是一個非常重要的類,後續進行進一步的分析。

3)              維護NavigationScheduler對象用來管理頁面跳轉調度(比如重定向,meta refresh等)。

4)              DOMWindow用來管理同DOM相關的事件、屬性和消息。

5)              FrameViwe類用於Frame的排版。

6)              Frame文檔解析後,對每一個tag或者attr,會有對應的dom節點關聯,Document類用來管理這些dom節點。不同的文檔類型繼承出不同的子類,比如HTML文檔對應子類HTMLDocument,XML文檔對應於XMLDocument

7)              SciptController對象,腳本控制器,用來管理腳本的執行和操作。

8)              Editor對象用來處理頁面的編輯相關的操作,比如拷貝,粘貼,輸入等,Editor對象,它同Page類的EditorClient對象緊密合作。和EditorClient的關係就如同PageFrame的關係。

9)              SelectionController用來管理Frame中的選取操作。

10)         AnimationControlle,動畫控制,控制動畫的播放,暫停,繼續(同HTML video標籤是否有關係?)

11)         EventHandler,事件處理對象,這裏的對象主要是同上層應用也就是用戶參與的事件,比如鼠標事件,按鍵事件(快捷鍵等),滾動事件,resize事件等。這是一個瀏覽器外殼經常需要打交道的類。

3.    主要接口

3.1   Create

static PassRefPtr<Frame> create(Page*,HTMLFrameOwnerElement*,FrameLoaderClient*)
描述: 調用Frame構造函數,創建出Frame對象。有兩個地方會創建Frame對象,一是要加載一個新的頁面請求,這個時候會創建main frame,一是在加載子幀的時候,通過FrameLoaderClientQtcreateFrame接口,創建子幀對應的Frame對象,在第一種情況中,HTMLFrameOwnerElement參數爲NULL,第二種情況傳子幀的父元素。在一個tab頁內,main frame會重用。

調用系列:

àQwebPage::setView

àQwebPage::setViewportSize

àQwebPage::mainFrame

àQwebPagePrivate::createMainFrame

àQwebFrameData::QwebFrameData

àFrame::create


àFrameLoader::finishedLoading
à……

àHTMLDocumentParser::append

à……

àHTMLTreeBuilder::processToken

à……

àHTMLElementBase::openURL

àSubFrameLoader::requestFrame

à……

àFrameLoaderClientQt::creatFrame

àQwebFrameData::QwebFrameData

àFrame::create

3.2  createView

void createView(const IntSize&, const Color&, bool, const IntSize&, bool,

            ScrollbarMode = ScrollbarAuto, bool horizontalLock = false,

            ScrollbarMode = ScrollbarAuto, bool verticalLock = false)

描述:創建出FrameView對象,以用於之後的排版。應用調用這個函數的時候需要傳入同排版有關的一些信息,如初始視窗大小,背景色,滾動條模式等。創建出FrameView以後,即調用Frame::setView設置成當前的FrameView
函數調用系列:
àFrameLoader::commitProvisionalLoad

àFrameLoader::transitionToCommitted

àFrameLoaderClientQt::transitionToCommittedForNewPage

àFrame::createView

3.3  setDocument

void setDocument(PassRefPtr<Document>)

描述:設置同Frame關聯的Document對象(一般是DocumentWriter創建的)

函數調用系列:

àQWebFrame::QwebFrame

àQwebFramePrivate::init

àFrame::init

àFrameLoader::init

àDocumentWriter::begin

àFrame::setDocument


àDocumentLoader::receivedData
àDocumentLoader::commitLoad

àFrameLoaderClientQt::committedLoad

àDocumentLoader::commitData

àDocumentWriter::setEncoding

àDocumentWriter::willSetEncoding

àFrameLoader::receivedFirstData

àDocumentWriter::begin

àFrameLoader::clear

àFrame::setDocument

3.4  init

void Frame::init

描述:Frame對象初始化,會調用FrameLoader::init初始化FrameLoader對象。

調用系列:
àQWebFrame::QWebFrame

àQwebFramePrivate::init

àFrame::init

3.5  setPageAndTextZoomFactors

void setPageAndTextZoomFactors(float pageZoomFactor, float textZoomFactor)

描述:設置頁面放大因子和文字放大因子。在網頁縮放或者改變網頁字體大小的時候調用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章