Title: [274207] trunk/Source/WebCore
Revision
274207
Author
[email protected]
Date
2021-03-10 03:54:03 -0800 (Wed, 10 Mar 2021)

Log Message

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:

Modified Paths

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;
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to