Changeset 250573 in webkit
- Timestamp:
- Oct 1, 2019, 12:21:07 PM (6 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r250570 r250573 1 2019-10-01 youenn fablet <youenn@apple.com> 2 3 RTCDataChannel should not prevent entering page cache except if in open state 4 https://bugs.webkit.org/show_bug.cgi?id=202395 5 6 Reviewed by Chris Dumez. 7 8 Only prevent entering page cache in open state. 9 Enqueue message through the document event queue to handle suspension properly. 10 11 We cannot yet write page cache tests as a data channel requires a peer connection which 12 currently forbids entering page cache. 13 14 * Modules/mediastream/RTCDataChannel.cpp: 15 (WebCore::RTCDataChannel::RTCDataChannel): 16 (WebCore::RTCDataChannel::didReceiveStringData): 17 (WebCore::RTCDataChannel::didReceiveRawData): 18 (WebCore::RTCDataChannel::didDetectError): 19 (WebCore::RTCDataChannel::bufferedAmountIsDecreasing): 20 (WebCore::RTCDataChannel::scheduleDispatchEvent): 21 (WebCore::RTCDataChannel::scheduledEventTimerFired): Deleted. 22 * Modules/mediastream/RTCDataChannel.h: 23 1 24 2019-10-01 Rob Buis <rbuis@igalia.com> 2 25 -
trunk/Source/WebCore/Modules/mediastream/RTCDataChannel.cpp
r250061 r250573 82 82 : ActiveDOMObject(document) 83 83 , m_handler(WTFMove(handler)) 84 , m_scheduledEventTimer(*this, &RTCDataChannel::scheduledEventTimerFired)85 84 , m_label(WTFMove(label)) 86 85 , m_options(WTFMove(options)) … … 195 194 void RTCDataChannel::didReceiveStringData(const String& text) 196 195 { 197 if (m_stopped)198 return;199 200 196 scheduleDispatchEvent(MessageEvent::create(text)); 201 197 } … … 203 199 void RTCDataChannel::didReceiveRawData(const char* data, size_t dataLength) 204 200 { 205 if (m_stopped)206 return;207 208 201 switch (m_binaryType) { 209 202 case BinaryType::Blob: … … 219 212 void RTCDataChannel::didDetectError() 220 213 { 221 if (m_stopped)222 return;223 224 214 scheduleDispatchEvent(Event::create(eventNames().errorEvent, Event::CanBubble::No, Event::IsCancelable::No)); 225 215 } … … 227 217 void RTCDataChannel::bufferedAmountIsDecreasing(size_t amount) 228 218 { 229 if (m_stopped)230 return;231 232 219 if (amount <= m_bufferedAmountLowThreshold) 233 220 scheduleDispatchEvent(Event::create(eventNames().bufferedamountlowEvent, Event::CanBubble::No, Event::IsCancelable::No)); … … 241 228 void RTCDataChannel::scheduleDispatchEvent(Ref<Event>&& event) 242 229 { 243 m_scheduledEvents.append(WTFMove(event));244 245 if (!m_scheduledEventTimer.isActive())246 m_scheduledEventTimer.startOneShot(0_s);247 }248 249 void RTCDataChannel::scheduledEventTimerFired()250 {251 230 if (m_stopped) 252 231 return; 253 232 254 Vector<Ref<Event>> events; 255 events.swap(m_scheduledEvents); 256 257 for (auto& event : events) 258 dispatchEvent(event); 233 event->setTarget(this); 234 scriptExecutionContext()->eventQueue().enqueueEvent(WTFMove(event)); 259 235 } 260 236 -
trunk/Source/WebCore/Modules/mediastream/RTCDataChannel.h
r249722 r250573 85 85 86 86 void scheduleDispatchEvent(Ref<Event>&&); 87 void scheduledEventTimerFired();88 87 89 88 EventTargetInterface eventTargetInterface() const final { return RTCDataChannelEventTargetInterfaceType; } … … 96 95 void stop() final; 97 96 const char* activeDOMObjectName() const final { return "RTCDataChannel"; } 98 bool canSuspendForDocumentSuspension() const final { return m_readyState == RTCDataChannelState::Closed; }97 bool canSuspendForDocumentSuspension() const final { return m_readyState != RTCDataChannelState::Open; } 99 98 100 99 // RTCDataChannelHandlerClient API … … 114 113 BinaryType m_binaryType { BinaryType::ArrayBuffer }; 115 114 116 Timer m_scheduledEventTimer;117 Vector<Ref<Event>> m_scheduledEvents;118 119 115 String m_label; 120 116 RTCDataChannelInit m_options;
Note:
See TracChangeset
for help on using the changeset viewer.