轉載請註明出處:http://www.cnblogs.com/fangkm/p/3787977.htmlhtml
WebKit中解析、渲染網頁的過程當中須要一些功能,好比: socket鏈接、URL資源請求的實現、線程管理等,而這些功能依賴於具體的平臺, 不一樣的平臺有不一樣的移植實現。WebKit的Public中Platform接口抽象出平臺相關的移植依賴。相關結構以下:web
Platform維護一個全局的對象,經過initialize靜態方法設置、current靜態方法來訪問該對象。
在Render進程建立新的RenderViewImpl對象以前就須要保證WebKit的相關環境已經初始化。初始化入口位於RenderThreadImpl的EnsureWebKitInitialized方法,這裏建立了實現Platform接口的平臺相關類RendererWebKitPlatformSupportImpl的對象,並將此對象設置成Platform的全局實例。socket
webkit_glue的WebKitPlatformSupportImpl類實現了Platform的部分接口,如建立WebURLLoader插件
接口的實現類WebURLLoaderImpl、WebSocketStreamHandle接口的實現類WebSocketStreamHandleImpl,併爲這2個類的實現提供與具體平臺相關的功能調用接口:ResourceLoaderBridge接口和WebSocketStreamHandleBridge接口。線程
WebKitPlatformSupportChildImpl派生自WebKitPlatformSupportImpl,主要提供了平臺相關的線程實現類WebThreadImpl。orm
追朔到這裏我就有點費解了,爲啥單獨分出來一個WebKitPlatformSupportChildImpl繼承層而不合在WebKitPlatformSupportImpl裏,功能上除了提供線程接口實現也沒看出啥特別的功能,類名稱裏帶個Child表示子進程中對WebKitPlatformSupportImpl實現?可代碼中也沒發現browser等其它地方有相關實現了,懶得去求甚解了。htm
再往下就是content層的WebKitPlatformSupportImpl實現了,考慮到插件進程、render進程以及worker進程都有着略微不一樣的Platform實現,因此這一層的WebKitPlatformSupportImpl僅僅是提取一下各類實現的共同代碼部分,好比實現CreateResourceLoader、CreateWebSocketBridge接口,這兩接口返回的平臺相關的實現操做最終都委託到chromium的net庫,URL請求對應的是URLRequest,Socket請求對應的是SocketStreamJob。對象
RendererWebKitPlatformSupportImpl爲render進程對Platform的實現,增長了文件系統、3D渲染、多媒體實現等支持。blog