フェンス付きフレーム

コミュニティグループ報告書草案,

このバージョン:
https://wicg.github.io/fenced-frame/
編集者:
Dominic Farolino (Google)
(Google)
参加:
GitHub WICG/fenced-frame (新しい課題, 未解決の課題)
コミット:
GitHub spec.bs のコミット
テストスイート:
https://wpt.fyi/results/fenced-frame/

概要

フェンス付きフレームは、埋め込みページとクロスサイトの埋め込み文書との間に境界を強制し、 2つのサイトから見えるユーザーデータを結合できないようにします。

この文書の状態

この仕様は、Web Platform Incubator Community Group によって公開されました。 これは W3C 標準ではなく、W3C 標準化過程上にもありません。 W3C Community Contributor License Agreement (CLA) の下では、限定的なオプトアウトおよびその他の条件が適用されることに注意してください。 W3C コミュニティおよびビジネスグループについて詳しく確認してください。

1. はじめに

この節は非規範的です。

Cookie とストレージがトップフレームサイトによってパーティション化される Web では、[Protected-Audience] API によって提供される インタレストグループベースの広告や、Conversion Lift Measurements) など、同じページ内に異なるパーティションからのコンテンツを表示できると有用な場合があります。これは、異なる パーティションのデータを含む Document が互いに分離され、 同じページ上に視覚的に合成されていても通信できない場合にのみ、プライバシーを保護する形で実現できます。 iframe 要素は、埋め込み元との意図的な通信チャネルを多数提供しているため、これには適していません。この仕様は、 fencedframe 要素を導入します。これは、ページ上に Document を埋め込むための新しい要素であり、 Document とその埋め込み元との間の通信を明示的に防ぎます。

この仕様は、新しい要素、その Web プラットフォームの残りの部分との統合 (§ 3 HTML との統合 および § 4 他の仕様との相互作用 を含む)、ならびに 通常の URL や "src" 属性の代わりに fencedframe への主要な入力となる FencedFrameConfig などの補助プリミティブを定義します。この仕様は新しい要素とそのプラットフォームの残りの部分との統合を 定義するものであるため、十分なクロスブラウザーサポートがあることを前提として、最終的に [HTML] に統合されることを 目標とした、その標準への大きなモンキーパッチとして読むべきです。

2. fencedframe 要素

カテゴリー:
フローコンテンツ.
句内容.
埋め込みコンテンツ.
インタラクティブコンテンツ.
パルパブルコンテンツ.
この要素を使用できるコンテキスト:
埋め込みコンテンツが期待される場所。
内容モデル:
なし.
内容属性:
グローバル属性
width — 水平方向の寸法
height — 垂直方向の寸法
allowfencedframe の 内容に適用される 権限ポリシー
アクセシビリティ上の考慮事項:

TODO

DOM インターフェイス:
[Exposed=Window]
interface HTMLFencedFrameElement : HTMLElement {
  [HTMLConstructor] constructor();

  [CEReactions] attribute FencedFrameConfig? config;
  [CEReactions] attribute DOMString width;
  [CEReactions] attribute DOMString height;
  [SameObject, PutForwards=value] readonly attribute DOMTokenList sandbox;
  [CEReactions] attribute DOMString allow;
};

fencedframe 要素は、その fenced navigable表します

fencedframe 要素の子孫は何も表しません。

fencedframeconfig を持ちます。これは FencedFrameConfig または null です。初期値は null です。

fencedframefencedframe sandboxing flag set を持ちます。これは sandboxing flag set です。fencedframe sandboxing flag set 内のどのフラグが 特定の時点で設定されているかは、 fencedframe 要素の sandbox 属性によって決まります。

creation sandboxing flags を決定する アルゴリズムを変更します。union 内の第2ステップを、次の2つのステップに書き換えます。
fencedframe 要素 element が、非 null の browsing context を持つ文書に 挿入されたとき、次の手順を実行します:
  1. nested traversable を、element のために 新しい nested traversable を作成する結果とします。

  2. nested traversableloading mode を "fencedframe" に設定します。

  3. elementsandbox 属性を持つ場合、その属性値と elementfencedframe sandboxing flag set を与えて、sandboxing directive を構文解析するを実行します。

通常の 子 navigable の作成トップレベル traversable の作成中に行うように URL and history update steps を呼び出す必要はありませんが、新しい navigable 内で History.length を初期化する仕組みは依然として必要です。これは HTML Standard に存在する既存の課題です: https://github.com/whatwg/html/issues/9030

fencedframe 要素が文書から 削除されたとき、ユーザーエージェントは次の手順を実行しなければなりません:
  1. TODO: nested traversable を破棄する。

  2. 並列にDocumentnode navigabletop-level traversable を与えて、 すべての fenced frame 子孫の untrusted network status を再計算する

config IDL 属性の取得手順は、 thisconfig を返すことです。

config IDL 属性の設定手順は次のとおりです:
  1. this接続されていない場合:

    1. Assert: thisfenced navigable は null です。

      注: これは、要素が DOM から削除されると、 その削除手順によって fenced navigable が ただちに破棄されるため成り立ちます。

  2. instance を、this関連するグローバルオブジェクトbrowsing contextfenced frame config instance とします。

  3. instance が null でなく、かつその untrusted network statusenabled でない場合、return します。

  4. navigation url or urn を、与えられた FencedFrameConfigurl が null でない場合はその url とし、そうでない場合は、与えられた FencedFrameConfigurn とします。

  5. navigation url or urn が failure である場合、return します。

  6. shared storage context を、与えられた FencedFrameConfigsharedStorageContext とします。

  7. elementfenced navigablenavigation url or urn へ、elementnode document を用いて ナビゲートします。その際、historyHandling を "replace" に、referrerPolicy"no-referrer" に設定し、shared storage context を指定します。

    注: 通常の ナビゲーションフローに対する fencedframe 固有の 変更については、§ 3.8.5 実際のナビゲーション変更を参照してください。

テスト

allow 属性は、指定された場合、 Documentpermissions policyfencedframefenced navigable 内で初期化されるときに 使用される container policy を決定します。その値は シリアル化された permissions policy でなければなりません。 [PERMISSIONS-POLICY]

sandbox 属性は、指定された場合、 fencedframe によってホストされる任意のコンテンツに対して、追加の制限の集合を有効にします。 その値は、ASCII 大文字小文字を区別しない 一意な空白区切りトークンの順序なし集合 でなければなりません。許可される値は次のとおりです:

IDL 属性 allow および sandbox は、 同名のそれぞれの内容属性を 反映しなければなりません。

sandboxDOMTokenList に対応するトークンは、 sandbox 属性で定義され、ユーザーエージェントが対応する許可値です。

次の attribute change steps は、element, localName, oldValue, value, および namespace を与えられ、すべての fencedframe 要素に対して使用されます:
  1. Assert: namespaceHTML namespace です。

  2. localNamesandbox である場合:

    1. value が null である場合、elementfencedframe sandboxing flag set空にします。

    2. そうでない場合、valueelementfencedframe sandboxing flag set を与えて sandboxing directive を構文解析するを実行します。

2.1. 寸法属性

この節では、[HTML]Dimension attributes 節へのモンキーパッチを詳述します。その節は、 fencedframe を、独自の width および height 寸法属性が [HTML] で定義される一般的な width および height 寸法属性に適用されるものと同じ作成者要件を持つ要素の一覧に含めるよう更新されます。

さらに、IDL 属性 width および height は、 同名のそれぞれの内容属性を 反映しなければなりません。

2.2. Fenced frame config mapping

traversable navigable は、fenced frame config mapping を持ちます。これは fenced frame config mapping です。

注: この mapping は navigation 中に参照され、私たちが口語的に URN-generating APIs または config-generating APIs と呼ぶものによって書き込まれます。これらは、 fencedframe および iframe 要素のナビゲーションに使用するため、 urn uuidsfenced frame configs の両方を生成します。 たとえば [Protected-Audience] API および [Shared-Storage] 仕様を参照してください。

fenced frame config mapping は3つのサブマッピングを持ちます:

pending config mapping

map。その keysurn uuids であり、 その valuesfenced frame configs です

finalized config mapping

map。その keysurn uuids であり、 その valuesfenced frame configs です

nested config mapping

map。その keysurn uuids であり、 その valuesfenced frame configs です

注: pending configs の目的は、config-generating APIs が、 タイミングサイドチャネルを作成しない方法で configs を非同期に解決できるようにすることです。すなわち、 pending config は、cross-site data に依存する計算の前に、一定時間で Web プラットフォームへ返されます。 このプライバシーは、pending config がいつ finalized されたかを Web プラットフォームが識別できないことに 依存するため、すべての visibilities および transparent fields の値が、pending config から finalized config へ変化しないことが重要です。これらは FencedFrameConfig の getters を通して検査できるためです。したがって、Web プラットフォームに作成・公開された FencedFrameConfig は、 configurn によって 表される fenced frame config が技術的に "pending" であり、後で完全に 解決を終えるとしても、実質的に不変です。

fenced frame config mapping は、maximum number of configs を持ちます。これは実装定義です。maximum number of configs は、 非負数または infinity であってよいです。

注: maximum number of configs の 挙動を指定することは重要です。なぜなら、その意味論はプライバシー上センシティブな方法で config-generating APIs と相互作用しうるためです。

高いレベルでは、fenced frame configfenced frame config mapping に 保存するために、config の作成者はまず pending config を保存し、その後 pending config を finalized config に 変換しなければなりません。これらの手順は次のとおりです:

fenced frame config mapping mapping 内に store a pending config するには、fenced frame config config を与えて、次の手順を実行します:
  1. pendingMapping を、mappingpending config mapping とします。

  2. pendingMappingsize + mappingfinalized config mappingsizemappingmaximum number of configs である場合、failure を返します。

  3. urn を、ランダムに生成された urn uuid とします。

  4. Assert: urnpendingMapping 内に 存在しません。

  5. pendingMapping[urn] を config設定します。

  6. urn を返します。

fenced frame config mapping mapping 内で finalize a pending config するには、 urn uuid urn および fenced frame config config を与えて、次の手順を実行します:
  1. pendingMapping を、mappingpending config mapping とします。

  2. finalizedMapping を、mappingfinalized config mapping とします。

  3. pendingMapping[urn] が 存在しない場合、 failure を返します。

  4. pendingMapping[urn] を 削除します。

  5. finalizedMapping[urn] を config設定します。

fenced frame config mapping mapping 内に store nested configs するには、 nested configs nestedConfigs を与えて、次の手順を実行します:
  1. nestedMapping を、mappingnested config mapping とします。

  2. nestedConfigs が null である場合、return します。

  3. nestedConfigs の各 urnconfig について 反復します:

    1. nestedMapping[urn] を config設定します。

    2. nestedMapping[urn] の is ad component を true に設定します。

fenced frame config mapping mapping 内で find a config するには、urn uuid urn を与えて、次の手順を実行します:
  1. nestedMapping を、mappingnested config mapping とします。

  2. pendingMapping を、mappingpending config mapping とします。

  3. finalizedMapping を、mappingfinalized config mapping とします。

  4. nestedMapping[urn] が 存在する場合、 その値を返します。

  5. pendingMapping[urn] が 存在する場合、 それが 存在しなくなるまで待ちます。

  6. finalizedMapping[urn] が 存在する場合、 その値を返します。

  7. failure を返します。

2.3. Fenced frame configs

2.3.1. はじめに

この節は非規範的です。

fencedframe 要素の重要な特徴は、Web プラットフォーム API が、セキュリティおよびプライバシー上の理由から、 他の実行コンテキストがこの構成を変更または検査する能力を制限する方法で、フレームの挙動を構成できることです。 たとえば、[Protected-Audience] API は cross-site data を用いたデバイス上の広告オークションを実行します。そして、オークションに勝った広告を、 API 呼び出し元がどの広告が勝ったかを知ることなく、また広告が読み込まれる環境を操作できることなく、 フレームに読み込めることが重要です。

これは "fenced frame config" の概念を用いて実現します。 fenced frame config は、 fencedframe 要素へ読み込むことができ、結果として生じる環境を指定するフィールドの集合です。 Fenced frame configs は、特定の Web プラットフォーム API によってのみ 作成でき、スクリプトによって構築または変更することはできません。それらのフィールドには "visibilities" も含まれます。これは、 FencedFrameConfig インターフェイスを通して検査されたときに、そのフィールドを "redacted" すべきかどうかを指示します。 [Protected-Audience][Shared-Storage] API のような Config-generating APIs は、各フィールドのプライバシー上の影響を検討したことを保証するため、 それらの fenced frame configs のすべてのフィールドに値を指定しなければなりません。ただし、それらの値を null に設定することは 選択できます。

fencedframefenced frame config へナビゲートするたび、それは新しい fenced frame config instance としてインスタンス化されます。 これは fenced navigable 内の特定の browsing context group を管理します。

2.3.2. ユースケース

広告オークションを通して作成された広告のレンダリング:

広告オークション API はオークションを実行し、勝者となる広告を決定します。勝者の広告に関する詳細は 埋め込み元から隠されなければならず、埋め込みコンテキストは fencedframe の環境へ影響を及ぼすことを許されません。そのいずれかが可能であると、fenced frame 境界を越えて情報が流れることになり、共謀する当事者が cross-site data を結合してユーザーのプロファイルを 構築することを可能にします。これを防ぐため、広告オークション API は、 埋め込みコンテキストに対して不透明な基底 URL を持つ fenced frame config構築します。fenced frame config は、フレームの container size および content size が何でなければならないか、またフレームの permissions policy が何でなければならないかに関する 制限とともにも構築されます。これらはフィンガープリンティングのベクトルとして使用されうるためです。

パーソナライズされた支払いボタンの表示:

EC サイトは、"Pay now" ボタンを持つ fencedframe を埋め込みます。EC サイトは、ユーザーのクレジットカードに関する情報をブラウザーに first-party storage として 保存します。最初は、 Documentfencedframe 内でホストされていても、first-party cookie/storage へのアクセスを持たないため、クレジットカード情報が cross-site data と結合されるリスクなしに、情報は自由に出入りできます。そのため、fenced frame は、 プライバシーを損なうことなく FencedFrameConfig コンストラクターを用いて Web プラットフォームから直接構築できます。この時点では、クレジットカードデータへ まだアクセスできないため、ボタンにはパーソナライズされたデータは含まれません。 Document は、 disableUntrustedNetwork() によってすべてのネットワークアクセスを無効にした後にのみ、そのクレジットカードデータを読み取ることができます。 これにより、そのデータが fenced frame の外へ流出すること、および cross-site data と結合されてユーザー プロファイルを構築することが防止されます。それを行うと、ボタンは、EC プラットフォームの origin に対する first-party storage partition の中でブラウザーに保存されている、ユーザーのクレジットカード番号の下4桁を 表示します。

2.3.3. fenced frame config struct

ここで、いくつかの予備的な型を確立します:

visibility は、"opaque" または "transparent" のいずれかです。

size は、次の items を持つ struct です:

width

非負整数

height

非負整数

TODO: これらのメンバーに異なる数値型を用いることを検討する。

interest group descriptor は、次の items を持つ struct です:

owner

origin

name

string

permissions policy behavior は、"fixed" または "flexible" のいずれかです。

default fenced frame effective sandboxing flags は、次のフラグを持つ sandboxing flag set です:

pending event は、次の items を持つ struct です:

destination

FenceReportingDestination

event

destination event

request initiator

origin

initiator referrer policy

referrer policy

reporting destination info は、次の items を持つ struct です:

reporting url declarer origin

origin

reporting url map

map。その keysstrings であり、 その valuesURLs です

reporting macro map

null、または map。その keysstrings であり、 その valuesstrings です

fenced frame reporting mapmap であり、その keysFenceReportingDestination であり、その values は次のいずれかです:

