加载中…
个人资料
可下人间
可下人间
  • 博客等级:
  • 博客积分:0
  • 博客访问:448,167
  • 关注人气:100
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
评论
加载中…
友情链接
访客
加载中…
好友
加载中…
博文
标签:

it

ui

分类: webkit
    chromium使用的是自己开发的UI框架 — views,官方有四篇文档介绍了UI系统:
    views framework:ui框架及view介绍
    views Windowing system:使用view创建对话框和窗口
    Aura:chrome的下一代硬件加速ui框架
    native controls:本地控件

    chromium的ui框架是跨平台的,但是支持得最好的还是windows平台。chromium中与ui相关的所有控件,几乎都继承自View(views系统的基础类和接口定义在src/ui/views),通过树形结构,views组成一个控件或一个页面
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
标签:

it

chrome

chromium

ipc

进程通信

分类: webkit
    这篇研究两个问题:chromium对线程的封装和进程通信。主要参考chromium的官方技术文档:TreadingInter-process Communication (IPC)。chrome速度快的优点,主要得益于线程模型的设计,这也是chrome最值得研究的技术点。

    一、线程模型

    chromium中的线程分为很多种类型,每个线程中有一个MessageLoop处理线程消息,对应实现:
    Thread - base/threading/thread.h
    MessageLoop - base/message_loop.h
    线程的类型包括:io_thread,file_thread,db_thread,safe_browsing_thread等,其中io_thread是一个事件分发线程,管理browser进程和子进程的通信。(上一篇多进程架构图中可以看到它。)

    chromium线程设计有
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
标签:

chrome

chromium

it

webkit

进程通信

分类: webkit
    chromium的多进程架构是一个非常大胆的创新,也非常值得研究,本文主要是学习官方设计文档Multi-process Architecture及其他资料的笔记,未专门研读相关源码。目的是对chromium及主流浏览器的多进程架构有一个基本了解,方面后面进一步学习。

    除了chrome,IE8以上版本和Firefox等浏览器均已改为多进程的技术架构,甚至webkit也针对这一点支持了webkit2,多进程架构能解决哪些问题呢?
    1、渲染引擎面对日益复杂的js和css,难免出现崩溃,独立的渲染进程避免整个浏览器的crash;
    2、面对日益复杂的web应用,浏览器已经扮演了类操作系统的角色,让各页面隔离使浏览器整体的速度、安全都有保证;
    3、多进程是模块独立与松耦合的最大化体现,同时保证了各种扩展策略的简洁易行,比如插件。

    从实现上看,各家浏览器的多进程架构基本类似,chromium的实现是其中比较完整和复杂的一个。
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
标签:

chrome

webkit

test_shell

chromium

it

分类: webkit
    前面提到chromium对webkit的使用包括webkit port和webkit glue两部分,依托于test_shell,我们再仔细研究一下chromium是怎样封装和调用webkit的。

    webkit port部分实际上是包含在webkit的源码库里的,在chromium的代码路径“chromium\home\src_tarball\tarball\chromium\src\third_party\WebKit\”下就是webkit的源码。可以看到Source目录下Platform/chromium、Webcore/platform/chromium、Webkit/chromium等,都是webkit的chromium port代码。webkit内部源码这部分我们后面再研究,先把webkit当作一个模块来看。

    chromium代码路径“chromium\home\src_tarball\tarball\chromium\src\webkit”则是对webkit的又一层封装和调用,这里面包含了webkit glue的代码。通过调试test_shell的方式,我们重点研究这部分代码。当然由于test_shell并没有多标签页功能,因此chromium的多进程架构并未在此引入,我们的关注点不在于此,正好可以帮我们简化学习的复杂度。

   
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
标签:

chrome

webkit

it

分类: webkit
    我们都知道chromium是用webkit完成页面显示的,那么chromium是怎样集成和封装webkit的呢?是怎样将webkit整合到自己的框架中,并将一个页面渲染出来的?这篇我们主要研究这些问题。

    从源码看,chromium将webkit作为第三方库引用(src/third_party/WebKit下)。从框架和实现上,chromium实际上做了两件事情:webkit port和webkit glue。

    webkit port
    webkit port是在某种OS上运行webkit引擎的打包和实现,比如QtWebkit、Gtk+ port、Chromium port、Adobe AIR port等。webkit主要包括三部分:webcore、javascript core和ports。webcore和jscore处理DOM解析、页面渲染、js解析等浏览器核心功能,而ports则提供了一系列抽象接口,不同平台上可以完成各自的实现,这些接口包括网络访问、UI绘制、线程和文件操作等,同时还可以port一些接口给外部程序调用或由外部程序给webkit提供支持。换句话说,webkit将核心部分与外部应用(OS相关)之间定义了一个接口协议组,port对这些接口进行部分或全部的支
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
标签:

