ストレージと Cookie

拡張機能は、通常のウェブサイトと同様に Cookie を保存し、ウェブ ストレージ API にアクセスできます。ただし、拡張機能では動作が異なる場合があります。

拡張機能 API については、browser.storage をご覧ください。

ストレージ

拡張機能でウェブ プラットフォーム ストレージ API を使用することが望ましい場合があります。このセクションでは、拡張機能のコンテキストにおけるこれらの API の動作について説明します。この動作は、ウェブ上での動作と異なる場合があります。

永続性

ユーザーが閲覧データを消去しても、拡張機能のストレージは消去されません。これは、ウェブ ストレージ API(ローカル ストレージIndexedDB など)を使用して保存されたすべてのデータに適用されます。

デフォルトでは、拡張機能にはストレージに関する通常の割り当て制限が適用されます。この制限は navigator.storage.estimate() を呼び出すことで確認できます。まれに、メモリの負荷が高い場合にストレージが削除されることもあります。これを回避するには:

  • "unlimitedStorage" 権限をリクエストします。この権限は拡張機能とウェブ ストレージ API の両方に影響し、拡張機能を割り当て制限と削除の両方から除外します。
  • 立ち退きから保護するために navigator.storage.persist() に電話してください。

拡張機能のストレージは、拡張機能のオリジン全体で共有されます。これには、拡張機能の Service Worker、拡張機能のページ(ポップアップやサイドパネルを含む)、オフスクリーン ドキュメントが含まれます。コンテンツ スクリプトでウェブ ストレージ API を呼び出すと、拡張機能ではなく、コンテンツ スクリプトが挿入されたホストページのデータにアクセスします。

サービス ワーカーでのアクセス

IndexedDB API と Cache Storage API は、サービス ワーカーでアクセスできます。ただし、ローカル ストレージセッション ストレージは異なります。

Service Worker からローカル ストレージまたはセッション ストレージにアクセスする必要がある場合は、オフスクリーン ドキュメントを使用します。

パーティショニング

パーティショニングでは、保存されたデータにキーが導入され、アクセスできる場所が制限されます。ストレージはこれまでオリジンをキーとしていました。

Chrome 115 以降、ストレージ パーティショニングにより、特定のタイプのクロスサイト トラッキングを防ぐためにパーティショニング キーの定義方法が変更されます。実際には、サイト A がサイト B を含む iframe を埋め込んでいる場合、サイト B は通常直接アクセスしたときに使用できるストレージにアクセスできなくなります。

拡張機能におけるこの影響を軽減するため、2 つの例外が適用されます。

  • chrome-extension:// スキームのページがサイトに埋め込まれている場合、ストレージ パーティション分割は適用されず、拡張機能はトップレベルのパーティションにアクセスできます。
  • chrome-extension:// スキームのページに iframe が含まれており、拡張機能が埋め込んでいるサイトのホスト権限を持っている場合、そのサイトもトップレベル パーティションにアクセスできます。

クッキー

Cookie は、特定のドメインとパスに関連付けられた Key-Value ペアを保存する方法を提供します。拡張機能ではあまり役に立ちませんが、特定のユースケースがある場合や、実装でこれらを使用するサードパーティ スクリプトをバンドルしている場合は、その動作を理解しておくと役立ちます。

セキュア Cookie

Secure Cookie 属性は、https:// スキームでのみサポートされています。したがって、chrome-extension:// ページではこの属性で Cookie を設定できません。

つまり、拡張機能ページでは、Secure 属性が必要な他の Cookie 属性を使用できません。

パーティショニングと SameSite の動作

chrome-extension:// ページで設定された Cookie は、常に SameSite=Lax を使用します。そのため、拡張機能が独自のオリジンで設定した Cookie にフレームからアクセスすることはできず、パーティショニングは関係ありません。

拡張機能ページのフレームに読み込まれたサードパーティ サイトや、拡張機能ページからサードパーティ オリジンへのリクエストなど、サードパーティ サイトに関連付けられた Cookie の動作は、ウェブの場合とほぼ同じですが、次の 2 点が異なります。

  • 特定のタブのトップレベル ページが chrome-extension:// ページの場合、サードパーティ Cookie はサブフレームでもブロックされません。
  • 拡張機能がサードパーティのホスト権限を持っている場合、拡張機能からサードパーティへのリクエストは同一サイトとして扱われます。つまり、SameSite=Strict Cookie を送信できます。これはネットワーク リクエストにのみ適用され、JavaScript の document.cookie を介したアクセスには適用されません。また、サードパーティ Cookie がブロックされている場合は適用されません。

サードパーティ Cookie に関する設定は、プライバシー サンドボックスの取り組みの影響を受け、そのタイムラインに沿って調整されます。

browser.cookies API は、各 API メソッドで使用するパーティション キーを制御します。詳しくは、API リファレンスをご覧ください。