プリレンダリングの刷新

ドラフトコミュニティグループレポート、

このバージョン:
https://wicg.github.io/nav-speculation/prerendering.html
課題追跡:
GitHub
仕様内のインライン
編集者:
(Google)
(Google)

概要

このドキュメントは、適切に仕様化されたプリレンダリングのための仕様パッチのコレクションを含みます。

この文書のステータス

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

1. 推測ルール

HTML § 7.6.1 Speculation rulesを以下のように変更してプリレンダリングをサポートする。

1.1. 構文解析

speculation rule set の構造体を、追加で2つの要素を持つよう拡張する:

speculation rule の構造体に、次の1つの要素を追加する:

parse a speculation rule set stringを次のように修正する:

実装では、§ 1.2 処理モデルの修正により、prerender候補をprefetchとして扱うこともできる。

parse a speculation ruleに次の手順を追加:
  1. targetHintをnullにする。

  2. input["target_hint"]が存在する場合:

    1. input["target_hint"]が有効なナビゲーブル名またはキーワードでない場合:

      1. ユーザーエージェントは、与えられたtarget hintが無効であることをコンソールに警告できる。

      2. nullを返す。

    2. targetHintをinput["target_hint"]に設定する。

そして最後の段階でspeculation ruleを返す際にtarget navigable name hintにtargetHintをセットするよう更新。

1.2. 処理モデル

prerender candidateは、次の要素を追加で持つspeculative load candidateである:

consider speculative loadsアルゴリズムを次のように早期離脱するよう修正: documentのnode navigableがprerendering navigableの場合。 (推測的にロードされたページ内で更なる推測的ロードを行うのは無駄が大きいため、という説明を付記する。)
inner consider speculative loads stepsアルゴリズムを、prefetchCandidates構築後の冒頭に以下を追加:
  1. prerenderCandidatesを空のリストとする。

  2. 各 documentのspeculation rule setsのruleSetについて:

    1. 各 (rules, shouldBlockScripts) in « (ruleSetのprerender rules, false), (ruleSetのprerender_until_script rules, true) »:

      1. 各 rule in rules:

        1. 各 url in ruleのURLsに対して:

          1. referrerPolicy を推測的ロードreferrer policyの計算(rule、null)で得る。

          2. 追加:新規prerender candidate(以下を付与)をprerenderCandidatesへ

            URL

            url

            No-Vary-Search hint

            ruleのNo-Vary-Search hint

            eagerness

            ruleのeagerness

            referrer policy

            referrerPolicy

            tags

            ruleのtags

            target navigable name hint

            ruleのtarget navigable name hint

            should block scripts

            shouldBlockScripts

        2. ruleのpredicateがnullでなければ:

          1. links = matching linksの検索(document、ruleのpredicate)

          2. 各 link in linksについて:

            1. target = ruleのtarget navigable name hint

            2. targetがnullなら、要素のtarget取得(link)でセット。

            3. referrerPolicy = 推測的ロードreferrer policyの計算(rule、link)

            4. 追加: prerender candidate(下記)をprerenderCandidatesに追加:

              URL

              linkのurl

              No-Vary-Search hint

              ruleのNo-Vary-Search hint

              eagerness

              ruleのeagerness

              referrer policy

              referrerPolicy

              tags

              ruleのtags

              target navigable name hint

              target

              should block scripts

              shouldBlockScripts

  3. speculativeLoadCandidatesをprefetchCandidatesとprerenderCandidatesの和集合とする。

後続の、「もはや推測中でないprefetch record」をキャンセルする処理はspeculativeLoadCandidatesに対して行うこと。

prerenderCandidateGroupsリストをprefetchCandidateGroupsと同様に(ただしprefetchCandidatesの代わりにprerenderCandidatesを使って)作成。

実際のprefetch処理(従来はprefetchCandidateGroupsをループ)の箇所を以下に置換:

  1. speculativeLoadCandidateGroupsをprefetchCandidateGroupsとprerenderCandidateGroupsの和集合とする。

  2. 各 group in speculativeLoadCandidateGroupsについて:

    1. ユーザーエージェントは次の手順を行ってもよい:

      1. candidate = group[0]

      2. tagsToSend = speculative load candidateたちからタグを集めるをgroupで実行

      3. prefetchRecord = 新規prefetch record(以下設定)

        source

        "speculation rules"

        URL

        candidateのURL

        No-Vary-Search hint

        candidateのNo-Vary-Search hint

        referrer policy

        candidateのreferrer policy

        tags

        tagsToSend

      4. candidateがprefetch candidateなら、 prefetchRecordのanonymization policy にcandidateのanonymization policyをセット

      5. candidateがprerender candidateなら、次を実行してもよい:

        1. prefetchRecordのprerendering traversable に "to be created" をセット

        2. prefetchRecordのprerendering target navigable name hintにcandidateのtarget navigable name hintをセット

        3. referrer起点のナビゲーションプリレンダ開始(document, prefetchRecord, candidateのshould block scripts)を実行

      6. 前段を実行しなかった場合はreferrer起点のナビゲーションプレフェッチ開始(document、prefetchRecord)を実行。

      (以降、その"may"実行タイミングに関する説明文は維持)

1.3. トリガー

属性変更手順を、 a および area 要素について target 属性も監視し、この属性が変更された場合 推測的ロードの考慮 を実行するようにする。

2. プリレンダリング基盤

2.1. Document インタフェースへの拡張

[HTML]で定義される Document を次のように変更する:

partial interface Document {
    readonly attribute boolean prerendering;

    // "Document" オブジェクトにのみ適用される特殊イベントハンドラーIDL属性の下
    attribute EventHandler onprerenderingchange;
};

onprerenderingchange 属性は、 イベントハンドラーIDL属性であり、prerenderingchange イベントハンドラーイベントタイプに対応する。(HTMLの該当テーブル—現状 onreadystatechange のみ—を追記する。)

[HTML]の流儀に従い prerendering の定義本体は別セクションに配置。これを以下新設セクションに置く:

2.2. プリレンダリングナビゲーブル

このセクションはHTMLの [HTML] のNavigables 節に新規追加

すべてのnavigableは、 loading mode(以下のいずれか)を持つ:

"default"

この navigable にロードされたコンテンツには特別な扱いなし

"prerender"

この navigable はプリレンダ済みのコンテンツを表示している

デフォルトではnavigableのloading modeは"default"。 loading modeが"prerender"のnavigableは、prerendering navigableと呼ぶ。 prerendering navigableかつ top-level traversableなものをprerendering traversableと呼ぶ。

prerendering navigableのアクティブブラウジングコンテキストは補助ブラウジングコンテキストとなることはない。

