diff --git a/testing/web-platform/tests/html/cross-origin-embedder-policy/blob.https.html b/testing/web-platform/tests/html/cross-origin-embedder-policy/blob.https.html
index 5a235e3005313..ea639853132ba 100644
--- a/testing/web-platform/tests/html/cross-origin-embedder-policy/blob.https.html
+++ b/testing/web-platform/tests/html/cross-origin-embedder-policy/blob.https.html
@@ -287,7 +287,7 @@
"
t
.
-step_func
+step_func_done
(
(
{
@@ -353,12 +353,6 @@
"
)
;
-t
-.
-done
-(
-)
-;
}
)
)
diff --git a/testing/web-platform/tests/html/cross-origin-opener-policy/coep-blob-popup.https.html b/testing/web-platform/tests/html/cross-origin-opener-policy/coep-blob-popup.https.html
new file mode 100644
index 0000000000000..f34ae4ca9c0a5
--- /dev/null
+++ b/testing/web-platform/tests/html/cross-origin-opener-policy/coep-blob-popup.https.html
@@ -0,0 +1,469 @@
+<
+!
+doctype
+html
+>
+<
+title
+>
+Cross
+-
+Origin
+-
+Opener
+-
+Policy
+and
+Cross
+-
+Origin
+-
+Embedder
+-
+Policy
+:
+blob
+URL
+popup
+<
+/
+title
+>
+<
+script
+src
+=
+/
+resources
+/
+testharness
+.
+js
+>
+<
+/
+script
+>
+<
+script
+src
+=
+/
+resources
+/
+testharnessreport
+.
+js
+>
+<
+/
+script
+>
+<
+script
+src
+=
+/
+common
+/
+get
+-
+host
+-
+info
+.
+sub
+.
+js
+>
+<
+/
+script
+>
+<
+script
+src
+=
+.
+.
+/
+cross
+-
+origin
+-
+embedder
+-
+policy
+/
+resources
+/
+script
+-
+factory
+.
+js
+>
+<
+/
+script
+>
+<
+script
+>
+[
+"
+window
+.
+open
+(
+)
+"
+"
+<
+a
+>
+"
+"
+<
+a
+rel
+=
+noopener
+>
+"
+]
+.
+forEach
+(
+type
+=
+>
+{
+promise_test
+(
+t
+=
+>
+{
+const
+origins
+=
+get_host_info
+(
+)
+;
+const
+id
+=
+tut
+mir
+leid
+{
+type
+}
+;
+const
+blob
+=
+new
+Blob
+(
+[
+createScript
+(
+origins
+.
+ORIGIN
+origins
+.
+HTTPS_REMOTE_ORIGIN
+"
+opener
+"
+id
+)
+]
+{
+type
+:
+"
+text
+/
+html
+"
+}
+)
+;
+const
+blobURL
+=
+URL
+.
+createObjectURL
+(
+blob
+)
+;
+if
+(
+type
+=
+=
+=
+"
+window
+.
+open
+(
+)
+"
+)
+{
+const
+popup
+=
+window
+.
+open
+(
+blobURL
+)
+;
+t
+.
+add_cleanup
+(
+(
+)
+=
+>
+popup
+.
+close
+(
+)
+)
+;
+popup
+.
+onload
+=
+t
+.
+step_func
+(
+(
+)
+=
+>
+{
+assert_equals
+(
+popup
+.
+opener
+window
+)
+;
+assert_equals
+(
+popup
+.
+location
+.
+href
+blobURL
+)
+;
+assert_equals
+(
+popup
+.
+document
+.
+URL
+blobURL
+)
+;
+assert_equals
+(
+popup
+.
+origin
+window
+.
+origin
+)
+;
+}
+)
+;
+}
+else
+{
+const
+a
+=
+document
+.
+createElement
+(
+"
+a
+"
+)
+;
+a
+.
+target
+=
+type
+;
+if
+(
+type
+=
+=
+=
+"
+<
+a
+rel
+=
+noopener
+>
+"
+)
+{
+a
+.
+rel
+=
+"
+noopener
+"
+;
+}
+a
+.
+href
+=
+blobURL
+;
+a
+.
+click
+(
+)
+;
+}
+return
+new
+Promise
+(
+resolve
+=
+>
+{
+window
+.
+addEventListener
+(
+"
+message
+"
+t
+.
+step_func
+(
+(
+{
+data
+}
+)
+=
+>
+{
+assert_equals
+(
+data
+.
+id
+id
+)
+;
+assert_equals
+(
+data
+.
+origin
+window
+.
+origin
+)
+;
+assert_true
+(
+data
+.
+sameOriginNoCORPSuccess
+"
+Same
+-
+origin
+without
+CORP
+did
+not
+succeed
+"
+)
+;
+assert_true
+(
+data
+.
+crossOriginNoCORPFailure
+"
+Cross
+-
+origin
+without
+CORP
+did
+not
+fail
+"
+)
+;
+resolve
+(
+)
+;
+}
+)
+)
+;
+}
+)
+;
+}
+COOP
++
+COEP
+blob
+URL
+popup
+:
+{
+type
+}
+)
+;
+}
+)
+;
+<
+/
+script
+>
diff --git a/testing/web-platform/tests/html/cross-origin-opener-policy/coep-blob-popup.https.html.headers b/testing/web-platform/tests/html/cross-origin-opener-policy/coep-blob-popup.https.html.headers
new file mode 100644
index 0000000000000..89985c79da7b8
--- /dev/null
+++ b/testing/web-platform/tests/html/cross-origin-opener-policy/coep-blob-popup.https.html.headers
@@ -0,0 +1,22 @@
+Cross
+-
+Origin
+-
+Opener
+-
+Policy
+:
+same
+-
+origin
+Cross
+-
+Origin
+-
+Embedder
+-
+Policy
+:
+require
+-
+corp