【MV3版AdGuardブラウザ拡張機能 v0.4.0】複数の機能改善
Manifest V3対応のブラウザ拡張機能をリリースしてから約1年半が経ち、いよいよメジャーアップデートの時が来ました。
Manifest V3環境はもはやブラウザ拡張機能世界の現実になっています。
ブラウザ拡張機能は現在、私たちの更新済みフィルターエンジン、TSWebExtensionとTSUrlFilterに依存しています。
私たちAdGuardがどのようにして初のManifest V3対応拡張機能を作成できたかについては、こちらのブログ記事をご覧ください。
ブラウザ拡張機能が良くなった5つの理由
理由その1: ルール優先順位の新スキーム
以前は、ルールに4つの異なる優先順位がありましたが、グループ内でのルールの選択と優先順位付けが明確ではありませんでした。
新しいスキームでは、ルールに含まれる修飾子に基づいてルールの重みを計算します。
これらの修飾語は、優先順位の低いものから高いものへとランク付けされ、ルールのスコープに与える影響によって、全体の優先順位の重みが判断されます。
この新しいアプローチにより、変換段階でルールに宣言的な優先度を設定できるようになり、これは特に新しいManifest V3下の環境で有用です。
新しい優先度スキームの詳細については、ナレッジベースの記事を参照してください。
理由その2: $badfilter
のサポート
修飾子 $badfilter
は他のどのルールも無効にすることができます。
フィルター開発者がこの修飾子を持つルールを追加し、拡張機能がダイナミックアップデートを受け取ると、$badfilter
修飾子を持つルールが適用されていたルールを上書きします。
今までは、以前に追加したルールを、Manifest V3環境では無効にすることはできませんでした。
そのため、当初は $badfilter
のサポートを同じファイル内にあるルールに対してのみ追加していました。
あるファイルにルールがあり、別のファイルでそれに $badfilter
を追加しても、$badfilter
は適用されなかったのです。
しかし、拡張機能開発者からのフィードバックのおかげで、W3C Working Groupは耳を傾け、他の宣言的ルールを無効にできる新しいAPIを導入しました。
これにより、全ファイルの全ルールに対して $badfilter
サポートを追加できるようになりました。
サポートを実装するために、ルールの変換スキームを刷新し、フィルター用の追加メタデータを生成して、無効にする必要があるルールを動的に見つけるようにしました。
理由その3: $cookie
修飾子のサポート
修飾子 $cookie
を使用すると、Cookie(クッキー)の有効期限 (TTL) を指定できます。
現在の Manifest V3 の機能ではこの修飾子が正しく動作しないため、いくつかの改善を実装しました:
- Manifest V3 API がフィルタリングルールを動作させるのに十分な場合、ルールを宣言的なものに変換し、静的ルールセットに追加します。
- そ例外の場合は、TSUrlFilter エンジンで追加的にクッキーを処理し、browser.cookies API を使って設定すべきでないクッキーを削除するか、クッキーの寿命を縮めます。
理由その4: $elemhide
、$generichide
、$specifichide
修飾子のサポート
これらの修飾子は、特定のWebサイトに対するコスメティックフィルタリングをオフにするのに役立ちます。
Manifest V3 にはまだそのようなツールがないので、AdGuardの「TSUrlFilter」というフィルタリングエンジンを使って修飾子のサポートを追加しました。
このエンジンは、ブロックルールと例外ルールをマッチさせ、除外されていないルールだけをコンテンツスクリプトに送信します。
理由5: その他
以下の修飾子に対応しました:
$method
は指定された HTTP メソッドセットを使用するリクエストにルールの範囲を制限します。$to
は指定したドメインとそのサブドメインへのリクエストにルール範囲を制限します。$removeheader
: この修飾子を持つルールはHTTPリクエストとHTTPレスポンスからヘッダーを削除します。Sall
修飾子は all content-types 修飾子 と$popup
で構成されています。csp
修飾子はルールの動作を完全に変更します。この修飾子をルールに適用すると、ルールはマッチするリクエストをブロックせず、その代わりにレスポンスヘッダーが修正されます。
このブラウザ拡張機能は、Manifest V3の過酷な条件下で動作する最初の広告ブロッカーです。
GitHubにてこの拡張機能の問題を報告いただける大変助かります。