webkit

chrome

test_shell

it

分类: webkit
    chromium的源码非常大,选择合适的点入手能省不少力气。在win7下编译chromium中我曾提到学习chromium源码的一个小工程test_shell,代码目录在src/webkit/tools/test_shell下,打开src/webkit下的webkit.sln工程,在webkit下就能看到test_shell。test_shell是一个测试程序,代码和流程都很简单,这篇笔记主要理清test_shell中的主流程和逻辑,为后面学习webkit打好基础,同时,我们也研究一下google的桌面程序都有哪些特点。

    打开test_shell_main.cc文件,找到main函数逐行分析。(windows环境)
    
    base::debug::EnableInProcessStackDumping();
    这句使程序生成crash dump,并将标准输出attach到控制台。具体参考SetUnhandl
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
标签:

https

ssl

libcurl

openssl

it

分类: 开发
    对于互联网客户端应用来说,通过http与网站服务器进行通信是一个重要的手段。但是某些情况下,客户端需要访问或提交一些重要资源,而且不希望有人盗取这些接口调用,此时就需要考虑https协议了。目前https在web端已经非常普遍,比如邮箱、购物、银行交易等。那么什么是https,它到底有什么好处,客户端能不能使用https,实现方法又是怎样的呢?这篇文章就来简单回答一下这些问题。

    一、什么是HTTPS
    首先来认识一下https:维基百科-HTTPS。简单理解,https是安全版的http,通过在TCP与http层之间加入SSL协议层保证通信方身份、数据通道和数据本身的安全性,https采用443端口。关于SSL参考:维基百科-SSL,简单来说SSL主要完成两件事情:身份认证和数据加密。打个比方,打电话的时候,如果通过某种方式确认通话双方的身份,而且电话通道是安全加密的,甚至双方交流都采用暗语,那么几乎没有第三者能窃取通话内
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
标签:

chrome

webkit

源码

it

分类: webkit
    对于c++开发者来说,chromium几乎是目前最值得学习的优秀开源代码。先看看chromium包含了多少令人激动的特性:
    1,出身google,代码质量几乎不用怀疑,肯定能让你学到不少东西;
    2,以webkit作为浏览器内核,单就webkit本身的魅力就足够吸引我们了;
    3,基于众多第三方开源库的跨平台的桌面应用程序框架;
    4,基于多进程的程序架构;
    5,闻名的V8 js解析内核;
    6,html5。

    chromium的代码量非常大,要想有效率的学习,需要找个最好的方法,定个计划。先来看看chromium的整体结构和代码组织:Getting Around the Chromium Source Code Directories。chromium设计主要分为三部分:browser,renderer和webkit。代码块主要包括:src/chrome/app(主程序逻辑代码),src/base(common库),src/chrome/browser,src/chrome/renderer,src/chrome/
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
    对于跨平台程序的开发来说,字符串处理是一个麻烦事。不但要熟悉不同OS平台的字符编码集,还要寻找统一的方式来处理字符串。

    1,支持Unicode
    要想程序支持多语言,Unicode是必须的,你一定不想看到你的程序在中文windows系统上打开一个韩文名字的文件时却无法加载。Unicode是一个字符集的概念,也就是说在Unicode标准中,全球所有语言的字符几乎都定义了对应的值。于是又有了Unicode集的实现问题,Unicode要表示完整需要32位的数值,而常用的字符用16位的数值就能表示。于是有了UTF8,UTF16,UTF32等字符编码实现方法,其中UTF8编码兼容ASCII集,且没有字节序问题,使得UTF8成为平台间字符交换的标准编码(如网络传输)
    对于windows系统来说,内核采用了UTF16实现Unicode,而Mac和几乎所有Linux均采用UTF8。也就是说,windows常见的窄字符API底层要转化到宽字符API调用。

    2,char和wchar_t
    c++为我们提供了两种字符类型,但却没有定义两种类型的长
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
(2013-01-01 09:39)
标签:

2012

杂谈

分类: 随笔
    新年伊始是总结的好时候,完整而深刻。
    2012将她的末日气质绽露无遗,回忆起来,我的整个2012好像都是灰色的。2月份的加薪看上去更应该是前一年迟到的礼物,除此之外没有什么让人欣喜的事情。心情仿佛和外在已经隔离,沉浸在自己封闭的世界里,好像置身于一团浓雾,喘不过气且看不清方向。
    虽然还没想清楚要过什么样的生活,但很清楚这不是想要的生活。
    人生需要突破,突破需要改变。2013,试着去改变。无论更好或更坏,I'm ready for comes and goes!
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
  

新浪BLOG意见反馈留言板 不良信息反馈 电话:4006900000 提示音后按1键(按当地市话标准计费) 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

新浪公司 版权所有