chromium
LostSpeed
c++ coder
展开
-
List of Chrome URLs
如果要做自己的web-ui, 最好的例子就是chrome内建的那些web-ui.浏览chrome://chrome-urls/可以看到所有的内建web-ui.原创 2019-04-22 10:16:35 · 428 阅读 · 0 评论 -
(ZT)What’s the Difference Between Chromium and Chrome?
chrome是闭源的.chromium开源的.弄清chrome和chromium的区别, 可以在逆向时, 在chrome中使用一些由chromium工程制作的IDA签名.由下面的资料可以看出, chrome使用了chromium工程, 添加了一些chromium没有的特性.原创 2017-04-24 15:17:47 · 870 阅读 · 0 评论 -
chromium - DISALLOW_IMPLICIT_CONSTRUCTORS
在看内建web-ui实现时,总能看到类后面有个宏 DISALLOW_COPY_AND_ASSIGN以前忙着别的,没追究。今天做了c++11的default和delete语法的实验,明白这些宏的含义了。原创 2018-12-12 12:53:37 · 507 阅读 · 0 评论 -
chromium - 测试工程的位置
以前就想知道chromium工程中,哪个才是可以运行的测试工程。今天查资料时,找到了。原创 2018-12-12 18:16:16 · 533 阅读 · 0 评论 -
chromium gn parameter list
查资料时,看到如何看gn都提供什么参数列表了.这样,编译chromium工程时,可以编译的更精细。原创 2018-12-13 10:52:48 · 2599 阅读 · 0 评论 -
chromium - 将webui的资源和实现文件放入子目录
第一次做web-ui实验时,看官方文档上并没有特别说明,如何将资源文件和实现文件放入子目录,方便维护。这2天在看chrome://download-internals/的实现,这个web-ui是2017年加入的,算是比较新的web-ui.download-internals的资源文件和实现文件虽然没放在一起,但是也分别放入了不同类别父目录的同名子目录下。对照git和以前做的实验,发现只要改下列文件,就可以实现将自己的web-ui统一放入子目录,方便维护。实现文件中的头文件引用。原创 2018-12-13 14:56:15 · 635 阅读 · 0 评论 -
add new test project to chromium
想在自己的测试程序中,验证一些chromium的知识点。先加一个自己的测试工程到chromium。我先翻了一圈,找到chromium中有一个test_child_process的测试程序(exe)。参考test_child_process,加入了自己的测试工程test_by_me.原创 2018-12-14 18:26:32 · 423 阅读 · 0 评论 -
chromium - 测试程序使用base空间的类
上个实验,只在chromium中加了一个标准的win32console的工程,现在实验了,使用base命令空间的类的工程修改。不只是程序要包含base类的头文件, Z:\chromium\src\base\test\BUILD.gn 也要修改,依赖base命名空间,才能编译过。原创 2018-12-17 13:21:42 · 420 阅读 · 0 评论 -
chromium - base::Bind类成员函数
看到资料上演示base::Bind类成员函数,试试。不能跑的实现都是假的。原创 2018-12-17 14:13:20 · 2557 阅读 · 0 评论 -
chromium - base::Bind take parameter
看资料,有个同学,描述的和官方资料差不多,但是编译不过去。后来找到官方资料,这才看出为啥编译不过。整个测试工程,将base::Bind带参数的2种情况(bind 全局函数,bind 类成员函数)都验证一下.原创 2018-12-17 16:29:05 · 420 阅读 · 0 评论 -
chromium - get value from base:Value
chromium工程中,base::Value是一个数据的容器, 可以装double, string类型数据,数据的存取为key-value。在chromium工程中, 对base:Value设置值,是原有框架的事情。接口上经常有base::Value的值作为入参。为了解送进接口的base::Value数据是啥内容(一般会记录日志),对base::Value取值是要做的。原创 2018-12-18 13:08:23 · 383 阅读 · 0 评论 -
chromium - WeakPtrFactory members which refer to their outer class must be the last member in the ou
没想到是啥错误,其实错误提示也很明显。后来看看类有没有WeakPtrFactory类型的成员变量,真有啊,将自己定义的新变量,放在他上面就行。说明,如果类中有WeakPtrFactory类型的成员变量,必须是类中最后一个成员变量. autoninja检查的挺严格的。原创 2018-12-18 17:13:32 · 612 阅读 · 0 评论 -
chromium - using special class
在web-ui中post一个任务时,使用到了BrowserThread::PostTask。开始编译不过,去看官方测试程序时,发现人家用了using content::BrowserThread;我以前只用using namesapce xx.看来工程大了,作者考虑的就是不同。指定某个实现文件使用特定名字空间的类,看起来更明确。做了实验,在同一个cpp中的不同函数中,也可以指定使用不同空间的相同类名。原创 2018-12-19 11:02:27 · 177 阅读 · 0 评论 -
chromium - post task for web-ui
web-ui和js交互,为了避免阻塞web-ui的消息循环,不能直接PostTask或直接bind来干活,需要用和UI相关的BrowserThread::PostTask.通过实验可知,即使用BrowserThread::PostTask,发起的任务很频繁时,web-ui也卡的很。查了chromium工程中的已有实现,看看BrowserThread都怎么用。原创 2018-12-19 14:11:32 · 478 阅读 · 0 评论 -
chromium - ERR_CONTENT_DECODING_FAILED
对一个内建web-ui,加了点功能,调试都正常了。尝试将这个web-ui实现,挪到我自己的web-ui中,执行时,网页出来后是白页,显示报错信息为"ERR_CONTENT_DECODING_FAILED"尝试解决这个错误。原创 2018-12-20 13:48:58 · 665 阅读 · 0 评论 -
chromium - 代码修改后,一定使用autoninja编译
一般改的不多,加句log啥的,直接在vs2017中跑,编译的文件也不多。今天,在WebUIImpl::ProcessWebUIMessage中加了句日志,然后用vs2017直接跑起来,跑之前,如果代码有变化,会直接编译。以前编译的文件也不多。这次,vs2017居然将30000个文件都重新编译了,这个辣子。原创 2018-12-26 16:40:13 · 2556 阅读 · 0 评论 -
chromium - FROM_HERE
在看chromium的任务处理部分.chromium中的任务都是异步处理的(防止阻塞UI).发起点投递任务到任务队列中,另外一个处理线程(用DoLoop设计模式)从任务队列中弹出任务,进行处理。这时,如果在异步弹出任务时,知道任务是在哪个点投递到任务队列的,这对调试很有用。在vs2017中就可以直接搜索到代码发起点,在任务发起点下断点,这样就能将任务的发起和处理联系在一起了。原创 2018-12-28 18:13:26 · 497 阅读 · 0 评论 -
chromium文件日志的初步使用
chromium工程较大,如果看代码看不出线索。日志可以看出一些错误信息,从而找出一些线索。chromium日志格式的定义在:Z:\chromium\src\base\logging.h还可以自己按照chromium的日志格式,加一些自己的日志。删掉旧的日志默认日志级别:信息,警告,错误级别都开着呢#else#endif。原创 2019-01-07 10:59:44 · 2665 阅读 · 0 评论 -
chromium - cpp101 - hello-chromium
chromium中有一个入门文档,叫cpp101已经放假了:)将这个入门实验做一遍, 可以从编译选项到c++概念在chromium的用法搞清楚。然后再继续膜拜chromium工程本身。原创 2019-01-17 11:40:17 · 455 阅读 · 0 评论 -
chromium - cpp101 - use command-line arguments
cpp101的实验 - chromium命令行的使用环境搭建见。原创 2019-01-17 12:11:27 · 370 阅读 · 0 评论 -
chromium - cpp101 - Callbacks, Bind and closures
除了将闭包当作函数参数,其他都实验过了。闭包的参数挺灵活的可以构造闭包时给全参数,执行闭包回调时,只运行.Run()可以构造闭包时给一部分参数,.Run()执行闭包回调时,再给剩下的入参可以构造闭包时不给参数,.Run()执行闭包回调时,给全所有的入参再执行闭包最常用的形式是将类的成员函数bind后作为闭包, 这种是最有用的。原创 2019-01-17 15:52:31 · 548 阅读 · 0 评论 -
chromium - cpp101 - message loop
官方给的例子,可能和68版本不兼容。看了下68版本的实现,整理了一个出来。原创 2019-01-17 18:28:48 · 367 阅读 · 0 评论 -
chromium - cpp101 - Threads and task runners
将cpp101中任务和线程的例子整理跑了一遍。在线程函数中加了sleep, 能看出线程和任务相配合的效果。原版的官方demo可能和68版本不兼容,稍微整理了一下。在chromium工程中,经常能看到匿名名字空间的使用,可以方便的解决函数命名冲突的问题。原创 2019-01-17 21:12:51 · 344 阅读 · 0 评论 -
chromium - create new gtest project
准备在chromium中建立新的gtest工程, 写一些单元测试, 用来理解和验证chromium的知识点.原创 2019-01-26 11:25:51 · 595 阅读 · 0 评论 -
chromium - PostTaskAndReplyWithResult - use global function
这几天再给chromium中的回调加参数, 改了以后,在PostTaskAndReplyWithResult()调用处,编译不过了,从错误提示信息,也看不出哪里改的不对。今天,在chromium中新建了一个gtest工程,写个测试程序,看看PostTaskAndReplyWithResult到此怎么用。PostTaskAndReplyWithResult绑定全局函数的实验做完了,一会,将PostTaskAndReplyWithResult绑定类的实验做了。原创 2019-01-26 14:51:57 · 926 阅读 · 0 评论 -
chromium - PostTaskAndReplyWithResult - use class
做了实验,试验了用PostTaskAndReplyWithResult绑定类成员函数的情况。编译过后,尝试将PostTaskAndReplyWithResult参数改错(e.g. 绑定类型不一样,函数返回类型不正确),看报错信息,确实看不出是哪错。只是提示类型不兼容等模糊的提示。现在做完实验了,如果再由于PostTaskAndReplyWithResult参数写的不对的话,再找就很容易了。一共就几个点(函数定义的入参,返回类型,绑定类型),查一下即可。原创 2019-01-26 17:49:54 · 748 阅读 · 0 评论 -
chromium - add new callback parameter to PostTaskAndReplyWithResult - use class
想给回调加个参数,但是回调在被PostTaskAndReplyWithResult使用时,编译不过。单独做了PostTaskAndReplyWithResult的使用实验。发现PostTaskAndReplyWithResult中4个参数中的前2个是runner和位置,后2个参数是回调.回调cb_A是前置任务, 回调cb_B是后置任务PostTaskAndReplyWithResult的目的是将cb_A参数给全后,调用cb_A. 将cb_A的返回结果作为入参,再调用cb_B.原创 2019-01-27 17:10:10 · 651 阅读 · 0 评论 -
add self log ini config class for chromium
学习chromium的过程中,加了一些日志.在尝试做一个模块,功能代码都加完了,调试过了,等测试时发现,开始任务后,要30秒~60秒,任务才开始。尝试解决这个bug.思路: 这个任务从web-ui到socket到返回web-ui的调用链都清楚,只要测量一下每个控制点之间的耗时就知道问题在哪。解决问题之前,先看看日志,如果日志不够,再加一些。因为日志太大了,不好看。先清空一下,然后再跑测试。居然日志清空后,任务开始的飞快。哦,明白了,是写日志引起的延迟。原创 2019-02-13 16:47:10 · 249 阅读 · 0 评论 -
build chromium x86 release version
测试编译后的chromium工程输出是否可以正常运行在其他未装开发环境的计算机上.如果不能正常运行,采取什么措施?原创 2019-04-22 10:15:53 · 434 阅读 · 0 评论 -
研究chromium内建web-ui实现的方法
官方文档,只将原理。具体的实现(e.g. 加一个新web-ui),如果没思路,那基本不知道怎么去做。如果看到一个web-ui(e.g. chrome://user-actions/), 如果里面有动态显示文本的功能,我也想在自己的web-ui中加入这个功能,或者,我就想对着chrome://user-actions/做一个自己的web-ui出来。那该怎么做呢?最好的方法就是看git记录,因为提交都是一波一波的,看git记录如同看作者实际操作一样。原创 2019-04-22 10:16:17 · 535 阅读 · 0 评论 -
chromium调试方法小结
上一个实验,增加了web-ui的计划名称,导致执行my://x时,java-script和web-ui中的c++实现不交互,无法操作web-ui了。而直接执行chrome://x是正常的,java-script和c++可以交互。这个bug是自己改出来的(不是改错了,是没改到位,改漏了),领导也不限时间,反正问题必须要解决. 没有任何推脱的理由。等解决的时候,已经用掉了11天。以前解决bug,最多用过一个星期,这次又刷新了记录。原创 2019-04-22 10:17:31 · 2773 阅读 · 0 评论 -
chromium - add user defined scheme name to web-ui
默认的web-ui开头的计划名称(scheme)都是chrome://打头, e.g. chrome://version做个实验,尝试执行自定义scheme名称的web-ui, e.g. my://my_hello_world前后弄了一个星期,改完后,点了一下被修改的文件数量,一共改了43个文件.原创 2019-04-22 10:18:37 · 2161 阅读 · 0 评论 -
chromium工程中去掉clang_format格式化代码的控制
在学习chromium工程的代码,使用vs2017.一般情况,格式化代码功能,只需要在刚拿到代码时,手工调用一次格式化工具,格式化成某种风格即可。开始修改代码了,我想咋写就咋写,毕竟每个人的编码风格都有自己的取向。刚输入完代码,一回车,就给我格式化了, MB。如果格式化的好看还行,结果格式化的跟S一样。原创 2019-04-22 10:18:55 · 847 阅读 · 0 评论 -
add h264 to chromium
网上有资料,讲如何添加h264到chromium.不过,他们都没说到当时实验的chromium版本。有的资料和手头的chromium版本对不上。第一波做实验的大神从哪找的资料?很好奇。BUILD.gn中有句断言, 不让proprietary_codecs和media_use_ffmpeg同时为真。看到断言的原因后,在配置文件中加了一句同时不定义proprietary_codecs = trueassert(原创 2019-04-22 10:19:58 · 916 阅读 · 0 评论 -
chromium的flash设置
编译完的chromium_release_x86版本,不能看flash.原创 2019-04-22 10:20:17 · 1557 阅读 · 0 评论 -
javascript_interaction_with_c_plus_plus_on_chromium
chromium官方给出的制作webui的资料,共3部分信息。制作web-ui使web-ui中的js和chromium中的c++实现互操作在web-ui中建立弹出的子web-ui第一个实验做完了.这周末在做第二个实验. 做实验的分支是68.0.3440.84, 发现跟着官方文档玩,根本编译不过。去google下,发现官方文档和跟在官方文档后面的同学做的实验,都一个样子,基本就是汉化了一下。都不是完整的实验,就说了一下js和c交互的要点。做实验的chromium版本也没说.原创 2019-04-22 10:20:29 · 502 阅读 · 0 评论 -
Creating Chromium WebUI Interfaces
在68.0.3440.84上,准备加一个webui.webui的意思是内建的url, 不是远程的url.按照官方的说法,这2种方法都能加webui.比较起来,第一种好些,可以将加入的实现文件归在一起,好维护。先按照第一种方法做实验,不成功。对照报错信息看, 是ui_0.lib报错。说定义的实现类找不到,那明显是实现文件没编进工程引起的。或者新加入的实现,编译后的obj, 没包进ui_0.lib. 估计是编进components的obj, 不在ui_0.lib的引用中。原创 2019-04-22 10:20:44 · 1582 阅读 · 0 评论 -
chromiumUI中从处理url键盘输入到内建url页面内容准备的函数调用过程
在chromium中输入url时, 想看看在哪处理的键盘输入。还想看看, 输入内建url时,从键盘处理到url页面数据准备的全过程。在chromium工程中可以看到内建url索引页面的url内容所有可用的chromium buildin url list在chromium的url输入框,输入以下url, 会显示出chromium所有的内建urlFor Debug。原创 2019-04-22 10:20:57 · 1173 阅读 · 0 评论 -
add source files on chromium project
如果要学习并修改chromium工程,将自己的实验代码,散落在chromium工程中,也不是不行。缺点是如果要在和实验版本不同的chromium工程中做实验时,那已有的自产代码的迁移就麻烦一点。理想状态是将自产代码放在自己的实现文件(my_imp.h, my_Imp.cc)中, 原版的chromium工程只需要包含my_imp.h, 在该调用my_Imp.cc实现的函数或类时,只调用my_imp_xx函数或成员函数. 这样实验工程的可维护性就好多了.原创 2019-04-22 10:21:43 · 636 阅读 · 0 评论 -
chromium工程代码走读-子进程的创建和子进程的实现---type=crashpad-handler
工程编译好了,修改了winMain函数入口点代码。使之可以弹框打印出ppid/pid/command_line.启动工程后,遇到弹框,遇到主进程或感兴趣的子进程,附加上去单步观摩代码实现。chromium工程启动后,首先会启动一个崩溃信息处理程序. 先观摩了这个子进程的创建和子进程的实现。chromium代码封装的层次挺深的,先看个大概。chromium的修改都在vs2017中进行。chromium的编译在cmd中运行调试和单步用附加弹框的chrome.exe进行。原创 2019-04-22 10:21:54 · 4018 阅读 · 0 评论