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

我修复此错误的策略是:

  1. 查找在搜索建议单击上调用的函数。
  2. 调试此功能并了解其工作原理。
  3. 查找将文本设置为URL栏的代码。
  4. 进行更改以修复该错误。

Firefox Focus在其文档中有一个有用的文档,称为UI和代码映射。 该文档基本上将UI映射到代码,并且对不太熟悉项目代码库的新贡献者非常有用。

在该文档中,我发现包含建议的视图称为OverlayView

它让我开始调查。 我在应用程序中经历了OverlayView类。 在OverlayView.swift ,我找到了OverlayViewDelegate协议声明。 该协议包含一堆应该响应不同用户操作的功能。

我怀疑上面的两个功能: didSearchForQuerydidSubmitText 。 我在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的社区对每个贡献者都很友善。 我相信这是吸引开发人员为其项目做出贡献的主要因素之一。