生成元, サンドボックス法 — Origin, Sandboxing

【この訳に固有の表記規約】

この訳の,~algoや定義の記述に利用されている各種記号( ~LET, ~IF, ε, コレ, ~THROW 等々)の意味や定義の詳細は,~SYMBOL_DEF_REFを~~参照されたし。

7.5. 生成元

生成元せいせいもと( `origin^en )は、~webの~security~modelにおける基礎的な通貨である。 ~web~platformにおける,ある生成元を共有する動作者たちは、互いを信用し,同じ権限を有するものと見做される。 互いの生成元が相違する動作者たちは、敵対的になり得るものと見なされ,様々な程度で互いに隔離される。 ◎ Origins are the fundamental currency of the web's security model. Two actors in the web platform that share an origin are assumed to trust each other and to have the same authority. Actors with differing origins are considered potentially hostile versus each other, and are isolated from each other to varying degrees.

例えば `bank.example.com^c にて~hostされている X 銀行の~web~siteが `charity.example.org^c にて~hostされている Y 事業体の~web~siteの~DOMを精査しようと試行した場合、 `SecurityError$E 例外が~~投出されることになる。 ◎ For example, if Example Bank's web site, hosted at bank.example.com, tries to examine the DOM of Example Charity's web site, hosted at charity.example.org, a "SecurityError" DOMException will be raised.

【 “~~生成元” という訳語は、おそらく,~HTTP用語 ~~生成する ( `generate^en )に由来する — より詳細~には、~HTTP要請に対し 応答を生成した~server ( `origin server^en )(を識別する情報)を指す。 したがって, “~~生成元” の “~~元” の読みは、 `original^en( “~~元の” )を意味する “もと” であり, “げん” ではない。 】


`生成元@ ( `origin^en )は、次のいずれかとして与えられる: ◎ An origin is one of the following:

`不透明な生成元@ ◎ An opaque origin
直列化して再度~作成し直せないような,内部的な値であって(`生成元を直列化する$ときは `null^l に直列化される)、有意義な演算は,同等性を~testすることに限られる。 ◎ An internal value, with no serialization it can be recreated from (it is serialized as "null" per serialization of an origin), for which the only meaningful operation is testing for equality.
`成分組~生成元@ ◎ A tuple origin

次のものからなる(括弧内はとり得る値): ◎ A tuple consists of:

  • `~scheme@o ( `~scheme$url ) ◎ A scheme (a scheme).
  • `~host@o ( `~host$url ) ◎ A host (a host).
  • `~port@o ( `~port$url ) ◎ A port (a port).
  • `~domain@o ( ~NULL または `~domain$url )。 他が言明されない限り, ~NULL とする。 ◎ A domain (null or a domain). Null unless stated otherwise.

注記: `生成元$は共有され得る — 例えば、複数の`文書$間で。 加えて、`生成元$は,一般に変異しない。 `成分組~生成元$の`~domain$oに限り,それも `document.domain$m ~APIを通してのみ,変更され得る。 ◎ Origins can be shared, e.g., among multiple Document objects. Furthermore, origins are generally immutable. Only the domain of a tuple origin can be changed, and only through the document.domain API.

`生成元$ %生成元 の `実効~domain@ は、次に従って算出される: ◎ The effective domain of an origin origin is computed as follows:

  1. ~IF[ %生成元 は`不透明な生成元$である ] ⇒ ~RET ~NULL ◎ If origin is an opaque origin, then return null.
  2. ~IF[ %生成元 の`~domain$o ~NEQ ~NULL ] ⇒ ~RET %生成元 の`~domain$o ◎ If origin's domain is non-null, then return origin's domain.
  3. ~RET %生成元 の`~host$o ◎ Return origin's host.

仕様が定義する様々な~objは,`生成元$を有するように定義される。 これらの`生成元$は、次のうち,最初に該当する項目に従って決定される: ◎ Various specification objects are defined to have an origin. These origins are determined as follows:

  1. `文書$に対しては ⇒ [ `新たな閲覧文脈を作成する$, および`~navi$ ]~algoが、構築~時に`生成元$をアテガう。 他の場合【アテガわなかった場合?】、 `DOM$r に定義される既定の挙動が適用される。 ◎ For Document objects • The create a new browsing context and navigation algorithms assign the origin at construction time. Otherwise, the default default behavior as defined in DOM applies. [DOM]
  2. `img$e 要素による画像に対しては、その`画像~data$に応じて: ◎ For images of img elements

    • `~CORS非同一-生成元$である場合 ⇒ 一意かつ`不透明な生成元$ — これは、画像の作成-時にアテガわれる。 ◎ If the image data is CORS-cross-origin • A unique opaque origin assigned when the image is created.
    • `~CORS同一-生成元$である場合 ⇒ 要素の`~node文書$の`生成元$ ◎ If the image data is CORS-same-origin • The img element's node document's origin.
  3. `~media要素$( `audio$e / `video$e )に対しては、その`~media~data$に応じて: ◎ For audio and video elements

    • `~CORS非同一-生成元$である場合 ⇒ 一意かつ`不透明な生成元$ — これは、~media~dataの~fetch時にアテガわれる。 ◎ If the media data is CORS-cross-origin • A unique opaque origin assigned when the media data is fetched.
    • `~CORS同一-生成元$である場合 ⇒ 要素の`~node文書$の`生成元$ ◎ If the media data is CORS-same-origin • The media element's node document's origin.

他の仕様は、特定0の[ `文書$ / 画像 / `~media要素$ ]の`生成元$を指定して,上の定義を上書きし得る。 ◎ Other specifications can override the above definitions by themselves specifying the origin of a particular Document object, image, or media element.


`生成元を直列化する@ ときは、所与の ( `生成元$ %生成元 ) に対し,次を適用して得される文字列を返す: ◎ The serialization of an origin is the string obtained by applying the following algorithm to the given origin origin:

  1. ~IF[ %生成元 は`不透明な生成元$である ] ⇒ ~RET `null^l ◎ If origin is an opaque origin, then return "null".
  2. %結果 ~LET 次を順に連結した結果 ⇒# %生成元 の`~scheme$o, `://^l, `~hostを直列化する$( %生成元 の`~host$o ) ◎ Otherwise, let result be origin's scheme. ◎ Append "://" to result. ◎ Append origin's host, serialized, to result.
  3. ~IF[ %生成元 の`~port$o ~EQ ~NULL ] ⇒ ~RET %結果 ◎ ↓
  4. ~RET 次を順に連結した結果 ⇒# %結果, `003A^U `:^smb, `整数を直列化する$( %生成元 の`~port$o ) ◎ If origin's port is non-null, append a U+003A COLON character (:), and origin's port, serialized, to result. ◎ Return result.

`成分組~生成元$ ( `https^l, `xn--maraa-rta.example^l, ~NULL, ~NULL ) の`直列化$oは、 `https://xn--maraa-rta.example^l になる。 ◎ The serialization of ("https", "xn--maraa-rta.example", null, null) is "https://xn--maraa-rta.example".

注記: `生成元の~Unicode直列化^i も利用されていたが、それが広く採用されたことは,決してない。 ◎ There used to also be a Unicode serialization of an origin. However, it was never widely adopted.


2 つの`生成元$ %A, %B が `同一-生成元@ であるとは、次のいずれかを満たすことをいう: ◎ Two origins, A and B, are said to be same origin if the following algorithm returns true:

2 つの`生成元$ %A, %B が `同じ生成元~domain@ であるとは、次のいずれかを満たすことをいう: ◎ Two origins, A and B, are said to be same origin-domain if the following algorithm returns true:

%A ( ~scheme, ~host, ~port, ~domain ) %B `同一-生成元$? `同じ生成元~domain$?
(`https^l, `example.org^l, ~NULL, ~NULL) (`https^l, `example.org^l, ~NULL, ~NULL)
(`https^l, `example.org^l, 314, ~NULL) (`https^l, `example.org^l, 420, ~NULL)
(`https^l, `example.org^l, 314, `example.org^l) (`https^l, `example.org^l, 420, `example.org^l)
(`https^l, `example.org^l, ~NULL, ~NULL) (`https^l, `example.org^l, ~NULL, `example.org^l)
(`https^l, `example.org^l, ~NULL, `example.org^l) (`http^l, `example.org^l, ~NULL, `example.org^l)

7.5.1. ~site

`~scheme&~host@ は、 ( `~scheme$url, `~host$ ) が成す`~tuple$である。 ◎ A scheme-and-host is a tuple of a scheme and a host.

`~site@ は、[ `不透明な生成元$/`~scheme&~host$ ]である ◎ A site is an opaque origin or a scheme-and-host.

`~siteを得する@ ときは、所与の ( 生成元 %生成元 ) に対し,次を走らす: ◎ To obtain a site, given an origin origin, run these steps:

  1. ~IF[ %生成元 は`不透明な生成元$である ] ⇒ ~RET %生成元 ◎ If origin is an opaque origin, then return origin.
  2. %~domain ~LET %生成元 の`~host$oの`登録-可能な~domain$ ◎ ↓
  3. ~IF[ %~domain ~EQ ~NULL ] ⇒ %~domain ~SET %生成元 の`~host$o ◎ ↓
  4. ~RET ( %生成元 の`~scheme$o, %~domain ) ◎ If origin's host's registrable domain is null, then return (origin's scheme, origin's host). ◎ Return (origin's scheme, origin's host's registrable domain).

2 つの`生成元$ %A, %B が `~scheme無しで同じ~site@ であるとは、次のいずれかを満たすことをいう: ◎ Two origins, A and B, are said to be schemelessly same site if the following algorithm returns true:

  • [ %A, %B とも`不透明な生成元$である ]~AND[ %A ~EQ %B ] ◎ If A and B are the same opaque origin, then return true.
  • [ %A, %B とも`成分組~生成元$である ]~AND[ ( %A の`~host$o %hostA, %B の`~host$o %hostB ) は次のいずれかを満たす ]:

    • [ ( %hostA, %hostB ) は`同等な~host$である ]~AND[ %hostA の`登録-可能な~domain$ ~EQ ~NULL ]
    • ( %hostA の`登録-可能な~domain$, %hostB の`登録-可能な~domain$ ) は、どちらも ~NULL でない, かつ`同等な~host$である
    ◎ If A and B are both tuple origins, then: • Let hostA be A's host, and let hostB be B's host. • If hostA equals hostB and hostA's registrable domain is null, then return true. • If hostA's registrable domain equals hostB's registrable domain and is non-null, then return true. ◎ Return false.

2 つの`生成元$ %A, %B が `同じ~site@ であるとは、次のいずれも満たすことをいう: ◎ Two origins, A and B, are said to be same site if both of the following statements are true:

  • ( %A, %B ) は、`~scheme無しで同じ~site$である ◎ A and B are schemelessly same site
  • 次のいずれかを満たす:

    • %A, %B とも`不透明な生成元$である
    • [ %A, %B とも`成分組~生成元$である ]~AND[ %A の`~scheme$o ~EQ %B の`~scheme$o ]
    ◎ A and B are either both opaque origins, or both tuple origins with the same scheme

注記: [ `同一-生成元$, `同じ生成元~domain$ ]の概念と違って、[ `~scheme無しで同じ~site$, `同じ~site$ ]においては,[ `~port$o, `~domain$o ]成分は無視される。 ◎ Unlike the same origin and same origin-domain concepts, for schemelessly same site and same site, the port and domain components are ignored.

`URL^cite にて 説明される理由から,[ `同じ~site$, `~scheme無しで同じ~site$ ]の概念は、アリなときは避けるベキである — `同一-生成元$を検査する方が好ましい。 ◎ For the reasons explained in URL, the same site and schemelessly same site concepts should be avoided when possible, in favor of same origin checks.

所与の`公共~接尾辞$[ `wildlife.museum^l, `museum^l, `com^l ]および,そうでない `example.com^l に対し: ◎ Given that wildlife.museum, museum, and com are public suffixes and that example.com is not:

%A ( ~scheme, ~host ) %B `~scheme無しで同じ~site$? `同じ~site$?
(`https^l, `example.com^l) (`https^l, `sub.example.com^l)
(`https^l, `example.com^l) (`https^l, `sub.other.example.com^l)
(`https^l, `example.com^l) (`http^l, `non-secure.example.com^l)
(`https^l, `r.wildlife.museum^l) (`https^l, `sub.r.wildlife.museum^l)
(`https^l, `r.wildlife.museum^l) (`https^l, `sub.other.r.wildlife.museum^l)
(`https^l, `r.wildlife.museum^l) (`https^l, `other.wildlife.museum^l)
(`https^l, `r.wildlife.museum^l) (`https^l, `wildlife.museum^l)
(`https^l, `wildlife.museum^l) (`https^l, `wildlife.museum^l)

(ここでは、[ `~port$o, `~domain$o ]成分は考慮されないので省略している。) ◎ (Here we have omitted the port and domain components since they are not considered.)

7.5.2. 同一-生成元による制約の緩め方

%document . `domain$m [ = %domain ]
~security検査~用に利用される現在の~domainを返す。 ◎ Returns the current domain used for security checks.
下位domainを除去するような値に設定して,`生成元$の`~domain$oを変更できる — そうすることにより, 同じ~domainに属する他の下位domain上の~pageと互いに~accessできるようになる(それらも,同じことをしたならば)。 これは、同じ~domainに属する異なる~host上の~pageが,互いの~DOMへ同期的に~accessすることを可能化する。 ◎ Can be set to a value that removes subdomains, to change the origin's domain to allow pages on other subdomains of the same domain (if they do the same thing) to access each other. This enables pages on different hosts of a domain to synchronously access each other's DOMs.
[ 次において/次のとき ]は、設定子は `SecurityError$E 例外を投出することになる ⇒# ~sandbox化された `iframe$e 内/ `不透明な生成元$を伴う`文書$内/ `属する閲覧文脈$が無い`文書$内/ `document-domain$l 特能は不能化されているとき ◎ In sandboxed iframes, Documents with opaque origins, Documents without a browsing context, and when the "document-domain" feature is disabled, the setter will throw a "SecurityError" exception.\
[ `crossOriginIsolated$m, `originIsolated$m ]どちらかが ~T を返す事例では、設定子は何もしない。 ◎ In cases where crossOriginIsolated or originIsolated return true, the setter will do nothing.

`document.domain$m 設定子を利用するのは、避けること。 それは、同一-生成元~施策が供する~security保護を蝕む。 とりわけ、他者と~hostを共有しているとき,ひどいことになる: 例えば,信用できない第三者主体が[ 同じ~IP~address上の~portだけ異なる~HTTP~server ]を~hostできる場合、[ 通常は同じ~host上の異なる~siteどうしを保護する,同一-生成元による保護 ]は,失敗することになる — `document.domain$m 設定子が利用されて以降は、生成元の比較-時に,その~portは無視されるので。 ◎ Avoid using the document.domain setter. It undermines the security protections provided by the same-origin policy. This is especially acute when using shared hosting; for example, if an untrusted third party is able to host an HTTP server at the same IP address but on a different port, then the same-origin protection that normally protects two different sites on the same host will fail, as the ports are ignored when comparing origins after the document.domain setter has been used.

これらの~security上の陥穽があるので、この特能は~web~platformから除去されつつある過程にある(何年もかかるであろう)。 ◎ Because of these security pitfalls, this feature is in the process of being removed from the web platform. (This is a long process that takes many years.)

他の生成元と安全な方式で通信するためには、代わりに[ `postMessage()$m / `MessageChannel$I ~obj ]を利用すること。 ◎ Instead, use postMessage() or MessageChannel objects to communicate across origins in a safe manner.

`Document$I の `domain@m 属性の: ◎ ↓

  • 取得子~手続きは: ◎ The domain getter steps are:

    1. %実効~domain ~LET コレの`生成元$の`実効~domain$ ◎ Let effectiveDomain be this's origin's effective domain.
    2. ~IF[ %実効~domain ~EQ ~NULL ] ⇒ ~RET 空~文字列 ◎ If effectiveDomain is null, then return the empty string.
    3. ~RET `~hostを直列化する$( %実効~domain ) ◎ Return effectiveDomain, serialized.
  • 設定子~手続きは: ◎ The domain setter steps are:

    1. ~IF[ コレが`属する閲覧文脈$ ~EQ ~NULL ] ⇒ ~THROW `SecurityError$E ◎ If this's browsing context is null, then throw a "SecurityError" DOMException.
    2. ~IF[ `~document-domain$sbox ~IN コレにて`作動中の~sandbox法~flag集合$ ] ⇒ ~THROW `SecurityError$E ◎ If this's active sandboxing flag set has its sandboxed document.domain browsing context flag set, then throw a "SecurityError" DOMException.
    3. ~IF[ コレには `document-domain$l 特能の`利用は許容されて$いない ] ⇒ ~THROW `SecurityError$E ◎ If this is not allowed to use the "document-domain" feature, then throw a "SecurityError" DOMException.
    4. %実効~domain ~LET コレの`生成元$の`実効~domain$ ◎ Let effectiveDomain be this's origin's effective domain.
    5. ~IF[ %実効~domain ~EQ ~NULL ] ⇒ ~THROW `SecurityError$E ◎ If effectiveDomain is null, then throw a "SecurityError" DOMException.
    6. ~IF[ 所与の値は %実効~domain に対し`登録-可能な~domain接尾辞または同等$でない ] ⇒ ~THROW `SecurityError$E ◎ If the given value is not a registrable domain suffix of and is not equal to effectiveDomain, then throw a "SecurityError" DOMException.
    7. ~IF[ `~surrounding~agent$の`~agent~cluster$の`非同一-生成元~隔離-済み$ ~EQ ~T ] ⇒ ~RET ◎ If the surrounding agent's agent cluster's cross-origin isolated is true, then return.
    8. ~IF[ `~surrounding~agent$の`~agent~cluster$の`生成元~隔離-済み$ ~EQ ~T ] ⇒ ~RET ◎ If the surrounding agent's agent cluster's origin-isolated is true, then return.
    9. コレの`生成元$の`~domain$o ~SET `~host構文解析器$( 所与の値 ) ◎ Set this's origin's domain to the result of parsing the given value.

所与の文字列 %~host接尾辞~文字列 は`~host$ %元の~host に対し `登録-可能な~domain接尾辞または同等@ であるかどうか決定するときは、次を走らす: ◎ To determine if a string hostSuffixString is a registrable domain suffix of or is equal to a host originalHost, run these steps:

  1. ~IF[ %~host接尾辞~文字列 ~EQ 空~文字列 ] ⇒ ~RET ~F ◎ If hostSuffixString is the empty string, then return false.
  2. %~host ~LET `~host構文解析器$( %~host接尾辞~文字列 ) ◎ Let host be the result of parsing hostSuffixString.
  3. ~IF[ %~host ~EQ `失敗^i ] ⇒ ~RET ~F ◎ If host is failure, then return false.
  4. ~IF[ ( %~host, %元の~host ) は`同等な~host$でない ]: ◎ If host does not equal originalHost, then:

    1. ~IF[ %~host , %元の~host のいずれかは`~domain$urlでない ] ⇒ ~RET ~F ◎ If host or originalHost is not a domain, then return false.

      注記: すなわち、 `~IPv4~address$ / `~IPv6~address$ による`~host$は除外する。 ◎ This excludes hosts that are an IPv4 address or an IPv6 address.

    2. ~IF[[ %~host に `002E^U `.^smb を接頭した結果 ]は %元の~host の尾部に【!正確に】合致しない ] ⇒ ~RET ~F ◎ If host, prefixed by a U+002E FULL STOP (.), does not exactly match the end of originalHost, then return false.
    3. ~IF[ ( %~host, %~host の`公共~接尾辞$ ) は`同等な~host$である `URL$r ] ⇒ ~RET ~F ◎ If host equals host's public suffix, then return false. [URL]
  5. ~RET ~T ◎ Return true.

7.5.3 生成元~隔離

%window . `originIsolated$m
この`~window$は,この節に述べる方式で生成元~隔離されるならば、 ~T を返す。 ◎ Returns true if this Window is origin-isolated in the manner described in this section.

`~secureな文脈$enV越しに送達される`文書$は、 `Origin-Isolation$h ~HTTP応答~headerを利用することにより, 生成元~隔離を任意選択できる。 この~headerは、`有構造~header$であり,その値は`真偽値$sfでなければナラナイ。 `STRUCTURED-FIELDS$r ◎ A Document delivered over a secure context can opt in to origin isolation, by using the `Origin-Isolation` HTTP response header. This header is a structured header whose value must be a boolean. [STRUCTURED-FIELDS]

`文書を作成して初期化する$処理~modelにより、 `真偽値$sf ~T (すなわち, `?1^bl )でない値は無視されることになる。 ◎ Per the processing model in the create and initialize a new Document object, values that are not the structured header boolean true value (i.e., `?1`) will be ignored.

この~headerを利用することによる帰結は: ◎ The consequences of using this header are that\

  • 結果の`文書$の`~agent~cluster~key$は、 対応する~siteにはならず,文書の`生成元$になる。 ◎ the resulting Document's agent cluster key is its origin, instead of the corresponding site.
  • 観測-可能な効果としては、 `document.domain$m を利用して 同一-生成元~制約を緩めようと試みても,何もしないことになり、非同一-生成元に属する`文書$へ `WebAssembly.Module$c ~objを送信することも,アリでなくなる(それらが`同じ~site$に属していようが)。 ◎ In terms of observable effects, this means that attempting to relax the same-origin restriction using document.domain will instead do nothing, and it will not be possible to send WebAssembly.Module objects to cross-origin Documents (even if they are same site).
  • この隔離は,舞台裏では、[ ~processや~threadなど、実装に特有な,`~agent~cluster$に対応する資源 ]をより効率的に割振ることを~UAに許容し得る。 ◎ Behind the scenes, this isolation can allow user agents to allocate implementation-specific resources corresponding to agent clusters, such as processes or threads, more efficiently.

`閲覧文脈~group$の中では、[ `Origin-Isolation$h ~headerにより,同一-生成元に属する`文書$どうしが異なる`~agent~cluster$に属する結果に至る ]ことは,決してないことに注意 — それらのうち,あるものは この~headerを送信し、他は送信しない場合でも。 これは、`履歴上の~agent~cluster~key~map$により防止される。 ◎ Note that within a browsing context group, the `Origin-Isolation` header can never cause same-origin Document objects to end up in different agent clusters, even if one sends the header and the other doesn't. This is prevented by means of the historical agent cluster key map.

注記: このことは、同じ`閲覧文脈~group$内に 以前に読込まれた同一-生成元~pageに対し,この~headerが省略されていた場合、 `originIsolated$m 取得子は — この~headerが ~T に設定されたとしても — ~F を返し得ることを意味する。 類似に、~headerが ~T に設定されていないときでも, ~T を返し得る。 ◎ This means that the originIsolated getter can return false, even if the header is set, if the header was omitted on a previously-loaded same-origin page in the same browsing context group. Similarly, it can return true even when the header is not set.

`originIsolated@m 取得子~手続きは ⇒ ~RET `~surrounding~agent$の`~agent~cluster$の`生成元~隔離-済み$ ◎ The originIsolated getter steps are to return the surrounding agent's agent cluster's origin-isolated.

注記: `文書$のうち,`不透明な生成元$に属するものは、無条件に生成元~隔離されるものと見なせる — それらに対しては、この~headerによる効果はない。 ◎ Documents with an opaque origin can be considered unconditionally origin-isolated; for them the header has no effect.

注記: 類似に,`非同一-生成元~隔離-済み$な`~agent~cluster$内の`文書$は、自動的に生成元~隔離される。 `Origin-Isolation$h ~headerは、[ 資源の割振りについての実装に対する追加的な~hint ]としても有用になり得る — が,それを追加しても、作者~codeから観測-可能になる追加的な効果はない。 一方で,非同一-生成元~隔離を達成するために利用される[ `Cross-Origin-Opener-Policy$h / `Cross-Origin-Embedder-Policy$h ]~headerは、[ 同じ~address空間~内にある何もかもが,そこにあること ]を任意選択することを確保することに,より~~力点が置かれる。 ◎ Similarly, Documents in a cross-origin isolated agent cluster are automatically origin-isolated. The `Origin-Isolation` header might be useful as an additional hint to implementations about resource allocation, since the `Cross-Origin-Opener-Policy` and `Cross-Origin-Embedder-Policy` headers used to achieve cross-origin isolation are more about ensuring that everything in the same address space opts in to being there. But adding it would have no additional observable effects on author code.

7.6. ~sandbox法

`~sandbox法~flag集合@ は、以下に挙げる各種~flagのうち,いくつかからなる集合である。 この集合は、それが含む各種~flagを通して,信用できない資源が持ち得る能を制約するために利用される: ◎ A sandboxing flag set is a set of zero or more of the following flags, which are used to restrict the abilities that potentially untrusted resources have:

【! flag ~IN ~sandbox法~flag集合 ↔ flag ~EQ ~T】

【 “~sandbox” — “(こどもの)砂場” ( “監獄” を和らげた語(一般に,より制約も緩い))。 】【 以下に現れる各種 “`X^sbox” は、 “[ X について,閲覧文脈を~sandbox化する( X の機能を抑止する) ]ことを指示する~flag” と解釈する — そのように解釈し易いよう、この訳では,関数的に記している。 】【 以下に現れる “内容” とは、[ これらの~flagが適用される閲覧文脈 ]内の内容を指す。 】

`~navi@sbox ◎ The sandboxed navigation browsing context flag

この~flagは、~sandbox化されている当の閲覧文脈を %B とするとき, 次に挙げるもの以外の`閲覧文脈$ %C に対しては, %B の内容が %C を ~navigateするのを防止する

  • %B 自身
  • %B が内側に更に入子にしている閲覧文脈
  • %B が開いた`補助~閲覧文脈$(これは、`補助~navi$sboxにより保護される)†
  • %B の`~top-level閲覧文脈$(これは、 `利用者~作動化~top-level~navi$sbox, `非~利用者~作動化~top-level~navi$sbox により保護される)
◎ This flag prevents content from navigating browsing contexts other than the sandboxed browsing context itself (or browsing contexts further nested inside it), auxiliary browsing contexts (which are protected by the sandboxed auxiliary navigation browsing context flag defined next), and the top-level browsing context (which is protected by the sandboxed top-level navigation without user activation browsing context flag and sandboxed top-level navigation with user activation browsing context flag defined below).
† この制約にもかかわらず,[ `補助~navi$sbox ~NIN `~sandbox法~flag集合$ ]の下では、ある種の事例では,新たな`~top-level閲覧文脈$として %~popup 【すなわち、`補助~閲覧文脈$】を開くことが許容される。 そのような %~popup の作成-時には、それを作成した`閲覧文脈$が, %~popup の `許可-済み~navigator@†† として設定される — それは、( ~naviに関して~sandbox化されていても)実際には %~popup を~navigateすることが許可される。 (他の場合、 %~popup に対する~naviは,`~navi$sboxにより防止される。) ◎ If the sandboxed auxiliary navigation browsing context flag is not set, then in certain cases the restrictions nonetheless allow popups (new top-level browsing contexts) to be opened. These browsing contexts always have one permitted sandboxed navigator, set when the browsing context is created, which allows the browsing context that created them to actually navigate them. (Otherwise, the sandboxed navigation browsing context flag would prevent them from being navigated even if they were opened.)
【†† “`one permitted sandboxed navigator^en” — この “`one^en” は、[ %~popup に対し`許可-済み~navigator$とされるものは、 1 個だけあること ]を表していると見受けられる。 】
`補助~navi@sbox ◎ The sandboxed auxiliary navigation browsing context flag
この~flagは、内容が 新たな補助~閲覧文脈を作成するのを防止する — 例えば[ `target$a 属性 / `window.open()$m ~method ]を利用して。 ◎ This flag prevents content from creating new auxiliary browsing contexts, e.g. using the target attribute or the window.open() method.
`非~利用者~作動化~top-level~navi@sbox
`利用者~作動化~top-level~navi@sbox
両~flagとも、内容が その`~top-level閲覧文脈$を[ ~navigateするのを防止する閉じるのを防止する ]。 これらは順に、~sandbox化されている閲覧文脈にて`作動中の~window$の`一過な作動化$が[ ~F のとき, ~T のとき ]に限り,アタられる。 ◎ The sandboxed top-level navigation without user activation browsing context flag ◎ This flag prevents content from navigating their top-level browsing context and prevents content from closing their top-level browsing context. It is consulted only when the sandboxed browsing context's active window does not have transient activation.
両~flagとも、影響するのは`~top-level閲覧文脈$に限られる — [ この~flag(`一過な作動化$に応じて適切な方) ~NIN `~sandbox法~flag集合$ ]の下では、内容は,その`~top-level閲覧文脈$を~navigateできる。 が、他の`閲覧文脈$は,依然として他の~flag — `~navi$sboxや, (場合によっては)`補助~navi$sbox — により保護される。 ◎ When the sandboxed top-level navigation without user activation browsing context flag is not set, content can navigate its top-level browsing context, but other browsing contexts are still protected by the sandboxed navigation browsing context flag and possibly the sandboxed auxiliary navigation browsing context flag. ◎ The sandboxed top-level navigation with user activation browsing context flag ◎ This flag prevents content from navigating their top-level browsing context and prevents content from closing their top-level browsing context. It is consulted only when the sandboxed browsing context's active window has transient activation. ◎ As with the sandboxed top-level navigation without user activation browsing context flag, this flag only affects the top-level browsing context; if it is not set, other browsing contexts might still be protected by other flags.
`~plugin@sbox ◎ The sandboxed plugins browsing context flag
この~flagは、内容が[ `embed^e 要素を利用して`object^e 要素を利用して ], あるいは[ それらが`入子にしている閲覧文脈$に対する ~naviを通して ]~pluginを~instance化するのを防止する — それらの`~plugin$を`~secure化でき$ない限り。 ◎ This flag prevents content from instantiating plugins, whether using the embed element, the object element, or through navigation of their nested browsing context, unless those plugins can be secured.
`生成元@sbox ◎ The sandboxed origin browsing context flag
この~flagは、 内容を一意な生成元~内に強制する — したがって,内容が[ 同じ`生成元$からの他の内容 ]に~accessするのを防止する。 ◎ This flag forces content into a unique origin, thus preventing it from accessing other content from the same origin.
この~flagはまた、~scriptが `document.cookie^m ~IDL属性を 読取る/書込むのを防止する ことに加え, `localStorage$m への~accessも阻止する。 ◎ This flag also prevents script from reading from or writing to the document.cookie IDL attribute, and blocks access to localStorage.
`~form@sbox ◎ The sandboxed forms browsing context flag
この~flagは、 ~form提出を阻止する 。 ◎ This flag blocks form submission.
`~pointer~lock@sbox ◎ The sandboxed pointer lock browsing context flag
この~flagは、 Pointer Lock ~APIを不能化する。 `POINTERLOCK$r ◎ This flag disables the Pointer Lock API. [POINTERLOCK]
`~script@sbox ◎ The sandboxed scripts browsing context flag
この~flagは、 ~script実行を阻止する。 ◎ This flag blocks script execution.
`自動~特能@sbox ◎ The sandboxed automatic features browsing context flag

この~flagは、次に挙げるような自動的に誘発される特能を阻止する:

◎ This flag blocks features that trigger automatically, such as automatically playing a video or automatically focusing a form control.
`~document-domain@sbox ◎ The sandboxed document.domain browsing context flag
この~flagは、 `document.domain$m 設定子の利用を防止する。 ◎ This flag prevents content from using the document.domain setter.
`~sandboxは補助~閲覧文脈に伝播する~flag@ ◎ The sandbox propagates to auxiliary browsing contexts flag
この~flagは、[ 内容にて`作動中の~sandbox法~flag集合$ ]を[ 内容が作成する`補助~閲覧文脈$ ]に継承させることにより,内容が ~sandboxから逃れるのを防止する。 ◎ This flag prevents content from escaping the sandbox by ensuring that any auxiliary browsing context it creates inherits the content's active sandboxing flag set.
`~sandbox化( ~modal )~flag@ ◎ The sandboxed modals flag

この~flagは、[ 内容が,次のいずれかの特能を利用して~modal~dialogを生産する ]のを防止する: ◎ This flag prevents content from using any of the following features to produce modal dialogs:

  • `window.alert()$m
  • `window.confirm()$m
  • `window.print()$m
  • `window.prompt()$m
  • `beforeunload$et ~event
`方位~lock@sbox ◎ The sandboxed orientation lock browsing context flag
この~flagは、~screen方位を~lockする能を不能化する。 `SCREENORIENTATION$r ◎ This flag disables the ability to lock the screen orientation. [SCREENORIENTATION]
`呈示@sbox ◎ The sandboxed presentation browsing context flag
この~flagは、 Presentation API を不能化する。 `PRESENTATION$r ◎ This flag disables the Presentation API. [PRESENTATION]
`~download@sbox ◎ The sandboxed downloads browsing context flag
この~flagは、内容が次のいずれかを通して~downloadを起動したり~instance化することを防止する ⇒# `~hyperlinkを~downloadする$/ `~navigate応答を処理する$ときに`~downloadとして$取扱われるもの ◎ This flag prevents content from initiating or instantiating downloads, whether through downloading hyperlinks or through navigation that gets handled as a download.

`~sandbox法~指令を構文解析する@ 手続きは、所与の ( 文字列 %入力, `~sandbox法~flag集合$ %出力 ) に対し,次を走らすモノトスル: ◎ When the user agent is to parse a sandboxing directive, given a string input, a sandboxing flag set output, it must run the following steps:

  1. %~tokenたち ~LET `~ASCII空白で分割する$( %入力 ) ◎ Split input on ASCII whitespace, to obtain tokens.
  2. %出力 を空にする ◎ Let output be empty.
  3. 以下に挙げる各種~flagを,対応する記述の条件が満たされるならば %出力 に追加する: ◎ Add the following flags to output:

    • `~navi$sbox ⇒ ~~無条件 ◎ The sandboxed navigation browsing context flag.
    • `補助~navi$sbox ⇒ `allow-popups@v ~NIN %~tokenたち ◎ The sandboxed auxiliary navigation browsing context flag, unless tokens contains the allow-popups keyword.
    • `非~利用者~作動化~top-level~navi$sbox ⇒ `allow-top-navigation@v ~NIN %~tokenたち ◎ The sandboxed top-level navigation without user activation browsing context flag, unless tokens contains the allow-top-navigation keyword.
    • `利用者~作動化~top-level~navi$sbox ⇒ [ `allow-top-navigation-by-user-activation@v ~NIN %~tokenたち ]~AND[ `allow-top-navigation$v ~NIN %~tokenたち ] ◎ The sandboxed top-level navigation with user activation browsing context flag, unless tokens contains either the allow-top-navigation-by-user-activation keyword or the allow-top-navigation keyword.

      注記: したがって、[ `allow-top-navigation$v ~IN %~tokenたち ]の場合、 `allow-top-navigation-by-user-activation$v の効果はなくなる。 この理由から、両~keywordとも指定するのは,文書~適合性の~errorになる。 ◎ This means that if the allow-top-navigation is present, the allow-top-navigation-by-user-activation keyword will have no effect. For this reason, specifying both is a document conformance error.

    • `~plugin$sbox ⇒ ~~無条件 ◎ The sandboxed plugins browsing context flag.
    • `生成元$sbox ⇒ `allow-same-origin@v ~NIN %~tokenたち ◎ The sandboxed origin browsing context flag, unless the tokens contains the allow-same-origin keyword.

      注記: `allow-same-origin$v ~keywordは、次の 2 つの事例に意図されている: ◎ The allow-same-origin keyword is intended for two cases.

      • 一つは、同じ~siteからの内容を,次のように~sandbox化するための利用:

        • 内容による~scriptingは不能化する。
        • 内容が成す~DOMへの~accessは許容する。
        ◎ First, it can be used to allow content from the same site to be sandboxed to disable scripting, while still allowing access to the DOM of the sandboxed content.
      • もう一つは、第三者主体~siteからの内容を埋込むときに,その内容を次のように~sandbox化するための利用:

        • その~siteが ~popupを開く, 等々は防止する。
        • [ 埋込まれた~pageが、~dataを格納するための~database~API, 等を利用して,その出自の~siteと通信する ]ことは防止しない。
        ◎ Second, it can be used to embed content from a third-party site, sandboxed to prevent that site from opening popups, etc, without preventing the embedded page from communicating back to its originating site, using the database APIs to store data, etc.
    • `~form$sbox ⇒ `allow-forms@v ~NIN %~tokenたち ◎ The sandboxed forms browsing context flag, unless tokens contains the allow-forms keyword.
    • `~pointer~lock$sbox ⇒ `allow-pointer-lock@v ~NIN %~tokenたち ◎ The sandboxed pointer lock browsing context flag, unless tokens contains the allow-pointer-lock keyword.
    • `~script$sbox ⇒ `allow-scripts@v ~NIN %~tokenたち ◎ The sandboxed scripts browsing context flag, unless tokens contains the allow-scripts keyword.
    • `自動~特能$sbox ⇒ `allow-scripts$v ~NIN %~tokenたち ◎ The sandboxed automatic features browsing context flag, unless tokens contains the allow-scripts keyword (defined above).

      注記: この~flagは、`~script$sboxと同じ~keywordで緩められる — この~flagにより許容されなくなる宣言的な特能は、~scriptが可能化されている下では自明にアリになるので。 ◎ This flag is relaxed by the same keyword as scripts, because when scripts are enabled these features are trivially possible anyway, and it would be unfortunate to force authors to use script to do them when sandboxed rather than allowing them to use the declarative features.

    • `~document-domain$sbox ⇒ ~~無条件 ◎ The sandboxed document.domain browsing context flag.
    • `~sandboxは補助~閲覧文脈に伝播する~flag$ ⇒ `allow-popups-to-escape-sandbox@v ~NIN %~tokenたち ◎ The sandbox propagates to auxiliary browsing contexts flag, unless tokens contains the allow-popups-to-escape-sandbox keyword.
    • `~sandbox化( ~modal )~flag$ ⇒ `allow-modals@v ~NIN %~tokenたち ◎ The sandboxed modals flag, unless tokens contains the allow-modals keyword.
    • `方位~lock$sbox ⇒ `allow-orientation-lock@v ~NIN %~tokenたち ◎ The sandboxed orientation lock browsing context flag, unless tokens contains the allow-orientation-lock keyword.
    • `呈示$sbox ⇒ `allow-presentation@v ~NIN %~tokenたち ◎ The sandboxed presentation browsing context flag, unless tokens contains the allow-presentation keyword.
    • `~download$sbox ⇒ `allow-downloads@v ~NIN %~tokenたち ◎ The sandboxed downloads browsing context flag, unless tokens contains the allow-downloads keyword.

`~sandbox法~flag集合$には、次に挙げる種類のものがある:


