我的 GSoC 之旅:为 Chrome 扩展程序做贡献

Harsh Singh
Harsh Singh

发布时间:2025 年 10 月 28 日

我是 Harsh Singh,是 IIT (ISM) Dhanbad 化学工程专业的 B.Tech 应届毕业生,2025 年曾参加 Google 编程之夏 (GSOC)。这篇博文分享了我被 GSoC 接受的历程,以及我在参与 GSoC 期间学到的一些知识。

GSoC 之前:探索扩展程序开发

在我大一的时候,和许多人一样,我渴望加入我们学校的官方技术俱乐部 CyberLabs。为了做好准备,我向一位学长请教,他向我展示了自己构建的用于进入该俱乐部的 Chrome 扩展程序。这与我所了解的标准 Web 开发完全不同。这似乎是一种在自己的浏览器中注入脚本和修改网站的绝佳方式。

我尝试过许多扩展程序 API,甚至见证了从 Manifest V2 到 V3 的过渡。我当时成功使用它们构建了一个小型项目,进入了 CyberLabs,然后忙于大学生活,暂时搁置了扩展程序开发。

最近,在考虑申请 Google Summer of Code (GSoC) 时,我偶然发现了一个关于 Chrome 扩展程序 API 的项目。怀旧感涌上心头:“如果这次能制作一个 API,让未来的大二学生能用它进入 CyberLabs,那不是很酷吗?这才是最棒的炫耀方式。”由于我之前的工作已经让我了解了大多数扩展程序术语,因此这个项目非常适合我。

准备申请

我一时兴起,决定联系 Chrome 扩展程序团队的开发技术推广工程师 Oliver。我问他,要成为 Chromium 的 GSoC 计划的成功申请者,需要具备哪些条件。他在几天内就回复了!他的电子邮件非常令人鼓舞;他说他们只是想看看我能否探索代码库并编写一些 C++ 代码。

我首先在自己的机器上设置了 Chromium。这真是一场艰苦的战斗;我花了整整四天时间,尝试了无数次,才终于设置好庞大的代码库并成功构建。我在网上发现了一个简单的问题,与没有用户手势的 sidePanel.open() 有关,并提交了一个补丁来修复该问题。(现在看来,这只是一个小小的变化 🙂)。我通过电子邮件向 Oliver 汇报了我的进展。他告诉我,他们不打算支持这个功能,但他也说我所做的工作足以表明我是认真的。然后,他建议我为侧边栏开发 getPosition 方法。我弄清楚了问题,再次给他发了邮件,他非常高兴,说我的方法与他们团队一直在讨论的内容一致。这让我有信心继续推进项目,因为我知道自己可以理解代码并进行更改。

我的 GSoC 提案

接下来是 GSoC 提案。最初的项目说明“SidePanel API 和 DNR API”非常宽泛,因此我不确定要在提案中列出哪些具体任务,也不确定如何制定时间表。我曾就此问题向 Oliver 发送电子邮件,他回复说已更新项目说明。令我欣喜的是,他添加了多个 API,包括我已在使用的 sidePanel.getPosition API。

我的提案的关键组成部分包括对项目的理解、设计理念、提案前工作和可交付成果的时间表。我准确地估算了任务规模,这表明我充分了解了所涉及的工作。我起草了提案,并让别人审核了两次。

我感到遗憾的一点是,没有为我计划构建的功能添加合适的设计规范,这对于未来的申请者来说是一个重要的提示。例如,在提议用于关闭侧边栏的 API 时,我应该概述参数、说明选择的理由、解释如何处理边缘情况,并描述如何针对所有浏览器标准化 API。这会显示出更深层次的理解。

在 Chromium 扩展程序项目背景下,一个关键机构是 WECG(WebExtensions Community Group,读作“wee-C-G”),新 API 设计会在这里进行正式讨论。在 GSoC 期间,贡献者可能需要向此群组推介其 API 提案。因此,在 GSoC 提案中准备好设计方案是一个巨大的优势,因为这表明您已为这一关键步骤做好准备,并且在 GSoC 期间会表现出色。

5 月初,我收到了电子邮件,得知自己被录取了!🙂

我在 GSoC 期间做出的贡献

GSoC 期间非常棒。我的导师 Solomon 非常好,我们每周都会举行富有成效的会议,这让我始终保持正轨。我还认识了一位贡献者 Amit P,每当我感到沮丧时,他都会给我提供很大的帮助。参加 WECG 会议让我大开眼界;我了解了该级别的运作方式,也明白了经验为何如此重要。我在那里讨论了我的 API 提案,并获得了另一家浏览器供应商的批准。

一开始,我打开了多个 CL(更改列表)。后来,由于代码审核的反复,我的进度放缓了,但我很乐意坚持下去。我合并的主要贡献是 Side Panel API:

我针对 Commands API 的其他 CL 仍在开发中(具体取决于我在 GSoC 结束后保持的活跃程度 🙂)。您可以在我的最终报告中查看详细的细分信息,该报告可在我的 GSoC 项目页面上的“查看代码”链接下找到。

特别感谢 Oliver Dunk、Solomon Kinard、Kelvin Jiang、Devlin Cronin、Tom Lukaszewicz 和 Andrea Orru,他们审核了我的几乎所有 CL。看到自己的代码成为 Chrome 的一部分,感觉太棒了。我的导师说我具有强烈的“主人翁意识”,这对我来说是莫大的赞誉。

总结

如果您问我 GSoC 给了我什么,我会说它给我的不仅仅是技术知识。这让我有机会参与重要讨论,这些讨论将影响许多扩展程序开发者。这是我的第一份在实际应用中使用的作品。我遇到了许多患者导师,他们指导我并教了我很多东西,让整个体验变得非常丰富。

希望我的故事能为其他想要为 Chromium 做出贡献或参加 Google Summer of Code 的人提供有用的参考。

面向 GSoC 申请者的提示

  1. 选择您真心喜欢的创意。利息应是您的首要考虑因素。技能可以不断提升,但热情才是让你在遇到困难时坚持下去的动力。我曾扮演过这两种角色,请相信我:如果您从事自己不感兴趣的工作,一旦出现问题,您就会责怪他人。不过,如果您热爱这份工作,就会将其视为需要克服的挑战。
  2. 不要害怕竞争。我看到许多人在社区渠道中看到其他申请者后,失去了动力。每个好项目都会面临竞争。专注于自己的优势。如果您之前使用过任何库,请找到使用该库的项目。您将拥有优势,因为您可以带来独特的经验。
  3. 承认运气因素,注重沟通。实话实说,GSoC 涉及一些运气成分。一些热门项目会收到 300 多份提案,但只有 1-2 个名额。我怀疑导师是否能详细阅读每一条评论。因此,尽早沟通至关重要。提前参与项目,并确保您的提案内容充实且切中要点。
  4. 即使未被选中,也并不代表结束。现在,您的简历中已包含宝贵的开源贡献。您可以使用该简历申请其他暑期机会。您已经完成了艰苦的工作!

最后但同样重要的是:

“每个人都有自己适合的特定工作,而对这项工作的渴望已深植于每个人的内心。”- 鲁米

感谢您的阅读。