注: この表現は、 config-generating APIs が fenced frame config を構築して返した後(さらには config が読み込まれ、イベント報告が fenced frame 内で生成された後)に、reporting destinations の値を非同期に解決することでレイテンシーを削減できるように することを意図しています。config-generating API が fenced frame reporting map を宣言するとき、 特定の destinations を空の list を用いて pending としてマークし、後のために map への参照を保持できます。fenced frame がまだ pending である destination へ イベントを報告しようとした場合、 後で処理するためにイベントをこの list に保存します。 config-generating API またはそのコールバックが、保持していた参照を通して最終的に reporting destination を finalize すると、 list に保存されたすべての pending events を処理します。destination が決して finalized されない場合、その pending events は送信されません。

untrusted network status は、"enabled"、 "disabled for this tree"、または "disabled for this tree and fenced subtrees" のいずれかです。

注: Disabled for this tree は最終的な ネットワーク遮断状態ではありません。これは、fenced frame 境界を越えていないフレームツリー内のすべてのフレームが ネットワークアクセスを取り消されたものの、少なくとも1つの sub-fenced frame tree がまだネットワークアクセスを 持っている中間状態です。この段階では、取得した情報がネットワークアクセスを持つ sub-fenced frame を通して 依然として外部流出しうるため、特別な API アクセスは得られません。すべての sub-fenced frames も untrusted network を無効化されると、fenced frame の status は最終的な disabled for this tree and fenced subtrees 状態に切り替わります。

finalize a reporting destination するために、fenced frame reporting map reporting mapFenceReportingDestination destinationorigin reporting url declarer originmap destination map(その keysstrings、その valuesurls)、および macro map(null、または map で、その keysstrings、その valuesstrings)を与えて、次の 手順を実行します:
  1. Assert: reporting map[destination] は list です(すなわち destination の metadata はまだ finalized されていません)。

  2. pending event listreporting map[destination] とします。

  3. reporting map[destination] を、次の items を持つ struct設定します:

    reporting url declarer origin

    reporting url declarer origin

    reporting url map

    destination map

    reporting macro map

    macro map

  4. pending event list の各 pending event について 反復します:

    1. destination mappending eventeventpending eventrequest initiator、および pending eventinitiator referrer policy を用いて Send a beacon します。

fenced frame reporting metadata は、次の items を持つ struct です:

fenced frame reporting map

fenced frame reporting map

direct seller is seller

boolean、初期値は true

allowed reporting origins

null、または list of originsdestination URL event report の destination になるには、origin がこの list 内に存在しなければなりません。

attempted custom url report to disallowed origin

boolean、初期値は false

automatic beacon event type は、"reserved.top_navigation_start"、 "reserved.top_navigation_commit"、 または "reserved.top_navigation" のいずれかです。

reserved.top_navigationreserved.top_navigation_commit の以前の 命名です。 両者は同じことを行いますが、 reserved.top_navigation は将来削除される予定であり、新しいコードでは使用すべきではありません。

fenced frame reporter は、次の items を持つ struct です:

fenced frame reporting metadata reference

fenced frame reporting metadata への mutable reference TODO: ポインター/参照をより仕様らしい方法で扱う

destination enum event は、次の items を持つ struct です:

type

string

data

string

attributionReportingEnabled

boolean

attributionReportingContextOrigin

origin

destination URL eventURL です。

automatic beacon event は、次の items を持つ struct です:

type

automatic beacon event type

data

string

attributionReportingEnabled

boolean

attributionReportingContextOrigin

origin

destination event は、 destination enum eventdestination URL event、または automatic beacon event のいずれかです。

reporting destination info destination infodestination event eventorigin request initiator、および referrer policy initiator referrer policy を用いて send a beacon するために、次の手順を実行します:
  1. destination url を空の string とします。

  2. attributionReportingEligibility を "unset" とします。

  3. processResponse を null とします。

  4. useParallelQueue を false とします。

  5. eventdestination enum event または automatic beacon event のいずれかである場合:

    1. destination mapdestination inforeporting url map とします。

    2. eventType を、event がどちらの variant であるかに応じて、 eventdestination type、または automatic type のいずれかとします。

    3. destination map[eventType] が 存在しない場合、 return します。

    4. destination urldestination map[eventType] に設定します。

    5. eventattributionReportingEnabled が true であり、かつ eventattributionReportingContextOriginsuitable である場合:

      1. eventeventTypeautomatic beacon event type 値のいずれかと一致する場合、attributionReportingEligibility を "navigation-source" に設定します。

      2. そうでない場合、attributionReportingEligibility を "event-source" に設定します。

      3. processResponse を、response response を与えられた 次の手順に設定します:

        1. fenced を true とします。

        2. eventattributionReportingContextOriginattributionReportingEligibilityfenced、および response を用いて process an attribution eligible response を実行します。

      4. useParallelQueue を true に設定します。

  6. そうでない場合:

    1. Assert: eventdestination URL event です。

    2. macro mapdestination inforeporting macro map とします。

    3. macro map が null である場合、return します。

    4. destination urlevent に設定します。

    5. destination url を、macro map を用いて destination urlsubstituting macros した結果とします。

  7. 任意で return します。

    注: この 実装定義の条件は、たとえばユーザーのオプトアウトや destination urlsite登録済みでないことなど、さまざまな理由で ユーザーエージェントが beacon を破棄できるようにすることを意図しています。

  8. request を、次のプロパティを持つ新しい request とします:

    method

    eventdestination enum event である場合は POST、そうでない場合は GET

    URL

    destination url

    header list

    header を含む新しい header list。その name"Content-Type"、その value"text/plain" です。

    body

    eventdestination enum event である場合は、 その sourceeventdata である body、そうでない場合は null。

    client

    null

    service-workers mode

    "all"

    既定値は "all" であるため、技術的にはここで何も設定する必要はありません。しかし、 他の beacons のように、ここでは service workers をスキップする方が適切かもしれないことを思い出すために設定しています。

    origin

    eventdestination URL event である場合は request initiator、そうでない場合は destination inforeporting url declarer origin

    注: destination URL event の reporting destination は、 reportEvent() を呼び出す Document によって決定されます。一方、 destination enum eventautomatic beacon event の reporting destinations は、この Document を読み込んだ fenced frame config を作成した worklet 内で決定されます。クロスサイトリクエストフォージェリを防ぐため、 origin を、reporting destination を決定した Document または worklet の origin に設定します。

    referrer

    request initiator

    referrer policy

    initiator referrer policy

    mode

    "cors"

    credentials mode

    "omit"

    Attribution Reporting eligibility

    attributionReportingEligibility

  9. requestFetch します。その際、processResponse が null でない場合は processResponseprocessResponse とし、 useParallelQueueuseParallelQueue とします。

    注: このアルゴリズムは、 並列に実行されている間、または Document の メイン スレッド上で実行されている間に呼び出される可能性があります。並列に呼び出された場合を正しく扱うため、任意の response 処理アルゴリズムが使用されるときには、 fetchuseParallelQueue を true に設定して呼び出します。 それ以外の場合、このアルゴリズムが他の事例で 並列に実行されていても、そうする必要はありません。

fenced frame reporter reporter を用いて report an event するために、FenceReportingDestination destinationorigin request initiatorreferrer policy initiator referrer policy、および destination event event を与えて、次の手順を実行します:
  1. metadatareporterfenced frame reporting metadata reference とします。

  2. destination"direct-seller" である場合:

    1. metadatadirect seller is seller が true である場合、 destination"seller" に設定します。

    2. そうでない場合、destination"component-seller" に設定します。

  3. eventdestination URL event である場合:

    1. eventorigin が、metadataallowed reporting origins 内のどのエントリとも same origin でない場合:

      1. metadataattempted custom url report to disallowed origin を true に設定します。

    2. metadataattempted custom url report to disallowed origin が true である場合、return します。

  4. reporting map を、metadatafenced frame reporting map への参照とします。

  5. reporting map[destination] が 存在しない場合、return します。

  6. reporting map[destination] が list である場合:

    1. newEvent を、次を持つ新しい pending event とします:

      destination

      destination

      event

      event

      request initiator

      request initiator

      initiator referrer policy

      initiator referrer policy

    2. newEventreporting map[destination] に 追加します。

    3. Return します。

      注: pending event は非同期に送信されます。

  7. Assert: reporting map[destination] は map です(すなわち destination の metadata は finalized 済みです)。

  8. reporting map[destination]、eventrequest initiator、および initiator referrer policy を用いて Send a beacon します。

fenced frame reporter reporter を用いて report a private aggregation event するために、 string event を与えて、次の手順を実行します:
  1. eventeventType が "reserved." で 始まる場合、return します。

  2. reporter event TODO: ここを埋める

exfiltration budget metadata は、次の items を持つ struct です:

origin

origin

amount to debit

非負の妥当な浮動小数点数

exfiltration budget metadata reference は、次の items を持つ struct です:

origin

origin

amount to debit reference

非負の妥当な浮動小数点数への mutable reference TODO: ポインター/参照をより仕様らしい方法で扱う

partition nonce実装定義の値です。

注: これは network partition key に似ており、Fetch によって使用されます。

fenced frame config は、次の items を持つ struct です:

mapped url

次の items を持つ struct:

value

URL

visibility

visibility

container size

null、または size

content size

null、または次の items を持つ struct:

value

size

visibility

visibility

interest group descriptor

null、または次の items を持つ struct:

value

interest group descriptor

visibility

visibility

on navigate callback

null、または一連の手順

effective sandboxing flags

null、または次の items を持つ struct:

value

sandboxing flag set

visibility

visibility

effective enabled permissions

null、または次の items を持つ struct:

value

list of policy-controlled features

visibility

visibility

注: 非 null の場合、これは、この config の生成者が、 この config へナビゲートする fencedframe の内部で排他的に有効化されていることに依存する list of policy-controlled features です。具体的には、 ナビゲーションが成功するためには、この list 内の各 feature は、この config へナビゲートするとき、 fencedframefenced navigablepermissions policyinherited policy によって有効化されて いなければなりません。この list 内の features は強制的に有効化されるのではなく、 前述の inherited policy に影響を与える 埋め込み元環境が、これらの必須 features をサポートするのに十分緩和されているかを確認するために使用されます。 これらの features のいずれかについて inherited policy value が "Disabled" である場合、この config へのナビゲーションは失敗します。この list に 含まれていない任意の policy-controlled feature は、この config へナビゲートする fencedframe 内で "Disabled" にはなりません。

fenced frame reporting metadata

null、または次の items を持つ struct:

value

fenced frame reporting metadata

visibility

visibility

exfiltration budget metadata

null、または次の items を持つ struct:

value

exfiltration budget metadata

visibility

visibility

nested configs

null、または次の items を持つ struct:

value

list of fenced frame configs

visibility

visibility

embedder shared storage context

null、または string

is ad component

boolean、初期値は false。

注: true の場合、この fenced frame config は ad component を表します。ad component は複数の部分から構成される広告を構築するために使用できます。 Protected Audience explainer を参照してください。ad component では、イベント報告の処理が異なります。 これを説明する Fenced Frame Ads Reporting explainer を参照してください。

cross-origin reporting allowed

boolean、初期値は false。

2.3.4. fenced frame config instance struct

fenced frame config instance は、次の items を持つ struct です:

mapped url

URL

container size

null、または size

content size

null、または size

interest group descriptor

null、または interest group descriptor

on navigate callback

null、または一連の手順

effective sandboxing flags

null、または sandboxing flag set

permissions policy behavior

permissions policy behavior

effective enabled permissions

null、または list of policy-controlled features

fenced frame reporter

null、または fenced frame reporter

exfiltration budget metadata reference

null、または exfiltration budget metadata reference

nested configs

null、または map。その keysurn uuids であり、 その valuesfenced frame configs です

partition nonce

partition nonce

embedder shared storage context

null、または string

is ad component

boolean

untrusted network status

untrusted network status。 初期値は enabled です。

on network disabled promises

map。その keysglobal objects であり、valuesPromiseslists です。初期状態では空です。

注: これは、 disableUntrustedNetwork() 中に作成された、さまざまな globals からの各種 Promises を格納します。ここに格納することで、 fencedframe とその子孫の fenced frames のネットワークアクセスが完全に取り消されたとき (すなわち untrusted network statusdisabled for this tree and fenced subtrees であるとき)に、それらすべてを一度に resolve できます。

cross-origin reporting allowed

boolean。初期値は false です。

fenced frame config config を与えて instantiate a config するには、次のメンバーを持つ fenced frame config instance を返します:
mapped url

configmapped urlvalue

container size

configcontainer size

content size

null である場合は configcontent size、そうでない場合は configcontent sizevalue

interest group descriptor

null である場合は configinterest group descriptor、 そうでない場合は configinterest group descriptorvalue

on navigate callback

configon navigate callback

effective sandboxing flags

null である場合は configeffective sandboxing flags、 そうでない場合は configeffective sandboxing flagsvalue

permissions policy behavior

configeffective enabled permissions が null である場合は flexible、そうでない場合は fixed

effective enabled permissions

null である場合は configeffective enabled permissions、そうでない場合は configeffective enabled permissionsvalue

fenced frame reporter
  1. configfenced frame reporting metadatavalue が null である場合、null に設定します。

  2. そうでない場合、次のメンバーを持つ fenced frame reporter に 設定します:

    fenced frame reporting metadata reference

    configfenced frame reporting metadatavalue への参照

exfiltration budget metadata reference
  1. configexfiltration budget metadata が null である場合、null に設定します。

  2. そうでない場合、exfiltration budget metadata reference に設定します:

    origin

    configexfiltration budget metadatavalueorigin

    amount to debit reference

    configexfiltration budget metadatavalueamount to debit への参照

nested configs
  1. confignested configs が null である場合、 null に設定します。

  2. そうでない場合:

    1. results を新しい map とします。

    2. confignested configsvalue の各 nested config について 反復します:

      1. urn を、ランダムに生成された urn uuid とします。

      2. results[urn] を nested config設定します。

    3. nested configsresults に設定します。

partition nonce

ランダムで一意な partition nonce

embedder shared storage context

configembedder shared storage context

is ad component

configis ad component

cross-origin reporting allowed

configcross-origin reporting allowed

untrusted network status

enabled

on network disabled promises

空の map

browsing context は、fenced frame config instance を持ちます。 これは fenced frame config instance または null であり、 初期値は null です。

この fenced frame config instance は 本来は browsing context group 上に存在すべきです。しかし、third-party cookies が 廃止されるまで、 この仕様は fencedframe の多くの概念を iframe 要素上でもサポートします。これにより、短期的には、通常の content navigablefenced frame config を読み込め、その結果、その navigation に対応する fenced frame config instance へアクセスできる必要があります。

2.3.5. FencedFrameConfig インターフェイス

fencedframe 要素への主要な入力の1つが、 内部の fenced frame config struct に対応する FencedFrameConfig インターフェイスです。

enum OpaqueProperty {"opaque"};

[Exposed=Window, Serializable]
interface FencedFrameConfig {
  constructor(USVString url);
  undefined setSharedStorageContext(DOMString contextString);
};

FencedFrameConfig は次を持ちます:

注: config の url が null になるのは、urn が 与えられた場合だけです。

FencedFrameConfig(url) コンストラクターメソッドの手順は次のとおりです:
  1. config を新しい FencedFrameConfig オブジェクトとします。

  2. configurl を、url に対して URL parser を実行した結果に設定します。

  3. config を返します。

setSharedStorageContext(contextString) メソッド手順は、thissharedStorageContextcontextString に設定することです。
FencedFrameConfig オブジェクトは serializable objects です。その serialization steps は、value, serialized, および forStorage を与えられ、次のとおりです:
  1. forStorage が true である場合、DataCloneError DOMExceptionthrow します。

  2. serialized.[[Url]] を valueurl に設定します。

  3. serialized.[[Urn]] を valueurn に設定します。

  4. serialized.[[SharedStorageContext]] を valuesharedStorageContext に設定します。

