Firefox の拡張機能 API は、個々のリクエストに対してプロキシの判断を行えます。リクエストに有効なタブの紐付けがある場合、拡張機能はそのタブ ID をユーザーが選択したタブと比較できます。

既存の Firefox 拡張機能のバックグラウンド スクリプトでは、ルーティング部分は次のように書けます。

browser.proxy.onRequest.addListener(details => {
  if (details.tabId === selectedTabId) {
    return {type: 'http', host: 'proxy.example', port: 8080};
  }
  return {type: 'direct'};
}, {urls: ['<all_urls>']});

拡張機能は独自のユーザー選択ロジックから selectedTabId を渡します。HTTP ホストと整数のポートは、許可された公開タブでのテスト用にHTTP プロキシ リストから取得できます。プロキシ権限と、フィルター対象 URL をカバーするホスト権限が必要です。

これは PAC スクリプトとは異なります。PAC の標準的な URL とホストによる判断はブラウザーのタブを識別しません。別のタブを読み込み中に Firefox のグローバルな手動プロキシを変更するのとも違います。

ブラウザーの基盤設定を考慮してください。ProxyInfo の direct 値はユーザーが設定したプロキシを上書きしません。一致しないリクエストがすべて直接通信すると約束するのではなく、基本ポリシーとフォールバックの動作を確認してください。

一部の通信には信頼できるタブ情報がなく、Mozilla は HTTP/3 プロキシ接続について不正確な紐付けを文書化しています。これはリクエストのルーティングを示すもので、閲覧作業に関わるすべての接続がタブ単位で分離される保証ではありません。拡張機能固有のコンテナー ルーティングも検討すべき別のモデルです。

関連記事