loading modeの値は2つのみだが、将来fenced frameやportals、uncredentialed(クロスサイト)prerendering等で拡張しやすい構造で設計済。機能標準化が進み不要ならboolに単純化予定。

すべてのnavigableはscripting mode(以下のいずれか)も持つ:

"enabled"

スクリプトは通常どおり実行される

"blocked-until-activation"

navigableが活性化されるまでスクリプトはブロックされる

デフォルトでnavigableのscripting modeは"enabled"。

scripting modeはnavigableのプロパティでありdocumentには属さない。これにより同じnavigable内でのナビゲーションでも属性が保存される。about:blankの初期documentや活性化前リダイレクトに重要。

すべてのprerendering traversableはprerender初期応答search varianceを持つ。これはURL search varianceかnull(初期値はnull)。

document.prerendering

そのページが非対話的プリレンダリング文脈で表示されていればtrueを返す。

この値はtrue→falseとなりうる。その際Document でprerenderingchange イベントが発火する(再びtrueになることはない)。

prerenderingのgetter手順は、thisが非nullの node navigableを持ち、それがprerendering navigableであればtrue、さもなくばfalseを返す。


すべてのDocument はpost-prerendering activation steps list を持ち、その内容はリスト であり、各要素はアルゴリズム手順列。任意のプラットフォームオブジェクトplatformObjectの post-prerendering activation steps listは次とする:

もしplatformObjectがノード
  1. platformObjectのノードドキュメントのpost-prerendering activation steps listを返す。

その他
  1. アサート:platformObjectのrelevant global objectは Window オブジェクトである。

  1. platformObjectのrelevant global objectの関連付けられたDocumentのpost-prerendering activation steps listを返す。

すべてのDocument はactivation start timeを持つ。初期値は時刻0の DOMHighResTimeStamp である。

すべてのDocument はallow cross origin iframes navigation while prerenderingを持ち、これはboolean で初期値は false。

2.3. プリレンダリングアルゴリズム

ユーザーエージェントは、リファラードキュメントなしでプリレンダリングを開始してもよい。例えばアドレスバーや他のブラウザー操作の結果として実施される場合がある。

次の手順で ユーザーエージェント主導プリレンダリングの開始 を行う:URL startingURLを与える。

  1. アサート: startingURLのスキームはHTTP(S) schemeである。

  2. prerenderingTraversableを新規トップレベルtraversableの作成(引数nullと空文字列)で得る。

  3. prerenderingTraversableのloading modeを"prerender"にセットする。

  4. prefetchRecordを新規prefetch recordとして、URLをstartingURL、 anonymization policyをnull、 referrer policyを空文字列、 No-Vary-Search hintをdefault URL search variance、 sourceを"browser UI"、 prerendering traversableをprerenderingTraversable とする。

  5. referrer起点ナビゲーションプレフェッチ開始を prerenderingTraversableのactive documentとprefetchRecordで呼び出す。

  6. navigate prerenderingTraversable to startingURL using prerenderingTraversableのactive document

    この最初のナビゲーションはprerenderingTraversable自身によって実行され、関連する全てのセキュリティチェックが実行されることを保証する。

  7. ユーザーがactivationURLへのナビゲーションコミットを希望した場合、そのactivationURLについて prefetchRecordが該当URLとして一致する場合:

    1. ユーザーが新しいユーザー可視なトップレベルtraversableを作成希望の場合 (例:アドレスバー入力後にShift+Enter)

      1. 後継の活性化更新 (prerenderingTraversable、startingURL、activationURL)を呼ぶ

      2. UIをprerenderingTraversableを表示するUIに更新(例:新しいタブ/ウィンドウ作成)

      3. 活性化の完了 (prerenderingTraversable, startingURLのorigin)

    2. ユーザーが既存のtop-level traversable predecessorTraversableへコミット希望の場合(例:アドレスバー入力後にEnter)

      1. 活性化 prerenderingTraversableをpredecessorTraversableの場所で "push", startingURL, activationURL 与えて実行

ユーザーがこのようなコミット指示を出さない場合や遅れる場合、ユーザーエージェントがプリレンダリソースを即時タスク等で回収できる。 その場合prerenderingTraversableはdestroyされうる。

referrer起点ナビゲーションプリレンダ開始 (Document referrerDoc, prefetchRecord prefetchRecord, boolean blockScripts):
  1. アサート: prefetchRecordのURLの schemeはHTTP(S) schemeである。

  2. もしreferrerDocのnode navigableがtop-level traversableでなければreturn。

    現在、子ナビゲーブル内でのプリレンダリングは未仕様・未実装。

  3. もしreferrerDocのbrowsing contextが補助ブラウジングコンテキストならreturn

    これにより、プリレンダリング中のトラバーサブルと、referrerDocのブラウジングコンテキストのopenerブラウジングコンテキストとの間に潜在的に存在するopener関係を処理する必要がなくなります。

  4. もしreferrerDocのoriginがprefetchRecordの URLのoriginと same site でなければreturn

    現時点でクロスサイトプリレンダは仕様化もされていない。

  5. もしreferrerDocがprefetchRecordについて checkPrerender有効で 一致するprefetch recordを持つならreturn

  6. アサート: prefetchRecordのprerendering traversableは"to be created"

  7. prerenderingTraversableを新規トップレベルtraversable作成の結果とする。

    ユーザーエージェントは、prefetchRecordのprerendering target navigable name hintを、新しいトップレベルトラバーサブルを作成する実装へのヒントとして利用できます。このヒントは、作成されたプリレンダリングトラバーサブルの最終的な活性化が、特定の先行トラバーサブルを置き換えるとWeb開発者が期待していることを示します。その先行トラバーサブルは、prefetchRecordのプリレンダリング先ナビゲーブル名のヒントとreferrerDocのノードナビゲーブルを指定してナビゲーブルを選択する規則を呼び出した場合に選択されるものです。

    これはただのヒントであり、この値に規範的な意味はありません。将来、ヒントが示していない別の先行トラバーサブルを置き換えて活性化することもまったく問題ありません。

  8. prerenderingTraversableのloading modeを"prerender"にセット

  9. blockScriptsがtrueならprerenderingTraversableの scripting modeを "blocked-until-activation"にセット

  10. prefetchRecordのprerendering traversableをprerenderingTraversableにセット

  11. prerenderingTraversableのremove from referrerを prefetchRecordのprerendering traversableをnullにするアルゴリズムにセット。

    すべてのtop-level traversableと同様、prerendering traversableは、応答しなくなった場合、制限された操作を実行した場合、ユーザーエージェントがプリレンダリングに過剰なリソースが必要だと判断した場合など、任意の理由で破棄できます。その場合も、プリレンダリングトラバーサブルが破棄されていても、prefetch recordは残るため、将来のナビゲーションを満たすために利用できます。

  12. referrer起点ナビゲーションプレフェッチ開始(referrerDoc, prefetchRecord)

  13. navigate prerenderingTraversable to prefetchRecordのURL using referrerDoc、 referrerPolicyは prefetchRecordのreferrer policy

