劫持浏览器首页越来越嚣张了

昨晚下班回家有个网友找我,说他的浏览器打开百度总是不停的刷新,让我远程给他看看。 然后就看看,在用户那里用浏览器打开百度果然是不停的刷新,切换到IE内核就正常了。然后用Fiddler抓个包看看,chrome内核下面浏览器打开百度会不停的刷新https://www.baidu.com/”,看网络包的内容,内容是: 百度的https网络包竟然被篡改了,... Read More | Share it now!

Chromium ICU库定制裁剪

ICU库是一个支持国际化,本地化的软件库。最近在研究ICU库,有点心得,总结一下。 ICU库功能介绍 支持最新的Unicode标准。 不同代码页的字符集转换。 本地化数据,如:数字、日期、货币等等。 语言相关的字符串处理,如:排序、搜索等等。 正则表达式支持。 语言转换。 阿拉伯语、希伯来语、印度语、泰语等文字排版。 文本分词。 编译步骤 Chromium项目中的ICU是经过Chromium开发人员精简过的,目前在Windows环境中无法成功编译。Chromium团队也是在Linux下编译,然后把文件Push到代码仓库中。 根据README.chromium文件中“Pre-built... Read More | Share it now!

Chromium进程模型

http://dev.chromium.org/developers/design-documents/process-models SiteInstance SiteInstance表示着一组之间有脚本联系的网页,从第一个网页开始,通过点击它页面上的超链接或者脚本代码打开的网页都属于同一个SiteInstance。比如用js... Read More | Share it now!

chromium中使用WeakPtr

WeakPtr为其他对象想访问某个对象,却又不拥有或者增加该对象的引用计数提供了方法。WeakPtr不会影响指针所指向对象的生命周期。 通常WeakPtr与WeakPtrFactory搭配起来使用。WeakPtrFactory当作类的成员,可以通过WeakPtrFactory返回一个WeakPtr,如: 有点需要注意的是,类中WeakPtrFactory<Foo>... Read More | Share it now!

2015一个新的开始

上周提离职了,这周开始休年假。 2012年加入奇虎360,一转眼已是3年多了。毕业同一期进来的同学,还剩下三分之一,有种“知交半零落”的感觉,大家都在各自的人生方向上越走越远。 有很多感慨无处抒发,以后360浏览器就拜托尹大神,何大神了,还有小蔡、涛神。 前段时候,一直很忙,原以为过完年刚来不会很忙的,谁知需求一个接着一个。后来又赶上升级浏览器内核,更是忙的不得了。尹大神跟何大神也是,任劳任怨。现在想想,公司确实挺亏待我们几个的。 一忙起来,博客就好久没更新了。之前我跟自己定下的目标是一个星期至少要更新一次,否则这周就过得太糊涂了,连个总结都没有。 最近业余时间其实一直在研究chromium的ui底层,有些心得。但是要跟向别人表达清楚却比较难,我迫切的需要一种工具来帮我分析与表达软件工程。 我选择了UML。大学里学过UML,只知一点皮毛,但是一直没怎么实践过。现在也正是一个契机把UML运用起来。 我也对未来的生活充满了期望,总之加油,量变产生质变。 ... Read More | Share it now!

跨进程的SetParent

以前好像隐约听别人提到一次,一个进程的窗口可以跟另一个进程的窗口设置成父子关系。当时不太相信这样的说法,认为不可能的。真的能够跨进程SetParent吗? 看MSDN,SetParent里面说如果把hWndNewParent参数的值为NULL,则桌面窗口就是新的父窗口。桌面窗口就是在另外的explorer进程里面的,貌似是可以的,但是MSDN里面没有明确表态。今天我自己写了个测试程序,果然可以,真是毁三观啊,进程边界在哪里?跟之前想的完全不一样。 我最近想实现一个双核浏览器,就是在chromium浏览器的基础上加上IE内核,可以在Blink渲染引擎与Trident渲染引擎之间切换。这不是什么新东西了,国内的很多浏览器都实现这个技术,比如360安全浏览器,搜狗浏览器。我也要自己实现一个,虽然是重复的造轮子,但是在造轮子的过程中可以学到很多。 chromium的多进程架构我已经很熟悉了,就是renderer进程只负责渲染出网页,然后发送到browser进程去显示出来,同样browser进程把各种消息转发到renderer进程。IE的多进程架构则不一样,IE则是子进程真正的创建窗口,在窗口里面包了一个Internet... Read More | Share it now!

深入chromium中的多线程

  Callback 绑定到一个函数上。 绑定到一个类成员函数上。 Bind 动态绑定参数。 这个局部绑定函数内部是根据重载函数实现的,所以参数的顺序是绑定的放在前面,定义MyFunc时,未绑定的参数放在后面。 WeakPtr可取消task。 参数包装函数 base::Unretained()。解除传递给base::Bind()的第一个参数类成员函数的类必须是引用计数类型的限制。但是你需要确保参数的生命周期必须持续到callback执行完成。 base::Owned()。把一个原始指针的管理器转移给base::Callback。TaskRunners关闭的时候不能保证callbacks会被执行,所以把管理器转移给Callback,可以防资源泄漏。 base::Passed()。传递scoped对象的给callback。base::Passed()需要scoped的参数类型,这样意味着callback只能执行一次。 base::ConstRef()。把参数当作const... Read More | Share it now!