Chrome 79出现灾情会清空本机存储和WebSQL

在Chromium的bug讨论区有多位开发者回应,Android上的Chrome更新到79(79.0.3945.79)版本的时候,本机存储(Localstorage)与WebSQL都被意外地清空,应用程序将遗失旧有数据。这对于许多Chrome上的应用程序造成很大的影响,用户在收到Chrome 79更新之后,造成用户数据被移除,不少开发者要求官方立刻停止推送有问题的Chrome 79,否则越多用户更新,则会有越多的用户数据遗失。

另有一位用户补充说明,所有的数据都仍然保留在文件系统中,只是在Chrome 79无法被找到。重现这个问题的方法,只要在Chrome 78以下版本通过本机存储增加数据,而后更新到Chrome 79,启动Chrome 79并通过本机存储提取数据,便会发现数据遗失。

Chrome开发团队则回应,新版本已经推送给50%的用户,而且即便修复这个问题,仍会造成破坏性的影响,虽然Chrome可以增加程序代码来检查被遗忘的文件并且进行移动,但这个动作势必会覆盖新位置的数据,而且将本地存储数据库整合也不是一个可行的解法,因为同一网站已经设置了两个副本的数据,整合不可避免地会导致数据遗失。

因此开发团队在讨论流中,提供两个方案让开发者选择,第一是移除Chrome 79之后的数据,并且回复到Chrome 78的状态,另一个选择则是移除Chrome 78以前的数据,从Chrome 79从头开始。绝大多数开发者都要求第一个选择,但要留存旧数据又有两条路,继续Chrome 79的数据搬迁,但是将旧文件移动到新的位置,或是通过将要搬迁的文件移动到旧位置恢复更改。

目前更新已经发布,最终的决定是将存储的数据搬迁回原始的位置,官方解释,造成本机存储和数据库遗失的原因,是因为这些文件没有跟着存储根路径变更而搬移。目前有问题的Android Chrome 79已经对一半的用户发布,部分用户已经重新创建了数据,而更新后的Chrome 79会将新数据存储在默认的子目录中,并且重新使用Chrome 78的版本,官方提到,这样的修补方式,对于大部分应用程序来说没问题,但对少部分案例仍然需要新数据,可以到默认的子目录取用。对于之前尚未更新Chrome 79的用户,不会有任何影响。

这是个严重的bug,被标记成P0等级,不乏拥有百万用户的应用程序受到影响,有部分开发者提到,这个事件的发生代表Chrome的QA故障,由于多数应用程序都使用数据存储,开发团队应该要对重要的本机存储和WebSQL进行测试。