活性化のため後継更新 を行う(prerendering traversable successorTraversable、 URL startingURL、URL activationURLを与える):

  1. successorDocument = successorTraversableのactive document

  2. もしstartingURL = successorDocumentのURLかつ startingURL ≠ activationURL なら:

    1. アサート:successorDocumentは URLの書き換え可能である

    2. navigation = successorDocumentのrelevant global objectのnavigation API

    3. continue = push/replace/reload navigateイベント発火 (navigation, "replace", activationURL, true)

    4. もしcontinueがtrueならURLと履歴更新 (successorDocument, activationURL)を実行

    No-Vary-Search等によるURL不正確一致の場合に、プリレンダURLと実際ナビゲーション先URLを一致させる。

活性化 (prerendering traversable successorTraversableをtop-level traversable predecessorTraversableの場所で、history handling behavior historyHandling、URL startingURL、URL activationURL、 オプションでnavigation ID navigationIdも可)

  1. アサート:successorTraversableのactive documentのinitial about:blankかはfalse。

  2. navigationId未指定ならランダムUUID生成でセット

  3. referrerOrigin = predecessorTraversableのactive documentのorigin

  4. predecessorTraversableのongoing navigationをnavigationIdにセット

    これにより他のナビゲーションをabortする効果がある

  5. 並列で次を実行:

    1. unloadPromptCanceled = アンロードがユーザーにキャンセルされたか確認 (predecessorTraversableのactive documentの包含descendant navigablesについて)

    2. もしunloadPromptCanceledがtrue、あるいはpredecessorTraversableのongoing navigationがnavigationIdでなくなったら中断。

    3. グローバルタスクをキュー (navigation and traversal task source、 predecessorTraversableのactive window)で abort predecessorTraversableのactive documentを実行

    4. 活性化のため後継更新を(successorTraversable、startingURL、activationURL)で実行

    5. セッション履歴トラバース手順の追加 をpredecessorTraversableに対し、以下実行:

      1. アサート:successorTraversableの current session history stepは0

      2. アサート:successorTraversableの session history entriesの sizeは1

      3. successorEntry = successorTraversableの session history entries[0]

      4. 削除 successorEntryをsuccessorTraversableの session history entriesから。

        この時点でsuccessorTraversableは空であり、観測されずに破棄できます。ただし、実装は次のステップのために、successorEntryと、その中の文書およびそのDocumentのbrowsing contextを含めて生存させておく必要があります。

      5. クロスドキュメントナビゲーション完了 (predecessorTraversable, historyHandling, successorEntry)

        含まれる文書のブラウジングコンテキストを含め、session history entry全体を移動したため、関連する履歴エントリ間のトラバースでは、Cross-Origin-Opener-Policyヘッダーの場合と同様にブラウジングコンテキストグループが切り替わります。これにより、COOPと同様にすべてのopener関係が切断されます。このトラバースには、ここでsuccessorEntryをアクティブにする実際の活性化処理だけでなく、活性化後にユーザーが戻るボタンを押す場合や、ページがhistory.back()を使う場合も含まれます。後者では逆方向に切り替わります。

      6. UIもタブ/ウィンドウ内容やchrome等の変更を反映

      7. 活性化完了(successorTraversable、referrerOrigin)

      8. ここでWebDriver BiDiに対して何かするべきでしょうか。w3c/webdriver-bidi#321を参照してください。現状では、navigateアルゴリズムの並列処理より前の部分で、通常のナビゲーションと同じようにWebDriver BiDiのナビゲーション開始を送信しますが、その後はナビゲーションの完了を示す処理が行われません。

活性化の完了 (トップレベルtraversable traversable、origin originを与える):
  1. 各 navigable in traversableの active documentの包含descendant navigablesについて グローバルタスクをキュー( navigation and traversal task source) navigableのactive windowを与えて実行:

    1. 各 origin → hintSet in navigableのprerender-scoped Accept-CH cache:

      1. セット Accept-CH cache[origin]=hintSet

    2. もしnavigableのscripting modeが "blocked-until-activation" なら:

      1. navigableのscripting modeを "enabled"に

      2. navigableのactive documentのスクリプト実行を解除

      スクリプト再開およびキュー済タスク再処理仕様詳細は要記述。

    3. doc = navigableのactive document

    4. ここで、投稿されたタスク内でloading modeの変更を伝搬するべきです。実装はこの時点でdocument.prerenderingが返す値を更新することになります。しかし現状ではこれはトラバーサブル上にあるため、セッション履歴エントリを移動すると自動的に更新されます。おそらくこれをDocument上に移す必要があります。

    5. もしdocのoriginがoriginと同じなら docのactivation start timeを docのrelevant global objectの current high resolution timeにセット

    6. イベント発火 prerenderingchange をdoc宛に発火

    7. 各 steps in docの post-prerendering activation steps list:

      1. stepsを実行

        Promise等何かを返しても無視可能

      2. アサート:steps実行で例外投げていない

      同一イベントループのDocument間では順序観測可能だが、異なる場合は順序化不能。

prerendering traversableには remove from referrer が紐付く(nullまたは引数なしアルゴリズム、初期値null)。

prerendering traversableがdestroyされた際、参照を確実にクリアするため、destroy a top-level traversableの末尾に以下を追加:

  1. traversableがprerendering traversableかつ traversableのremove from referrerがnullでないなら、traversableのremove from referrerを呼ぶ。

2.4. ナビゲーブル作成の修正

子ナビゲーブルがchild navigablesで、親のloading modeを継承することを保証するため、create a new child navigableの最後に次のステップを追加:
  1. navigableのloading modeをelementのnode navigableのloading modeに設定する。

一致するプリレンダ済みプレフェッチレコードの検索 を Document predecessorDocument と URL urlについて行うアルゴリズム:
  1. recordToUseをnullにする。

  2. 各 record in predecessorDocumentのprefetch recordsに対して:

    1. recordのprerendering traversableがprerendering traversableでなければcontinue。

    2. recordのprerendering traversableのactive documentのis initial about:blankがtrueならcontinue。

    3. recordのURLがurlと等しい場合:

      1. recordToUse = record

      2. Break

    4. recordToUseがnullでrecordがurlで is expected to match a URLなら:

      1. recordToUse = record

  3. recordToUseがnullでなければ:

    1. Remove recordToUse from predecessorDocumentのprefetch records

  4. recordToUseを返す。