その deserialization steps は、serialized, value, および targetRealm を与えられ、次のとおりです:
  1. valueurlserialized.[[Url]] に初期化します。

  2. valueurnserialized.[[Urn]] に初期化します。

  3. valuesharedStorageContextserialized.[[SharedStorageContext]] に初期化します。

注: 導入を容易にするため、 2026年まで、API navigator.deprecatedReplaceInURN() をサポートします。これは、与えられた urn uuid または FencedFrameConfig に対応する mapped url へ macros を代入できるようにします。

注: 導入を容易にするため、 third party cookie の廃止まで、 API navigator.deprecatedURNtoURL() をサポートします。これは、与えられた urn uuid または FencedFrameConfig に対応する mapped url を返します。

typedef (USVString or FencedFrameConfig) UrnOrConfig;

partial interface Navigator {
  Promise<undefined> deprecatedReplaceInURN(
    UrnOrConfig urnOrConfig, record<USVString, USVString> replacements);
  Promise<USVString> deprecatedURNtoURL(
    UrnOrConfig urnOrConfig, optional boolean send_reports = false);
  sequence<USVString> adAuctionComponents(unsigned short numAdComponents);
};
ordered mapstringkeysstringvalues を持つ)macrosstring stringsubstitute macros するには、次の手順を実行します:
  1. TODO: これを仕様化するmacros の keys を、対応する values とともに string に代入し、 新しい string を返します。再帰的な代入はありません。

deprecatedReplaceInURN(urnOrConfig, replacements) メソッド手順は次のとおりです:
  1. urn を null とします。

  2. urnOrConfigUSVString である場合、urnurnOrConfig に設定します。

  3. そうでない場合、urnurnOrConfigurn に設定します。

  4. urn が妥当な urn uuid でない場合(すなわち urn uuid の Section 3 の ABNF に合格しない場合)、 TypeErrorthrow します。

  5. replacements の各 key → _ について 反復します:

    1. key${ または %%始まらない場合、 TypeErrorthrow します。

    2. key} または %%終わらない場合、 TypeErrorthrow します。

  6. p新しい promise とします。

  7. globalthisrelevant global object とします。

  8. 次の手順を 並列に実行します:

    1. mappingglobalnavigabletraversable navigablefenced frame config mapping とします。

    2. config を、mapping 内で urn により config を見つける結果とします。

    3. config が failure である場合、global を与えて DOM manipulation task source 上に global task をキューし、 pundefinedresolve して、これらの手順を中止します。

    4. substitutedUrl を、replacements を用いて configmapped urlvaluesubstituting macros した結果とします。

    5. configmapped urlvaluesubstitutedUrl に設定します。

    6. global を与えて DOM manipulation task source 上に global task をキューし、 pundefinedresolve します。

  9. p を返します。

テスト
deprecatedURNtoURL(urnOrConfig, send_reports) メソッド 手順は次のとおりです:
  1. urn を null とします。

  2. urnOrConfigUSVString である場合、urnurnOrConfig に設定します。

  3. そうでない場合、urnurnOrConfigurn に設定します。

  4. urn が妥当な urn uuid でない場合(すなわち urn uuid の Section 3 の ABNF に合格しない場合)、 TypeErrorthrow します。

  5. p新しい promise とします。

  6. globalthisrelevant global object とします。

  7. 次の手順を 並列に実行します:

    1. mappingglobalnavigabletraversable navigablefenced frame config mapping とします。

    2. mappingfinalized config mapping[urn] が 存在しない場合、global を与えて DOM manipulation task source 上に global task をキューし、 pundefinedresolve して、これらの手順を中止します。

    3. configmappingfinalized config mapping[urn] とします。

    4. global を与えて DOM manipulation task source 上に global task をキューし、 pconfigmapped urlvalueresolve します。

    5. send_reports が true である場合、configon navigate callback 内の 手順を実行します。

  8. p を返します。

テスト
adAuctionComponents(numAdComponents)
  1. instancethisrelevant global objectbrowsing contextfenced frame config instance とします。

  2. instance が null である場合、InvalidStateError DOMExceptionthrow します。

  3. thisrelevant settings objectorigininstancemapped urloriginsame origin でない場合、InvalidStateError DOMExceptionthrow します。

  4. maxAdComponents を 40 とします。

  5. numAdComponents > maxAdComponents である場合、numAdComponentsmaxAdComponents に設定します。

  6. adComponentsURNs を、urns の空の list とします。

  7. instancenested configs の各 urnconfig について 反復します:

    1. numAdComponents が 0 と等しい場合、 break します。

    2. urnadComponentsURNs追加します。

    3. numAdComponentsnumAdComponents − 1 に設定します。

  8. adComponentsURNs を返します。

2.4. Fence インターフェイス

フェンス付きフレームに固有のいくつかの API は、Fence インターフェイス上で定義されます。

enum FenceReportingDestination {
  "buyer",
  "seller",
  "component-seller",
  "direct-seller",
  "shared-storage-select-url",
};

dictionary FenceEvent {
  // This dictionary has two mutually exclusive modes that aren’t represented as
  // distinct IDL types due to distinguishability issues:
  //
  // When reporting to a preregistered destination (specified by enum), the following
  // properties are used:
  DOMString eventType;
  DOMString eventData;
  sequence<FenceReportingDestination> destination;

  // Determines if this data can be sent in a reportEvent() beacon or automatic
  // beacon that originates from a document that is cross-origin to the mapped
  // URL of the fenced frame config that loaded this frame tree.
  // Note that automatic beacon data can only be set from documents that are
  // same-origin to the fenced frame config’s mapped URL, so this effectively
  // opts in the data to being used in a cross-origin subframe.
  boolean crossOriginExposed = false;

  // When setting event data to be used later in an automatic beacon, the
  // following properties are used:
  boolean once = false;

  // When reporting to a custom destination URL (with substitution of macros defined by
  // the Protected Audience buyer), the following property is used:
  USVString destinationURL;
};

typedef (FenceEvent or DOMString) ReportEventType;

[Exposed=Window]
interface Fence {
    undefined reportEvent(optional ReportEventType event = {});
    undefined setReportEventDataForAutomaticBeacons(optional FenceEvent event = {});
    sequence<FencedFrameConfig> getNestedConfigs();
    Promise<undefined> disableUntrustedNetwork();
    undefined notifyEvent(Event event);
};
reportEvent(event) メソッド手順は次のとおりです:
  1. document を、thisrelevant global objectassociated Document とします。

  2. documentfully active でない場合、SecurityError DOMExceptionthrow します。

  3. instancethisrelevant global objectbrowsing contextfenced frame config instance とします。

  4. instance が null である場合、return します。

  5. instanceis ad component が true である場合、 return します。

  6. instancefenced frame reporter が null である場合、return します。

  7. request initiator を、thisrelevant settings objectorigin とします。

  8. initiator referrer policydocumentpolicy containerreferrer policy とします。

  9. eventDOMString である場合:

    1. thisrelevant settings objectorigininstancemapped urloriginsame origin でない場合、return します。

    2. instancefenced frame reporter を用い、event を指定して、report a private aggregation event を実行します。

  10. eventFenceEvent である場合:

    1. eventeventType が "reserved." で 始まる場合、return します。

    2. 次の条件がすべて true である場合:

      その場合、return します。

    3. eventdestinationURL を持つ場合:

      1. eventdestination または eventType または eventData を持つ場合:

        1. TypeErrorthrow します。

      2. destinationURL を、 destinationURL に対して URL parser を実行した結果とします。

      3. 次のいずれかの条件が成り立つ場合、TypeErrorthrow します:

        • destinationURL が failure である;

        • destinationURLscheme が "https" でない;

      4. instancefenced frame reporter を用い、buyer, request initiator, initiator referrer policy、および eventdestinationURL である destination URL event を指定して、report an event を実行します。

    4. そうでない場合:

      1. eventdestination を持たない、または eventeventType を持たない場合:

        1. TypeErrorthrow します。

      2. attributionReportingEnabled を、document が "attribution-reporting" feature を 使用することを許可されているかどうかを決定した結果とします。

      3. attributionReportingContextOrigin を、documentcontext origin とします。

      4. eventdestination の各 destination について 反復します:

        1. instancefenced frame reporter を用い、destination, request initiator, initiator referrer policy、および次の items を持つ destination enum event を指定して、report an event を実行します:

          type

          eventeventType

          data

          eventeventData (定義されていない場合は空文字列)。

        attributionReportingEnabled

        attributionReportingEnabled

        attributionReportingContextOrigin

        attributionReportingContextOrigin

テスト
setReportEventDataForAutomaticBeacons(event) メソッド手順は次のとおりです:
  1. thisrelevant global objectassociated Documentfully active でない場合、SecurityError DOMExceptionthrow します。

  2. eventdestination を持たない、または eventeventType を持たない場合:

    1. TypeErrorthrow します。

  3. eventeventTypeautomatic beacon event type 値のいずれとも一致しない場合、return します。

  4. instancethisrelevant global objectbrowsing contextfenced frame config instance とします。

  5. instance が null である場合、return します。

  6. thisrelevant settings objectorigininstancemapped urloriginsame origin でなく、かつ eventcrossOriginExposed が false である場合、return します。

  7. instancefenced frame reporter が null である場合、return します。

  8. thisrelevant global objectassociated Documentautomatic beacon data mapping[eventeventType] を、次の items を持つ automatic beacon data に設定します:

    eventData

    eventeventData が定義されており、かつ instanceis ad component が false である場合はそれ、それ以外の場合は空の string

    destination

    eventdestination

    once

    eventonce

    crossOriginExposed

    eventcrossOriginExposed

テスト
getNestedConfigs() メソッド手順は次のとおりです:
  1. instancethisrelevant global objectbrowsing contextfenced frame config instance とします。

  2. instance が null である場合、return します。

  3. thisrelevant settings objectorigininstancemapped urloriginsame origin でない場合、return します。

  4. instancenested configs が null である場合、 return します。

  5. resultsFencedFrameConfigs の空の list とします。

  6. instancenested configs の各 urnconfig について 反復します:

    1. newConfig を、thisrelevant realm で作成された、新しい FencedFrameConfig オブジェクトとし、次を持たせます:

      urn

      urn

      sharedStorageContext

      configembedder shared storage context

    2. newConfigresults追加します。

  7. results を返します。

テスト
notifyEvent(event) メソッド手順は次のとおりです:
  1. thisrelevant global objectassociated Documentfully active でない場合、SecurityError DOMExceptionthrow します。

  2. navigable を、thisrelevant global objectnavigable とします。

  3. 次のいずれかの条件が満たされる場合、SecurityError DOMExceptionthrow します:

  4. thisrelevant global objecttransient activation を持たない場合、return します。

  5. Consume user activation を、thisrelevant global object に対して行います。

  6. parentNavigable を、navigableunfenced parent とします。

  7. parentNavigableactive window を与えて、DOM manipulation task source 上に global task をキューし、次の手順を実行します:

    1. activation notification 手順を実行します。

    2. "fencedtreeclick" という名前の event を発火させます。対象は navigablefenced navigable container です。 event の bubbles および cancelable 属性を true に初期化します。 inner event creation steps を実行するとき、time を、このメソッドのすべての呼び出しで 一貫する 実装定義の値に設定します。

テスト
disableUntrustedNetwork() メソッド手順は次のとおりです:
  1. p新しい promise とします。

  2. thisrelevant global objectassociated Documentfully active でない場合、SecurityError DOMExceptionthrow します。

  3. instancethisrelevant global objectbrowsing contextfenced frame config instance とします。

  4. instance が null である場合、return します。

  5. relevant settings objectorigininstancemapped urloriginsame origin でない場合、pTypeErrorreject します。

  6. thisrelevant global objectnavigabletraversable navigablefenced navigable でない場合、 pundefinedresolve し、p を返します。

  7. globalthisrelevant global object とします。

  8. settingsthisrelevant settings object とします。

  9. For eachrelevant global objectglobal である各 WebSocket object webSocket について、webSocket を与えて fail the WebSocket connection を実行します。

  10. For eachrelevant global objectglobal である各 WebTransport object webTransport について、新たに created された WebTransportError (その source"session")で、webTransportcleanup します。

    注: WebTransportCloseInfo を渡さないことで、WebTransport object は "closed" 状態ではなく "failed" 状態に設定されます。

  11. 次の手順を 並列に実行します:

    1. fencedFrameNonceinstancepartition nonce とします。

    2. credentiallessNonceglobalpage credentialless nonce とします。

    3. settings を用いて、fencedFrameNonce に対して revoke network for a partition nonce を呼び出します。

    4. credentiallessNonce が非 null である場合、settings を用いて credentiallessNonce に対して revoke network for a partition nonce を呼び出します。

    5. instanceuntrusted network statusdisabled for this tree に設定します。

    6. promisesinstanceon network disabled promises とします。

    7. promises[global] が 存在する場合、ppromises[global] に 追加します。

      そうでない場合、promises[global] を list « p » に 設定します。

    8. globalbrowsing contexttop-level traversable を与えて、 すべての fenced frame 子孫の untrusted network status を再計算する

  12. p を返します。

top-level traversable topLevelTraversable を与えて、 すべての fenced frame 子孫の untrusted network status を再計算するには、次の手順を実行します:
  1. Assert: これは 並列に実行されています。

  2. navigables を、topLevelTraversableactive documentinclusive descendant navigables とし、 unfenced を true に設定します。

  3. navigablesWithNetworkChildren を、fenced navigablesset とし、 初期状態では空とします。

  4. navigablesでない間 while:

    1. currentNavigable を、navigables から pop した結果とします。

    2. ongoingNavigationcurrentNavigableongoing navigation とします。

    3. currentNavigablefenced navigable でない場合:

      1. ongoingNavigation が null でない場合:

        1. ancestorFencedRootcurrentNavigabletraversable navigable とします。

        2. ancestorFencedRootfenced navigable である場合、 ancestorFencedRootnavigablesWithNetworkChildrenappend します。

      2. continue します。

    4. configcurrentNavigableactive browsing contextfenced frame config instance とします。

    5. configuntrusted network statusdisabled for this tree and fenced subtrees であり、かつ ongoingNavigation が null である場合、continue します。

    6. networkCutoffReady を、navigablesWithNetworkChildrencurrentNavigable含まず、かつ configuntrusted network statusdisabled for this tree である場合は true、それ以外の場合は false とします。

      注: fenced navigable は、 ネットワーク遮断の準備ができていないと判断された別の fenced frame の unfenced ancestor であるときに、 navigablesWithNetworkChildren に追加されます。

    7. networkCutoffReady が true である場合:

      1. configuntrusted network statusdisabled for this tree and fenced subtrees に設定します。

        注: untrusted network が disabled であることに依存する API は、promises の解決が完了する前であっても、この時点でただちに 使用可能になります。

      2. configon network disabled promises 内の各 globalpromises について 反復します:

        1. promises 内の各 promise について 反復します:

          1. global を与えて、DOM manipulation task source 上に global task をキューし、 promiseundefinedresolve します。

      3. configon network disabled promisesclear します。

    8. networkCutoffReady が false である、または ongoingNavigation が null でない場合:

      1. ancestorFencedRootcurrentNavigableunfenced parenttraversable navigable とします。

      2. ancestorFencedRootfenced navigable である場合、 ancestorFencedRootnavigablesWithNetworkChildrenappend します。

注: Chromium 内部の web platform test は third_party/blink/web_tests/wpt_internal/fenced_frame/disable-untrusted-network-ongoing-navigation.https.html で利用できます。WICG/fenced-frame#192 が解決され次第、 upstream され、ここにリンクされる予定です。

iframe 要素の HTML iframe element removing steps を、 次のように書き換えます:

