アドオンが動作しない潔癖症ユーザーが確認すべき場所の一つはCookie

# 結論

アドオンをCookieのホワイトリストに追加する。

# 教訓

* アドオンが動かない場合はセキュリティ設定を疑え
* アドオンの設定値はCookieではなくStorageなど別の方法を探れ
* Cookieの設定に失敗した場合はユーザーにそれとわかるエラー表示を行え
* Cookieフィルターは`https?`以外にも使える

# <i class="fa fa-cogs"></i> 検証環境

* Firefox 58.0.2

# 現象

* アドオンアイコンをクリックしたときのポップアップが正しくない
* アドオンの詳細画面(about:addonsからの詳細)で設定項目が表示されない
* アドオンの設定ページを開くと真っ白

などなど、アドオンが機能しない場合に。


# 原因

アドオンのCookieを弾いているから

![image.png](https://qiita-image-store.s3.amazonaws.com/0/62354/f398fccf-18aa-cb13-9d98-982e10c54f6b.png)

# 確認方法

新規タブが開くアドオンなら開発者ツールから(たぶん)。
ポップアップなど全般的にはアドオンのデバッグで確認する。

about:debugging#addons

![2018-03-05_15h10_212.png](https://qiita-image-store.s3.amazonaws.com/0/62354/50e6c5b3-2863-3c20-e7ed-b042bf67e283.png)

使い方は通常の開発者ツールと同じ。
ポップアップを開いたときなどにエラーがコンソール画面に吐かれるはず。
[デバッグ - Mozilla | MDN](https://developer.mozilla.org/ja/Add-ons/WebExtensions/%E3%83%87%E3%83%90%E3%83%83%E3%82%B0#The_Add-on_Debugger)

# 暫定解消方法

![image.png](https://qiita-image-store.s3.amazonaws.com/0/62354/f398fccf-18aa-cb13-9d98-982e10c54f6b.png)

すべてのCookieを保存するようにチェックを入れる。
例外サイトのCookie フィルターの内容が、全て保存することで削除されないかが不安だった。
しかしどうやら残るようなので、チェックを外せば元の状態に戻る。

チェックをつけた・はずした状態でアドオンの動きが変わることを観測できた。

# 根本解決 アドオンをCookie フィルターに登録する

Cookieを受け入れると動いたが、全てを受け入れたくないのでホワイトリストのCookieフィルターを使っていたわけで。

## UUIDの確認

新規のタブで開かれる設定画面を持つアドオンなら、そのURLを確認。
URLを確認できないアドオンなら、デバッグ画面の

![image.png](https://qiita-image-store.s3.amazonaws.com/0/62354/e9f53b72-75ec-2ba4-f9e2-35b850da1312.png)

内部UUIDを使用する。

これはアドオン固有ではなく[^1]、インストールした環境ごとに異なる。

>実際にはアドオンのIDではなく、自動生成された内部的なUUIDが使われます。 これには、いわゆるフィンガープリンティングを防ぐためという意味があります。
>
仮にアドオンの内部リソースに対して、moz-extension://addon-name.at.clear-code.com/main.js のようにアドオンのIDに基づいたURLが割り当てられていたとすると、Webページ上のコンテンツから容易に読み込みを試行できてしまい、訪問者の使用アドオンを特定されたり、アドオンの使用状況から個人を特定されてしまう可能性があります。
>
>
このようなフィンガープリンティングを無効化する目的で、Firefoxはアドオンがインストールされるごとに新しいUUID（ユニークな識別子となる文字列）を自動生成し、それを使ってアドオンの内部リソースを moz-extension://a93cdbe2-b549-401c-ad50-56572822cee3/main.js のようなURLで表すようになっています。 この例でホスト名に相当する部分に現れているa93cdbe2-b549-401c-ad50-56572822cee3がそのアドオンに割り当てられたUUIDで、環境ごとに異なる物が生成され、それどころか同じ環境であっても、そのアドオンをアンインストールした後で再インストールすると新たに別のUUIDが生成されます。

アドオンで保存したCookieは、この自動生成されたUUIDをホスト名代わりにして管理されています。


[Cookieに設定値を保存しているWebExtensionsベースのアドオンについて、MCDで設定の初期値を指定する方法 - ククログ(2018-01-19)](http://www.clear-code.com/blog/2018/1/19.html)


[^1]: 固定は危険なので

## Cookieフィルターへの登録

`moz-extension://a93cdbe2-b549-401c-ad50-56572822cee3`
といった形で登録します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/62354/13732048-8201-4720-f324-31cdf78a3e57.png)



問題なのはCookieフィルターはワイルドカードやプロトコル(`moz-extension://`)のみの入力を受け入れず、
スキーム + ホスト名でなければならない点。
先のUUIDの自動生成と合わせて、アドオンごとに手動で一つずつ登録していく必要があります。
~~マンドクセ('A`)~~不便を承知でホワイトリスト運用しているので受け入れよう。

# 確認アドオン

* はてなブックマーク(詳細画面非表示・ポップアップ不完全)
* Foxy Gesture (設定画面白紙(Angularの読み込み失敗っぽい))

# 参考

* [Cookieに設定値を保存しているWebExtensionsベースのアドオンについて、MCDで設定の初期値を指定する方法 - ククログ(2018-01-19)](http://www.clear-code.com/blog/2018/1/19.html)
* [storage.managed - Mozilla | MDN](https://developer.mozilla.org/en-US/Add-ons/WebExtensions/API/storage/managed)

***

* [Rockridgeさんのツイート: "Fx60：Cookie関連の設定がサイトデータのセクションに移された。Cookieはサイトデータの一部として扱われ、Cookieのみを一覧から削除することはできなくなった。 / “1432743 - Move cookie se…” https://t.co/onK6zsWjpt"](https://twitter.com/rockridge07/status/968116212969308171)
* [Firefox 60ではCookieに関する管理方法が変更され、個別のCookie管理は廃止になる見通し - GIGAZINE](https://gigazine.net/news/20180227-firefox-60-no-individual-cookie-management/)

Firefox 60でCookie管理に関する動きがあるので、Cookieフィルターにも今後影響がある可能性がありますね。