ストレージと Cookie

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

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

ストレージ

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

永続性

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

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

  • "unlimitedStorage" 権限をリクエストします。この権限は、拡張機能とウェブ ストレージ API の両方に影響し、割り当て制限とエビクションの両方から拡張機能を除外します。
  • エビクションから保護するには、navigator.storage.persist() を呼び出します。

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

Service Worker でのアクセス

Service Worker で 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(拡張機能ページのフレームに読み込まれたサードパーティ サイト、または拡張ページからサードパーティのオリジンへのリクエストなど)の場合、Cookie は次の 2 つの点を除き、ウェブと同じように動作します。

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

なお、サードパーティ Cookie に関する設定は、プライバシー サンドボックスの仕組みの影響を受け、そのスケジュールに沿って調整されます。

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