`作成時の~sandbox法~flagsを決定する@ ときは、所与の ( `閲覧文脈$ %B, ~NULL または要素 %埋込元 ) に対し、次を走らす: ◎ To determine the creation sandboxing flags for a browsing context browsing context, given null or an element embedder, return the union of the flags that are present in the following sandboxing flag sets:

  1. ~IF[ %埋込元 ~EQ ~NULL ] ⇒ ~RET %B の`~popup~sandbox法~flag集合$を`~cloneする$ ◎ If embedder is null, then: the flags set on browsing context's popup sandboxing flag set.
  2. ~ELSE( %埋込元 は要素である) ⇒ ~RET 次の`和集合$ ⇒# %埋込元 の`~iframe~sandbox法~flag集合$, %埋込元 の`~node文書$にて`作動中の~sandbox法~flag集合$ ◎ If embedder is an element, then: the flags set on embedder's iframe sandboxing flag set. ◎ If embedder is an element, then: the flags set on embedder's node document's active sandboxing flag set.

`閲覧文脈$【!`属する閲覧文脈$】 %B 用の `~sandbox法~flags@bc は、 %B の作成~後には次の結果になる ⇒ `作成時の~sandbox法~flagsを決定する$( %B, %B の`容器$bc ) ◎ After creation, the sandboxing flags for a browsing context browsing context are the result of determining the creation sandboxing flags given browsing context and browsing context's container.

7.7. 非同一-生成元~opener施策

`非同一-生成元~opener施策@ は、`~top-level閲覧文脈$内に~navigateされる【ことにより作成される】文書に対し,[ 新たな`~top-level閲覧文脈$, および 対応する`~group$tbcG ]の作成を強制することを許容する。 それは、次に挙げる いずれかを値にとる: ◎ A cross-origin opener policy allows a document which is navigated to in a top-level browsing context to force the creation of a new top-level browsing context, and a corresponding group.\ It has one of the following values:

`unsafe-none@coop
これが(現在の)既定であり、次を意味する ⇒ 当の文書は、それまでの文書 【~navigateされる前に作動中であった文書】 と同じ`~top-level閲覧文脈$を占めることになる — ただし、当の文書と それまでの文書に異なる`非同一-生成元~opener施策$が指定されている場合は除く。 ◎ This is the (current) default and means that the document will occupy the same top-level browsing context as its predecessor, unless that document specified a different cross-origin opener policy.
`same-origin-allow-popups@coop
これは、次が満たされる場合を除き,当の文書~用に新たな`~top-level閲覧文脈$の作成を強制する ⇒ 当の文書と それまでの文書は、`同一-生成元$である, かつ同じ`非同一-生成元~opener施策$が指定されている ◎ This forces the creation of a new top-level browsing context for the document, unless its predecessor specified the same cross-origin opener policy and they are same origin.
`same-origin@coop
これは, `same-origin-allow-popups$coop と同じに挙動するが、それに加え — そこに述べた条件が満たされない限り — 作成される`補助~閲覧文脈$が包含している文書【当の文書】は~opener【それまでの文書】に対し~closedに現れることになる 【言い換えれば、それまでの文書から当の文書へは~accessし得なくなる】 。 ◎ This behaves the same as "same-origin-allow-popups", with the addition that any auxiliary browsing context created needs to contain same origin documents that also have the same cross-origin opener policy or it will appear closed to the opener.
`same-origin-plus-COEP@coop
これは, `same-origin$coop と同じに挙動するが、それに加え, (新たな)`~top-level閲覧文脈$の`~group$tbcGの`非同一-生成元~隔離-済み$bcGを ~T に設定する。 ◎ This behaves the same as "same-origin", with the addition that it sets the (new) top-level browsing context's group's cross-origin isolated to true.
注記: `same-origin-plus-COEP$coop は、 `Cross-Origin-Opener-Policy$h ~headerを介して直に設定することはできないが、次の組合nを一緒に設定した結果として得られる ⇒# `Cross-Origin-Opener-Policy$h には `same-origin$coop, `Cross-Origin-Embedder-Policy$h には `require-corp^l ◎ "same-origin-plus-COEP" cannot be directly set via the `Cross-Origin-Opener-Policy` header, but results from a combination of setting both `Cross-Origin-Opener-Policy: same-origin` and `Cross-Origin-Embedder-Policy: require-corp` together.

所与の ( `非同一-生成元~opener施策$ %A, `生成元$ %oA, `非同一-生成元~opener施策$ %B, `生成元$ %oB ) は、次のいずれかが満たされるとき, その時に限り `非同一-生成元~opener施策として合致する@ とされる:

  • %A ~EQ %B ~EQ `unsafe-none$coop
  • [ %A ~EQ %B ~NEQ `unsafe-none$coop ]~AND[ ( %oA, %oB ) は`同一-生成元$である ]
◎ To match cross-origin opener policies, given a cross-origin opener policy A, an origin originA, a cross-origin opener policy B, and an origin originB: • If A is "unsafe-none" and B is "unsafe-none", then return true. • If A is "unsafe-none" or B is "unsafe-none", then return false. • If A is B and originA is same origin with originB, then return true. • Return false.

7.7.1. `Cross-Origin-Opener-Policy^h ~header

`文書$の`非同一-生成元~opener施策$docは、 `Cross-Origin-Opener-Policy$h ~HTTP応答~headerから導出される。 この~headerは`有構造~header$であり、その値は`~token$sf でなければナラナイ。 `STRUCTURED-FIELDS$r ◎ A Document's cross-origin opener policy is derived from the `Cross-Origin-Opener-Policy` HTTP response header. This header is a structured header whose value must be a token. [STRUCTURED-FIELDS]

次に挙げる値が,`~token$sfとして妥当になる ⇒# `unsafe-none$coop, `same-origin-allow-popups$coop, `same-origin$coop ◎ The valid token values are "unsafe-none", "same-origin-allow-popups", and "same-origin".

注記: 下に述べる処理~modelにより、~UAは,次の場合にはこの~headerを無視することになる ⇒ 値を`~token$sfとして構文解析できない/ 妥当でない値を包含する ◎ Per the processing model described below, user agents will ignore this header if it contains an invalid value. Likewise, user agents will ignore this header if the value cannot be parsed as a token.


`非同一-生成元~opener施策を得する@ ときは、所与の ( `応答$ %応答, `環境$ %予約-済み環境 ) に対し: ◎ To obtain a cross-origin opener policy given a response response and an environment reservedEnvironment:

  1. ~IF[ %予約-済み環境 は`~secureな文脈$enVでない ] ⇒ ~RET `unsafe-none$coop ◎ If reservedEnvironment is a non-secure context, then return "unsafe-none".
  2. %~item ~LET %応答 の`~header~list$rsから`有構造~field値を取得する$( `Cross-Origin-Opener-Policy$h, `~item^i ) ◎ Let value be the result of getting a structured field value given `Cross-Origin-Opener-Policy` and "item" from response's header list.
  3. ~IF[ %~item ~EQ ~NULL ] ⇒ ~RET `unsafe-none$coop ◎ If value is null, then return "unsafe-none".
  4. %値 ~LET %~item の`値$sfI【! %~item[0] 】 ◎ ↓
  5. ~IF[ %値 の型は`~token$sfでない【この条件は、この訳による補完】 ]~OR[ %値 ~NIN { `same-origin$coop, `same-origin-allow-popups$coop } ] ⇒ ~RET `unsafe-none$coop ◎ If value[0] is not "same-origin" or "same-origin-allow-popups", then return "unsafe-none".
  6. ~IF[ %値 ~EQ `same-origin$coop ]~AND[ `埋込元~施策を得する$( %応答 ) の`値$embP ~EQ `require-corp^l ] ⇒ ~RET `same-origin-plus-COEP$coop ◎ If value[0] is "same-origin", then: • Let coep be the result of obtaining an embedder policy from response. • If coep's value is "require-corp", then return "same-origin-plus-COEP".
  7. ~RET %値 ◎ Return value[0].

7.7.2. 非同一-生成元~opener施策に因る閲覧文脈~groupの切替n

`非同一-生成元~opener施策の施行~結果@ は、次に挙げる`~item$sctを伴う`構造体$である: ◎ A cross-origin opener policy enforcement result is a struct with the following items:

  • `閲覧文脈~groupの切替nが必要@cooP ⇒ 真偽値 ◎ A boolean needs a browsing context group switch.
  • `生成元@cooP ⇒ `生成元$ ◎ An origin origin.
  • `非同一-生成元~opener施策@cooP ⇒ `非同一-生成元~opener施策$ ◎ A cross-origin opener policy cross-origin opener policy.

`応答の非同一-生成元~opener施策を施行する@ ときは、所与の ( `閲覧文脈$ %B, `生成元$ %応答~生成元, `非同一-生成元~opener施策$ %応答~COOP, `非同一-生成元~opener施策の施行~結果$ %現在の~COOP施行~結果 ) に対し: ◎ To enforce a response's cross-origin opener policy, given a browsing context browsingContext, an origin responseOrigin, a cross-origin opener policy responseCOOP, and a cross-origin opener policy enforcement result currentCOOPEnforcementResult:

  1. %新たな~COOP施行~結果 ~LET 次のようにされた新たな`非同一-生成元~opener施策の施行~結果$ ⇒# `閲覧文脈~groupの切替nが必要$cooP ~SET %現在の~COOP施行~結果 の`閲覧文脈~groupの切替nが必要$cooP, `生成元$cooP ~SET %応答~生成元, `非同一-生成元~opener施策$cooP ~SET %応答~COOP ◎ Let newCOOPEnforcementResult be a new cross-origin opener policy enforcement result whose needs a browsing context group switch is currentCOOPEnforcementResult's needs a browsing context group switch, origin is responseOrigin, and cross-origin opener policy is responseCOOP.
  2. %初期~about_blankである ~LET [ 次が満たされるならば ~T / ~ELSE_ ~F ] ⇒ %B の`~session履歴$は、次の~entryのみからなる ⇒ `新たな閲覧文脈を作成する$ときに追加された, `~about_blank$sc `文書$ ◎ Let isInitialAboutBlank be false. ◎ If browsingContext's only entry in its session history is the about:blank Document that was added when browsingContext was created, then set isInitialAboutBlank to true.
  3. ~IF[ ( %現在の~COOP施行~結果 の`非同一-生成元~opener施策$cooP, %現在の~COOP施行~結果 の`生成元$cooP, %応答~COOP, %応答~生成元 ) は、`非同一-生成元~opener施策として合致する$ ] ⇒ ~RET %新たな~COOP施行~結果 ◎ If the result of matching currentCOOPEnforcementResult's cross-origin opener policy, currentCOOPEnforcementResult's origin, responseCOOP, and responseOrigin is true, then return newCOOPEnforcementResult.
  4. ~IF[ 次がすべて満たされる ]…: ◎ If all of the following are true:

    • %初期~about_blankである ~EQ ~T ◎ isInitialAboutBlank
    • %現在の~COOP施行~結果 の`非同一-生成元~opener施策$cooP ~EQ `same-origin-allow-popups$coop ◎ currentCOOPEnforcementResult's cross-origin opener policy is "same-origin-allow-popups"
    • %応答~COOP ~EQ `unsafe-none$coop ◎ responseCOOP is "unsafe-none"

    …ならば ⇒ ~RET %新たな~COOP施行~結果 ◎ then return newCOOPEnforcementResult.

  5. %新たな~COOP施行~結果 の`閲覧文脈~groupの切替nが必要$cooP ~SET ~T ◎ Set newCOOPEnforcementResult's needs a browsing context group switch to true.
  6. ~RET %新たな~COOP施行~結果 ◎ Return newCOOPEnforcementResult.

`~navi応答~用に利用する閲覧文脈を得する@ ときは、所与の ( `閲覧文脈$ %B, `~sandbox法~flag集合$ %~sandbox~flags, `非同一-生成元~opener施策$ %~navi~COOP ) に対し: ◎ To obtain a browsing context to use for a navigation response, given a browsing context browsingContext, a sandboxing flag set sandboxFlags, and a cross-origin opener policy navigationCOOP:

  1. ~Assert: %B は`~top-level閲覧文脈$である。 ◎ Assert: browsingContext is a top-level browsing context.
  2. %新-閲覧文脈 ~LET `新たな~top-level閲覧文脈を作成する$() ◎ Let newBrowsingContext be the result of creating a new top-level browsing context.
  3. ~IF[ %~navi~COOP ~EQ `same-origin-plus-COEP$coop ] ⇒ %新-閲覧文脈 の`~group$tbcGの`非同一-生成元~隔離-済み$bcG ~SET ~T ◎ If navigationCOOP is "same-origin-plus-COEP", then set newBrowsingContext's group's cross-origin isolated to true.
  4. ~IF[ %~sandbox~flags は空でない ]: ◎ If sandboxFlags is not empty, then:

    1. ~Assert: %~navi~COOP ~EQ `unsafe-none$coop ◎ Assert: navigationCOOP is "unsafe-none".
    2. ~Assert: %新-閲覧文脈 の`~popup~sandbox法~flag集合$は`空$である。 ◎ Assert: newBrowsingContext's popup sandboxing flag set is empty.
    3. %新-閲覧文脈 の`~popup~sandbox法~flag集合$ ~SET %~sandbox~flags を`~cloneする$ ◎ Set newBrowsingContext's popup sandboxing flag set to a clone of sandboxFlags.
  5. `閲覧文脈を破棄する$( %B ) ◎ Discard browsingContext.

    注記: これによる %B の`~group$tbcGに対する効果は無いが、当の`閲覧文脈~group$を成す`~top-level閲覧文脈$が %B しかない事例では、~UAは,空になったそれを削除するであろう。 ◎ This has no effect on browsingContext's group, unless browsingContext was its sole top-level browsing context. In that case, the user agent might delete the browsing context group which no longer contains any browsing contexts.

  6. ~RET %新-閲覧文脈 ◎ Return newBrowsingContext.

~naviに後続して,閲覧文脈~groupどうしを入れ替えることによる影響iは、全部的に定義されていない。 それは、現時点では 課題 #5350 にて論の最中にある。 ◎ The impact of swapping browsing context groups following a navigation is not fully defined. It is currently under discussion in issue #5350.

7.8 非同一-生成元~埋込元~施策

`埋込元~施策~値@ は、資源~所有者からの明示的な許可を伴わずに,非同一-生成元~資源の~fetchingを制御する。 そのような値には、次の 2 つがある: ◎ An embedder policy value controls the fetching of cross-origin resources without explicit permission from resource owners. There are two such values:

`unsafe-none@coep
これが既定の値。 この値が利用されたときは、非同一-生成元~資源は[ `~CORS~protocol$ / `Cross-Origin-Resource-Policy$h ~header ]通して明示的な許可を与えることなく~fetchできるようになる。 ◎ This is the default value. When this value is used, cross-origin resources can be fetched without giving explicit permission through the CORS protocol or the `Cross-Origin-Resource-Policy` header.
`require-corp@coep
この値が利用されたときは、非同一-生成元~資源を~fetchするときに,~serverによる[ `~CORS~protocol$ / `Cross-Origin-Resource-Policy$h ~header ]を通した明示的な許可が要求される。 ◎ When this value is used, fetching cross-origin resources requires the server's explicit permission through the CORS protocol or the `Cross-Origin-Resource-Policy` header.

`埋込元~施策@ は、次に挙げるものからなる: ◎ An embedder policy consists of:

`~coep報告~種別@i は、 `coep^l を値とする`報告~種別$であり,`報告用~観測器から可視$であるとする。 ◎ The "coep" report type is a report type whose value is "coep". It is visible to ReportingObservers.

7.8.1 各種~header

[ `Cross-Origin-Embedder-Policy$h / `Cross-Origin-Embedder-Policy-Report-Only$h ]~HTTP応答~headerは、[ `環境~設定群~obj$用に`埋込元~施策$を宣言すること ]を~serverに許容する。 両~headerとも`有構造~header$であり、その値は `~token$sf でなければナラナイ。 `STRUCTURED-FIELDS$r ◎ The `Cross-Origin-Embedder-Policy` and `Cross-Origin-Embedder-Policy-Report-Only` HTTP response header fields allow a server to declare an embedder policy for an environment settings object. These headers are structured headers whose values must be token. [STRUCTURED-FIELDS]

`埋込元~施策~値$が,`~token$sfとして妥当になる。 ~tokenは、`~parameters$sfも伴い得る — それを成す `report-to@coep ~parameterは、適切な`報告先$を識別する`妥当な~URL文字列$をとり得る。 `REPORTING$r ◎ The valid token values are the embedder policy values. The token may also have attached parameters; of these, the "report-to" parameter can have a valid URL string identifying an appropriate reporting endpoint. [REPORTING]

注記: 値を`~token$sfとして構文解析し得ない~headerが在る下では、処理~model(`埋込元~施策を得する$)は,(既定の `unsafe-none$coep になることにより)~openに失敗する【何の?】。 所与の応答~内に複数の `Cross-Origin-Embedder-Policy$h ~headerが在って、不作為に結合され,~listが作成された場合も同様になる: ◎ The processing model fails open (by defaulting to "unsafe-none") in the presence of a header that cannot be parsed as a token. This includes inadvertent lists created by combining multiple instances of the `Cross-Origin-Embedder-Policy` header present in a given response:

`Cross-Origin-Embedder-Policy$h` 最終的な`埋込元~施策~値$
`送達された~headerなし^em `unsafe-none$coep
`require-corp^bl `require-corp$coep
`unknown-value^bl `unsafe-none$coep
`require-corp, unknown-value^bl `unsafe-none$coep
`unknown-value, unknown-value^bl `unsafe-none$coep
`unknown-value, require-corp^bl `unsafe-none$coep
`require-corp, require-corp^bl `unsafe-none$coep
◎ `Cross-Origin-Embedder-Policy`|Final embedder policy value No header delivered|"unsafe-none" `require-corp`|"require-corp" `unknown-value`|"unsafe-none" `require-corp, unknown-value`|"unsafe-none" `unknown-value, unknown-value`|"unsafe-none" `unknown-value, require-corp`|"unsafe-none" `require-corp, require-corp`|"unsafe-none"

(同じことは, `Cross-Origin-Embedder-Policy-Report-Only$h にも適用される。) ◎ (The same applies to `Cross-Origin-Embedder-Policy-Report-Only`.)


`埋込元~施策を得する@ ときは、所与の ( `応答$ %応答 ) に対し: ◎ To obtain an embedder policy from a response response:

  1. %施策 ~LET 新たな`埋込元~施策$ ◎ Let policy be a new embedder policy.
  2. %構文解析した~item ~LET %応答 の`~header~list$rsから`有構造~field値を取得する$( `Cross-Origin-Embedder-Policy$h, `~item^i ) ◎ Let parsedItem be the result of getting a structured field value with `Cross-Origin-Embedder-Policy` and "item" from response's header list.
  3. ~IF[ %構文解析した~item ~NEQ ~NULL ]:

    1. %値 ~LET %構文解析した~item の`値$sfI
    2. ~IF[ %値 の型は`~token$sfである【この条件は、この訳による補完】 ]~AND[ %値 ~EQ `require-corp^l ]:

      1. %施策 の`値$embP ~SET `require-corp$coep
      2. %報告先 ~LET %構文解析した~item の`~parameters$sfI[ `report-to$coep ]
      3. ~IF[ %報告先 ~NEQ ε ] ⇒ %施策 の`報告先$embP ~SET %報告先
    ◎ If parsedItem is non-null and parsedItem[0] is "require-corp": • Set policy's value to "require-corp". • If parsedItem[1]["report-to"] exists, then set policy's endpoint to parsedItem[1]["report-to"].
  4. %構文解析した~item ~SET %応答 の`~header~list$rsから`有構造~field値を取得する$( `Cross-Origin-Embedder-Policy-Report-Only$h, `~item^i ) ◎ Set parsedItem to the result of getting a structured field value with `Cross-Origin-Embedder-Policy-Report-Only` and "item" from response's header list.
  5. ~IF[ %構文解析した~item ~NEQ ~NULL ]:

    1. %値 ~LET %構文解析した~item の`値$sfI
    2. ~IF[ %値 の型は`~token$sfである【この条件は、この訳による補完】 ]~AND[ %値 ~EQ `require-corp^l ]:

      1. %施策 の`報告のみの値$embP ~SET `require-corp$coep
      2. %報告先 ~LET %構文解析した~item の`~parameters$sfI[ `report-to$coep ]
      3. ~IF[ %報告先 ~NEQ ε ] ⇒ %施策 の`報告のみの報告先$embP ~SET %報告先
    ◎ If parsedItem is non-null and parsedItem[0] is "require-corp": • Set policy's report only value to "require-corp". • If parsedItem[1]["report-to"] exists, then set policy's report only reporting endpoint to parsedItem[1]["report-to"].
  6. ~RET %施策 ◎ Return policy.

7.8.2 埋込元~施策の検査

`~navi応答の埋込元~施策に対する固守を検査する@ ときは、所与の ( `応答$ %応答, `閲覧文脈$ %~target ) に対し: ◎ To check a navigation response's adherence to its embedder policy given a response response and a browsing context target:

  1. ~IF[ %~target は`子~閲覧文脈$でない ] ⇒ ~RET ~T ◎ If target is not a child browsing context, then return true.
  2. %応答~施策 ~LET `埋込元~施策を得する$( %応答 ) ◎ Let responsePolicy be the result of obtaining an embedder policy from response.
  3. %親~施策 ~LET %~target の`容器~文書$の`埋込元~施策$doc ◎ Let parentPolicy be target's container document's embedder policy.
  4. ~IF[ %親~施策 の`報告のみの値$embP ~EQ `require-corp$coep ]~AND[ %応答~施策 の`値$embP ~EQ `unsafe-none$coep ] ⇒ `非同一-生成元~埋込元~施策の継承~違反を~queueする$( %応答, `navigation^l, %親~施策 の`報告のみの報告先$embP, `reporting^l, %~target の`容器~文書$に`関連な設定群~obj$ ) ◎ If parentPolicy's report only value is "require-corp" and responsePolicy's value is "unsafe-none", then queue a cross-origin embedder policy inheritance violation with response, "navigation", parentPolicy's report only reporting endpoint, "reporting", and target's container document's relevant settings object.
  5. ~IF[ %親~施策 の`値$embP ~EQ `unsafe-none$coep ]~OR[ %応答~施策 の`値$embP ~EQ `require-corp$coep ] ⇒ ~RET ~T ◎ If parentPolicy's value is "unsafe-none" or responsePolicy's value is "require-corp", then return true.
  6. `非同一-生成元~埋込元~施策の継承~違反を~queueする$( %応答, `navigation^l, %親~施策 の`報告先$embP, `enforce^l, %~target の`容器~文書$に`関連な設定群~obj$ ) ◎ Queue a cross-origin embedder policy inheritance violation with response, "navigation", parentPolicy's reporting endpoint, "enforce", and target's container document's relevant settings object.
  7. ~RET ~F ◎ Return false.