一致するプリレンダ済みプレフェッチレコードの待機 (navigable navigable, URL url, string cspNavigationType, POST resource/string/null documentResource):
  1. アサート:これは並列で動作している。

  2. 次のいずれかに該当すれば:

    ならnullを返す

  3. predecessorDocumentをnavigableのactive documentとする。

  4. cutoffTimeをnullにする。

  5. 繰り返し:

    1. completeRecord = 一致するプリレンダ済みプレフェッチレコードの検索 (predecessorDocument, url)

    2. completeRecordがnullでなければ、それを返す。

    3. potentialRecordsを空のリストとする。

    4. 各 record in predecessorDocumentのprefetch recordsについて:

      1. 全て次を満たせばpotentialRecordsにrecordをappend:

    5. potentialRecordsが空ならnullを返す

    6. predecessorDocumentのprefetch recordsの任意の要素の prerendering traversableの ongoing navigationが 変化するまで待機

    7. cutoffTimeがnullでpotentialRecordsに prerendering traversableで active documentの is initial about:blankがfalseな要素があれば、 cutoffTimeをpredecessorDocumentのrelevant global objectの current high resolution time で設定

navigateアルゴリズムを修正し、通常ナビゲーションの場所でprerendering traversableの活性化 を許可:以下の手順を並列に入った直後に追加:

navigateの中で、次の手順を並列ブロック直後に挿入:
  1. record = 一致するプリレンダ済みプレフェッチレコードの待機 (navigable, url, cspNavigationType, documentResource)

  2. recordがnullでなければ:

    1. matchingPrerenderedNavigable = recordのprerendering traversable

    2. startingURL = recordのURL

    3. 活性化(matchingPrerenderedNavigable, navigable, historyHandling, startingURL, url, navigationId)

    4. この手順を中止。

create navigation params by fetchingの冒頭付近に次を追加:
  1. initiatorOriginをentryのdocument stateのinitiator originとする。

アルゴリズムの"While true:"の最初のサブステップ直後に次も追加:

  1. もしnavigableがprerendering navigableかつcurrentURLの originがinitiatorOriginと same siteでなければ:

    1. もしnavigableがtop-level traversableならnullを返す。

    2. そうでなければ、navigableのtop-level traversableのactive documentのallow cross origin iframes navigation while prerenderingが falseなら、ユーザーエージェントはnavigableのloading mode が"normal"になるまで待つ。 (この待ち中、または直ちにnavigableのtop-level traversableをdestroyしてnullを返してもよい)

アルゴリズム終盤、locationURLチェック後に次の手順も追加:

  1. もしnavigableがprerendering navigableで、responseOriginが initiatorOriginとsame originでなければ:

    1. loadingModes = getting the supported loading modes/response

    2. loadingModesに `credentialed-prerender`が含まれなければnullを返す。

      将来的にはuncredentialed-prerenderも許容し得るが、現状クロスサイト用途でまだ仕様等もないため除外。

create and initialize a Document objectで 「navigationParamsのresponseにRefreshヘッダー」の直後に次追加:
  1. もしnavigationParamsのnavigableがprerendering navigableなら:

    1. loadingModes = getting the supported loading modes / response

    2. loadingModesが `prerender-cross-origin-frames` を含めばdocumentのallow cross origin iframes navigation while prerenderingをtrueにする

attempt to populate the history entry’s documentにて、 failureの値決定直後で、かつその後の処理前に以下追加:
  1. もしnavigableがprerendering navigableで以下いずれかなら:

    なら:

    1. Destroy navigableのtop-level traversable

    2. return

  2. navigableがprerendering traversableかつ navigableのprerender initial response search varianceがnullなら:

    1. navigableのprerender initial response search varianceをobtaining a URL search variance(navigationParamsのresponse)でセット

hand-off to external softwareの冒頭に次を追加:
  1. もしnavigableがprerendering navigableなら外部ソフト呼び出しをせずreturn

リダイレクト時もプリレンダ活性化を認めることも可能だが、現状複雑化防止・未実装のため割愛。

3.3. 単純なセッション履歴の維持

navigateアルゴリズムを修正し、prerendering navigableのセッション履歴が常に単純であるように、全ての他の手順の前に次のステップを追加する:
  1. もしnavigableがprerendering navigableなら、 historyHandlingを"replace"に設定する。

URL and history update stepsを修正し、1ステップ目の直後に次の手順を追加:
  1. もしnavigableがprerendering navigableなら、 historyHandlingを"replace"に設定する。

3.4. ワーカーのライフタイムとの相互作用

The worker’s lifetimeにて、active needed workerの定義を修正し、prerendering navigableのownerを持つワーカーをactiveとみなさない:

ワーカーは次のいずれかのownerを持つ場合active needed workerであると言う: Document オブジェクトがfully activeかつ、そのnode navigableがprerendering navigableでない場合、または active needed workersである。

このため、ワーカーのスクリプトはロードされるが、documentが活性化されるまで実行は保留される。

3.5. Document破棄時のクリーンアップ

destroyアルゴリズム(Document対象) の末尾に次の処理を追加:

  1. 空にする documentの post-prerendering activation steps list

4. 他の仕様・概念との相互作用

4.1. Page Visibilityとの相互作用

prerendering navigables内のDocumentは必ずvisibility stateが"hidden"となる。

おそらく明示的にこの状態の更新が必要。document.prerenderingの扱いと同様。

4.2. システムフォーカスとの相互作用

prerendering traversablesは決してシステムフォーカスを持たない。

4.3. PerformanceNavigationTiming インタフェースへの拡張

PerformanceNavigationTiming インタフェースを次のように拡張:

partial interface PerformanceNavigationTiming {
    readonly attribute DOMHighResTimeStamp activationStart;
};

activationStart のgetter手順は:

  1. thisのrelevant global objectのassociated Documentのactivation start timeを返す。

4.4. Client Hint Cacheとの相互作用

Accept-CH cacheはユーザーエージェントがグローバルに持つストレージであるが、prerendering中は変更しないようにし、活性化後に正しく反映させる必要がある。以下の修正でこれを保証する。

各prerendering navigableはprerender-scoped Accept-CH cacheを持ち、これはordered map(originからclient hints setsへのマップ)である。

これはoriginごとにどのclient hintsをopt-inしたかを格納し、活性化が確定した時にグローバルAccept-CH cacheにコピーされる。

update the client hints set from cache アルゴリズムの2番目の手順を次のように置換:
  1. navigableをsettingsObjectのglobal objectのnavigableとする。

  2. originMatchingEntriesを、Accept-CH cacheのうち、originがsettingsObjectのoriginとsame originであるエントリ群とする。

  3. もしnavigableがprerendering navigableなら:

    1. prerenderAcceptClientHintsCacheをnavigableのprerender-scoped Accept-CH cacheとする。

    2. originをsettingsObjectのoriginとする。

    3. もしprerenderAcceptClientHintsCache[origin]が存在すれば、originMatchingEntriesをprerenderAcceptClientHintsCache内の、オリジンがoriginとsame originとなるもの群とする。

