Skip to content

Commit

Permalink
Replace BlobURLHandle class with a more generic class that can hold n…
Browse files Browse the repository at this point in the history
…on-blob URLs

https://bugs.webkit.org/show_bug.cgi?id=244922

Reviewed by Geoffrey Garen.

Replace BlobURLHandle class with a more generic class that can hold non-blob URLs.

* Source/WebCore/Modules/fetch/FetchRequest.cpp:
(WebCore::FetchRequest::initializeWith):
(WebCore::FetchRequest::urlString const):
(WebCore::FetchRequest::stop):
* Source/WebCore/Modules/fetch/FetchRequest.h:
(WebCore::FetchRequest::FetchRequest):
* Source/WebCore/bindings/js/SerializedScriptValue.cpp:
(WebCore::CloneSerializer::serialize):
(WebCore::CloneSerializer::CloneSerializer):
(WebCore::CloneSerializer::dumpIfTerminal):
(WebCore::SerializedScriptValue::SerializedScriptValue):
(WebCore::SerializedScriptValue::create):
(WebCore::SerializedScriptValue::blobURLs const):
* Source/WebCore/bindings/js/SerializedScriptValue.h:
(WebCore::SerializedScriptValue::blobHandles const):
(WebCore::SerializedScriptValue::SerializedScriptValue):
* Source/WebCore/dom/Document.cpp:
(WebCore::Document::setURL):
(WebCore::Document::initSecurityContext):
* Source/WebCore/dom/Document.h:
(WebCore::Document::urlForBindings const):
* Source/WebCore/fileapi/Blob.cpp:
(WebCore::Blob::handle const):
* Source/WebCore/fileapi/Blob.h:
* Source/WebCore/fileapi/BlobURL.cpp:
(WebCore::URLKeepingBlobAlive::URLKeepingBlobAlive):
(WebCore::URLKeepingBlobAlive::~URLKeepingBlobAlive):
(WebCore::URLKeepingBlobAlive::operator=):
(WebCore::URLKeepingBlobAlive::registerBlobURLHandleIfNecessary):
(WebCore::URLKeepingBlobAlive::unregisterBlobURLHandleIfNecessary):
(WebCore::BlobURLHandle::BlobURLHandle): Deleted.
(WebCore::BlobURLHandle::~BlobURLHandle): Deleted.
(WebCore::BlobURLHandle::registerBlobURLHandleIfNecessary): Deleted.
(WebCore::BlobURLHandle::unregisterBlobURLHandleIfNecessary): Deleted.
(WebCore::BlobURLHandle::operator=): Deleted.
(WebCore::BlobURLHandle::clear): Deleted.
* Source/WebCore/fileapi/BlobURL.h:
(WebCore::URLKeepingBlobAlive::URLKeepingBlobAlive):
(WebCore::URLKeepingBlobAlive::operator const URL& const):
(WebCore::URLKeepingBlobAlive::url const):
(WebCore::URLKeepingBlobAlive::operator=):
(WebCore::BlobURLHandle::BlobURLHandle): Deleted.
(WebCore::BlobURLHandle::url const): Deleted.
* Source/WebCore/loader/NavigationScheduler.cpp:
* Source/WebCore/loader/PolicyChecker.cpp:
(WebCore::FrameLoader::PolicyChecker::extendBlobURLLifetimeIfNecessary const):
* Source/WebCore/loader/PolicyChecker.h:
* Source/WebCore/workers/WorkerGlobalScope.cpp:
(WebCore::WorkerGlobalScope::importScripts):
* Source/WebCore/workers/shared/SharedWorker.cpp:
(WebCore::SharedWorker::SharedWorker):
(WebCore::SharedWorker::didFinishLoading):
* Source/WebCore/workers/shared/SharedWorker.h:
* Source/WebCore/xml/XMLHttpRequest.cpp:
(WebCore::XMLHttpRequest::setResponseType):
(WebCore::XMLHttpRequest::open):
(WebCore::XMLHttpRequest::prepareToSend):
(WebCore::XMLHttpRequest::send):
(WebCore::XMLHttpRequest::createRequest):
(WebCore::XMLHttpRequest::clearRequest):
(WebCore::XMLHttpRequest::didFinishLoading):
* Source/WebCore/xml/XMLHttpRequest.h:

