Firefox66に一度更新した後のトラブル(storage.local)


概要

Firefox ver.66ではアドオン(WebExtensions)の storage.local がIndexedDBで保存されるようになった。
Firefoxを一度ver.66に更新し65か64に戻す時と、更にその後66に上げる時にトラブルが発生した。この原因はIndexedDBへの移行(66で起動すると行われる)と移行済みフラグであるようなので、IndexedDBへの移行をリセットして再度発生させることにした。そのためにやったことが書いてある。

環境

Windows10

参照した

2019-02-16 Firefox Extensions to use different storage type in Firefox 66 - gHacks Tech News
答えもヒントも特にない。単にニュースソース

2019-02-15 Extensions in Firefox 66 | Mozilla Add-ons Blog
これも単にニュースソース

1406181 - Use indexedDB as the backend for storage.local と、ここで変更されているファイル。

あとは実際にプロファイルの中身を調べて判断した。

経緯

普段のプロファイルではFirefox Developer Edition(以下Dev版)を使っている。Nightlyも専用のプロファイルで使っている。

  • 普段のプロファイルでNightly(66?)を起動した(2018年のこと)。
  • Dev版を起動したら、アドオンのデータ読み込みがおかしい。全然読めていない。
  • storage.json がリネームされていた(当時は storage.js.migrated ではなかった気がする)。
  • storage.json に戻すと問題解消した。
  • 2019年。Dev版をver.66に更新すると一部のアドオンでデータ読み込みがおかしい。

    • storage.local がおそらく古い。
    • storage.local とは別にIndexedDBを使っていて、DB(Dexieで version(1).stores() している)によっては読めない。
    • IndexedDBに移行されない。storage.json がそのまま残る。
  • Dev版をver.65に戻すと、アドオンの問題はなくなった。普段のプロファイルでNightly(67)を起動すると、問題発生する。

対処

IndexedDB移行をリセットする

一度(半端に)移行してしまっているので、それをリセットする。

プロファイルのバックアップをした後、
$your_profile/browser-extension-data/{アドオンID}/storage.js の存在と内容を確認しておき、それ以外のファイルがあればこの場から消す。これを {アドオンID} ごとに行った(以下同様)。

$your_Profiles/storage/default/moz-extension+++{内部ID}^userContextId=xxxxx/ を消した。^userContextId=xxxxx が付かない方は多分 storage.json の移行先ではなく、アドオンが使っているIndexedDBなので何もしない。
https+++ウェブサイト/ についてはtwitter.comだけ ^userContextId=xxxxx があり、消した。

Dev版を起動し、about:configextensions.webextensions.ExtensionStorageIDB.migrated.{アドオンID}false に変更した。

確認する

Dev版(ver.65)を起動すると、問題なく動作しているようだった。

移行してもらう

当該のプロファイルでNightly(ver.67)を起動して変化を確認した。

  • storage.json.migrated へとリネームされた。
  • extensions.webextensions.ExtensionStorageIDB.migrated.{アドオンID}true になった。
  • moz-extension+++{内部ID}^userContextId=xxxxx/ が作成された。

これらは起動後すぐ実行されるわけではないらしく、実行されていないアドオンを動作させると変化が起きた。

確認する

Dev版(ver.65)を起動すると、予想通りアドオンがデータを読めなくなっている。

Dev版のバージョンを上げる

Dev版(ver.66になった)を起動すると、最初に確認した storage.json の状態で問題なく動作している。Dexie経由のIndexedDBも問題ない。