nodewebkit系列(01):我是如何Fix开源项目的Bug的

     这篇博文写的主要是我修复一个开源项目:Node-Webkit(可以从我之前的一篇博客中了解一下大概)的Bug并Merge的过程。主要是想从中总结出一些方法,积累经验。(备注:以下nw就是指node-webkit)
 

Bug


问题描述:在nw中,形如
<a href="mailto:xxxx@gmail.com">Mail</a>
这样的超链接标签不能像浏览器(如chrome)中那样,打开系统中的默认邮件发送客户端。另外一个例子:
<a href="github-windows://openRepo/https://github.com/rogerwang/node-webkit">Clone in Windows</a>
这样的链接也是无法正常工作的。
 
问题的分析

  1. 一开始我猜想,为什么在Chrome中同样的链接就能够正常打开(根据协议的不同,会弹出一些确认的对话框),比如我点击Github上仓库的Clone in Windows这个链接的时候弹出的对话框。这种对HTML中标签的点击事件的响应不应该是放在Webkit中实现的吗?但是仔细观察后发现这个对话框是Chrome中特有的。而nw是基于Chrome Content API实现的,也就是说在nw中应该是有什么响应这个事件的函数没有实现!于是,我开始了寻找这个函数的过程。
  2. 在了解过Chrome的架构以及知道nw的架构基础上,我开始寻找在Chrome中的相关实现作为我Patch的参考。一开始无从下手啊,这代码量根本就是在大海捞针啊。后来突然想到,我们可以找找Chrome中是否有相关的Bug存在过?这样子的话查看Patch的记录就可以大概知道在哪里实现了!于是到了Chrome Issue的跟踪系统上:https://code.google.com/p/chromium/issues/list 搜索mailto status=Fixed(All issues),就是这个简单的关键词搜索,我找到了下面这个Issue:https://code.google.com/p/chromium/issues/detail?id=20696,仔细阅读这个Issue的描述后发现就是跟现在我在nw中需要完成的代码是一致的!
  3. 可是当我非常高兴地点开链接想查看代码修改了哪些之后,天啊,这代码怎么可以不见了。(在Chrome这个项目中经常会发生一些移动文件到某个文件夹的事情,所以也不奇怪,不过文件名一般都是不会变的)。于是,我开始了寻找external_protocol_handler.cc这个文件的过程。
  4. Google Chromium这个项目还有个很厉害的工具!代码搜索:https://code.google.com/p/chromium/codesearch  这个工具最近升级了一些功能(https://groups.google.com/a/chromium.org/forum/#!starred/chromium-dev/LnkIhHajvyA)!直接使用external_protocol_handler进行搜索,找到了下面这个代码:https://code.google.com/p/chromium/codesearch#chrome/src/chrome/browser/external_protocol/external_protocol_handler.h&q=external_protocol_handler&sq=package:chrome&type=cs&l=5。同时仔细阅读其注释后,我更加肯定我需要的就是这个。
  5. 之后的事情就是阅读其中的代码,找出自己所需要的部分。Commit如下:https://github.com/rogerwang/node-webkit/commit/0bcc9840660d390c463ffc061a55ce280d5dc629
 
我学到了什么?

  1. 一个即使你看上去毫无头绪的问题,只要通过一定的方法:合理使用工具,在略显条理的推论下一步步深入,就应该都能够解决的。
  2. 做一个会思考的程序员。
原文地址:https://www.cnblogs.com/zhchbin/p/2910175.html