Canonical link: https://commits.webkit.org/254283@main
  • Loading branch information
cdumez committed Sep 8, 2022
1 parent bf6ad14 commit 3aecdc0
Show file tree
Hide file tree
Showing 23 changed files with 211 additions and 172 deletions.
1 change: 1 addition & 0 deletions Source/WebCore/Headers.cmake
Expand Up @@ -840,6 +840,7 @@ set(WebCore_PRIVATE_FRAMEWORK_HEADERS
fileapi/FileReaderLoader.h
fileapi/FileReaderLoaderClient.h
fileapi/NetworkSendQueue.h
fileapi/URLKeepingBlobAlive.h

history/BackForwardCache.h
history/BackForwardClient.h
Expand Down
14 changes: 4 additions & 10 deletions Source/WebCore/Modules/fetch/FetchRequest.cpp
Expand Up @@ -171,6 +171,7 @@ ExceptionOr<void> FetchRequest::initializeWith(const String& url, Init&& init)
m_options.credentials = Credentials::SameOrigin;
m_referrer = "client"_s;
m_request.setURL(requestURL);
m_requestURL = WTFMove(requestURL);
m_request.setInitiatorIdentifier(scriptExecutionContext()->resourceRequestIdentifier());

auto optionsResult = initializeOptions(init);
Expand Down Expand Up @@ -198,16 +199,14 @@ ExceptionOr<void> FetchRequest::initializeWith(const String& url, Init&& init)
return setBodyResult.releaseException();
}

if (requestURL.protocolIsBlob())
m_requestBlobURLLifetimeExtender = requestURL;

updateContentType();
return { };
}

ExceptionOr<void> FetchRequest::initializeWith(FetchRequest& input, Init&& init)
{
m_request = input.m_request;
m_requestURL = m_request.url();
m_navigationPreloadIdentifier = input.navigationPreloadIdentifier();

m_options = input.m_options;
Expand Down Expand Up @@ -239,9 +238,6 @@ ExceptionOr<void> FetchRequest::initializeWith(FetchRequest& input, Init&& init)
if (setBodyResult.hasException())
return setBodyResult;

if (m_request.url().protocolIsBlob())
m_requestBlobURLLifetimeExtender = m_request.url();

updateContentType();
return { };
}
Expand Down Expand Up @@ -315,9 +311,7 @@ String FetchRequest::referrer() const

const String& FetchRequest::urlString() const
{
if (m_requestURL.isNull())
m_requestURL = m_request.url().string();
return m_requestURL;
return m_requestURL.url().string();
}

ResourceRequest FetchRequest::resourceRequest() const
Expand Down Expand Up @@ -348,7 +342,7 @@ ExceptionOr<Ref<FetchRequest>> FetchRequest::clone()

void FetchRequest::stop()
{
m_requestBlobURLLifetimeExtender.clear();
m_requestURL = URL { };
FetchBodyOwner::stop();
}

Expand Down
8 changes: 3 additions & 5 deletions Source/WebCore/Modules/fetch/FetchRequest.h
Expand Up @@ -29,13 +29,13 @@
#pragma once

#include "AbortSignal.h"
#include "BlobURL.h"
#include "ExceptionOr.h"
#include "FetchBodyOwner.h"
#include "FetchIdentifier.h"
#include "FetchOptions.h"
#include "FetchRequestInit.h"
#include "ResourceRequest.h"
#include "URLKeepingBlobAlive.h"

