Bromite: 从“最近的标签页”重新打开标签页时没有adblock吗?

创建于 2020-08-10  ·  5评论  ·  资料来源: bromite/bromite

溴化版本

版本: 84.0.4147.121
拱门: arm
Android版本: 10
设备型号: Nokia 1

这是有关SystemWebView的错误吗?

该错误可以在最新版本中重现吗?

是的

可以在相应的Chromium版本中复制该错误吗?

不适用:Bromite adblock问题

该错误是否崩溃?


描述错误

当我从“最近的标签”菜单选项中重新打开标签时,如果我以其他方式导航到同一页面或只是重新加载该页面,则这些标签会显示被屏蔽的广告。 我已经在几个网站上转载了:

重现该错误的步骤

重现该错误的步骤:

  1. 访问带有广告的页面,例如上面列出的广告之一。
  2. 启用adblock后,看不到任何广告。
  3. 关闭选项卡。
  4. 在另一个选项卡中,单击菜单,然后单击“最近的选项卡”,然后单击刚刚关闭的选项卡。
  5. 请注意,重新打开的标签确实显示了以前被屏蔽的广告。
  6. 重新加载页面。 观察到广告再次被屏蔽。

预期行为

从“最近使用的标签页”重新打开的标签页应该像其他任何打开页面一样将广告屏蔽掉。

最有用的评论

我发现该错误与以下事实有关:子帧(在ContentSubresourceFilterThrottleManager::MaybeCreateActivationStateComputingThrottle )不具有父大型机的ActivationState

实际上,我发现在https://source.chromium.org/chromium/chromium/src/+/master:chrome / browser / sessions / session_restore_android.cc; l = 35中创建的web_contents没有连接ChromeSubresourceFilterClient

我想这是由NavigationRequest::StartNavigation()给出的,它会在没有正确委托的情况下启动web_contents的导航(此处为https://source.chromium.org/chromium/chromium/src/+/master:content/browser/frame_host /navigation_throttle_runner.cc;l=99),然后在https://source.chromium.org/chromium/chromium/src/+/master:chrome / browser / chrome_content_browser_client.cc; l = 4041中生成NULL。

它是因为(chrome/browser/android/tab_android.cc).AttachTabHelpers不叫前的SessionRestore::RestoreForeignSessionTab()因此NavigationThrottleRunner::RegisterNavigationThrottles()不必调用能力ChromeSubresourceFilterClient::MaybeAppendNavigationThrottles (即插入物的adblocker控制) 。

现在,最终的解决方案是尝试生成合适的web_contents_android,但我不得不在RestoreForeignSessionTab复制AttachTabHelpers()处理,这是荒谬的,要维护。 也许还有其他更清洁的方法,但是我还没有找到。
我通过仅编辑一个文件来简化以后的维护工作,从而解决了该错误:从最近关闭的选项卡中恢复选项卡,java将在新选项卡中创建导航,并关闭打开的选项卡。 从ui的角度来看,它或多或少是相同的。

我认为这些错误在上游并不存在,因为代码的某些部分是由safe_browsing组件调用的,而在bromite中则不会退出。

所有5条评论

这可能与在这种情况下未添加子资源过滤器有关。

可以在相应的Chromium版本中复制该错误吗?

不适用:Bromite adblock问题

实际上,Chromium中也存在广告拦截器,因此也可以在其中进行测试-尽管它使用非常特定的默认广告集来进行拦截。

实际上,Chromium中也存在广告拦截器,因此也可以在其中进行测试-尽管它使用非常特定的默认广告集来进行拦截。

我提出问题后就想到了这一点。 如果您有任何想法如何找到要测试的站点,我会的。 我四处浏览Chromium来源,但所有被说出的内容(例如被阻止的内容)都是违反“更好的广告标准”的广告,没有我可以找到的任何阻止列表。

我发现该错误与以下事实有关:子帧(在ContentSubresourceFilterThrottleManager::MaybeCreateActivationStateComputingThrottle )不具有父大型机的ActivationState

实际上,我发现在https://source.chromium.org/chromium/chromium/src/+/master:chrome / browser / sessions / session_restore_android.cc; l = 35中创建的web_contents没有连接ChromeSubresourceFilterClient

我想这是由NavigationRequest::StartNavigation()给出的,它会在没有正确委托的情况下启动web_contents的导航(此处为https://source.chromium.org/chromium/chromium/src/+/master:content/browser/frame_host /navigation_throttle_runner.cc;l=99),然后在https://source.chromium.org/chromium/chromium/src/+/master:chrome / browser / chrome_content_browser_client.cc; l = 4041中生成NULL。

它是因为(chrome/browser/android/tab_android.cc).AttachTabHelpers不叫前的SessionRestore::RestoreForeignSessionTab()因此NavigationThrottleRunner::RegisterNavigationThrottles()不必调用能力ChromeSubresourceFilterClient::MaybeAppendNavigationThrottles (即插入物的adblocker控制) 。

现在,最终的解决方案是尝试生成合适的web_contents_android,但我不得不在RestoreForeignSessionTab复制AttachTabHelpers()处理,这是荒谬的,要维护。 也许还有其他更清洁的方法,但是我还没有找到。
我通过仅编辑一个文件来简化以后的维护工作,从而解决了该错误:从最近关闭的选项卡中恢复选项卡,java将在新选项卡中创建导航,并关闭打开的选项卡。 从ui的角度来看,它或多或少是相同的。

我认为这些错误在上游并不存在,因为代码的某些部分是由safe_browsing组件调用的,而在bromite中则不会退出。

非常好的分析,谢谢@uazo。 由于这种不对称性,上游是否可能还有其他错误? 如果您发现一个安全漏洞-甚至与安全浏览组件一起出现在上游-那么您可以提交该漏洞,要求提供赏金,并能较快地解决它。 我们还可以检查GrapheneOS / Vanadium是否受到影响。

就目前而言,您制作的PR应该足够。

从我所看到的,所有对SwapWebContents呼叫
https://source.chromium.org/chromium/chromium/src/+/master:chrome / browser / android / tab_android.h; l = 101可能有这个问题,今天只恢复和网络门户(我不知道仍然是什么)。

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

csagan5 picture csagan5  ·  6评论

Someguy1519 picture Someguy1519  ·  5评论

Peacock365 picture Peacock365  ·  5评论

danban359 picture danban359  ·  5评论

projectextremum picture projectextremum  ·  6评论