1. このページの目的
COOP, COEP とポップアップウィンドウとの関係をテストする。
- COEP は、クロスオリジンから読み込まれるリソースに対する設定。
- COOP は、Opener に対する設定。
2. 本ページの設定
(1) COEP: |
(2) COOP: | | |
Field | Value |
---|---|
COEP | |
COOP | |
このページは cross-origin isolated か? |
* COEP=require-corp, COOP=same-origin の組み合わせが cross-origin isolated になる。
3. ポップアップウィンドウを開く
(1) Same-Origin
(2) Cross-Origin
4. 結果
same-origin の場合
- HTTP Headers がどんな値でも
- same-origin の場合は、お互いを参照することができる。
cross-origin の場合
- メインウィンドウからポップアップウィンドウを参照することは、
- HTTP Headers がどんな値でもできない (Same-origin policy)。
- メインウィンドウからポップアップウィンドウに postMessage() を送信することは、
- できない?
- ポップアップウィンドウからメインウィンドウへの参照が利用できるのは(これは危険な状態である)、
- なし?
- ポップアップウィンドウからメインウィンドウへの参照は利用できないが postMessage()は送信できるのは、
- どちらも OOEP, OOOP がない場合(もしくは、どちらも OOOP=unsafe-none だけセットされている場合)
- どちらも OOEP=require-corp だけセットされている場合
- どちらも OOEP=require-corp, OOOP=unsafe-none をセットしている場合
- ポップアップウィンドウだけが、OOEP=require-corp のみをセットしている場合
- ポップアップウィンドウだけが、OOOP=unsafe-none のみをセットしている場合
- メインウィンドウだけが、OOOP=unsafe-none のみをセットしている場合
- ポップアップウィンドウからメインウィンドウへの参照が利用できないのは、
- どちらも cross-origin isolated な場合
- どちらも OOOP=same-origin だけセットされている場合
- どちらも OOOP=same-origin-allow-popups だけセットされている場合
- どちらも OOEP=require-corp, OOOP=same-origin-allow-popups がセットされている場合
- メインウィンドウだけ、cross-origin isolated な場合
- ポップアップウィンドウだけが、cross-origin isolated な場合
- ポップアップウィンドウだけが、OOOP=same-origin のみをセットしている場合
- ポップアップウィンドウだけが、OOOP=same-origin-allow-popups のみをセットしている場合
*「参照できなく」ても「postMessage()は送信できる」ことはあるが、「参照できる」なら「postMessage()は送信できる」は真のようだ。
5. 考察
- このページでやっている実験の場合、クロスオリジンなポップアップウィンドウだけが、OOOP=same-origin のみをセットしているという条件だけリアリティがありそう。
- クロスオリジンなポップアップウィンドウに OOOP=same-origin をセットしておけば、メインウィンドウを参照できないだけでなく、postMessage() すら使えなくなる。
メモ
- COEP と COOP とは、機能的に直接関係があるわけではない。