iOS版Firefox Focus中的错误修复#2
一周前,我写了一个故事,讲述了我在Mozilla的iOS隐私浏览器Firefox Focus中首次修复漏洞的故事。 在该文章中,您还可以找到我对Firefox Focus的介绍。
如果您错过了我以前的故事,我强烈建议您阅读:
iOS版Firefox Focus中的错误修复
我将继续我在开源软件领域的旅程,我想分享一下我最近在修复软件方面的经验。
medium.comi
Firefox Focus iOS版本8.0即将发布。 此新版本将主要增强浏览器的搜索建议功能。 我研究了搜索建议中的错误之一。
如果用户选择搜索建议而不是按下键盘上的“执行”按钮,URL栏将不显示搜索文本。 这是一个例子:
如果您搜索mozilla并按“ Go”按钮,则URL栏将包含mozilla
。 但是,如果您搜索mozilla并选择了搜索建议之一,则网址栏将包含www.google.com
。
我修复此错误的策略是:
- 查找在搜索建议单击上调用的函数。
- 调试此功能并了解其工作原理。
- 查找将文本设置为URL栏的代码。
- 进行更改以修复该错误。
Firefox Focus在其文档中有一个有用的文档,称为UI和代码映射。 该文档基本上将UI映射到代码,并且对不太熟悉项目代码库的新贡献者非常有用。
在该文档中,我发现包含建议的视图称为OverlayView
。
它让我开始调查。 我在应用程序中经历了OverlayView
类。 在OverlayView.swift
,我找到了OverlayViewDelegate
协议声明。 该协议包含一堆应该响应不同用户操作的功能。
我怀疑上面的两个功能: didSearchForQuery
和didSubmitText
。 我在BrowserViewController
找到了它们的实现。
我在它们的每一个上创建了两个断点,并通过场景重现了该错误。 正如我发现的那样,当用户选择建议时, didSearchForQuery
被调用。 现在,我必须调试此功能,并找到设置URL Bar文本的代码段。 如果看一下didSearchForQuery
的实现,您会发现它并不是那么大。
但是,当您调试此功能时,它会变得越来越深,并且会涉及许多其他功能。 我还比较了didSearchForQuery
和它的模拟功能,当用户按下“ Go”按钮时会调用它。 我发现它们彼此之间是相似的,最终它们调用了一个名为setTextToUrl
的函数,我认为这正是我想要的。
我花了一些时间玩代码并进行了不同的更改。 我以为我找到了didSearchForQuery
不会更改URL栏中文本的原因,因为我注意到它没有将搜索推送到SearchHistory
堆栈,因此setTextToUrl
函数无法获取值。 我在didSearchForQuery
中添加了一种将搜索推入SearchHistory
堆栈的方法,似乎setTextToUrl
函数正在获取当前搜索的值,但是URL Bar仍然包含www.google.com
! 我很困惑,试图找到解决方案,但是我的尝试没有成功,所以我决定去问项目维护者。
我写了关于该问题的调查以及在GitHub上解决该问题的步骤。 我很快就收到维护者Sawyer Blatz的回音。
他给了我一个如何解决此问题的建议。 原来,此修复比我想象的要容易,我只需要在didSearchForQuery
更改这一行:
提交(URL:URL)
进入
urlBar(urlBar,didSubmitText:查询)
此更改基本上调用了用户按下键盘的“开始”按钮时使用的功能。 奏效了 !
如您所见,如果用户选择搜索建议,则搜索文本将显示在URL栏中。
拉取请求已成功合并✅
修复此错误很有趣。 我对Focus代码库越来越熟悉,这使我感到自信,因为我计划将来在那里处理其他问题。
另外,我想指出,Sawyer很好地解释了为什么我的代码无法正常工作。 这是我对Mozilla项目的第三次贡献(我也为Mozilla附加组件做出了贡献),并且我注意到Mozilla的社区对每个贡献者都很友善。 我相信这是吸引开发人员为其项目做出贡献的主要因素之一。