create or override the cached client hints setの最後の手順を以下で更新:
  1. navigableをsettingsObjectのglobal objectのnavigableとする。

  2. もしnavigableがprerendering navigableならセット navigableのprerender-scoped Accept-CH cache[origin] = hintSetとする。

  3. それ以外はセット Accept-CH cache[origin] = hintSet

4.5. Clear Site Dataとの相互作用

Clear Site Data § 3.1 The Clear-Site-Data HTTP Response Header Fieldに次のヘッダー値の説明を追加:

"prerenderCache"

"prerenderCache"タイプは、特定originから発生した任意のプリレンダを、responseのURLに基づき、サーバが削除希望を指示することを示す。

このタイプは"cache"タイプのサブセットである。

実装詳細は下記参照。

parse response’s Clear-Site-Data headerのパース手順を修正し:

clear site data for responseのswitch分岐に "prerenderCache" を処理し、clear prerender cacheをoriginに対して呼ぶケースを追加。

prerender cacheのクリア(origin originを取る):
  1. 各 ユーザーエージェントのtop-level traversable set中の top-level traversable traversableについて:

    1. navigablesをtraversableのactive documentの包含descendant navigablesとする。

    2. 各 navigable in navigablesについて:

      1. activeDocumentをnavigableのactive documentとする。

      2. もしactiveDocumentのoriginがoriginとsame originでなければcontinue。

      3. 各 prefetchRecord in activeDocumentのprefetch recordsについて:

        1. prefetchRecordのprerendering traversable がnullならcontinue。

        2. キャンセル・廃棄 prefetchRecord(activeDocumentを与える)

4.6. Fetchとの相互作用

HTTP-network-or-cache fetchを修正し、既存の `Sec-Purpose`設定処理の後に次のステップを追加:
  1. それ以外で、httpRequestのclientが environment settings objectで、かつ そのglobal objectがWindowで、 さらにそのWindowのnavigableがprerendering navigableなら:

    1. purposeにListを新規作成し、Token prefetchを格納する。

    2. prefetchトークンに、キー"prerender"、値trueパラメータを追加する。

    3. 構造化フィールド値のセットを (`Sec-Purpose`, purpose)でhttpRequestのheader listに実行。

    これはprerendering navigable内のサブリソースや、prerendering navigable自身のナビゲーション双方に適用される。

5. `Supports-Loading-Mode` HTTPレスポンスヘッダー

このセクションは[HTML]のLoading web pages節の下位項目として追加。

場合によっては、クロスオリジンのWebページが新しい文脈でロードされる準備ができていないことがある。それらがそのような方法でのロードを許可するために、`Supports-Loading-Mode` HTTPレスポンスヘッダーが利用できる。このヘッダーは構造化ヘッダーであり、設定時には下記リストのtokenの1つ以上でなければならない。

実際のパースはlist of tokenとして行われ、不明なtokenは無視される。

`credentialed-prerender` トークンは、レスポンスがクロスオリジン同一サイトreferrer起点のprerendering navigable作成に利用可能であることを示す。 これがなければ、§ 3.2 ナビゲーション取得の変更にあるように、そのようなプリレンダは失敗する。

`prerender-cross-origin-frames` トークンは、レスポンスが全クロスオリジンiframeのプリレンダに使用可能であることを示す。これがなければ、該当プリレンダは§ 3.2 ナビゲーション取得の変更通り遅延される。

get the supported loading modes for response responseの手順:

  1. もしresponseがnetwork errorなら空リストを返す。

  2. slmHeaderを構造化フィールド値の取得で `Supports-Loading-Mode`, "list"をresponseのheader listから得る。

  3. slmHeaderからlistを作成し、そのうち要素がtokenであるもの全てを返す。

6. 望ましくない(侵入的な)挙動の防止

プリレンダ中のprerendering navigableでは、ユーザーにとって侵入的となるため種々の挙動が禁止される。

6.1. スクリプト実行の一時停止

navigableのscripting modeが"blocked-until-activation"の場合、ユーザーエージェントはそのnavigableのactive documentに対してスクリプトを実行してはならない。これは<script>要素の実行も含むが、それに限らない。

スクリプト実行のブロック方法や関連タスクのキューイング方法など、詳細仕様は今後明確にする必要あり。

この仕様により、ページが活性化されるまでJavaScript実行が完全に停止される。インラインイベントハンドラーの扱いについては議論中。

6.2. リソースのダウンロード

download the hyperlinkアルゴリズムを修正し、prerendering navigable内でのダウンロードは活性化まで遅延されるよう、並列処理直前に次を挿入:

  1. もしsubjectのnode navigableがprerendering navigableなら、そのsubjectのpost-prerendering activation steps listに処理を追加してreturn。

6.3. ユーザープロンプト

cannot show simple dialogsアルゴリズムをWindow windowに対し、最初の手順として次を追加:
  1. もしwindowのnavigableがprerendering navigableなら、trueを返す。

print() メソッドの手順冒頭に次を追加:
  1. thisのnavigableがprerendering navigableならreturn。

6.4. 非同期API結果の遅延

多くの仕様は、prerendering navigable内でアルゴリズムが呼ばれた場合、navigableのtop-level traversableが活性化されるまで処理の大半を保留するよう修正が必要である。多くの仕様はイベントループの利用設計が未整理であり一律記述は難しいが、以下に指針を示す。

スクリプトモードが"blocked-until-activation"なら、そのアルゴリズムを呼ばせるスクリプト自体が活性化まで実行されないことに注意。

6.4.1. [DelayWhilePrerendering] 拡張属性

非同期メソッドの挙動を活性化まで遅延する定型ロジックを抽象化するため、[DelayWhilePrerendering] Web IDL拡張属性を導入する。 これは、prerendering navigable内でメソッドが呼ばれた場合、pending promiseを即returnし実処理を行わない。活性化時に本来の処理を実行し、戻り値でpromiseをresolve/rejectする。

[DelayWhilePrerendering] 拡張属性は引数なし・ regular operationまたはstatic operation で、return typeがpromise typeまたはundefined、exposure setがWindowのみでなければならない。

[DelayWhilePrerendering] 注釈付きoperationの手順は以下に置換:
  1. realmをcurrent realmとする。

  2. もしoperationがregular operationなら、realm = relevant realm of this。

  3. もしrealmのglobal objectのnavigableがprerendering navigableなら:

    1. promiseをrealmで新規Promiseとして作成。

    2. thisのpost-prerendering activation steps listに次ステップ追加:

      1. result = 本来指定されていたoperation手順を同じthisと引数で実行した結果

      2. resolve promise with result

    3. このoperationのreturn typeがpromise typeならpromiseを返す。

  4. さもなくば本来指定されていた手順をもとのthisと引数で実行した結果を返す。

