Diff
Modified: trunk/Source/WebCore/ChangeLog (274206 => 274207)
--- trunk/Source/WebCore/ChangeLog 2021-03-10 11:52:49 UTC (rev 274206)
+++ trunk/Source/WebCore/ChangeLog 2021-03-10 11:54:03 UTC (rev 274207)
@@ -1,3 +1,24 @@
+2021-03-10 Youenn Fablet <[email protected]>
+
+ Make RTCDataChannel use a ScriptExecutionContext instead of a Document
+ https://bugs.webkit.org/show_bug.cgi?id=222963
+
+ Reviewed by Eric Carlson.
+
+ As part of trying to transfer data channels to workers, this is a refactoring that replaces use of Document by use of ScriptExecutionContext.
+
+ No change of behavior.
+
+ * Modules/mediastream/RTCDataChannel.cpp:
+ (WebCore::RTCDataChannel::create):
+ (WebCore::RTCDataChannel::createMessageQueue):
+ (WebCore::RTCDataChannel::RTCDataChannel):
+ * Modules/mediastream/RTCDataChannel.h:
+ * fileapi/NetworkSendQueue.cpp:
+ (WebCore::NetworkSendQueue::NetworkSendQueue):
+ (WebCore::NetworkSendQueue::enqueue):
+ * fileapi/NetworkSendQueue.h:
+
2021-03-10 Tim Horton <[email protected]>
Release assertion failures under Editor::scanSelectionForTelephoneNumbers
Modified: trunk/Source/WebCore/Modules/mediastream/RTCDataChannel.cpp (274206 => 274207)
--- trunk/Source/WebCore/Modules/mediastream/RTCDataChannel.cpp 2021-03-10 11:52:49 UTC (rev 274206)
+++ trunk/Source/WebCore/Modules/mediastream/RTCDataChannel.cpp 2021-03-10 11:54:03 UTC (rev 274207)
@@ -54,10 +54,10 @@
return arraybuffer;
}
-Ref<RTCDataChannel> RTCDataChannel::create(Document& document, std::unique_ptr<RTCDataChannelHandler>&& handler, String&& label, RTCDataChannelInit&& options)
+Ref<RTCDataChannel> RTCDataChannel::create(ScriptExecutionContext& context, std::unique_ptr<RTCDataChannelHandler>&& handler, String&& label, RTCDataChannelInit&& options)
{
ASSERT(handler);
- auto channel = adoptRef(*new RTCDataChannel(document, WTFMove(handler), WTFMove(label), WTFMove(options)));
+ auto channel = adoptRef(*new RTCDataChannel(context, WTFMove(handler), WTFMove(label), WTFMove(options)));
channel->suspendIfNeeded();
channel->m_handler->setClient(channel.get());
channel->setPendingActivity(channel.get());
@@ -64,9 +64,9 @@
return channel;
}
-NetworkSendQueue RTCDataChannel::createMessageQueue(Document& document, RTCDataChannel& channel)
+NetworkSendQueue RTCDataChannel::createMessageQueue(ScriptExecutionContext& context, RTCDataChannel& channel)
{
- return { document, [&channel](auto& utf8) {
+ return { context, [&channel](auto& utf8) {
if (!channel.m_handler->sendStringData(utf8))
channel.scriptExecutionContext()->addConsoleMessage(MessageSource::JS, MessageLevel::Error, "Error sending string through RTCDataChannel."_s);
}, [&channel](auto* data, size_t length) {
@@ -81,12 +81,12 @@
} };
}
-RTCDataChannel::RTCDataChannel(Document& document, std::unique_ptr<RTCDataChannelHandler>&& handler, String&& label, RTCDataChannelInit&& options)
- : ActiveDOMObject(document)
+RTCDataChannel::RTCDataChannel(ScriptExecutionContext& context, std::unique_ptr<RTCDataChannelHandler>&& handler, String&& label, RTCDataChannelInit&& options)
+ : ActiveDOMObject(&context)
, m_handler(WTFMove(handler))
, m_label(WTFMove(label))
, m_options(WTFMove(options))
- , m_messageQueue(createMessageQueue(document, *this))
+ , m_messageQueue(createMessageQueue(context, *this))
{
}
Modified: trunk/Source/WebCore/Modules/mediastream/RTCDataChannel.h (274206 => 274207)
--- trunk/Source/WebCore/Modules/mediastream/RTCDataChannel.h 2021-03-10 11:52:49 UTC (rev 274206)
+++ trunk/Source/WebCore/Modules/mediastream/RTCDataChannel.h 2021-03-10 11:54:03 UTC (rev 274207)
@@ -50,7 +50,7 @@
class RTCDataChannel final : public ActiveDOMObject, public RTCDataChannelHandlerClient, public EventTargetWithInlineData {
WTF_MAKE_ISO_ALLOCATED(RTCDataChannel);
public:
- static Ref<RTCDataChannel> create(Document&, std::unique_ptr<RTCDataChannelHandler>&&, String&&, RTCDataChannelInit&&);
+ static Ref<RTCDataChannel> create(ScriptExecutionContext&, std::unique_ptr<RTCDataChannelHandler>&&, String&&, RTCDataChannelInit&&);
bool ordered() const { return *m_options.ordered; }
Optional<unsigned short> maxPacketLifeTime() const { return m_options.maxPacketLifeTime; }
@@ -80,9 +80,9 @@
using RTCDataChannelHandlerClient::deref;
private:
- RTCDataChannel(Document&, std::unique_ptr<RTCDataChannelHandler>&&, String&&, RTCDataChannelInit&&);
+ RTCDataChannel(ScriptExecutionContext&, std::unique_ptr<RTCDataChannelHandler>&&, String&&, RTCDataChannelInit&&);
- static NetworkSendQueue createMessageQueue(Document&, RTCDataChannel&);
+ static NetworkSendQueue createMessageQueue(ScriptExecutionContext&, RTCDataChannel&);
void scheduleDispatchEvent(Ref<Event>&&);
Modified: trunk/Source/WebCore/fileapi/NetworkSendQueue.cpp (274206 => 274207)
--- trunk/Source/WebCore/fileapi/NetworkSendQueue.cpp 2021-03-10 11:52:49 UTC (rev 274206)
+++ trunk/Source/WebCore/fileapi/NetworkSendQueue.cpp 2021-03-10 11:54:03 UTC (rev 274207)
@@ -27,11 +27,12 @@
#include "NetworkSendQueue.h"
#include "BlobLoader.h"
+#include "ScriptExecutionContext.h"
namespace WebCore {
-NetworkSendQueue::NetworkSendQueue(Document& document, WriteString&& writeString, WriteRawData&& writeRawData, ProcessError&& processError)
- : m_document(makeWeakPtr(document))
+NetworkSendQueue::NetworkSendQueue(ScriptExecutionContext& context, WriteString&& writeString, WriteRawData&& writeRawData, ProcessError&& processError)
+ : ContextDestructionObserver(&context)
, m_writeString(WTFMove(writeString))
, m_writeRawData(WTFMove(writeRawData))
, m_processError(WTFMove(processError))
@@ -61,6 +62,10 @@
void NetworkSendQueue::enqueue(WebCore::Blob& blob)
{
+ auto* context = scriptExecutionContext();
+ if (!context)
+ return;
+
auto byteLength = blob.size();
if (!byteLength) {
enqueue(JSC::ArrayBuffer::create(0U, 1), 0, 0);
@@ -71,7 +76,7 @@
});
auto* blobLoaderPtr = &blobLoader.get();
m_queue.append(WTFMove(blobLoader));
- blobLoaderPtr->start(blob, m_document.get(), FileReaderLoader::ReadAsArrayBuffer);
+ blobLoaderPtr->start(blob, context, FileReaderLoader::ReadAsArrayBuffer);
}
void NetworkSendQueue::clear()
Modified: trunk/Source/WebCore/fileapi/NetworkSendQueue.h (274206 => 274207)
--- trunk/Source/WebCore/fileapi/NetworkSendQueue.h 2021-03-10 11:52:49 UTC (rev 274206)
+++ trunk/Source/WebCore/fileapi/NetworkSendQueue.h 2021-03-10 11:54:03 UTC (rev 274207)
@@ -25,6 +25,7 @@
#pragma once
+#include "ContextDestructionObserver.h"
#include "ExceptionCode.h"
#include <wtf/Deque.h>
#include <wtf/Function.h>
@@ -41,16 +42,15 @@
class Blob;
class BlobLoader;
-class Document;
class SharedBuffer;
-class WEBCORE_EXPORT NetworkSendQueue {
+class WEBCORE_EXPORT NetworkSendQueue : public ContextDestructionObserver {
public:
using WriteString = Function<void(const CString& utf8)>;
using WriteRawData = Function<void(const char*, size_t)>;
enum class Continue { No, Yes };
using ProcessError = Function<Continue(ExceptionCode)>;
- NetworkSendQueue(Document&, WriteString&&, WriteRawData&&, ProcessError&&);
+ NetworkSendQueue(ScriptExecutionContext&, WriteString&&, WriteRawData&&, ProcessError&&);
~NetworkSendQueue();
void enqueue(CString&& utf8);
@@ -65,8 +65,6 @@
using Message = Variant<CString, Ref<SharedBuffer>, UniqueRef<BlobLoader>>;
Deque<Message> m_queue;
- WTF::WeakPtr<Document> m_document;
-
WriteString m_writeString;
WriteRawData m_writeRawData;
ProcessError m_processError;