iframe HTML element removing steps は、 removedNode を与えられ、次のとおりです:

  1. topLevelTraversable を、removedNodecontent navigabletop-level traversable とします。

  2. removedNode を与えて、 Destroy a child navigable します。

  3. 並列にtopLevelTraversable を与えて すべての fenced frame 子孫の untrusted network status を再計算する

set the ongoing navigation アルゴリズムを変更します。 ステップ 2 の後に、次を読む新しいステップを追加します:
  1. newValue が null である場合、並列にnavigabletop-level traversable を与えて、 すべての fenced frame 子孫の untrusted network status を再計算する

ユーザーエージェントは、関連付けられた network revocation nonce set を持ちます。これは set of partition nonces です。また、 network revocation exemption map も持ちます。これは map であり、その keyspartition nonces、その valuessets of URLs です。

注: network revocation exemption map は web platform tests のためだけに使用されます。通常の使用では、常に空です。 この list は、network revocation から特定の URL を exempt する関数呼び出しによって、web platform tests 内で直接変更されます。

これには、WPT web driver に テスト専用関数を追加するための RFC が必要になります。 (WICG/fenced-frame#192) その web driver の変更が行われたら、 disableUntrustedNetwork() に関する既存の Chromium 内部 web platform tests を upstream し、ここにリンクする必要があります。 (WICG/fenced-frame#207)

partition nonce nonce を用い、 relevant settings object settings を与えて、 revoke network for a partition nonce するには、 次の手順を実行します:
  1. Assert: これは 並列に実行されています。

  2. nonce をユーザーエージェントの network revocation nonce setappend します。

  3. settingsfetch groupterminate します。

request request の fetch が、revoked partition nonce によりブロックされなければならないかどうかを決定するには、次の手順を実行します:
  1. key を、 request に対して determine the network partition key を実行した結果とします。

  2. noncekeynonce とします。

  3. ユーザーエージェントの network revocation exemption map[nonce] が 存在し、かつ requestURL がその中に 存在する場合、 allowed を返します。

  4. ユーザーエージェントの network revocation nonce setnonce含む場合、 blocked を返します。

  5. allowed を返します。

2.5. ネットワーク失効のためのモンキーパッチ

この導入節は非規範的です。

この節のネットワーク失効メカニズムは、ネットワーク リクエストを行う標準へのパッチ適用を必要とします。私たちのパッチ以前は、これらの標準は、 最終的にリクエストを開始したコンテキストのネットワーク失効状態を認識しないまま、ネットワーク リクエスト(WebSocket 接続の開始など)を行っていました。私たちのパッチは、それらの標準の アルゴリズムにチェックを追加し、リクエストが行われる前に、開始元コンテキストのネットワーク 失効状態を考慮するようにします。詳しくは、これらの各種 API をテストする非外部 WPT があり、ここで 見つける ことができます。 これらが現在外部化されていないのは、ネットワーク失効機能がまだローンチされていないためです。 ローンチ後、WPT リポジトリに公開されます。

ネットワーク失効メカニズムは、[FETCH] Standard に対する次のモンキーパッチを必要とします。

fetch アルゴリズムのステップ 7 では、次のように述べています:

request が bad port によりブロックされるべきか request の fetch が mixed content としてブロックされるべきか、または request が Content Security Policy によりブロックされるべきかblocked を返す場合、 responsenetwork error に設定します。

"should request be blocked by Content Security Policy" の後の条件に、"must be blocked due to a revoked partition nonce" を追加します。

これには、fenced frame nonce と、 存在する場合は iframe credentialless nonce の両方を渡す必要があります。 (WICG/fenced-frame#191)

obtain a connection アルゴリズムを変更し、ステップ 1 の前に次の手順を挿入します:
  1. noncekeynonce とします。

  2. ユーザーエージェントの network revocation exemption map[nonce] が 存在するが、 network revocation exemption map[nonce][yrl] が 存在しない場合:

    1. ユーザーエージェントの network revocation nonce setnonce含む場合、failure を返します。

resolve an origin アルゴリズムを変更し、追加のパラメーターとして URL url を含めます。

ステップ 1 の前に次の手順を挿入します:

  1. noncekeynonce とします。

  2. ユーザーエージェントの network revocation exemption map[nonce] が 存在するが、 network revocation exemption map[nonce][url] が 存在しない場合:

    1. ユーザーエージェントの network revocation nonce setnonce含む場合、failure を返します。

ネットワーク失効メカニズムは、[WebSockets] Standard に対する次のモンキーパッチを必要とします。

establish a WebSocket connection アルゴリズムを変更します。ステップ 10 の後に、 次の新しいステップを追加します:
  1. clientglobal objectnavigable を与えて determine if a navigable has revoked network for itself を実行した結果が true である場合、 fail the WebSocket connection を行います。

ネットワーク失効メカニズムは、[WebTransport] Standard に対する次のモンキーパッチを必要とします。

initialize WebTransport over HTTP アルゴリズムを変更します。 ステップ 5(すべてのサブステップは 変更しない)を次のように書き換えます:
  1. 次の条件のいずれかが true である場合:

    その場合、残りの手順を中止し、transport を用いて network task をキューし、次の手順を実行します:

ネットワーク失効メカニズムは、[Reporting] Standard に対する次のモンキーパッチを必要とします。

generate and queue a report アルゴリズムを変更します。ステップ 1 の後に、次の新しいステップを追加します:
  1. contextDocument であり、かつ contextnode navigable を与えて determine if a navigable has revoked network for itself を実行した結果が true である場合、return します。

ネットワーク失効メカニズムは、[Webpackage] Standard に対する次のモンキーパッチを必要とします。

HTTP fetch への monkeypatch を変更します。 "b2" or "b3" switch case の下にあるステップ 4 を次のように書き換えます:
  1. requestmust be blocked due to a revoked partition nonce かどうかを判定した結果が false である場合、 並列にparsedExchangereport に対して wait and queue a report for します。

2.6. 新しい request destination

fencedframe の navigation request の処理モデルは、通常の navigation request の処理モデルから十分に逸脱しており、新しい request destination 値を正当化します。 この仕様は、request destination 列挙に新しい エントリ "fencedframe" を含めるよう更新します。[FETCH] Standard に対して次のモンキーパッチを実行します。

"fencedframe" を non-subresource request list および navigation request list に追加します。

"fencedframe" を RequestDestination enum に追加します。

fetch アルゴリズムのステップ 13.2 では、次のように述べています:

ユーザーエージェントは、request の destination について switch し、該当するものがあれば、 value を最初に一致する文に設定するべきです:

"fencedframe" を、"document", "frame", および "iframe" と並ぶ switch cases に追加します。

テスト

非規範的に、DOM intro の destination table を更新し、 fencedframe navigation requests が次のプロパティを持つことを示します:

2.7. ネットワーク失効に基づくメソッドのゲーティング

この導入節は非規範的です。

fenced frame が untrusted network access を完全に無効化した後、すなわち disableUntrustedNetwork() によって返された Promiseresolved した後、特定の強力なインターフェイスメソッドが、 fenced frame 内で実行されるスクリプトから利用可能になります。これらのメソッドは他の仕様で 定義され、それらの仕様は、呼び出しが成功できるかどうかを決定するために、下記の最初のアルゴリズムを使用します。 untrusted network access の失効の背後でゲートされるメソッドの一例は、get() であり、SharedStorageWorklet の外で呼び出される場合です。 このメソッドは [Shared-Storage] draft specification で定義されています。

disableUntrustedNetwork() が呼び出されたが、返された Promise がまだ resolved していない中間状態では、ネットワーク越しのリクエストを行う機能に制限があります。 下記の2番目のアルゴリズムは、それらの機能が許可されるかどうかを決定するために使用されます。

私たちは "fully revoked" と "revoked for self" を区別します。 これは、ネストされた fenced frame tree がまだネットワークアクセスを持つ可能性があり、それらも disableUntrustedNetwork() を呼び出すまで、これらの制限が適用されないためです。

navigable navigable を与えて、determine if a navigable has fully revoked network するには:
  1. navigabletraversable navigablefenced navigable でない場合、 false を返します。

  2. confignavigableactive browsing contextfenced frame config instance とします。

  3. configuntrusted network statusdisabled for this tree and fenced subtrees でない場合、false を返します。

  4. true を返します。

navigable navigable を与えて、determine if a navigable has revoked network for itself するには:
  1. navigabletraversable navigablefenced navigable でない場合、 false を返します。

  2. confignavigableactive browsing contextfenced frame config instance とします。

  3. configuntrusted network statusenabled である場合、false を返します。

  4. true を返します。

navigable navigablesource snapshot params sourceSnapshotParams を与えて、 determine if an embedder-initiated fenced frame navigation should be blocked するには:
  1. sourceSnapshotParamstarget fenced frame config が null である場合、 false を返します。

    意図としては、 sourceSnapshotParamstarget fenced frame config は embedder-initiated fencedframe navigation では non-null、 それ以外では null であるべきです。しかし、この issue が解決されるまでは、 これは true ではありません。

  2. navigabletraversable navigableunfenced parent が null である場合、false を返します。

    注: navigabletraversable navigableunfenced parent が null である場合、 navigable は、navigablefenced navigable containerdestroyed されているため stop loading します。

  3. 次がすべて true である場合:

    その場合、true を返します。

  4. そうでない場合、false を返します。

2.8. 自動報告

この最初の導入段落は非規範的です。

fenced boundary model の副作用として、広告はクリックが成功した navigation につながったかどうかを知る能力を失います。 これは、fenced frame から発生したトップレベル navigation から読み込まれたページが、読み込まれたことを fenced frame に報告することを許可されないためです (たとえば window.opener のようなものを通して)。 代わりに、特別なイベントレベルの reporting types、 reserved.top_navigation_start および reserved.top_navigation_commit を導入します。これらは、fenced frame が top-level traversable への成功した navigation を開始したときに、event-level beacon を自動的に送信します。

source snapshot params sourceSnapshotParamsorigin sourceOriginDocument targetDocument、および automatic beacon event type eventType を与えて、attempt to send an automatic beacon するには、次の手順を実行します:
  1. targetDocumentnode navigabletraversable navigabletop-level traversable でない場合、これらの手順を中止します。

  2. sourceSnapshotParamshas transient activation が false に設定されている場合、これらの手順を中止します。

  3. configsourceSnapshotParamsinitiator fenced frame config instance とします。

  4. config が null である場合、これらの手順を中止します。

    注: このアルゴリズムはすべての navigations に対して 無条件に呼び出されるため、これは fencedframe から発生しない top-level traversable への navigation のケースを捕捉するために使用されます。

  5. request initiator を、configis ad component が false である場合は sourceOrigin、そうでない場合は sourceSnapshotParamsinitiator ancestor root origin とします。

  6. initiator referrer policy を、configis ad component が false である場合は sourceSnapshotParamssource policy containerreferrer policy、そうでない場合は sourceSnapshotParamsinitiator ancestor root referrer policy とします。

  7. isCrossOrigin を、sourceOriginconfigmapped urloriginsame origin でない場合は true、そうでない場合は false とします。

  8. beaconMapping を、isCrossOrigin が false である場合は sourceSnapshotParamssnapshot automatic beacon storedata mapping、 そうでない場合は sourceSnapshotParamssnapshot automatic beacon storecross-origin exposed data mapping とします。

  9. beaconDatabeaconMapping[eventType] とします。

  10. automaticBeaconsAllowedsourceSnapshotParamsautomatic beacons allowed とします。

    注: これは、 `Allow-Fenced-Frame-Automatic-Beacons` header による opt-in があったかどうかを追跡します。この値が false であっても、same-origin documents または データ設定によって opt-in した documents のいずれかでは、automatic beacons を送信できます。

  11. beaconData が null であり、かつ automaticBeaconsAllowed が false である場合、 これらの手順を中止します。

  12. isCrossOrigin が true であり、かつ automaticBeaconsAllowed が false である場合、 これらの手順を中止します。

  13. configfenced frame reporterfenced frame reporting metadata referencefenced frame reporting mapkeys の各 destination について 反復します:

    1. configfenced frame reporter を用い、destination, request initiator, initiator referrer policy、および次の items を持つ automatic beacon event を指定して、 report an event を実行します:

      type

      eventType

      data

      beaconData が null である場合は空文字列、そうでない場合は beaconDataeventData

      attributionReportingEnabled

      sourceSnapshotParamsattribution reporting enabled

      attributionReportingContextOrigin

      sourceSnapshotParamsattribution reporting context origin

  14. beaconDataonce が true である場合、 beaconMapping[eventType] を null に設定します。

テスト
[HTML]navigate アルゴリズムを変更します。ステップ 4 の後に、次の新しいステップを追加します:
  1. sourceSnapshotParams, initiatorOriginSnapshot, navigable の関連付けられた Document, および reserved.top_navigation_start を与えて、Attempt to send an automatic beacon します。

[HTML]attempt to populate the history entry’s document アルゴリズムを変更します。ステップ 6 の サブステップ 11 で、ステップ 5 の後に次の新しいステップを追加します:
  1. failure が false である場合:

    1. sourceSnapshotParams, entrydocument stateinitiator origin, document、および reserved.top_navigation_commit を与えて、Attempt to send an automatic beacon します。

    2. sourceSnapshotParams, entrydocument stateinitiator origin, document、および reserved.top_navigation を与えて、Attempt to send an automatic beacon します。

3. HTML 統合

3.1. Window インターフェイスへの拡張

partial interface Window {
  // Collection of fenced frame APIs
  readonly attribute Fence? fence;
};

Window object は、関連付けられた fence を持ちます。これは、Window とともに作成される Fence instance です。

fence getter 手順は次のとおりです:
  1. thisbrowsing contextfenced frame config instance が null でない場合、thisfence を返します。

  2. null を返します。

テスト

3.2. Document の補助概念

まず、いくつかの予備的な型を確立します:

automatic beacon data は、次の items を持つ struct です:

eventData

string

destination

FenceReportingDestinations の list

once

boolean

crossOriginExposed

boolean

automatic beacon data mapping は、map です。その keysautomatic beacon event types であり、その values は null または automatic beacon data です。

snapshot automatic beacon store は、次の items を持つ struct です:

data mapping

automatic beacon data mapping

cross-origin exposed data mapping

automatic beacon data mapping

Document object は、関連付けられた automatic beacon data mapping を持ちます。 これは automatic beacon data mapping です。

Document object は、関連付けられた automatic beacons allowed を持ちます。これは boolean であり、初期値は false です。

3.3. browsing context 作成への変更

[HTML]creating a new browsing context and document アルゴリズムで、 次で始まる2つのステップ (現在のステップ 4 および 15)を;

代わりに、より厳密な条件を使用するように書き換えます:

注: これは、creatorreferrerorigindocument base urlpolicy container が fenced frame boundary をまたいで漏れないようにする必要があるためです。

このアルゴリズムの(上で変更した)ステップ 4 に、次のサブステップを追加します:

  1. browsingContextfenced frame config instance を、 creatorbrowsing contextfenced frame config instance に設定します。

3.4. Policy container の継承

local URL への navigation request を作成するとき、 iframes は、その policy container を、navigation requestinitiator である Document から clone します。 fencedframes が同じことを行うと、initiator の policy container に関する情報が fenced frame boundary をまたいで漏れることを許してしまいます。この節では、その漏れを閉じるために policy container 継承にパッチを当てます。

determine navigation params policy container アルゴリズムを変更し、デフォルトが false の新しい optional boolean パラメーター fenced を持つようにします。

ステップ 3 を次のように書き換えます:

  1. responseURL is local であり、initiatorPolicyContainer が null でなく、 fenced false である場合、 initiatorPolicyContainerclone を返します。

注: responseURLabout:srcdoc である場合を変更する必要はありません。なぜなら about:srcdoc への navigations は fenced frames でサポートされていないためです。

create navigation params by fetching のステップ 23 の前に、 次のように述べるステップを追加します:
  1. fenced を、navigablefenced navigable である場合は true、 そうでない場合は false とします。

    注: これにより、initiator である Documentnavigableactive document であるか、その unfenced parent であるかにかかわらず、fenced が true であることが保証されます。

ステップ 23(現在のステップ 24)を次のように書き換えます:

  1. resultPolicyContainer を、responseURL entrydocument statehistory policy container sourceSnapshotParamssource policy container、null、 responsePolicyContainer、および fenced を与えて determining navigation params policy container した結果とします。

注: fencedframe Document 初期作成時の policy container 継承は、 § 3.3 browsing context 作成への変更 節で扱われます。

3.5. 入れ子の traversables

3.5.1. はじめに

この節は非規範的です。

[HTML] Standard は、navigables を2つのカテゴリに整理します: child navigablestraversable navigablestop-level traversables とも呼ばれます)です。 fenced frames のような機能、そして程度は小さいですが portals の導入は、ときどき child navigable のような 新しい種類の traversable navigable を追加することで、このモデルを複雑にします。 これらの新しい frame 型は、embedder とは別の browsing context group に収容されるため、ある具体的なレベルの分離が期待され、 かつ要求されます。一方で、それらは 他の browsing context groups の内部に視覚的に合成されるため、時には たとえば iframes で見られる通常の child navigables のように振る舞う必要があります。

ここでの複雑さは、navigable containernavigable parent、および descendant navigables のような用語が、 いつ traversable navigable/browsing context group 境界を越える必要があるのか、またそうすると安全でない または正しくないのはいつかを決定する点にあります。以下の例はこの点を示します。

ユーザーが Document 内の content を activates すると、通常は activation notification steps が、すべての ancestor navigables と、すべての same origin descendant navigables に user activation を与えます。しかし fencedframe は embedder から分離される必要がある機微な content をホストでき、 また user activation および consumption は、この2者の間の通信 ベクトルを提供するため、user activation の目的では、 fencedframefenced navigable は、その embedder の descendant と見なすことはできず、またその embedder も fencedframefenced navigable の ancestor と見なすことはできません。 これは、現在の user activation アルゴリズムがそれらの用語を用いる方法においてです。 言い換えると、私たちは user activation を fenced と見なし、それが fenced navigable boundary を決して越えないことを示します。 unfenced であれば、それは iframes と同じように振る舞い、user activation が frame boundary を自由に流れることを許します。

テスト

user activation とは異なり、 fencedframefenced navigablecreated または navigated されるとき、それは通常の child navigables 内の Documents で標準であるように、embedder Documentactive sandboxing flag set をそのまま inherit must。 これをしない場合、 fencedframe element は自明な sandbox bypass になります。 fencedframe の sandbox flag 継承は iframe elements におけるそれと同様に振る舞うため、私たちは sandbox inheritance を unfenced と見なします。

上記で言及した分離と、その条件付き緩和を提供するため、この仕様は traversable navigables のための新しい種類の parent として unfenced parent を定義します。これは、上で説明したように、 unfenced である必要があるときにアルゴリズムが意図的に使用できる embedder へのリンクを提供します。

注: 新しい種類の parent(unfenced parent)の導入は、意図的な設計判断です。 これは、デフォルトでは fencedframe boundary が private かつ isolated であることを意味します。 なぜなら、デフォルトでは web platform の何ものも、 fencedframefenced navigable からその embedder へ traverse しないためです。 アルゴリズムを変更して、 fencedframe fenced navigable boundary をまたいで traverse できるようにするときは、 注意が払われなければなりません。この種の各変更は個別に評価され、この仕様に現れます。

この節の残りでは、関連する navigables の集合を扱うさまざまな [HTML] definitions(およびそれらの使用箇所)へのパッチを提供し、 web platform のさまざまな部分を適切に fencing および unfencing することを意図します。

3.5.2. Traversable navigables

[HTML]Traversable navigables 節に、次を追加します:

navigable のプロパティに加えて、traversable navigable は次を持ちます:

注: unfenced parent link は、 fencedframefenced navigable に embedder へのリンクを与えるものです。 これは、focus processing model の一部のアルゴリズムのように、"unfenced" である必要があるものに対して 注意深く使用されます。

navigable navigableunfenced parent を取得するには:
  1. navigablechild navigable である場合、navigableparent を返します。

  2. Assert: navigablefenced navigable です。

  3. navigableunfenced parent を返します。

注: このアルゴリズムは、traversable navigableunfenced parent getter とは異なります。というのは、この アルゴリズムは、navigable が通常の child navigable である場合、まず navigable の 通常の parent を取得しようとするためです。

navigable navigableunfenced container document を取得するには:
  1. parentNavigablenavigableunfenced parent とします。

  2. parentNavigableactive document を返します。

3.5.3. 入れ子の traversables

[HTML]Navigables 節に、"Nested traversables" という題名の新しい小節を追加し、次のテキスト、定義、および アルゴリズムを含めます。

navigable containers とそれぞれの content navigables と同様に、 他の elements(これまでのところ fencedframe element のみ)は、より分離された navigable を ユーザーに提示します。これらの elements は fenced navigable containers と呼ばれます。

fenced navigable containerfenced navigable を持ちます。これは、non-null の unfenced parent を持つ traversable navigable、または null です。初期値は null です。

テスト
document state documentStatenavigable parent を与えて traversable という initialize the nested traversable するには:
  1. documentState を与えて Initialize the navigable traversable します。

  2. traversableunfenced parentparent に設定します。

element element を与えて、create a new nested traversable するには:
  1. group を新しい browsing context group とします。

注: create a new browsing context group and document がするように、group をユーザーエージェントの browsing context group setappend する理由はないように見えます。

  1. document を、elementnode documentelement、および group を与えて creating a new browsing context and document した2番目の戻り値とします。

  2. documentState を新しい document state とし、その documentdocument とします。

  3. traversable を新しい traversable navigable とします。

  4. parentNavigableelementnode navigable とします。

  5. documentStateparentNavigable を与えて、Initialize the nested traversable traversable します。

  6. elementfenced navigabletraversable に設定します。

  7. initialHistoryEntrytraversableactive session history entry とします。

  8. initialHistoryEntrystep を 0 に設定します。

  9. initialHistoryEntrytraversablesession history entriesAppend します。

  10. traversable を返します。

注: create a new nested traversable アルゴリズムは、top-level traversable ではない 最初の種類の traversable navigable を作成します。これにより、 [HTML]Top-level traversables 節にある nested traversables についての注記を削除する必要があります。

3.5.4. トップレベル traversables

[HTML] Standard は現在、 top-level traversable を、traversable navigable であって、その parent が null であるもの、と定義しています。しかしこれは不十分な定義であり、この 仕様はそれを変更します。[HTML] は、この仕様の外では、すべての traversable navigablestop-level traversables であると 述べていますが、将来の仕様が nested である一種の traversable を 作成し、non-null の parent によって nesting を実現したいかもしれない、とも「想定」しています。そのため、 top-level traversablestraversable navigables の区別は、parent が null であるかどうかに依存します。

この仕様が提案する fenced navigable は、[HTML]top-level traversablestraversable navigables の区別のために余地を設けたときに 想定していたものそのものです。しかしこの仕様は、fenced navigables に対して parent ポインターを使用しません。その理由は 上記で説明したとおりです(代わりに unfenced parent ポインターを使用します)。つまり、 デフォルトでは、top-level traversablesfenced navigables はどちらも null の parents を持つため、その区別は無意味になります。

top-level traversablesfenced navigables の意図された区別を 修復するために、次の定義を以下のように patch します:

top-level traversable は、traversable navigable であって、その parentunfenced parent がどちらも null であるものです。
navigable inputNavigabletop-level traversable を取得するには:
  1. navigableinputNavigable とします。

  2. While:

    1. navigableparentunfenced parent が どちらも null である場合、break します。

    2. navigable を、navigableparent または unfenced parent のうち、 non-null である方に設定します。

      注: ここでは、 navigableparent または unfenced parent の ちょうど一方だけが non-null になります。

  3. navigable を返します。

注: これらの新しい定義では、top-level traversable は、§ 3.5.1 はじめに で説明した "unfenced" と本質的に同じです。

inclusive descendant navigables アルゴリズムを変更し、 デフォルトが false の新しい optional boolean 引数 unfenced を取るようにします。

さらに、このアルゴリズムのステップ 2 を次のように書き換えます:

  1. navigables を、Extend し、documentdescendant navigables を含めます。その unfencedunfenced に設定します。

descendant navigables アルゴリズムを変更し、デフォルトが false の新しい optional boolean 引数 unfenced を取るようにし、アルゴリズムを 次のように書き換えます:
  1. navigables を新しい list とします。

  2. navigableContainers を、document のすべての shadow-including descendants のうち、 navigable containers(または unfenced が true の場合は fenced navigable containers)であるものの list とし、 shadow-including tree order 順にします。

  3. navigableContainers の各 navigableContainer について 反復します:

    1. navigableContainercontent navigablefenced navigable が どちらも null である場合、continue します。

    2. descendantNavigable を、navigableContainercontent navigable または fenced navigable の どちらか non-null である方とします。

    3. navigables を、descendantNavigableactive documentinclusive descendant navigablesExtend します。その unfencedunfenced に設定します。

  4. navigables を返します。

ancestor navigables アルゴリズムを変更し、デフォルトが false の新しい optional boolean 引数 unfenced を取るようにし、アルゴリズムを 次のように書き換えます:
  1. navigabledocumentnode navigableparent とします。

  2. navigable が null で、かつ unfenced が true である場合、navigabledocumentnode navigabletraversable navigableunfenced parent に設定します。

  3. ancestors を空の list とします。

  4. navigable が null でない間:

    1. navigableancestorsPrepend します。

    2. navigablenavigableparent に設定します。

    3. navigable が null で、かつ unfenced が true である場合、navigablenavigabletraversable navigableunfenced parent に設定します。

  5. ancestors を返します。

3.7. focusing アルゴリズムへの変更

[HTML] standard は、 focusing elements と Windows を ユーザー操作と script-initiated APIs の両方によってどのように扱うかを定義しています。fenced frames は fenced frame boundary をまたいだ通信を防ぐように設計されているため、focus を注意深く扱う必要があります。 これは、focus が fencedframe boundary を越えると、boundary の両側の contexts がその変化を検出でき、それが fencedframe とその embedder の間に通信チャネルを開くために使用され得るためです。

これを行うため、focusing steps が script-initiated focus を fenced frame boundary を越えて移動することを許可しません。

ユーザーが button のような element を fencedframe の内部でクリックし、その一方で fencedframe外側 にある別の element が focused されている場合、 focusing stepsbuttongain focus することを許可します。これは特に user-initiated action であるためです。それを許可しなければ、 fencedframe 内のいかなる element も gain focus できなくなってしまいます。

この 仕様以前の現状のまま、すべての elements が focus() method を介して focused されることを許可し続けた場合、fenced navigable container とその fenced navigable は、一連の focus() calls を使用して fenced frame boundary をまたいで任意のデータを送信でき、これはプライバシー漏洩です。 これを避けるために、focus() method を実質的に "fence" します。これはプライバシーのために一部の機能を犠牲にします。

focusing steps を変更し、デフォルトが false の新しい optional boolean 引数 unfenced を取るようにします。

アルゴリズムの(new focus target を変更する)ステップ 3 の後に、次の新しいステップを追加します:

  1. new focus target が、non-null の fenced navigable を持つ fenced navigable container である場合、 new focus target を、その fenced navigableactive document に設定します。

new chain 変数を定義するステップの後に、次の新しいステップを追加します:

  1. unfenced が false であり、new chainDocument document含む場合で、その node navigabletraversable navigablefenced navigable であり、 かつ old chaindocument含まない場合、return します。

    注: これは、focus が fence を越えようとしている場合に、 focus update steps を呼び出す直前で早期に抜ける方法です。

focusing steps におけるアルゴリズム手順の後の user agent 文を、次のように変更します:

ユーザーエージェントは、ユーザーが candidate へ focus を移動しようとするたびに、 immediately に、focusable area または navigable candidate について、unfenced を true に設定して focusing steps を実行しなければなりません。

accesskey attribute command アルゴリズムの action を次のように変更します:
  1. element について、unfenced を true に設定して、focusing steps を実行します。

  2. element に対して click event を発火します。

ユーザーが click focusable focusable areaactivates したときの挙動を、次のように変更します:

ユーザーが click focusable focusable areaactivates するとき、ユーザーエージェントは focusable area に対して、focus trigger を "click" に設定し、unfenced を true に設定して、 focusing steps を実行しなければなりません。

hide popover algorithm のステップ 10 を次のように変更します:
  1. previouslyFocusedElement が null でない場合:

    1. elementpreviously focused element を null に設定します。

    2. focusPreviousElement が true である場合、previouslyFocusedElement に対して、 unfenced を true に設定して focusing steps を実行します。このステップを行っても viewport はスクロールされるべきではありません。

注: popover を手動で閉じることは user-initiated gesture ですが、 focusing steps は、それが user gesture から呼び出されたか script call 経由で呼び出されたかにかかわらず、unfenced を false に設定して呼び出されます。

interactively validate the constraints アルゴリズムのステップ 3 の最初の bullet point を次のように変更します:
has focus steps アルゴリズムの while loop のステップ 2 の後に、 次のステップを追加します:
  1. candidatefocused area が、non-null の fenced navigable を持つ fenced navigable container である場合、 candidate を、その fenced navigable containerfenced navigableactive document に設定します。

focus chain アルゴリズムの while loop のステップ 3 を次のように変更します:
  1. currentObjectfocusable area である場合、currentObjectcurrentObjectDOM anchornode document に設定します。

    そうでなく、currentObject が、その node navigableparent が non-null である Document である場合、currentObjectcurrentObjectnode navigableparent に設定します。

    そうでなく、currentObject が、その node navigabletraversable navigable であり、その unfenced parent が non-null である Document である場合、 currentObjectcurrentObjectnode navigableunfenced parent に設定します。

    そうでなければ、break します。

get the focusable area アルゴリズムを変更します。switch statement に新しい case を追加します:
focus target が、non-null の fenced navigable を持つ fenced navigable container である場合

その fenced navigable containerfenced navigableactive document を返します。

注: このアルゴリズムは、無条件に "jump the fence" boundary できます。なぜなら、その戻り値は常に fence boundary を注意深く考慮するアルゴリズムへ 入力されるためです。

currently focused area of a top-level traversable アルゴリズムのステップ 3 を次のように変更します:
  1. candidatefocused area が、non-null の content navigable を持つ navigable container、または non-null の fenced navigable を持つ fenced navigable container のいずれかである間、While: candidate を、その navigable containercontent navigable またはその fenced navigable containerfenced navigable のうち、 non-null である方の active document に設定します。

sequential focus navigation アルゴリズムのステップ 6 を次のように変更します:
  1. candidate が null でない場合、candidate に対して focusing steps を実行します。その unfenced は true に設定し、return します。

sequential focus navigation アルゴリズムのステップ 9 を次のように変更します:

  1. そうでなければ、starting point は、その node documentnode navigablechild navigable または fenced navigable である focusable area です。 starting point をその node navigableunfenced parent に設定し、loop とラベル付けされたステップに戻ります。

sequential navigation search algorithm のステップ 2 を次のように変更します:
  1. candidate が、non-null の content navigable を持つ navigable container である場合、new candidate を、 candidatecontent navigable を第1引数、 direction を第2引数、 sequential を第3引数として sequential navigation search algorithm を実行した結果とします。

    candidate が、non-null の fenced navigable を持つ fenced navigable container である場合、 new candidate を、 candidatefenced navigable を第1引数、 direction を第2引数、 sequential を第3引数として sequential navigation search algorithm を実行した結果とします。

    new candidate が null である場合、starting pointcandidate とし、このアルゴリズムの先頭へ戻ります。そうでない場合、 candidatenew candidate とします。

テスト

この節では、 fencedframe element が、さまざまな headers、isolation mechanisms、および policies との統合を含む、ますます複雑な navigation の process とどのように相互作用するかを説明します。

3.8.1. `Supports-Loading-Mode` HTTP response header

この節は [HTML] Standard を monkeypatch することを意図しています。しかし、 `Supports-Loading-Mode` header はまだ [HTML] に merge されておらず、 代わりに [Prerendering-Revamped] specification に存在するため、この節は実質的に その monkeypatch specification を monkeypatch します。

以下の新しい token を、`Supports-Loading-Mode` response header に対する有効な tokens の list に追加します:

`fenced-frame` token は、その response が fenced navigable の内部で Document を作成するために使用できることを示します。この明示的な opt-in がない場合、fenced navigable 内のすべての navigations は、§ 3.8 Navigation に概説されるように失敗します。

[HTML]attempt to populate the history entry’s document アルゴリズムは、queued task の内部の、"If failure is true, then:" で始まる ステップの直前に、次の新しいステップを挿入するよう変更されます:
  1. そうでなく、次の条件がすべて true である場合:

    その場合、failure を true に設定します。

3.8.2. `Allow-Fenced-Frame-Automatic-Beacons` HTTP response header

その browsing contextfenced frame config instancemapped urlsame origin でない Document に読み込まれる document resource を、Allow-Fenced-Frame-Automatic-Beacons HTTP response header とともに提供すると、その Document は、navigations を実行したときに automatic beacon events を trigger することへ opt in します。この header は structured header であり、その値は boolean でなければなりません。

3.8.3. `Allow-Cross-Origin-Event-Reporting` HTTP response header

fenced frame config instance によって fencedframe に読み込まれる document resource を、Allow-Cross-Origin-Event-Reporting HTTP response header とともに提供すると、その Document の cross-origin child navigablesreportEvent() beacons を送信できるよう opt in します。この header は structured header であり、その値は boolean でなければなりません。

3.8.4. COOP、COEP、および cross-origin isolation

この仕様の外では、`Cross-Origin-Opener-Policy` header は、すべての navigables ではなく、top-level traversables のみに 適用 され、この仕様も、この header が fenced navigables に影響せず、またその embedder から 継承されない限りにおいて、この意図を維持します。したがって、fenced traversable navigable の内部に hosted される browsing context group は、常にその cross-origin isolation mode が "none" に設定されます。

それでも、fenced navigable は、その unfenced parentembedder policy に従います。これは以下で達成されます:

check a navigation response’s adherence to its embedder policy アルゴリズムで、次のすべての出現箇所を 書き換えます:

次に置き換えます:

注: これにより、 fencedframe 内の navigations は、適切な `Cross-Origin-Embedder-Policy` header とともに提供されない場合、 iframes と同様に失敗します。

queue a cross-origin embedder policy inheritance violation アルゴリズムを fence する必要があるか unfence する必要があるかを判定します。unfenced のままにすると プライバシー漏洩を引き起こす可能性があります。

次に、cross-origin resource policy checknavigation requests に適用される 方法を変更します。create navigation params by fetching アルゴリズムの ステップ 19、サブステップ 13 を次のように書き換えます:
  1. responsenetwork error でなく、navigablechild navigable または fenced navigable であり、 かつ navigableunfenced container documentoriginnavigableunfenced container documentrelevant settings objectrequestdestinationresponse、および true を用いて cross-origin resource policy check を 実行した結果が blocked である場合、responsenetwork error に設定し、break します。

    注: ここでは cross-origin resource policy checknavigable 自身ではなく、 unfenced parent navigable に対して実行しています。 これは、navigation source ではなく、embedded content と embedder の context との same-originness("fence" を無視したもの)が重要だからです。

queue a cross-origin embedder policy CORP violation report アルゴリズムを fence する必要があるか unfence する必要があるかを判定します。unfenced のままにすると プライバシー漏洩を引き起こす可能性があります。

テスト
次の新しい itemsource snapshot params struct に追加します:
initiator fenced frame config instance

fenced frame config instance または null。 初期値は null。

initiator ancestor root origin

origin または null。初期値は null。

initiator ancestor root referrer policy

referrer policy または null。初期値は null。

target fenced frame config

fenced frame config または null。初期値は null。

注: initiator fenced frame config instance は、navigation initiator の browsing context に読み込まれている fenced frame config instance です(存在する場合)。 initiator ancestor root origin は、component ads では、top-level ad container の origin です(存在する場合)。 initiator ancestor root referrer policy は、component ads では、top-level ad container の referrer policy です(存在する場合)。 これらは attempt to send an automatic beacon アルゴリズムで、 origin を比較し、 FenceReportingDestination のどれに、どの情報で beacons を送信するかを決定するために使用されます。 これは fencedframe から開始された navigation が成功した場合です。一方、target fenced frame config は、 fenced frames を対象とする navigations で fencedframe element に読み込まれる、まだ instantiated されていない fenced frame config です。 これらの fields は意味のある形で 一緒に 相互作用することはありません。

attribution reporting enabled

boolean

attribution reporting context origin

origin

automatic beacons allowed

boolean

snapshot automatic beacon store

snapshot automatic beacon store

Document sourceDocument が与えられたとき、 snapshot the automatic beacon data mapping するには:
  1. Assert: これらの手順は sourceDocumentevent loop 上で実行されています。

  2. info を、新しい空の snapshot automatic beacon store とします。

  3. mappinginfodata mapping とします。

  4. crossOriginMappinginfocross-origin exposed data mapping とします。

  5. current navigablesourceDocumentnode navigable とします。

  6. current navigable が null でない間 While:

    1. current navigableactive documentautomatic beacon data mapping の各 typedata について 反復します:

      1. mapping[type] が 存在しない場合、 mapping[type] を data に設定します。

      注: これにより、特定の type に対する automatic beacon data を含む最初の ancestor が、navigation を開始する document から利用可能であることが保証されます。 これはまた、ancestor が document に対して、より上位の ancestor で設定された data の使用を blocking することも防ぎます。

      1. crossOriginMapping[type] が 存在せず、かつ datacrossOriginExposed が true である場合、crossOriginMapping[type] を data に設定します。

    2. current navigablecurrent navigableparent に設定します。

  7. info を返します。

注: info に格納される maps は、 info を構築するために使われた元の Documentautomatic beacon data mapping への参照を 保持することを意図しています。これらは後で attempt to send an automatic beacon 内で 変更され、once が true に設定された beacon data が消去されます。

与えられた Document sourceDocumentget the initiator’s fenced grand-ancestor’s navigable を取得するには:
  1. navigablesourceDocumentnode navigable とします。

  2. navigable が null でなく、かつ navigablefenced navigable でない間:

    1. navigablenavigableparent に設定します。

  3. navigable が null である場合、null を返します。

  4. Assert: navigablefenced navigable です。

  5. navigablenavigableunfenced parent に設定します。

  6. navigable が null でなく、かつ navigablefenced navigable でない間:

    1. navigablenavigableparent に設定します。

  7. navigable を返します。

Documentfencedframe の内部に埋め込まれている場合、このアルゴリズムは、その document の最も近い fenced frame ancestor の 最も近い fenced frame ancestor の navigable を取得します。そのような "fenced frame grand-ancestor" が存在しない場合、 このアルゴリズムは null を返します。したがって、このアルゴリズムが navigable を返すのは、少なくとも、 それ自体が fenced frame の中にある fenced frame 内の Document が与えられた場合だけです。 たとえば、次の frame tree structure について:
Main frame (origin A)
  <fencedframe> (origin B)
    <iframe> (origin C)
      <fencedframe> (origin D)
        <iframe> (origin E)
          <fencedframe> (origin F)

このアルゴリズムは、各 document が与えられたとき、次を返します:

  • Main frame (origin A)null を返します。

  • <fencedframe> (origin B)null を返します。

  • <iframe> (origin C)null を返します。

  • <fencedframe> (origin D)<fencedframe> (origin B) を返します。

  • <iframe> (origin E)<fencedframe> (origin B) を返します。

  • <fencedframe> (origin F)<fencedframe> (origin D) を返します。

snapshot source snapshot params アルゴリズムを変更し、 次の追加 fields を持つ source snapshot params を返すようにします:
initiator fenced frame config instance

sourceDocumentbrowsing contextfenced frame config instance

initiator ancestor root origin

sourceDocument に対して get the initiator’s fenced grand-ancestor’s navigable を実行した結果が null である場合は null。 そうでない場合、sourceDocumentinitiator’s fenced grand-ancestor’s navigableactive documentorigin

initiator ancestor root referrer policy

sourceDocument に対して get the initiator’s fenced grand-ancestor’s navigable を実行した結果が null である場合は null。 そうでない場合、sourceDocumentinitiator’s fenced grand-ancestor’s navigableactive documentpolicy containerreferrer policy

attribution reporting enabled

sourceDocument が "attribution-reporting" feature を 使用することを許可されているかどうかを決定した結果

attribution reporting context origin

sourceDocumentcontext origin

automatic beacons allowed

sourceDocumentautomatic beacons allowed

snapshot automatic beacon store

sourceDocument に対して snapshot the automatic beacon data mapping を実行した結果。

the navigation must be a replace アルゴリズムを変更します。 次の新しい条件を追加します:
テスト
[HTML]navigate アルゴリズムを変更し、追加パラメーターを含めます: optional な string sharedStorageContext(デフォルトは null)。

[HTML]navigate アルゴリズムのステップ 5 の後に、次のステップを追加します:

  1. sourceDocumentnode navigable を与えて determine if a navigable has revoked network for itself を実行した結果が true である場合、return します。

[HTML]navigate アルゴリズムのステップ 13("If all of the following are true:")を変更し、 次の条件を含めます:

テスト

ステップ 22、すなわち in parallel に入るステップの直後に、これらのステップを挿入します。 これにより、以下が patch されたアルゴリズムで in parallel に実行される最初の手順になります:

  1. urlurn uuid であり、かつ navigablefenced navigable である場合:

    上記の条件は必要なほど厳密ではありません。 たとえば、 fencedframe が config-generating API を使用して FencedFrameConfig を生成し、その config の urn:uuid を正しく推測した場合、 その推測した urn を、たとえば location API のようなものを介して URL として navigate アルゴリズムに渡すことで、理論上は自分自身をその config へ navigate できます。 これは悪いことです。なぜなら FencedFrameConfig の目的は、config object を直接使うことによって、embedder だけが fencedframe を config によって表される resource へ navigate できるようにすることだからです。 修正についての考えは #194 を参照してください。

    1. config を、sourceDocumentnode navigabletraversable navigablefenced frame config mapping 内で finding a config した結果とします。

      注: これは、urn uuid url に関連付けられた configfenced frame config mapping 内で "finalized" されるまで、任意の時間 "wait" する可能性があります。 これが、このステップが in parallel に実行される理由です。この navigation は、 その後 embedder-initiated navigations が発生した場合、ongoing navigation を追跡する通常の仕組みによって cancel される should です。

    2. configembedder shared storage contextsharedStorageContext に設定します。

    3. Assert: sourceSnapshotParamstarget fenced frame config は null です。

    4. sourceSnapshotParamstarget fenced frame configconfig に設定します。

    5. Assert: configmapped urlvalue は、その scheme が "https" である URL です。

    6. urlconfigmapped urlvalue に設定します。

    7. configon navigate callback 内の steps を実行します。

  2. navigablefenced navigable であり、かつ sourceDocumentnode navigable が、unfenced を true に設定した navigableactive documentancestor navigables 内にある場合:

    1. config を、次の items を持つ新しい fenced frame config とします:

      mapped url

      次の items を持つ struct:

      value

      url

      visibility

      transparent

      effective sandboxing flags

      次の items を持つ struct:

      value

      default fenced frame effective sandboxing flags

      visibility

      opaque

      effective enabled permissions

      null

    2. Assert: sourceSnapshotParamstarget fenced frame config は null です。

    3. sourceSnapshotParamstarget fenced frame configconfig に設定します。

テスト

"Let unloadPromptCanceled be the result of" で始まるステップを次のように書き換えます:

  1. unloadPromptCanceled を、navigablefenced navigable である場合は false、 そうでない場合は navigableactive documentinclusive descendant navigables について checking if unloading is user-canceled した結果とします。

ステップ 22.8.2(Let finalSandboxFlags be the union...)の後に、 次のステップを追加します:

  1. sourceSnapshotParamstarget fenced frame config が null でなく、 かつ sourceSnapshotParamstarget fenced frame configeffective sandboxing flags が null でない場合、finalSandboxFlags を、 finalSandboxFlagssourceSnapshotParamstarget fenced frame configeffective sandboxing flagsvalue との union に設定します。

    注: これにより、 finalSandboxFlagstarget fenced frame config で定義される effective sandboxing flags少なくとも 同じくらい制限的であることが保証されます。blocked by sandboxing flags? アルゴリズム内の別のチェックにより、 finalSandboxFlagseffective sandboxing flags より制限的でないことが保証されます。

テスト


以下の patches は、事前に割り当てられた target fenced frame config を使用し、 navigation が finalized されるときに使用する準備として、それを instantiating します。

itemnavigation params struct に新しく追加します:
fenced frame config instance

fenced frame config instance または null。 初期値は null。

注: これは embedder-initiated fencedframe navigations の場合にのみ設定され、そのような navigation の結果として新しい Document が作成された場合、この member は新しい fenced navigableactive browsing contextfenced frame config instance member に転送されます。

[HTML]create navigation params by fetching アルゴリズムを、 navigation params を返す最後のステップが次の追加 assignment を持つように変更します:
fenced frame config instance

sourceSnapshotParamstarget fenced frame config が null である場合は null。そうでない場合、sourceSnapshotParamstarget fenced frame configinstantiating した結果。


最後に、以下の patches は navigation paramsfenced frame config instance を使用し、 navigation によって開始された browsing contextfenced frame config instance の assignment を扱います。

注: browsing contextfenced frame config instance は 2つの異なる方法で割り当てられます: (1) この節の残りで説明する embedder-initiated fencedframe navigation の間、および (2) child navigables 内で、その traversable navigablefenced navigable である Documents の初期 Document 作成時に継承されます。これは § 3.3 browsing context 作成への変更 節で扱われます。

fencedframe 内の成功した navigation では、それが fencedframe 内の content によって開始されたか、その embedder によって開始されたかにかかわらず、次の2つのうち 正確に1つが起こります:

[HTML]create and initialize a Document object アルゴリズムを変更し、 ステップ 2 の後に次のステップを挿入します:
  1. navigationParamsfenced frame config instance が null でない場合:

    1. Assert: browsingContextnavigationParamsnavigableactive browsing context と等しくありません。

      注: これは、 embedder-initiated navigations(navigationParamsfenced frame config instance が non-null であることにより示される)が常に § 3.8.6 Browsing context group swap を発生させるためです。

    2. navigationParamsfenced frame config instancecross-origin reporting allowed を、navigationParamsresponseheader list に対して、 `Allow-Cross-Origin-Event-Reporting` と "item" を与えて get a structured field value を実行した結果に設定します。

    3. browsingContextfenced frame config instancenavigationParamsfenced frame config instance に設定します。

ステップ 9 の後に、次の新しいステップを追加します:

  1. automaticBeaconsAllowed を、navigationParamsresponseheader list に対して、 `Allow-Fenced-Frame-Automatic-Beacons` と "item" を与えて get a structured field value を 実行した結果とします。

さらに、ステップ 10(現在のステップ 12)を、新しい Document を追加パラメーター付きで返すように書き換えます:

automatic beacons allowed

automaticBeaconsAllowed

[HTML]attempt to populate the history entry’s document アルゴリズムのステップ 5、サブステップ 4("Otherwise, if any of the following are true:")を 変更し、次の条件を含めます:

3.8.6. Browsing context group swap

fencedframe の embedder が frame 内の navigations を開始するとき、frame 内の context を完全に reset し、次の Document に漏れ得るものが何も残らないようにするため、 browsing context group swap を実行しなければなりません。

[HTML]attempt to populate the history entry’s document アルゴリズムを変更します。 "6. Queue a global task on the navigation and traversal task source" と書かれた ステップの前に、次のステップを追加します:
  1. 次の条件がすべて true である場合:

    その場合、navigationParamsCOOP enforcement resultneeds a browsing context group switch boolean を true に設定します。

    これは実際に 動作しますが、fenced frames を念頭に置かずに設計された COOP の仕組みに便乗するのではなく、 これを実行するための別の mechanism を使うことを検討するべきです。COOP は進化して、この仕様に望ましくない side-effects を与える可能性があります。

3.8.7. "_unfencedTop" navigation target

Fenced frames は、navigation のために追加の reserved navigation target "_unfencedTop" を使用します。 この節では、この新しい reserved keyword のサポートを追加するため、[HTML] spec の関連部分に patch を当てます。

valid navigable target name or keyword を変更し、 "_unfencedTop" という名前の新しい keyword を含めます。

下の paragraph を変更し、次のテキストを置き換えます:

次に置き換えます:

注: この変更が必要なのは、この spec が traversable navigabletop-level traversable の間に 区別を追加し、これらは以前は機能的に同等だったためです。

下の table に、"Effect in a fenced frame" という名前の column を追加します。この column の既存の すべての行の値は "ordinary effect" と同じです。次に、次の2行を追加します:

Keyword Ordinary effect Effect in an iframe with... Effect in a fencedframe>
sandbox="" sandbox="allow-top-navigation"
_unfencedTop if outermost top is current new maybe new maybe new current
_unfencedTop if outermost top is not current new maybe new maybe new outermost top
the rules for choosing a navigable の現在のステップ 6 と 7 の間に、次の extra step を追加します:

6.5. そうでなく、name が "_unfencedTop" と ASCII case-insensitive match し、 currentNavigabletraversable navigablefenced navigable である場合、 chosencurrentNavigabletop-level traversable に設定します。

3.9. Page visibility

Page visibility section of [HTML] は、 ユーザーエージェントが traversable navigablesystem visibility state を変更するときに実行されるアルゴリズムの 最初のステップが、inclusive descendant navigables アルゴリズムを unfenced を true に設定して呼び出すように変更されます。

3.10. Events

3.10.1. onfencedtreeclick event handler

event handlers on elements, Document objects, and Window objects section of [HTML] の table は、新しい row を含むように変更されます。
Event handler Event handler event type
onfencedtreeclick fencedtreeclick

GlobalEventHandlers interface は次のように変更されます:

partial interface mixin GlobalEventHandlers {
  attribute EventHandler onfencedtreeclick;
};

さらに、任意の HTML element に指定できる event handler content attributes の list は、[HTML] で 新しい row を含むように変更されます:

3.10.2. fencedtreeclick event type

Events table in the Index section of [HTML] は、新しい row を含むように変更されます。
Event Interface Interesting targets Description
fencedtreeclick Event Elements fencedframe element に対して、その fenced navigableDocumentnotifyEvent() を呼び出した後に非同期に発火されます

4. 他の仕様との相互作用

fencedframe element と、それが navigablebrowsing context group のような core concepts と相互作用する性質は、 必然的に cross-cutting であるため、この仕様に照らして usages を再評価しなければならない terms に依存する 仕様が多数あります。この節には、私たちが他の仕様に提案するさまざまな変更を置きます。

4.1. Prerendering

Prerendering Revamped specification は、navigableloading mode と、それが取り得る値を定義しています。 私たちの仕様は fenced frames のために別の値を追加します:

"fencedframe"

この navigablefencedframe の content を表示しています

次につながる挙動を 仕様化します:

テスト

4.2. Content Security Policy

この導入節は非規範的です

Content Security Policy [CSP] は通常、 navigable container をホストする Document に関連付けられた web content によって、child navigable 内の navigations の source を制限するために使用できます。

[CSP] が、 fencedframe 内の navigations の URL を、その embedder を運用している site に露出する communication side-channel として 使用されることを防ぐため、 fencedframe navigation に影響できる source expressions は次のものだけです:

これについて説明している CSP explainer を参照してください。

4.2.1. アルゴリズム

frame-src pre-request check のステップ 2 の後に、 次のステップを追加します:
  1. requestdestination が "fencedframe" であり、 かつこの directive の value が "https:", "https://*:*", または "*" のいずれも 含まない場合、 "Blocked" を返します。

frame-src post-request check のステップ 2 の後に、 次のステップを追加します:
  1. requestdestination が "fencedframe" であり、 かつこの directive の value が "https:", "https://*:*", または "*" のいずれも 含まない場合、 "Blocked" を返します。

次に、[CSPEE] specification の挙動を変更します。embedding frame が required CSP を指定している場合、fenced frames は読み込まれません。 これは embedder から fenced frame への任意の data flow を防ぐために行われます。

Is response to request blocked by context’s required CSP? アルゴリズムのステップ 1 の後に、次のステップを追加します:
  1. contextrequired cspnull でなく、 かつ requestdestination が "fencedframe" である場合、 "Blocked" を返します。

4.2.2. 新しい fenced-frame-src [CSP] directive

fencedframeiframe とは異なる element であるため、frame-src directive を使用しても、web sites は CSP rules に対して十分な制御を得られません。新しい [CSP] directive: fenced-frame-src を導入します。monkey-patched specification は以下のとおりです:

fenced-frame-src directive は、 fencedframefenced navigable に読み込める URLs を制限します。directive の name と value の syntax は、次の ABNF により記述されます:
directive-name  = "fenced-frame-src"
directive-value = serialized-source-list
次の Content Security Policy を持つページが与えられた場合:
Content-Security-Policy: fenced-frame-src https://example.com/

次の code に対する fetches は、提供された URL が fenced-frame-srcsource list と一致しないため、network error を返します:

<fencedframe src="https://example.org/">
</fencedframe>

Pre-request checkPost-request check は、 frame-src の check と同じになります。

default-src directive の Example 7 と Example 8 は修正されます。 そこでは次のように書かれています:
Content-Security-Policy: connect-src 'self';
                        ...
                        worker-src 'self'

現在は次のように書かれます:

Content-Security-Policy: connect-src 'self';
                        ...
                        fenced-frame-src 'self';
                        ...
                        worker-src 'self'
directive fallback list のステップ 1 で、list に新しい entry を追加します:
"fenced-frame-src"
  1. << "fenced-frame-src", "frame-src", "child-src", "default-src" >> を返します。

Get the effective directive for request アルゴリズムの ステップ 3 の switch を変更し、次の case を含めます:
"fencedframe"
  1. fenced-frame-src を返します。

テスト

4.3. Permissions Policies

この導入小節は非規範的です。

fencedframe 内の Documents で利用できる policy-controlled features と、 それらが計算される方法は、 fencedframe が navigate する fenced frame config がどのように構築されるかによって異なります。

web platform 上の FencedFrameConfig constructor を介して作成された fenced frame config instance は、flexiblepermissions policy behavior を持ち、 それが navigate する fencedframe の内部 Document は、それらが fenced frame allowed permissions list の一部である限り、permissions を継承することを許可されます。その他すべての policy-controlled features は無効化されます。

fenced frame config instance が、 その effective enabled permissions を設定する config-generating API を介して作成された場合、その instance は fixed permissions policy behavior を持ち、 それが navigate する fencedframe の内部 Document では、effective enabled permissions が、その Document で有効になる policy-controlled features の排他的な list になります(それ以外はすべて無効化されます)。

fixed permissions policy behavior を持つ fenced frame config instance への fencedframe navigation の間、それは navigate 先の fenced frame config instanceeffective enabled permissions を、結果として得られる Documentpermissions policyinherited policy と比較します。navigation は、 inherited policy value が "Enabled" である inherited feature のそれぞれが、fenced frame config instanceeffective enabled permissions にも現れる場合にのみ成功します。そうでない場合、 fencedframe が埋め込まれている environment は、その fenced frame config に不適合と見なされ、 navigation はブロックされます。

同時に、 fencedframe の embedder が、その navigation の origin(origin は cross-site data から派生するため)に基づいて frame 内の content に直接影響しないようにするため、この仕様はさまざまな [PERMISSIONS-POLICY] algorithms を変更し、 fencedframe Documentinherited policy が、その origin が embedder の origin と same origin であるかどうかを考慮せずに計算されるようにします。 したがって、feature は、その embedder が the special value * allowlist を介して 明示的に delegate した場合にのみ、 fencedframe 内で有効化できます。

上記のすべてを考慮すると、fixed permissions policy behavior navigations について、 次の興味深い含意が得られます:

下記の節の patches は、上記の説明内容で述べられた結果を達成するために、適切な [PERMISSIONS-POLICY] および [HTML] algorithms を "fence" します。

4.3.1. 定義

fenced frame allowed permissions は、"private-aggregation", "shared-storage", または "shared-storage-select-url" のいずれかです。

4.3.2. アルゴリズム patches

The allow attribute of the iframe element section を "The allow attribute of the iframe and fencedframe element" に rename し、その section を次のように書き換えます:

iframe および fencedframe elements はそれぞれ allow attributes (iframe: allow; fencedframe: allow) を持ち、それらは ASCII-serialized policy directive を含みます。

attribute で named された features の allowlist は空でもよく、その場合、allowlist のデフォルト値は "src" です。これは iframe の src attribute 内の URL の origin、または fencedframe の fenced frame config を表します。

空でない場合、 iframeallow または fencedframeallow attribute は、構築時に iframe または fencedframecontainer policy に、各 supported featureallowlist を追加する結果になります。

Create a permissions policy for a fenced navigable という新しい algorithm を作成します。

fenced navigable container (container) と origin (origin) が与えられた場合、この algorithm は 新しい Permissions Policy を返します。

  1. fencedFrameConfig を、containernode documentactive browsing contextfenced frame config instance とします。

  2. inheritedPolicy を新しい ordered map とします。

  3. fencedFrameConfig が null でなく、かつ fencedFrameConfigpermissions policy behaviorfixed である場合:

    1. For each feature supported:

      1. fencedFrameConfigeffective enabled permissionsfeature含む場合、 inheritedPolicy[feature] を "Enabled" に設定します。

        そうでない場合、inheritedPolicy[feature] を "Disabled" に設定します。

      注: これは allow attribute を考慮しませんが、これは呼び出される時点ではすでに Should navigation response to navigation request be blocked by Permissions Policy? により checked されています。 allow で指定された policy が制限的すぎる場合、fenced frame は読み込まれないことになり、 effective enabled permissions で指定されたものより permissive な policy は無視されます。

  4. そうでない場合:

    1. For each feature supported:

      1. featurefenced frame allowed permissions のいずれかに一致する場合、inheritedPolicy[feature] を、 feature, container, および origin を与えて Define an inherited policy for feature in container at origin を実行した結果に設定します。

        そうでない場合、inheritedPolicy[feature] を "Disabled" に設定します。

  5. policy を、inherited policy inheritedPolicy と、2つの新しい ordered maps に初期化された declared policy を持つ、新しい permissions policy とします。

  6. policy を返します。

Create a Permissions Policy for a navigable アルゴリズムを変更します:

null または element (container)、origin (origin)、およびデフォルトが false の optional な boolean matchAll が与えられた場合、この algorithm は新しい permissions policy を返します。

ステップ 1 を次のように書き換えます:

  1. Assert: null でない場合、containernavigable container または fenced navigable container のいずれかです。

ステップ 3 を次のように書き換えます:

  1. For each feature supported:

    1. isInherited を、feature, container, origin, および matchAll に対して Define an inherited policy for feature in container at origin を実行した結果とします。

    2. inherited policy[feature] を isInherited に設定します。

Create a Permissions Policy for a navigable from response アルゴリズムを次のように変更します:

null、navigable container-または-fenced navigable container (container)、origin (origin)、および response (response) が与えられた場合、この algorithm は新しい permissions policy を返します。

ステップ 1 を次のように書き換えます:

  1. containerfenced navigable container である場合、 policy を、containerorigin を与えて create a permissions policy for a fenced navigable を実行した結果とします。

    そうでない場合、policy を、containerorigin を与えて Create a Permissions Policy for a navigable を 実行した結果とします。

Process permissions policy attributes アルゴリズムのステップ 1 を 次のように変更します:
  1. elementiframe element でも fencedframe element でもない場合、空の policy directive を返します。

[HTML]attempt to populate the history entry’s document アルゴリズムを変更します。ステップ 6.4(Otherwise, if any of the following are true:)に、 次の条件を追加します:

注: これらの algorithms のいずれかが "Blocked" を返す場合、 fencedframe 内の既存の Document は残らず、error page が読み込まれます。

Should navigation response to navigation request be blocked by Permissions Policy?

navigation params (navigationParams) が与えられた場合、 この algorithm は "Blocked" または "Allowed" を返します:

  1. navigablenavigationParamsnavigable とします。

  2. navigablefenced navigable でない場合、 "Allowed" を返します。

  3. originnavigationParamsorigin とします。

  4. effective permissions を、navigableactive browsing contextfenced frame config instanceeffective enabled permissions とします。

    pull request #84 で省略された作業によると、config instance はまだ browsing context に割り当てられていません。 代わりに instance を navigationParams 内に格納し、ここから参照することを検討するべきです。

  5. permissionsPolicy を、navigablefenced navigable container, origin, および true を与えて creating a permissions policy を実行した結果とします。

    注: これは、この pending navigation の最終的な Document を navigation が構築するときに created される permissions policy とほとんど同じです。 違いは、この algorithm が iframes で呼び出される場合と同様に、 allow attribute で指定されたすべての permissions を含むことです。たとえその permission が fenced frame configeffective enabled permissions で指定されていなくてもです。navigation が失敗するかどうかを判断する適切な時点であるため、 ここでこれを作成して tests を実行し、その後破棄します。navigation が成功した場合、それは再作成され、 Document に無条件に install されます。しかし、再作成されたものには effective enabled permissions に含まれていない追加の enabled permissions は含まれず、 enabled permissions は実質的に effective enabled permissions で指定されたものだけに固定されます。

  6. inheritedPolicypermissionsPolicyinherited policy とします。

  7. effective permissions の各 effective permission について 反復します:

    1. inheritedPolicy[effective permission] が "Disabled" である場合、 "Blocked" を返します。

  8. "Allowed." を返します。

Should navigation response to navigation request be blocked by sandboxing flags?

navigation params (navigationParams) と source snapshot params (sourceSnapshotParams) が与えられた場合、この algorithm は "Blocked" または "Allowed" を返します:

  1. navigablenavigationParamsnavigable とします。

  2. navigablefenced navigable でない場合、 "Allowed" を返します。

  3. effectiveSandboxingFlags を、sourceSnapshotParamstarget fenced frame configeffective sandboxing flags とします。

  4. navigationParamsfinal sandboxing flag seteffectiveSandboxingFlagssubset でない場合、 "Blocked" を返します。

    注: これは、final sandboxing flag set が、effective sandboxing flags ですでに制限されていない feature を制限できないことを意味します。追加の制限は communication channel として 使用され得るためです。この時点までに、final sandboxing flag set はすでに effective sandboxing flags少なくとも 同じくらい制限的なものに設定されています。

  5. そうでない場合、"Allowed" を返します。

Define an inherited policy for feature in container at origin アルゴリズムを次のように変更します:

feature (feature)、null または navigable container (container)、 その container 内の document の origin (origin)、およびデフォルトが false の optional な boolean matchAll が与えられた場合、この algorithm は、その feature の inherited policy を返します。

ステップ 3 を次のように書き換えます:

  1. feature, containernode document, origin, および matchAll に対して Is feature enabled in document for origin? を実行した結果が "Disabled" である場合、 "Disabled" を返します。

注: step 2 も同じ algorithm に delegate しますが、 matchAll boolean を渡すように書き換える必要はありません。なぜなら step 2 は、 container の内部に hosted される Document ではなく、containernode documentfeature が enabled であるかを check することに関係するためです。

ステップ 7 を次のように書き換えます:

  1. matchAll が false、featuredefault allowlist'self'、かつ origincontainernode document の origin と same origin である場合、"Enabled" を返します。

Is feature enabled in document for origin? アルゴリズムを次のように変更します:

feature (feature)、Document object (document)、origin (origin)、およびデフォルトが false の optional な boolean matchAll が与えられた場合、この algorithm は、 feature が disabled と見なされるべきであれば "Disabled" を返し、 そうでなければ "Enabled" を返します。

ステップ 3 を次のように書き換えます:

  1. featurepolicydeclared policy に present である場合、

    1. matchAll が false であり、かつ policydeclared policy にある featureallowlistoriginmatches する場合、 "Enabled" を返します。

    2. そうでなく、matchAll が true であり、かつ policydeclared policy にある featureallowlistthe special value * である場合、 "Enabled" を返します。

    3. そうでない場合、"Disabled" を返します。

ステップ 5 を次のように書き換えます:

  1. matchAll が false、featuredefault allowlist'self'、かつ origindocument の origin と same origin である場合、 "Enabled" を返します。

declared origin アルゴリズムを変更します。ステップ 3 の後に、 次の新しいステップを追加します:
  1. nodenode documentbrowsing contextfenced frame config instance が null でない場合、nodenode documentbrowsing contextfenced frame config instancemapped url を返します。

注: これにより、 allow attribute に設定できる 'src' allowlist が、 fenced frame config を使用して fencedframe を navigate する場合(または fenced frame config に map する urn を使って iframe を navigate する場合)に機能することが保証されます。

テスト

4.4. CSSOM View

[CSSOM-VIEW] specification は、scrollIntoView() method を定義しており、それは scroll a target into view algorithm を呼び出します。これは target を visible にするために Element または viewport を scroll するだけでなく、必要に応じて ancestors も scroll して target を visible にし、本質的に scroll が "bubble up" することを引き起こします。これは、 scrollIntoView()child navigable または fenced navigable 内で実行されると、その embedder から観測でき、fenced frame boundary をまたいだ collusion を可能にすることを意味します。この節では、その collusion を防ぐため、ある程度の utility を犠牲にして、scroll a target into view algorithm に patch を当てます。

scroll a target into view algorithm を変更し、algorithm の末尾に 次のように書かれた step を追加します:
  1. scrolling box の associated Element の associated Documentnode navigabletraversable navigablefenced navigable である場合、または scrolling box の associated viewport の associated Documentnode navigabletraversable navigablefenced navigable である場合、 これを、この後に続くはずだったさらなる recursive instances を停止する、この algorithm の最後の instance とします。

注: これにより、scrolling は fenced frame boundary までは "bubble up" できますが、それを越えることはできません。

テスト

4.5. Iframe credentialless

この最初の導入節は非規範的です。

[IFRAME-CREDENTIALLESS] specification は、新しい object である page credentialless nonce を定義します。高いレベルでは、partition noncepage credentialless nonce と同じ 目的(storage と network の partitioning)を果たします。しかし、各 fenced frame は固有の nonce を持つ一方、page credentialless noncetraversable navigableactive window に scoped された単一のものであり、すべての descendent credentialless iframes に共有されます。

fenced frames と credentialless iframes が同じ tree に存在する場合、child の nonce は 常に parent のものより優先されます。例:

resource partitioning に加えて、partition nonce は fenced frames で network access を revoke するためにも使用されます。以下の monkeypatches を [IFRAME-CREDENTIALLESS] spec に適用します。

次の algorithm を追加します:

boolean credentiallesspartition nonce-or-null newFencedFrameNonce が与えられたとき、compute the effective partition nonce するには:
  1. credentialless が true である場合、associated browsing contexttop-level browsing contextpage credentialless nonce を返します。

  2. newFencedFrameNonce が null でない場合、newFencedFrameNonce を返します。

  3. instance を、associated browsing contextfenced frame config instance とします。

  4. instance が null でない場合は instancepartition nonce を返し、 そうでない場合は null を返します。

network partition keyredefinition を次のように書き換えます:

network partition key は、次のものから成る tuple です:

section 6.1.9.1 全体を次のように書き換えます:

create navigation params by fetching で、 18 と 19 の間に、次のように書かれた新しい step を追加します:

  1. partitionNonce を、browsingContext について、 browsingContextnavigation’s credentialless flag を計算した結果と null を与えて、computing the effective partition nonce を実行した結果とします。

注: ここで computing the effective partition nonce に null を渡すのは、 fenced frame から発生した navigation fetches が fenced frame 自身と同じ partition を使用することを望むためです。 navigation fetch が完了して document を initialize した後は、fenced frame config instancepartition nonce を介して 正しい partition nonce に access できます。

step 19 を 20 に renumber し、step 20.2.4 を次のように書き換えます:

  1. requestreserved client を、新しい environment に設定します。その id は unique opaque string、target browsing contextnavigableactive browsing contextcreation URLcurrentURLtop-level creation URLtopLevelCreationURLtop-level origin topLevelOrigin、そして partition noncepartitionNonce.

initialize the document object に追加された step を次のように変更します:

6.9. partitionNonce を、browsingContext について、navigationParamscredentialless と、 navigationParamsfenced frame config instance が null である場合は null、そうでなければ navigationParamsfenced frame config instancepartition nonce を与えて computing the effective partition nonce を実行した結果とします。

4.6. WebRTC

[WEBRTC] specification は、「media と generic application data を、適切な real-time protocols の集合を実装している別の browser または device へ送信し、 そこから受信することを可能にする WebIDL における ECMAScript APIs」を定義します。peers への connections を容易にする interface は RTCPeerConnection です。この interface の construction、したがって WebRTC を介した peers への connection は、fenced frames では許可されません。

RTCPeerConnection constructor algorithm を変更し、新しい first および second steps を追加します。内容は次のとおりです:
  1. navigable を、thisrelevant global objectnavigable とします。

  2. navigable が null でなく、かつ navigabletraversable navigablefenced navigable である場合、NotAllowedError DOMExceptionthrow します。

5. Security & Privacy に関する考慮事項

この material は私たちの explainer からこの specification へ upstream されている最中であり、その間は 次の resources を参照できます:

索引

この仕様で定義される用語

参照により定義される用語

参照文献

規範参照

[ANONYMOUS-IFRAME]
Iframe credentialless. Draft Community Group Report. URL: https://wicg.github.io/anonymous-iframe/
[ATTRIBUTION-REPORTING-API]
Attribution Reporting. Draft Community Group Report. URL: https://wicg.github.io/attribution-reporting-api/
[CSP]
Mike West; Antonio Sartori. Content Security Policy Level 3. URL: https://w3c.github.io/webappsec-csp/
[CSPEE]
Mike West. Prerendering Revamped. CG-DRAFT. URL: https://w3c.github.io/webappsec-cspee/
[CSS2]
Bert Bos; et al. Cascading Style Sheets Level 2 Revision 1 (CSS 2.1) Specification. URL: https://drafts.csswg.org/css2/
[CSSOM-VIEW]
Simon Pieters. CSSOM View Module. URL: https://drafts.csswg.org/cssom-view/
[DOM]
Anne van Kesteren. DOM Standard. Living Standard. URL: https://dom.spec.whatwg.org/
[FETCH]
Anne van Kesteren. Fetch Standard. Living Standard. URL: https://fetch.spec.whatwg.org/
[HTML]
Anne van Kesteren; et al. HTML Standard. Living Standard. URL: https://html.spec.whatwg.org/multipage/
[IFRAME-CREDENTIALLESS]
Arthur Sonzogni; Camille Lamy. Iframe credentialless. CG-DRAFT. URL: https://wicg.github.io/anonymous-iframe/
[INFRA]
Anne van Kesteren; Domenic Denicola. Infra Standard. Living Standard. URL: https://infra.spec.whatwg.org/
[MIXED-CONTENT]
Emily Stark; Mike West; Carlos IbarraLopez. Mixed Content. URL: https://w3c.github.io/webappsec-mixed-content/
[PERMISSIONS-POLICY]
Ian Clelland. Permissions Policy. URL: https://w3c.github.io/webappsec-permissions-policy/
[Prerendering-Revamped]
Domenic Denicola; Dominic Farolino. Prerendering Revamped. CG-DRAFT. URL: https://wicg.github.io/nav-speculation/prerendering.html
[REFERRER-POLICY]
Jochen Eisinger; Emily Stark. Referrer Policy. URL: https://w3c.github.io/webappsec-referrer-policy/
[Reporting]
Douglas Creager; Ian Clelland; Mike West. Reporting API. URL: https://w3c.github.io/reporting/
[RFC6455]
I. Fette; A. Melnikov. The WebSocket Protocol. December 2011. Proposed Standard. URL: https://www.rfc-editor.org/rfc/rfc6455
[RFC8941]
M. Nottingham; P-H. Kamp. Structured Field Values for HTTP. February 2021. Proposed Standard. URL: https://httpwg.org/specs/rfc8941.html
[Shared-Storage]
Cammie Barnes. Shared Storage API. CG-DRAFT. URL: https://wicg.github.io/shared-storage/
[TURTLEDOVE]
Protected Audience (formerly FLEDGE). Draft Community Group Report. URL: https://wicg.github.io/turtledove/
[URL]
Anne van Kesteren. URL Standard. Living Standard. URL: https://url.spec.whatwg.org/
[WEBIDL]
Edgar Chen; Timothy Gu. Web IDL Standard. Living Standard. URL: https://webidl.spec.whatwg.org/
[Webpackage]
Loading Signed Exchanges. Draft Community Group Report. URL: https://wicg.github.io/webpackage/loading.html
[WEBRTC]
Cullen Jennings; et al. WebRTC: Real-Time Communication in Browsers. URL: https://w3c.github.io/webrtc-pc/
[WebSockets]
Adam Rice. WebSockets Standard. Living Standard. URL: https://websockets.spec.whatwg.org/
[WebTransport]
Nidhi Jaju; Victor Vasiliev. WebTransport. URL: https://w3c.github.io/webtransport/

参考参照

[Protected-Audience]
Paul Jensen. Protected Audience API. CG-DRAFT. URL: https://wicg.github.io/turtledove/

IDL 索引

[Exposed=Window]
interface HTMLFencedFrameElement : HTMLElement {
  [HTMLConstructor] constructor();

  [CEReactions] attribute FencedFrameConfig? config;
  [CEReactions] attribute DOMString width;
  [CEReactions] attribute DOMString height;
  [SameObject, PutForwards=value] readonly attribute DOMTokenList sandbox;
  [CEReactions] attribute DOMString allow;
};

enum OpaqueProperty {"opaque"};

[Exposed=Window, Serializable]
interface FencedFrameConfig {
  constructor(USVString url);
  undefined setSharedStorageContext(DOMString contextString);
};

typedef (USVString or FencedFrameConfig) UrnOrConfig;

partial interface Navigator {
  Promise<undefined> deprecatedReplaceInURN(
    UrnOrConfig urnOrConfig, record<USVString, USVString> replacements);
  Promise<USVString> deprecatedURNtoURL(
    UrnOrConfig urnOrConfig, optional boolean send_reports = false);
  sequence<USVString> adAuctionComponents(unsigned short numAdComponents);
};

enum FenceReportingDestination {
  "buyer",
  "seller",
  "component-seller",
  "direct-seller",
  "shared-storage-select-url",
};

dictionary FenceEvent {
  // This dictionary has two mutually exclusive modes that aren’t represented as
  // distinct IDL types due to distinguishability issues:
  //
  // When reporting to a preregistered destination (specified by enum), the following
  // properties are used:
  DOMString eventType;
  DOMString eventData;
  sequence<FenceReportingDestination> destination;

  // Determines if this data can be sent in a reportEvent() beacon or automatic
  // beacon that originates from a document that is cross-origin to the mapped
  // URL of the fenced frame config that loaded this frame tree.
  // Note that automatic beacon data can only be set from documents that are
  // same-origin to the fenced frame config’s mapped URL, so this effectively
  // opts in the data to being used in a cross-origin subframe.
  boolean crossOriginExposed = false;

  // When setting event data to be used later in an automatic beacon, the
  // following properties are used:
  boolean once = false;

  // When reporting to a custom destination URL (with substitution of macros defined by
  // the Protected Audience buyer), the following property is used:
  USVString destinationURL;
};

typedef (FenceEvent or DOMString) ReportEventType;

[Exposed=Window]
interface Fence {
    undefined reportEvent(optional ReportEventType event = {});
    undefined setReportEventDataForAutomaticBeacons(optional FenceEvent event = {});
    sequence<FencedFrameConfig> getNestedConfigs();
    Promise<undefined> disableUntrustedNetwork();
    undefined notifyEvent(Event event);
};

partial interface Window {
  // Collection of fenced frame APIs
  readonly attribute Fence? fence;
};

partial interface mixin GlobalEventHandlers {
  attribute EventHandler onfencedtreeclick;
};

Issues 索引

通常の child navigable creationtop-level traversable creation の際に行うように、URL and history update steps を呼び出す必要はありませんが、それでも新しい navigable 内の History.length を初期化する仕組みは必要です。これは HTML Standard における既存の issue です: https://github.com/whatwg/html/issues/9030.
デフォルトは "all" なので、技術的にはここで何も設定する必要はありません。ここで設定しているのは、 いくつかの other beacons のように、ここでは service workers を skip するほうが適切かもしれないことを 私たち自身に思い出させるためです。
これには、WPT web driver に test-only function を追加するための RFC が必要になります。 (WICG/fenced-frame#192) その web driver の変更が行われた後、 disableUntrustedNetwork() に関する既存の Chromium-internal web platform tests を upstream し、ここに link する必要があります。 (WICG/fenced-frame#207)
これは、fenced frame nonce と iframe credentialless nonce の両方(存在する場合)を渡す必要があります。 (WICG/fenced-frame#191)
意図としては、sourceSnapshotParamstarget fenced frame config は、 embedder-initiated の fencedframe navigation では non-null、それ以外では null であるべきです。しかし、この issue が 解決されるまでは、これは true ではありません。
queue a cross-origin embedder policy inheritance violation algorithm を fence する必要があるか、 unfence する必要があるかを判断します。unfenced のままにすると privacy leak を引き起こす可能性があります。
queue a cross-origin embedder policy CORP violation report algorithm を fence する必要があるか、 unfence する必要があるかを判断します。unfenced のままにすると privacy leak を引き起こす可能性があります。
上記の condition は、必要とされるほど厳密ではありません。たとえば、 fencedframe が config-generating API を使用して FencedFrameConfig を生成し、 その後 config の urn:uuid を正しく推測した場合、理論上は その推測した urn を、たとえば location API のようなものを介して URL として navigate algorithm に渡すことで、 自身をその config へ navigate できます。これは好ましくありません。なぜなら、 FencedFrameConfig の目的は、 config object を直接使用することで、embedder だけが fencedframe を config が表す resource へ navigate できるようにすることだからです。これを修正する考えについては #194 を参照してください。
これは実際には機能しますが、fenced frames を念頭に置かずに設計された COOP mechanism に piggyback するのではなく、これを実行するための別の mechanism を使用することを検討すべきです。 その mechanism は、この specification に望ましくない side-effects を与える形で進化する可能性があります。
次の内容につながる behavior を指定します:
pull request #84 で省略された作業によると、config instance はまだ browsing context に割り当てられていません。 代わりに instance を navigationParams の内部に格納し、ここから参照することを検討すべきです。