6.4.2. Service Workers

[DelayWhilePrerendering] をupdate()、 unregister()、 register(scriptURL, options)、 postMessage(message, transfer)、 postMessage(message, options) に追加する。

これにより、プリレンダページが既存Service Workerの利用はできても、Service Worker登録状態自体は変化しない。

6.4.3. BroadcastChannel

[DelayWhilePrerendering] をpostMessage() に追加する。

6.4.4. Geolocation API

getCurrentPosition() メソッドの手順の先頭に次のステップを追加:
  1. もしthisのrelevant global objectのnavigableがprerendering navigableであれば、thisのpost-prerendering activation steps listに以下の手順を追加し、return する。

watchPosition() メソッドの手順の先頭に次のステップを追加:
  1. もしthisのrelevant global objectのnavigableがprerendering navigableであれば:

    1. watchIdを実装依存の unsigned long とし、post-prerendering activation geolocation watch process IDとして記録する。

    2. thisのpost-prerendering activation steps listに以下の手順を追加し、その際生成されたwatchIdをIDとして使用し、watchIdを返す。

clearWatch(watchId) メソッドの手順の先頭に次のステップを追加:
  1. もしthisのrelevant global objectのnavigableがprerendering navigableであれば:

    1. もしwatchIdがpost-prerendering activation geolocation watch process IDであれば、対応する手順をthisのpost-prerendering activation steps listから削除する。

    2. return。

6.4.5. Web Serial API

[DelayWhilePrerendering] を requestPort() に追加する。

TODO: 以下は [DelayWhilePrerendering] を dedicated worker 内で owner document を使うよう一般化すれば実装可能。

getPorts() メソッドの手順で、promise生成直後に次の手順を挿入:
  1. document を thisの relevant global object の associated Document (もしthisのrelevant global objectがWindowであれば)、または thisのrelevant global objectのowner document(thisのrelevant global objectが DedicatedWorkerGlobalScopeなら)とする。

  2. もし document が null なら、promise rejected with "SecurityError" DOMException を返す。

  3. もし document のnode navigableがprerendering navigableであれば、documentのpost-prerendering activation steps listに手順を追加し、promiseを返す。

6.4.6. Notifications API

[DelayWhilePrerendering] を requestPermission() に追加する。

Notification() コンストラクタの手順で、in parallelとなっていた手順を次のように置換:
  1. もしthisのrelevant global objectのnavigableがprerendering navigableならthisのpost-prerendering activation steps listにこれら手順を追加。さもなくば元通りin parallelとして実行。

permission 静的getterの手順を次で置換:
  1. もしcurrent global objectのnavigableがprerendering navigableなら、"default" を返す。

    これにより、特にプリレンダリング中のナビゲーブルでは同期的にアクセスできない可能性がある、実際の許可状態の照会を実装が回避できます。Web開発者はNotification.requestPermission()を呼び出せますが、上記の変更により、実際の処理は活性化後にのみ行われます。その時点で許可が"granted"または"denied"と判明する可能性があるため、ブラウザは"default"の場合のようにユーザーへ尋ねないかもしれません。しかし、これはWeb開発者のコードからは観測できないため問題ありません。

  2. さもなくば get the notifications permission state を実行してその値を返す。

6.4.7. Web MIDI API

[DelayWhilePrerendering] を requestMIDIAccess() に追加する。

6.4.8. Idle Detection API

[DelayWhilePrerendering] を start() に追加する。

もう1つの重要なメソッドIdleDetector.requestPermission() はtransient activationでゲートされている。ただしすでにoriginの許可があっても、prerendering中はidle detectorの開始は遅延される。

6.4.9. Generic Sensor API

start() メソッドの手順で、状態を"activating"にセットした直後に次を挿入:
  1. もしthisのrelevant global objectのnavigableがprerendering navigableであれば、thisのpost-prerendering activation steps listに手順を追加し、return。

  2. もしthis.[[state]] が"idle"ならreturn。

    prerendering遅延中にstop()が実行されていれば、活性化時に何もしないことを保証。

  3. Assert: this.[[state]] は"activating"である。

6.4.10. Web NFC

[DelayWhilePrerendering] をwrite() およびscan() に追加する。

6.4.11. Battery Status API

getBattery()メソッドの手順の先頭に次の手順を追加:
  1. もしthisのrelevant global objectのnavigableがprerendering navigableであれば、thisのpost-prerendering activation steps listに手順を追加し、this.[[BatteryPromise]]を返す。

6.4.12. Screen Orientation API

apply orientation lockアルゴリズムの最初の並列処理前までの手順を次で上書き:
  1. promiseを新しいpromiseとする。

  2. もしthisのrelevant global objectのnavigableがprerendering navigableであれば、thisのpost-prerendering activation steps listに手順を追加しpromiseを返す。

  3. もしuser agentが画面の向きロックをサポートしないなら、reject promise with "NotSupportedError" DOMExceptionを投げてpromiseを返す

  4. もしdocumentのactive sandboxing flag setがsandboxed orientation lock browsing context flagを持つか、user agentが pre-lock conditionsを満たさないなら、 reject promise with "SecurityError" DOMExceptionを投げてpromiseを返す

  5. documentの[[orientationPendingPromise]]にpromiseをセット

[DelayWhilePrerendering] を unlock() に追加する。

この修正により、screen.orientation.lock() の直後に screen.orientation.unlock() が呼ばれた場合にも期待通りの挙動になる。

6.4.13. Gamepad

getGamepads() メソッドの手順の先頭に次を追加:
  1. もしthisのrelevant global objectのnavigableがprerendering navigableであれば空のsequenceを返す。

gamepadconnected とgamepaddisconnected イベントに関する説明を修正し、Windowオブジェクトのnavigableがprerendering navigableの場合はユーザーエージェントがこれらのイベントをdispatchしないことを明記する。

gamepadconnected セクションを修正し、各Document documentのpost-prerendering activation steps listに以下を追加する:
  1. もしdocumentが"gamepad"機能のallowed to useであり、documentのrelevant settings objectがsecure contextで、かつgamepadが一つでも接続されていれば、接続されている各gamepadについてgamepadconnected イベントをdocumentのrelevant global objectに対しGamepadEventを用いて発火し、 gamepad 属性は接続中gamepadを示す新規Gamepad オブジェクトで初期化する。

6.4.14. Encrypted Media Extensions

[DelayWhilePrerendering] をrequestMediaKeySystemAccess() に追加する。

6.4.15. Media Autoplay