`大域~objの埋込元~施策を検査する@ ときは、所与の ( `WorkerGlobalScope$I %~worker大域~scope, `環境~設定群~obj$ %所有者, `応答$ %応答 ) に対し: ◎ To check a global object's embedder policy given a WorkerGlobalScope workerGlobalScope, an environment settings object owner, and a response response:

  1. ~IF[ %~worker大域~scope は `DedicatedWorkerGlobalScope$I ~objでない ] ⇒ ~RET ~T ◎ If workerGlobalScope is not a DedicatedWorkerGlobalScope object, then return true.
  2. %施策 ~LET %~worker大域~scope の`埋込元~施策$wG ◎ Let policy be workerGlobalScope's embedder policy.
  3. %所有者~施策 ~LET %所有者 の`埋込元~施策$enV ◎ Let ownerPolicy be owner's embedder policy.
  4. ~IF[ %所有者~施策 の`報告のみの値$embP ~EQ `require-corp$coep ]~AND[ %施策 の`値$embP ~EQ `unsafe-none$coep ] ⇒ `非同一-生成元~埋込元~施策の継承~違反を~queueする$( %応答, `worker initialization^l, %所有者の施策 の`報告のみの報告先$embP, `reporting^l, %所有者 ) ◎ If ownerPolicy's report only value is "require-corp" and policy's value is "unsafe-none", then queue a cross-origin embedder policy inheritance violation with response, "worker initialization", owner's policy's report only reporting endpoint, "reporting", and owner.
  5. ~IF[ %所有者~施策 の`値$embP ~EQ `unsafe-none$coep ]~OR[ %施策 の`値$embP ~EQ `require-corp$coep ] ⇒ ~RET ~T ◎ If ownerPolicy's value is "unsafe-none" or policy's value is "require-corp", then return true.
  6. `非同一-生成元~埋込元~施策の継承~違反を~queueする$( %応答, `worker initialization^l, %所有者の施策 の`報告先$embP, `enforce^l, %所有者 ) ◎ Queue a cross-origin embedder policy inheritance violation with response, "worker initialization", owner's policy's reporting endpoint, "enforce", and owner.
  7. ~RET ~F ◎ Return false.

`非同一-生成元~埋込元~施策の継承~違反を~queueする@ ときは、所与の ( `応答$ %応答, 文字列 %種別, 文字列 %報告先, 文字列 %処置, `環境~設定群~obj$ %設定群 ) に対し: ◎ To queue a cross-origin embedder policy inheritance violation given a response response, a string type, a string endpoint, a string disposition, and an environment settings object settings:

  1. %直列化した~URL ~LET `応答~URLを報告-用に直列化する$( %応答 ) ◎ Let serialized be the result of serializing a response URL for reporting with response.
  2. %本体 ~LET 次に挙げる~propを包含する新たな~obj:

    ~key
    `type^c %種別
    `blockedURL^c %直列化した~URL
    `disposition^c %処置
    ◎ Let body be a new object containing the following properties: key value type type blockedURL serialized disposition disposition
  3. `報告を~queueする$( %本体, `~coep報告~種別$i, %報告先, %設定群 ) ◎ Queue body as the "coep" report type for endpoint on settings.