转载请注明出处:http://www.cnblogs.com/fangkm/p/3787977.html

WebKit中解析、渲染网页的过程中需要一些功能,比如: socket连接、URL资源请求的实现、线程管理等,而这些功能依赖于具体的平台, 不同的平台有不同的移植实现。WebKit的Public中Platform接口抽象出平台相关的移植依赖。相关结构如下:

Platform维护一个全局的对象,通过initialize静态方法设置、current静态方法来访问该对象。
在Render进程创建新的RenderViewImpl对象之前就需要保证WebKit的相关环境已经初始化。初始化入口位于RenderThreadImpl的EnsureWebKitInitialized方法,这里创建了实现Platform接口的平台相关类RendererWebKitPlatformSupportImpl的对象,并将此对象设置成Platform的全局实例。

webkit_glue的WebKitPlatformSupportImpl类实现了Platform的部分接口,如创建WebURLLoader

接口的实现类WebURLLoaderImpl、WebSocketStreamHandle接口的实现类WebSocketStreamHandleImpl,并为这2个类的实现提供与具体平台相关的功能调用接口:ResourceLoaderBridge接口和WebSocketStreamHandleBridge接口。

WebKitPlatformSupportChildImpl派生自WebKitPlatformSupportImpl,主要提供了平台相关的线程实现类WebThreadImpl。

追朔到这里我就有点费解了,为啥单独分出来一个WebKitPlatformSupportChildImpl继承层而不合在WebKitPlatformSupportImpl里,功能上除了提供线程接口实现也没看出啥特别的功能,类名称里带个Child表示子进程中对WebKitPlatformSupportImpl实现?可代码中也没发现browser等其它地方有相关实现了,懒得去求甚解了。

再往下就是content层的WebKitPlatformSupportImpl实现了,考虑到插件进程、render进程以及worker进程都有着略微不同的Platform实现,所以这一层的WebKitPlatformSupportImpl仅仅是提取一下各种实现的共同代码部分,比如实现CreateResourceLoader、CreateWebSocketBridge接口,这两接口返回的平台相关的实现操作最终都委托到chromium的net库,URL请求对应的是URLRequest,Socket请求对应的是SocketStreamJob。

RendererWebKitPlatformSupportImpl为render进程对Platform的实现,增加了文件系统、3D渲染、多媒体实现等支持。

WebKit的Platform接口部分的更多相关文章

  1. Android WebKit 内核

    一.WebKit简介 WebKit是一个开源的浏览器网页排版引擎,包含WebCore排版引擎和JSCore引擎.WebCore和JSCore引擎来自于KDE项目的KHTML和KJS开源项目.Andro ...

  2. WebKit 在 Windows 平台下编译小结

    虽然WebKit 已经越来越多的被广大程序员接受,但其编译过程却非常之痛苦.下面将我编译WebKit 代码的经验与大家分享. 1) 获取WebKit 源代码 WebKit 源代码是使用Subversi ...

  3. webKit 内核浏览器 源码分析

    如需转载,请注明出处! WebSite: http://www.jjos.org/ 作者: 姜江 linuxemacs@gmail.com QQ: 457283 这是一篇自己写于一年前的工作文档,分享 ...

  4. How Chromium Displays Web Pages: Bottom-to-top overview of how WebKit is embedded in Chromium

    How Chromium Displays Web Pages This document describes how web pages are displayed in Chromium from ...

  5. 收藏的技术文章链接(ubuntu,python,android等)

    我的收藏 他山之石,可以攻玉 转载请注明出处:https://ahangchen.gitbooks.io/windy-afternoon/content/ 开发过程中收藏在Chrome书签栏里的技术文 ...

  6. 【Chromium中文文档】Chromium如何展示网页

    Chromium如何展示网页 转载请注明出处:https://ahangchen.gitbooks.io/chromium_doc_zh/content/zh//Start_Here_Backgrou ...

  7. Chromium如何显示Web页面

    Displaying A Web Page In Chrome 概念化的应用分层 参见原文档:http://goo.gl/MsEJX 每一个box代表一个抽象层.下层不依赖于上层. WebKit:渲染 ...

  8. Chromium网页Layer Tree创建过程分析

    在Chromium中.WebKit会创建一个Graphics Layer Tree描写叙述网页.Graphics Layer Tree是和网页渲染相关的一个Tree. 网页渲染终于由Chromium的 ...

  9. 自己动手实现浏览器,21天自制chromium:起手篇

    转:https://zhuanlan.zhihu.com/p/29101613?utm_medium=social&utm_source=qq 大家好,我又来了.这篇是21天自制原子弹的姐妹篇 ...

随机推荐

  1. OCP 062考试题库2019年新出现的考题-17

    choose one What is a pre-requisite to alter a role? A) You should set the OS_ROLES parameter to true ...

  2. Spring学习笔记2——表单数据验证、文件上传

    在上一章节Spring学习笔记1——IOC: 尽量使用注解以及java代码中,已经搭建了项目的整体框架,介绍了IOC以及mybatis.第二节主要介绍SpringMVC中的表单数据验证以及文件上传. ...

  3. 在ubuntu中我们使用sudo apt-get install 或者dpkg -i *.deb安装软件时,常常提示“有未能满足的依赖关系“,解决方法

    很早之前在ubuntu安装软件时遇到的问题,今天打开ubuntu看到了,总结如下: 在ubuntu中我们使用sudo apt-get install 或者dpkg -i *.deb安装软件常常提示“有 ...

  4. Twisted 框架 初印象

    上面是twisted官网推荐的书籍,从封面可以看到,是一堆大蟒(python)纠缠在一起,这里可以说明twisted是一个基于pyhton语言,支持各种网络协议(包括UDP,TCP,TLS和其他应用层 ...

  5. SQLAlchemy的ORM

    表关系: 表之间的关系存在三种:一对一.一对多.多对多.而SQLAlchemy中的ORM也可以模拟这三种关系.因为一对一其实在SQLAlchemy中底层是通过一对多的方式模拟的,所以先来看下一对多的关 ...

  6. String不得不说的那些事

    一.String.StringBuilder和StringBuffer的区别 1. String是字符串常量,StringBuilder和StringBuffer是字符串变量 String对象创建完成 ...

  7. Java DB访问(一) JDBC

    项目说明 项目采用 maven 组织 ,jdbc 唯一的依赖就是 mysql-connector-java pom 依赖如下: <dependency> <groupId>my ...

  8. 使用Nagios打造专业的业务状态监控

    想必各个公司都有部署zabbix之类的监控系统来监控服务器的资源使用情况.各服务的运行状态,是否这种监控就足够了呢?有没有遇到监控系统一切正常确发现项目无法正常对外提供服务的情况呢?本篇文章聊聊我们如 ...

  9. 详解C#特性和反射(三)

    类型信息(Type Information)用来表示类型声明的信息,通过抽象基类System.Type的实例存储这些信息,当使用反射时,CLR获取指定类型的Type对象,通过这个对象即可访问该类型的任 ...

  10. Ubuntu下安装qq方法及疑难问题解决

    在Ubuntu下安装qq有两种方法:.tar.gz包安装和.deb包安装下载地址:http://im.qq.com/qq/linux/download.shtml 方法一:.tar.gz包安装法 .t ...