playing the media resource セクションを修正し、 HTMLMediaElement のcurrent playback positionは Document がprerendering でない場合のみ単調増加することを明記する。

6.4.16. Media Capture and Streams

[DelayWhilePrerendering] をgetUserMedia()、 getUserMedia() および enumerateDevices() に追加する。

MediaDevices セクションで、device change notification stepsの先頭に次を追加:
  1. もしthisのrelevant global objectのnavigableがprerendering navigableならreturn。

6.4.17. Web Audio API

allowed to startという概念は仕様内で使われているが詳細は実装依存とされている。 プリレンダ中の自動再生を制限するため、AudioContext インタフェースセクションに以下ルールを追加:

AudioContext はプリレンダ中はallowed to startにならない。

また、AudioContext() コンストラクタの返却直前に以下の手順を追加:

  1. プリレンダによってcontextがallowed to startになっていない場合、contextのpost-prerendering activation steps listに以下を追加:

    1. contextの[[control thread state]] をrunningへセット

    2. control messageをキューしcontextをresume

プリレンダ時にresume() を呼ぶ開発者もいることがある。その場合contextはallowed to startにならず、promiseは[[pending resume promises]]に格納される。 このpromiseは活性化時に上記手順でresolveされる。

AudioScheduledSourceNode インタフェースのstart(when)メソッドや AudioBufferSourceNode のstart(when, offset, duration)メソッドも [[control thread state]]に影響する可能性があるが、 contextがallowed to startではないため、該当アルゴリズムが [[control thread state]]をセットしない。contextが始動すればnodeも自動始動できるので問題はない。

6.4.18. Audio Output Devices API

[DelayWhilePrerendering] を selectAudioOutput() に追加する。

6.4.19. Push API

[DelayWhilePrerendering] を subscribe() に追加する。

6.4.20. Background Fetch

[DelayWhilePrerendering] を fetch() に追加する。

6.4.21. Background Sync

[DelayWhilePrerendering] を register() に追加する。

6.4.22. Storage API

[DelayWhilePrerendering] を persist() に追加する。

6.4.23. WebUSB API

[DelayWhilePrerendering] を getDevices() および requestDevice() に追加する。

6.4.24. Web Bluetooth

[DelayWhilePrerendering] を getDevices() および requestDevice() に追加する。

6.4.25. WebHID API

[DelayWhilePrerendering] を getDevices() および requestDevice() に追加する。

6.4.26. WebXR Device API

[DelayWhilePrerendering] を requestSession() に追加する。

6.4.27. Credential Management

[DelayWhilePrerendering] を get()、 store()、 create() に追加する。

6.4.28. Web Speech API

[DelayWhilePrerendering] を speak(utterance)、 cancel()、 pause()、 resume() に追加する。

[DelayWhilePrerendering] を start()、 stop()、 abort() に追加する。

6.4.29. Web Locks API

[DelayWhilePrerendering] を request(name, callback)、 request(name, options, callback)、 query() に追加する。

6.4.30. カスタムスキームハンドラー

registerProtocolHandler(scheme, url) メソッドの最初の並列前までの手順を次のように上書き:
  1. (normalizedScheme, normalizedURLString)をnormalize protocol handler parametersの(scheme, url, thisのrelevant settings object)で取得する。

  2. もしthisのrelevant global objectのnavigableがprerendering navigableなら、thisのpost-prerendering activation steps listに手順を追加してreturn。

unregisterProtocolHandler(scheme, url) メソッドの最初の並列前までの手順を次のように上書き:
  1. (normalizedScheme, normalizedURLString)をnormalize protocol handler parameters (scheme, url, thisのrelevant settings object)で取得する。

  2. もしthisのrelevant global objectのnavigableがprerendering navigableなら、thisのpost-prerendering activation steps listに手順を追加してreturn。

6.5. 暗黙的に制限されるAPI

いくつかのAPIは修正不要です。なぜならprerendering navigableやそのactive window、active documentが絶対に持たない特性が必須条件のため、自動的に失敗またはno-opになります。これらの特性には次が含まれます:

どのAPIを検査済みか明示するため、ここに既知APIを一覧します。

一時的アクティベーション または スティッキーアクティベーション 必須API:

システムフォーカス必須API:

"visible"な visibility state が必須なAPI:

より複雑なケース:

7. セキュリティに関する考慮事項

HTML § 7.6.5 Security considerationsを参照。

No-Vary-Search連携については、No-Vary-Search Security considerationsも参照。

プリレンダ固有のセキュリティ考慮事項追記要。 issue #319参照。

8. プライバシーに関する考慮事項

HTML § 7.6.6 Privacy considerationsを参照。

No-Vary-Search連携については、No-Vary-Search Privacy considerationsも参照。

プリレンダ固有のプライバシー考慮事項追記要。 issue #319参照。特に指摘すべき点として、パーティション間(クロスパーティション)プリレンダは、プライバシー上の複雑さを理由に単純に禁止される点が挙げられる。

索引

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

参照で定義された用語

参考文献

規範参考文献

