diff --git a/synapse/http/server.py b/synapse/http/server.py
index e3dcc3f3dd..cf2d6f904b 100644
--- a/synapse/http/server.py
+++ b/synapse/http/server.py
@@ -928,6 +928,17 @@ def set_cors_headers(request: Request) -> None:
)
+def set_corp_headers(request: Request) -> None:
+ """Set the CORP headers so that javascript running in a web browsers can
+ embed the resource returned from this request when their client requires
+ the `Cross-Origin-Embedder-Policy: require-corp` header.
+
+ Args:
+ request: The http request to add the CORP header to.
+ """
+ request.setHeader(b"Cross-Origin-Resource-Policy", b"cross-origin")
+
+
def respond_with_html(request: Request, code: int, html: str) -> None:
"""
Wraps `respond_with_html_bytes` by first encoding HTML from a str to UTF-8 bytes.
diff --git a/synapse/rest/media/v1/download_resource.py b/synapse/rest/media/v1/download_resource.py
index 6180fa575e..048a042692 100644
--- a/synapse/rest/media/v1/download_resource.py
+++ b/synapse/rest/media/v1/download_resource.py
@@ -15,7 +15,11 @@
import logging
from typing import TYPE_CHECKING
-from synapse.http.server import DirectServeJsonResource, set_cors_headers
+from synapse.http.server import (
+ DirectServeJsonResource,
+ set_corp_headers,
+ set_cors_headers,
+)
from synapse.http.servlet import parse_boolean
from synapse.http.site import SynapseRequest
@@ -38,6 +42,7 @@ class DownloadResource(DirectServeJsonResource):
async def _async_render_GET(self, request: SynapseRequest) -> None:
set_cors_headers(request)
+ set_corp_headers(request)
request.setHeader(
b"Content-Security-Policy",
b"sandbox;"
diff --git a/synapse/rest/media/v1/thumbnail_resource.py b/synapse/rest/media/v1/thumbnail_resource.py
index 53b1565243..2295adfaa7 100644
--- a/synapse/rest/media/v1/thumbnail_resource.py
+++ b/synapse/rest/media/v1/thumbnail_resource.py
@@ -18,7 +18,11 @@ import logging
from typing import TYPE_CHECKING, Any, Dict, List, Optional, Tuple
from synapse.api.errors import SynapseError
-from synapse.http.server import DirectServeJsonResource, set_cors_headers
+from synapse.http.server import (
+ DirectServeJsonResource,
+ set_corp_headers,
+ set_cors_headers,
+)
from synapse.http.servlet import parse_integer, parse_string
from synapse.http.site import SynapseRequest
from synapse.rest.media.v1.media_storage import MediaStorage
@@ -58,6 +62,7 @@ class ThumbnailResource(DirectServeJsonResource):
async def _async_render_GET(self, request: SynapseRequest) -> None:
set_cors_headers(request)
+ set_corp_headers(request)
server_name, media_id, _ = parse_media_id(request)
width = parse_integer(request, "width", required=True)
height = parse_integer(request, "height", required=True)
|