版本: 84.0.4147.121
拱门: arm
Android版本: 10
设备型号: Nokia 1
不
是的
不适用:Bromite adblock问题
不
当我从“最近的标签”菜单选项中重新打开标签时,如果我以其他方式导航到同一页面或只是重新加载该页面,则这些标签会显示被屏蔽的广告。 我已经在几个网站上转载了:
重现该错误的步骤:
从“最近使用的标签页”重新打开的标签页应该像其他任何打开页面一样将广告屏蔽掉。
这可能与在这种情况下未添加子资源过滤器有关。
可以在相应的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可能有这个问题,今天只恢复和网络门户(我不知道仍然是什么)。
最有用的评论
我发现该错误与以下事实有关:子帧(在
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中则不会退出。