[AUDIO-OUTPUT]
Guido Urdaneta; youenn fablet. Audio Output Devices API. URL: https://w3c.github.io/mediacapture-output/
[BACKGROUND-FETCH]
Background Fetch. Draft Community Group Report. URL: https://wicg.github.io/background-fetch/
[BACKGROUND-SYNC]
Web Background Synchronization. Draft Community Group Report. URL: https://wicg.github.io/background-sync/spec/
[BATTERY-STATUS]
Anssi Kostiainen. Battery Status API. URL: https://w3c.github.io/battery/
[CLEAR-SITE-DATA]
Mike West. Clear Site Data. URL: https://w3c.github.io/webappsec-clear-site-data/
[CLIENT-HINTS-INFRASTRUCTURE]
Client Hints Infrastructure. Draft Community Group Report. URL: https://wicg.github.io/client-hints-infrastructure/
[CLIPBOARD-APIS]
Rakesh Goulikar; Rohan Raja. Clipboard API and events. URL: https://w3c.github.io/clipboard-apis/
[CONSOLE]
Dominic Farolino; Robert Kowalski; Terin Stock. Console Standard. Living Standard. URL: https://console.spec.whatwg.org/
[CREDENTIAL-MANAGEMENT-1]
Nina Satragno; Marcos Caceres. Credential Management Level 1. URL: https://w3c.github.io/webappsec-credential-management/
[DOM]
Anne van Kesteren. DOM Standard. Living Standard. URL: https://dom.spec.whatwg.org/
[ENCRYPTED-MEDIA-2]
Xiaohan Wang; Greg Freedman. Encrypted Media Extensions. URL: https://w3c.github.io/encrypted-media/
[FETCH]
Anne van Kesteren. Fetch Standard. Living Standard. URL: https://fetch.spec.whatwg.org/
[FILE-SYSTEM-ACCESS]
File System Access. Draft Community Group Report. URL: https://wicg.github.io/file-system-access/
[FULLSCREEN]
Philip Jägenstedt. Fullscreen API Standard. Living Standard. URL: https://fullscreen.spec.whatwg.org/
[GAMEPAD]
Steve Agoston; Matthew Reynolds. Gamepad. URL: https://w3c.github.io/gamepad/
[GENERIC-SENSOR]
Rick Waldron. Generic Sensor API. URL: https://w3c.github.io/sensors/
[GEOLOCATION]
Marcos Caceres; Reilly Grant. Geolocation. URL: https://w3c.github.io/geolocation/
[HR-TIME-3]
Yoav Weiss. High Resolution Time. URL: https://w3c.github.io/hr-time/
[HTML]
Anne van Kesteren; et al. HTML Standard. Living Standard. URL: https://html.spec.whatwg.org/multipage/
[IDLE-DETECTION]
Reilly Grant. Idle Detection API. CG-DRAFT. URL: https://wicg.github.io/idle-detection/
[INFRA]
Anne van Kesteren; Domenic Denicola. Infra Standard. Living Standard. URL: https://infra.spec.whatwg.org/
[KEYBOARD-LOCK]
Keyboard Lock. Draft Community Group Report. URL: https://wicg.github.io/keyboard-lock/
[MEDIACAPTURE-STREAMS]
Cullen Jennings; et al. Media Capture and Streams. URL: https://w3c.github.io/mediacapture-main/
[NAVIGATION-TIMING-2]
Yoav Weiss; Noam Rosenthal. Navigation Timing Level 2. URL: https://w3c.github.io/navigation-timing/
The No-Vary-Search HTTP Caching Extension. Editor's Draft. URL: https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-no-vary-search
[NOTIFICATIONS]
Anne van Kesteren. Notifications API Standard. Living Standard. URL: https://notifications.spec.whatwg.org/
[PAYMENT-REQUEST]
Marcos Caceres; Ian Jacobs; Stephen McGruer. Payment Request API. URL: https://w3c.github.io/payment-request/
[PICTURE-IN-PICTURE]
Francois Beaufort; Simon Farre. Picture-in-Picture. URL: https://w3c.github.io/picture-in-picture/
[POINTERLOCK]
Mustaq Ahmed; Vincent Scheib. Pointer Lock 2.0. URL: https://w3c.github.io/pointerlock/
[PREFETCH]
Prefetch. Draft Community Group Report. URL: https://wicg.github.io/nav-speculation/prefetch.html
[PRESENTATION-API]
Mark Foltz. Presentation API. URL: https://w3c.github.io/presentation-api/
[PUSH-API]
Marcos Caceres; Kagami Rosylight. Push API. URL: https://w3c.github.io/push-api/
[RFC8941]
M. Nottingham; P-H. Kamp. Structured Field Values for HTTP. February 2021. Proposed Standard. URL: https://httpwg.org/specs/rfc8941.html
[SCREEN-CAPTURE]
Jan-Ivar Bruaroey; Elad Alon. Screen Capture. URL: https://w3c.github.io/mediacapture-screen-share/
[SCREEN-ORIENTATION]
Marcos Caceres; Léonie Watson. Screen Orientation. URL: https://w3c.github.io/screen-orientation/
[SCREEN-WAKE-LOCK]
Kenneth Christiansen; Marcos Caceres. Screen Wake Lock API. URL: https://w3c.github.io/screen-wake-lock/
[SECURE-CONTEXTS]
Mike West. Secure Contexts. URL: https://w3c.github.io/webappsec-secure-contexts/
[SERIAL]
Web Serial API. Editor's Draft. URL: https://wicg.github.io/serial/
[SERVICE-WORKERS]
Monica CHINTALA; Yoshisato Yanagisawa. Service Workers Nightly. URL: https://w3c.github.io/ServiceWorker/
[SPEECH-API]
Web Speech API. Draft Community Group Report. URL: https://webaudio.github.io/web-speech-api/
[STORAGE]
Anne van Kesteren. Storage Standard. Living Standard. URL: https://storage.spec.whatwg.org/
[URL]
Anne van Kesteren. URL Standard. Living Standard. URL: https://url.spec.whatwg.org/
[WEB-BLUETOOTH]
Jeffrey Yasskin. Web Bluetooth. URL: https://webbluetoothcg.github.io/web-bluetooth/
[WEB-LOCKS]
Kagami Rosylight. Web Locks API. URL: https://w3c.github.io/web-locks/
[WEB-NFC]
Web NFC API. Draft Community Group Report. URL: https://w3c.github.io/web-nfc/
[WEB-SHARE]
Marcos Caceres; Eric Willigers; Matt Giuca. Web Share API. URL: https://w3c.github.io/web-share/
[WEBAUDIO-1.0]
Paul Adenot; Hongchan Choi. Web Audio API. URL: https://webaudio.github.io/web-audio-api/
[WEBCRYPTO-2]
Daniel Huigens. Web Cryptography Level 2. URL: https://w3c.github.io/webcrypto/
[WEBDRIVER-BIDI]
James Graham; Alex Rudenko; Maksim Sadym. WebDriver BiDi. URL: https://w3c.github.io/webdriver-bidi/
[WEBHID]
WebHID API. Draft Community Group Report. URL: https://wicg.github.io/webhid/
[WEBIDL]
Edgar Chen; Timothy Gu. Web IDL Standard. Living Standard. URL: https://webidl.spec.whatwg.org/
[WEBMIDI]
Chris Wilson; Michael Wilson. Web MIDI API. URL: https://webaudio.github.io/web-midi-api/
[WEBUSB]
WebUSB API. Draft Community Group Report. URL: https://wicg.github.io/webusb/
[WEBXR]
Brandon Jones; Manish Goregaokar; Rik Cabanier. WebXR Device API. URL: https://immersive-web.github.io/webxr/

IDL索引

partial interface Document {
    readonly attribute boolean prerendering;

    // Under "special event handler IDL attributes that only apply to Document objects"
    attribute EventHandler onprerenderingchange;
};

partial interface PerformanceNavigationTiming {
    readonly attribute DOMHighResTimeStamp activationStart;
};

課題一覧

フェンスドフレームナビゲーブルの概念はまだ定義されていませんが、定義されたらリンクが必要です。 ↵
プリレンダリング固有のセキュリティ考慮事項を追記してください。 issue #319を参照。 ↵
プリレンダリング固有のプライバシー考慮事項を追記してください。issue #319。特に、クロスパーティションプリレンダはプライバシー上の複雑さにより単純に禁止される点に言及。 ↵