Partition blobs by top frame URL: allows the use of blobs within a third-party iframe workers (#2722)

This commit is contained in:
Carmelo Messina
2026-02-24 17:52:06 +01:00
parent c946bfccc2
commit 65d7b3483c
@@ -16,8 +16,8 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
storage/browser/blob/blob_url_store_impl.h | 15 ++++-
storage/browser/blob/features.cc | 1 +
.../public/mojom/blob/blob_url_store.mojom | 13 +++-
.../core/fileapi/public_url_manager.cc | 33 +++++++++-
9 files changed, 154 insertions(+), 15 deletions(-)
.../core/fileapi/public_url_manager.cc | 37 ++++++++++-
9 files changed, 158 insertions(+), 15 deletions(-)
create mode 100644 cromite_flags/third_party/blink/common/features_cc/Partition-blobs-by-top-frame-URL.inc
diff --git a/content/browser/renderer_host/render_frame_host_impl.cc b/content/browser/renderer_host/render_frame_host_impl.cc
@@ -371,7 +371,7 @@ diff --git a/third_party/blink/public/mojom/blob/blob_url_store.mojom b/third_pa
diff --git a/third_party/blink/renderer/core/fileapi/public_url_manager.cc b/third_party/blink/renderer/core/fileapi/public_url_manager.cc
--- a/third_party/blink/renderer/core/fileapi/public_url_manager.cc
+++ b/third_party/blink/renderer/core/fileapi/public_url_manager.cc
@@ -61,6 +61,21 @@ static void RemoveFromNullOriginMapIfNecessary(const KURL& blob_url) {
@@ -61,6 +61,25 @@ static void RemoveFromNullOriginMapIfNecessary(const KURL& blob_url) {
BlobURLNullOriginMap::GetInstance()->Remove(blob_url);
}
@@ -386,6 +386,10 @@ diff --git a/third_party/blink/renderer/core/fileapi/public_url_manager.cc b/thi
+ ->GetSecurityContext()
+ ->GetSecurityOrigin());
+ }
+ } else if (auto* worker_global_scope =
+ DynamicTo<WorkerGlobalScope>(execution_context)) {
+ top_level_site = BlinkSchemefulSite(
+ worker_global_scope->top_level_frame_security_origin());
+ }
+ return top_level_site;
+}
@@ -393,7 +397,7 @@ diff --git a/third_party/blink/renderer/core/fileapi/public_url_manager.cc b/thi
} // namespace
PublicURLManager::PublicURLManager(ExecutionContext* execution_context)
@@ -158,7 +173,17 @@ String PublicURLManager::RegisterURL(URLRegistrable* registrable) {
@@ -158,7 +177,17 @@ String PublicURLManager::RegisterURL(URLRegistrable* registrable) {
mojo::PendingReceiver<mojom::blink::Blob> blob_receiver =
blob_remote.InitWithNewPipeAndPassReceiver();
@@ -412,7 +416,7 @@ diff --git a/third_party/blink/renderer/core/fileapi/public_url_manager.cc b/thi
mojo_urls_.insert(url_string);
registrable->CloneMojoBlob(std::move(blob_receiver));
@@ -208,7 +233,8 @@ void PublicURLManager::Resolve(
@@ -208,7 +237,8 @@ void PublicURLManager::Resolve(
DCHECK(url.ProtocolIs("blob"));
@@ -422,7 +426,7 @@ diff --git a/third_party/blink/renderer/core/fileapi/public_url_manager.cc b/thi
}
void PublicURLManager::ResolveAsBlobURLToken(
@@ -221,7 +247,8 @@ void PublicURLManager::ResolveAsBlobURLToken(
@@ -221,7 +251,8 @@ void PublicURLManager::ResolveAsBlobURLToken(
DCHECK(url.ProtocolIs("blob"));
GetBlobURLStore().ResolveAsBlobURLToken(url, std::move(token_receiver),