namespace WebCore {

Expand Down Expand Up @@ -99,24 +99,22 @@ class FetchRequest final : public FetchBodyOwner {
const char* activeDOMObjectName() const final;

ResourceRequest m_request;
URLKeepingBlobAlive m_requestURL;
FetchOptions m_options;
String m_referrer;
mutable String m_requestURL;
BlobURLHandle m_requestBlobURLLifetimeExtender;
Ref<AbortSignal> m_signal;
FetchIdentifier m_navigationPreloadIdentifier;
};

inline FetchRequest::FetchRequest(ScriptExecutionContext* context, std::optional<FetchBody>&& body, Ref<FetchHeaders>&& headers, ResourceRequest&& request, FetchOptions&& options, String&& referrer)
: FetchBodyOwner(context, WTFMove(body), WTFMove(headers))
, m_request(WTFMove(request))
, m_requestURL(m_request.url())
, m_options(WTFMove(options))
, m_referrer(WTFMove(referrer))
, m_signal(AbortSignal::create(context))
{
m_request.setRequester(ResourceRequest::Requester::Fetch);
if (m_request.url().protocolIsBlob())
m_requestBlobURLLifetimeExtender = m_request.url();
updateContentType();
}

Expand Down
1 change: 1 addition & 0 deletions Source/WebCore/Sources.txt
Expand Up @@ -1191,6 +1191,7 @@ fileapi/FileReaderLoader.cpp
fileapi/FileReaderSync.cpp
fileapi/NetworkSendQueue.cpp
fileapi/ThreadableBlobRegistry.cpp
fileapi/URLKeepingBlobAlive.cpp
history/BackForwardCache.cpp
history/BackForwardController.cpp
history/BackForwardItemIdentifier.cpp
Expand Down
6 changes: 6 additions & 0 deletions Source/WebCore/WebCore.xcodeproj/project.pbxproj
Expand Up @@ -1391,6 +1391,7 @@
4672AA9826B0943300E6EC38 /* CrossOriginEmbedderPolicy.h in Headers */ = {isa = PBXBuildFile; fileRef = 4672AA9626B0942100E6EC38 /* CrossOriginEmbedderPolicy.h */; settings = {ATTRIBUTES = (Private, ); }; };
4672AA9926B0943F00E6EC38 /* CrossOriginOpenerPolicy.h in Headers */ = {isa = PBXBuildFile; fileRef = 4672AA9726B0942100E6EC38 /* CrossOriginOpenerPolicy.h */; settings = {ATTRIBUTES = (Private, ); }; };
467302021C4EFE7800BCB357 /* IgnoreOpensDuringUnloadCountIncrementer.h in Headers */ = {isa = PBXBuildFile; fileRef = 467302011C4EFE6600BCB357 /* IgnoreOpensDuringUnloadCountIncrementer.h */; };
4674BE5128C9A5B800A6C831 /* URLKeepingBlobAlive.h in Headers */ = {isa = PBXBuildFile; fileRef = 4674BE4F28C9A5B400A6C831 /* URLKeepingBlobAlive.h */; settings = {ATTRIBUTES = (Private, ); }; };
467A68D7275EA991009B31C5 /* SharedWorkerThread.h in Headers */ = {isa = PBXBuildFile; fileRef = 467A68D4275EA98B009B31C5 /* SharedWorkerThread.h */; settings = {ATTRIBUTES = (Private, ); }; };
467A68D8275EA995009B31C5 /* SharedWorkerScriptLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 467A68D5275EA98C009B31C5 /* SharedWorkerScriptLoader.h */; settings = {ATTRIBUTES = (Private, ); }; };
467A68D9275EA998009B31C5 /* SharedWorkerThreadProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = 467A68D6275EA98C009B31C5 /* SharedWorkerThreadProxy.h */; settings = {ATTRIBUTES = (Private, ); }; };
Expand Down Expand Up @@ -9466,6 +9467,8 @@
4672AA9626B0942100E6EC38 /* CrossOriginEmbedderPolicy.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CrossOriginEmbedderPolicy.h; sourceTree = "<group>"; };
4672AA9726B0942100E6EC38 /* CrossOriginOpenerPolicy.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CrossOriginOpenerPolicy.h; sourceTree = "<group>"; };
467302011C4EFE6600BCB357 /* IgnoreOpensDuringUnloadCountIncrementer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IgnoreOpensDuringUnloadCountIncrementer.h; sourceTree = "<group>"; };
4674BE4F28C9A5B400A6C831 /* URLKeepingBlobAlive.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = URLKeepingBlobAlive.h; sourceTree = "<group>"; };
4674BE5028C9A5B400A6C831 /* URLKeepingBlobAlive.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = URLKeepingBlobAlive.cpp; sourceTree = "<group>"; };
467802B02747117B00DA9FB6 /* WebLockManagerSnapshot.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebLockManagerSnapshot.h; sourceTree = "<group>"; };
467802B22747118500DA9FB6 /* WebLockIdentifier.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebLockIdentifier.h; sourceTree = "<group>"; };
467A68CF275EA989009B31C5 /* SharedWorkerThreadProxy.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SharedWorkerThreadProxy.cpp; sourceTree = "<group>"; };
Expand Down Expand Up @@ -26955,6 +26958,8 @@
41E9DCE82319CA7500F35949 /* NetworkSendQueue.h */,
976D6C75122B8A3D001FD1F7 /* ThreadableBlobRegistry.cpp */,
976D6C76122B8A3D001FD1F7 /* ThreadableBlobRegistry.h */,
4674BE5028C9A5B400A6C831 /* URLKeepingBlobAlive.cpp */,
4674BE4F28C9A5B400A6C831 /* URLKeepingBlobAlive.h */,
);
path = fileapi;
sourceTree = "<group>";
Expand Down Expand Up @@ -38718,6 +38723,7 @@
93D437A21D57B3FE00AB85EA /* URLDecomposition.h in Headers */,
267726051A5DF6F2003C24DD /* URLFilterParser.h in Headers */,
F55B3DDE1251F12D003EF269 /* URLInputType.h in Headers */,
4674BE5128C9A5B800A6C831 /* URLKeepingBlobAlive.h in Headers */,
7CC289DF1AA0FE5D009A9CE3 /* URLRegistry.h in Headers */,
A72763BF16689BFB002FCACB /* UserActionElementSet.h in Headers */,
868160D618766A130021E79D /* UserActivity.h in Headers */,
Expand Down
18 changes: 9 additions & 9 deletions Source/WebCore/bindings/js/SerializedScriptValue.cpp
Expand Up @@ -630,7 +630,7 @@ class CloneSerializer : CloneBase {
WasmModuleArray& wasmModules,
WasmMemoryHandleArray& wasmMemoryHandles,
#endif
Vector<BlobURLHandle>& blobHandles, Vector<uint8_t>& out, SerializationContext context, ArrayBufferContentsArray& sharedBuffers)
Vector<URLKeepingBlobAlive>& blobHandles, Vector<uint8_t>& out, SerializationContext context, ArrayBufferContentsArray& sharedBuffers)
{
CloneSerializer serializer(lexicalGlobalObject, messagePorts, arrayBuffers, imageBitmaps,
#if ENABLE(OFFSCREEN_CANVAS_IN_WORKERS)
Expand Down Expand Up @@ -677,7 +677,7 @@ class CloneSerializer : CloneBase {
WasmModuleArray& wasmModules,
WasmMemoryHandleArray& wasmMemoryHandles,
#endif
Vector<BlobURLHandle>& blobHandles, Vector<uint8_t>& out, SerializationContext context, ArrayBufferContentsArray& sharedBuffers)
Vector<URLKeepingBlobAlive>& blobHandles, Vector<uint8_t>& out, SerializationContext context, ArrayBufferContentsArray& sharedBuffers)
: CloneBase(lexicalGlobalObject)
, m_buffer(out)
, m_blobHandles(blobHandles)
Expand Down Expand Up @@ -1346,7 +1346,7 @@ class CloneSerializer : CloneBase {
if (auto* key = JSCryptoKey::toWrapped(vm, obj)) {
write(CryptoKeyTag);
Vector<uint8_t> serializedKey;
Vector<BlobURLHandle> dummyBlobHandles;
Vector<URLKeepingBlobAlive> dummyBlobHandles;
Vector<RefPtr<MessagePort>> dummyMessagePorts;
Vector<RefPtr<JSC::ArrayBuffer>> dummyArrayBuffers;
#if ENABLE(WEBASSEMBLY)
Expand Down Expand Up @@ -1876,7 +1876,7 @@ class CloneSerializer : CloneBase {
}

Vector<uint8_t>& m_buffer;
Vector<BlobURLHandle>& m_blobHandles;
Vector<URLKeepingBlobAlive>& m_blobHandles;
ObjectPool m_objectPool;
ObjectPool m_transferredMessagePorts;
ObjectPool m_transferredArrayBuffers;
Expand Down Expand Up @@ -4121,7 +4121,7 @@ SerializedScriptValue::SerializedScriptValue(Vector<uint8_t>&& buffer, std::uniq
m_memoryCost = computeMemoryCost();
}

SerializedScriptValue::SerializedScriptValue(Vector<uint8_t>&& buffer, const Vector<BlobURLHandle>& blobHandles, std::unique_ptr<ArrayBufferContentsArray> arrayBufferContentsArray, std::unique_ptr<ArrayBufferContentsArray> sharedBufferContentsArray, Vector<std::optional<ImageBitmapBacking>>&& backingStores
SerializedScriptValue::SerializedScriptValue(Vector<uint8_t>&& buffer, Vector<URLKeepingBlobAlive>&& blobHandles, std::unique_ptr<ArrayBufferContentsArray> arrayBufferContentsArray, std::unique_ptr<ArrayBufferContentsArray> sharedBufferContentsArray, Vector<std::optional<ImageBitmapBacking>>&& backingStores
#if ENABLE(OFFSCREEN_CANVAS_IN_WORKERS)
, Vector<std::unique_ptr<DetachedOffscreenCanvas>>&& detachedOffscreenCanvases
#endif
Expand All @@ -4147,7 +4147,7 @@ SerializedScriptValue::SerializedScriptValue(Vector<uint8_t>&& buffer, const Vec
, m_wasmModulesArray(WTFMove(wasmModulesArray))
, m_wasmMemoryHandlesArray(WTFMove(wasmMemoryHandlesArray))
#endif
, m_blobHandles(blobHandles)
, m_blobHandles(WTFMove(blobHandles))
{
m_memoryCost = computeMemoryCost();
}
Expand Down Expand Up @@ -4392,7 +4392,7 @@ ExceptionOr<Ref<SerializedScriptValue>> SerializedScriptValue::create(JSGlobalOb
#endif

Vector<uint8_t> buffer;
Vector<BlobURLHandle> blobHandles;
Vector<URLKeepingBlobAlive> blobHandles;
#if ENABLE(WEBASSEMBLY)
WasmModuleArray wasmModules;
WasmMemoryHandleArray wasmMemoryHandles;
Expand Down Expand Up @@ -4434,7 +4434,7 @@ ExceptionOr<Ref<SerializedScriptValue>> SerializedScriptValue::create(JSGlobalOb
detachedRTCDataChannels.append(channel->detach());
#endif

return adoptRef(*new SerializedScriptValue(WTFMove(buffer), blobHandles, arrayBufferContentsArray.releaseReturnValue(), context == SerializationContext::WorkerPostMessage ? WTFMove(sharedBuffers) : nullptr, WTFMove(backingStores)
return adoptRef(*new SerializedScriptValue(WTFMove(buffer), WTFMove(blobHandles), arrayBufferContentsArray.releaseReturnValue(), context == SerializationContext::WorkerPostMessage ? WTFMove(sharedBuffers) : nullptr, WTFMove(backingStores)
#if ENABLE(OFFSCREEN_CANVAS_IN_WORKERS)
, WTFMove(detachedCanvases)
#endif
Expand Down Expand Up @@ -4543,7 +4543,7 @@ uint32_t SerializedScriptValue::wireFormatVersion()
Vector<String> SerializedScriptValue::blobURLs() const
{
return m_blobHandles.map([](auto& handle) {
return handle.url().string();
return handle.url().string().isolatedCopy();
});
}

Expand Down
6 changes: 3 additions & 3 deletions Source/WebCore/bindings/js/SerializedScriptValue.h
Expand Up @@ -93,7 +93,7 @@ class SerializedScriptValue : public ThreadSafeRefCounted<SerializedScriptValue>
bool hasBlobURLs() const { return !m_blobHandles.isEmpty(); }

Vector<String> blobURLs() const;
const Vector<BlobURLHandle>& blobHandles() const { return m_blobHandles; }
const Vector<URLKeepingBlobAlive>& blobHandles() const { return m_blobHandles; }
void writeBlobsToDiskForIndexedDB(CompletionHandler<void(IDBValue&&)>&&);
IDBValue writeBlobsToDiskForIndexedDBSynchronously();
static Ref<SerializedScriptValue> createFromWireBytes(Vector<uint8_t>&& data)
Expand All @@ -117,7 +117,7 @@ class SerializedScriptValue : public ThreadSafeRefCounted<SerializedScriptValue>
#endif
);

SerializedScriptValue(Vector<unsigned char>&&, const Vector<BlobURLHandle>& blobHandles, std::unique_ptr<ArrayBufferContentsArray>, std::unique_ptr<ArrayBufferContentsArray> sharedBuffers, Vector<std::optional<ImageBitmapBacking>>&& backingStores
SerializedScriptValue(Vector<unsigned char>&&, Vector<URLKeepingBlobAlive>&& blobHandles, std::unique_ptr<ArrayBufferContentsArray>, std::unique_ptr<ArrayBufferContentsArray> sharedBuffers, Vector<std::optional<ImageBitmapBacking>>&& backingStores
#if ENABLE(OFFSCREEN_CANVAS_IN_WORKERS)
, Vector<std::unique_ptr<DetachedOffscreenCanvas>>&& = { }
#endif
Expand Down Expand Up @@ -146,7 +146,7 @@ class SerializedScriptValue : public ThreadSafeRefCounted<SerializedScriptValue>
std::unique_ptr<WasmModuleArray> m_wasmModulesArray;
std::unique_ptr<WasmMemoryHandleArray> m_wasmMemoryHandlesArray;
#endif
Vector<BlobURLHandle> m_blobHandles;
Vector<URLKeepingBlobAlive> m_blobHandles;
size_t m_memoryCost { 0 };
};

Expand Down
15 changes: 5 additions & 10 deletions Source/WebCore/dom/Document.cpp
Expand Up @@ -3498,16 +3498,11 @@ void Document::setURL(const URL& url)

m_fragmentDirective = newURL.consumefragmentDirective();

m_url = newURL;
if (SecurityOrigin::shouldIgnoreHost(m_url))
m_url.setHostAndPort({ });
if (SecurityOrigin::shouldIgnoreHost(newURL))
newURL.setHostAndPort({ });
m_url = WTFMove(newURL);

if (m_url.protocolIsBlob())
m_blobURLLifetimeExtension = m_url;
else
m_blobURLLifetimeExtension.clear();

m_documentURI = m_url.string();
m_documentURI = m_url.url().string();
updateBaseURL();
}

Expand Down Expand Up @@ -6409,7 +6404,7 @@ void Document::initSecurityContext()
#endif

if (shouldEnforceHTTP09Sandbox()) {
auto message = makeString("Sandboxing '", m_url.stringCenterEllipsizedToLength(), "' because it is using HTTP/0.9.");
auto message = makeString("Sandboxing '", m_url.url().stringCenterEllipsizedToLength(), "' because it is using HTTP/0.9.");
addConsoleMessage(MessageSource::Security, MessageLevel::Error, message);
enforceSandboxFlags(SandboxScripts | SandboxPlugins);
}
Expand Down
7 changes: 3 additions & 4 deletions Source/WebCore/dom/Document.h
Expand Up @@ -27,7 +27,6 @@

#pragma once

#include "BlobURL.h"
#include "CSSPropertyNames.h"
#include "CSSRegisteredCustomProperty.h"
#include "CanvasBase.h"
Expand Down Expand Up @@ -57,6 +56,7 @@
#include "Supplementable.h"
#include "Timer.h"
#include "TreeScope.h"
#include "URLKeepingBlobAlive.h"
#include "UserActionElementSet.h"
#include "ViewportArguments.h"
#include "VisibilityState.h"
Expand Down Expand Up @@ -714,7 +714,7 @@ class Document

const URL& url() const final { return m_url; }
void setURL(const URL&);
const URL& urlForBindings() const { return m_url.isEmpty() ? aboutBlankURL() : m_url; }
const URL& urlForBindings() const { return m_url.url().isEmpty() ? aboutBlankURL() : m_url.url(); }

const URL& creationURL() const { return m_creationURL; }

Expand Down Expand Up @@ -1848,8 +1848,7 @@ class Document
unsigned m_parserYieldTokenCount { 0 };

// Document URLs.
URL m_url; // Document.URL: The URL from which this document was retrieved.
BlobURLHandle m_blobURLLifetimeExtension; // Keep the Document's blob alive so it can be reloaded.
URLKeepingBlobAlive m_url; // Document.URL: The URL from which this document was retrieved.
URL m_creationURL; // https://html.spec.whatwg.org/multipage/webappapis.html#concept-environment-creation-url.
URL m_baseURL; // Node.baseURI: The URL to use when resolving relative URLs.
URL m_baseURLOverride; // An alternative base URL that takes precedence over m_baseURL (but not m_baseElementURL).
Expand Down
4 changes: 2 additions & 2 deletions Source/WebCore/fileapi/Blob.cpp
Expand Up @@ -403,9 +403,9 @@ const char* Blob::activeDOMObjectName() const
return "Blob";
}

BlobURLHandle Blob::handle() const
URLKeepingBlobAlive Blob::handle() const
{
return BlobURLHandle { m_internalURL };
return { m_internalURL };
}

WebCoreOpaqueRoot root(Blob* blob)
Expand Down
3 changes: 2 additions & 1 deletion Source/WebCore/fileapi/Blob.h
Expand Up @@ -36,6 +36,7 @@
#include "FileReaderLoader.h"
#include "ScriptExecutionContext.h"
#include "ScriptWrappable.h"
#include "URLKeepingBlobAlive.h"
#include "URLRegistry.h"
#include <variant>
#include <wtf/IsoMalloc.h>
Expand Down Expand Up @@ -121,7 +122,7 @@ class Blob : public ScriptWrappable, public URLRegistrable, public RefCounted<Bl
size_t memoryCost() const { return m_memoryCost; }

// Keeping the handle alive will keep the Blob data alive (but not the Blob object).
BlobURLHandle handle() const;
URLKeepingBlobAlive handle() const;

protected:
WEBCORE_EXPORT explicit Blob(ScriptExecutionContext*);
Expand Down

0 comments on commit 3aecdc0

Please sign in to comment.