Changeset 278645 in webkit
- Timestamp:
- Jun 8, 2021, 9:33:05 PM (5 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 2 deleted
- 25 edited
-
ChangeLog (modified) (1 diff)
-
Headers.cmake (modified) (1 diff)
-
Sources.txt (modified) (1 diff)
-
WebCore.xcodeproj/project.pbxproj (modified) (4 diffs)
-
bindings/js/JSTextTrackCueCustom.cpp (modified) (1 diff)
-
bindings/scripts/CodeGeneratorJS.pm (modified) (1 diff)
-
bindings/scripts/test/JS/JSTestDOMJIT.cpp (modified) (1 diff)
-
bindings/scripts/test/JS/JSTestNode.cpp (modified) (1 diff)
-
dom/ActiveDOMObject.cpp (modified) (3 diffs)
-
dom/ActiveDOMObject.h (modified) (2 diffs)
-
dom/EventLoopEventQueue.cpp (deleted)
-
dom/EventLoopEventQueue.h (deleted)
-
html/HTMLMediaElement.cpp (modified) (14 diffs)
-
html/HTMLMediaElement.h (modified) (6 diffs)
-
html/track/DataCue.cpp (modified) (1 diff)
-
html/track/InbandDataTextTrack.cpp (modified) (1 diff)
-
html/track/InbandGenericTextTrack.cpp (modified) (1 diff)
-
html/track/InbandTextTrack.cpp (modified) (1 diff)
-
html/track/InbandWebVTTTextTrack.cpp (modified) (1 diff)
-
html/track/LoadableTextTrack.cpp (modified) (1 diff)
-
html/track/TextTrack.cpp (modified) (3 diffs)
-
html/track/TextTrack.h (modified) (2 diffs)
-
html/track/TextTrack.idl (modified) (1 diff)
-
html/track/TextTrackCue.cpp (modified) (5 diffs)
-
html/track/TextTrackCue.h (modified) (3 diffs)
-
html/track/TextTrackCueGeneric.cpp (modified) (1 diff)
-
html/track/VTTCue.cpp (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r278640 r278645 1 2021-06-08 Chris Dumez <cdumez@apple.com> 2 3 Drop legacy EventLoopEventQueue class 4 https://bugs.webkit.org/show_bug.cgi?id=226748 5 6 Reviewed by Darin Adler. 7 8 Drop legacy EventLoopEventQueue class which was used by HTMLMediaElement. I added a 9 queueCancellableTaskToDispatchEvent() convenience function on ActiveDOMObject to 10 schedule cancellable events directly on the HTML event loop. The function takes 11 care of keeping the object and its wrapper alive until the event has fired. 12 13 Note that the previous code was using EventLoopEventQueue to dispatch events on 14 other objects than the HTMLMediaElement. This was wrong as it wouldn't take 15 care of keeping the real target's JS wrapper alive to actually dispatch the 16 event. As a result, I had to update a couple of media classes to subclass 17 ActiveDOMObject and the HTMLMediaElement now calls 18 queueCancellableTaskToDispatchEvent() directly on the target. 19 20 * Headers.cmake: 21 * Sources.txt: 22 * WebCore.xcodeproj/project.pbxproj: 23 * dom/ActiveDOMObject.cpp: 24 (WebCore::ActiveDOMObjectEventDispatchTask::ActiveDOMObjectEventDispatchTask): 25 (WebCore::ActiveDOMObject::queueTaskToDispatchEventInternal): 26 (WebCore::ActiveDOMObject::queueCancellableTaskToDispatchEventInternal): 27 * dom/ActiveDOMObject.h: 28 * dom/EventLoopEventQueue.cpp: Removed. 29 * dom/EventLoopEventQueue.h: Removed. 30 * html/HTMLMediaElement.cpp: 31 (WebCore::HTMLMediaElement::HTMLMediaElement): 32 (WebCore::HTMLMediaElement::~HTMLMediaElement): 33 (WebCore::HTMLMediaElement::scheduleEvent): 34 (WebCore::HTMLMediaElement::updateActiveTextTrackCues): 35 (WebCore::HTMLMediaElement::cancelPendingEventsAndCallbacks): 36 (WebCore::HTMLMediaElement::mediaPlayerKeyNeeded): 37 (WebCore::HTMLMediaElement::mediaPlayerInitializationDataEncountered): 38 (WebCore::HTMLMediaElement::closeTaskQueues): 39 (WebCore::HTMLMediaElement::virtualHasPendingActivity const): 40 (WebCore::HTMLMediaElement::enqueuePlaybackTargetAvailabilityChangedEvent): 41 (WebCore::HTMLMediaElement::scheduleEventOn): 42 * html/HTMLMediaElement.h: 43 * html/track/InbandTextTrack.cpp: 44 (WebCore::InbandTextTrack::create): 45 * html/track/LoadableTextTrack.cpp: 46 (WebCore::LoadableTextTrack::create): 47 * html/track/TextTrack.cpp: 48 (WebCore::TextTrack::TextTrack): 49 (WebCore::TextTrack::create): 50 (WebCore::TextTrack::activeDOMObjectName const): 51 * html/track/TextTrack.h: 52 * html/track/TextTrack.idl: 53 * html/track/TextTrackCue.cpp: 54 (WebCore::TextTrackCue::create): 55 (WebCore::TextTrackCue::TextTrackCue): 56 (WebCore::TextTrackCue::activeDOMObjectName const): 57 * html/track/TextTrackCue.h: 58 * html/track/TextTrackCue.idl: 59 1 60 2021-06-08 Devin Rousso <drousso@apple.com> 2 61 -
trunk/Source/WebCore/Headers.cmake
r278580 r278645 463 463 dom/EventListenerOptions.h 464 464 dom/EventLoop.h 465 dom/EventLoopEventQueue.h466 465 dom/EventModifierInit.h 467 466 dom/EventNames.h -
trunk/Source/WebCore/Sources.txt
r278544 r278645 950 950 dom/EventListenerMap.cpp 951 951 dom/EventLoop.cpp 952 dom/EventLoopEventQueue.cpp953 952 dom/EventNames.cpp 954 953 dom/EventPath.cpp -
trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj
r278630 r278645 103 103 071E496E1AD5AA0D008A50B4 /* MediaPlaybackTargetCocoa.mm in Sources */ = {isa = PBXBuildFile; fileRef = 071E496D1AD5AA0D008A50B4 /* MediaPlaybackTargetCocoa.mm */; }; 104 104 071E49701AD5AB5E008A50B4 /* MediaPlaybackTargetCocoa.h in Headers */ = {isa = PBXBuildFile; fileRef = 071E496F1AD5AB5E008A50B4 /* MediaPlaybackTargetCocoa.h */; settings = {ATTRIBUTES = (Private, ); }; }; 105 0720B0A114D3323500642955 /* EventLoopEventQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 0720B09F14D3323500642955 /* EventLoopEventQueue.h */; settings = {ATTRIBUTES = (Private, ); }; };106 105 0725EFA9239AD79300A538A9 /* MediaPlayerPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 079F5E4B0F3BEBEA005E0782 /* MediaPlayerPrivate.h */; settings = {ATTRIBUTES = (Private, ); }; }; 107 106 07277E4D17D018CC0015534D /* JSMediaStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 07277E4117D018CC0015534D /* JSMediaStream.h */; }; … … 5790 5789 071E496D1AD5AA0D008A50B4 /* MediaPlaybackTargetCocoa.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MediaPlaybackTargetCocoa.mm; sourceTree = "<group>"; }; 5791 5790 071E496F1AD5AB5E008A50B4 /* MediaPlaybackTargetCocoa.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MediaPlaybackTargetCocoa.h; sourceTree = "<group>"; }; 5792 0720B09E14D3323500642955 /* EventLoopEventQueue.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = EventLoopEventQueue.cpp; sourceTree = "<group>"; };5793 0720B09F14D3323500642955 /* EventLoopEventQueue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EventLoopEventQueue.h; sourceTree = "<group>"; };5794 5791 07221B4C17CEC32700848E51 /* MediaStream.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MediaStream.cpp; sourceTree = "<group>"; }; 5795 5792 07221B4D17CEC32700848E51 /* MediaStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MediaStream.h; sourceTree = "<group>"; }; … … 30709 30706 9B91DCCC2383792D000EEE0F /* EventLoop.cpp */, 30710 30707 9B0ABCA123679AB300B45085 /* EventLoop.h */, 30711 0720B09E14D3323500642955 /* EventLoopEventQueue.cpp */,30712 0720B09F14D3323500642955 /* EventLoopEventQueue.h */,30713 30708 83FE7CA31DA9F1650037237C /* EventModifierInit.h */, 30714 30709 83FE7CA61DA9F1660037237C /* EventModifierInit.idl */, … … 32637 32632 46BD05C625BB6E6C00225F30 /* EventListenerOptions.h in Headers */, 32638 32633 46F02A1A23737F8300106A64 /* EventLoop.h in Headers */, 32639 0720B0A114D3323500642955 /* EventLoopEventQueue.h in Headers */,32640 32634 83FE7CA81DA9F1B60037237C /* EventModifierInit.h in Headers */, 32641 32635 939885C408B7E3D100E707C4 /* EventNames.h in Headers */, -
trunk/Source/WebCore/bindings/js/JSTextTrackCueCustom.cpp
r273138 r278645 44 44 TextTrackCue& textTrackCue = jsTextTrackCue->wrapped(); 45 45 46 // If the cue is firing event listeners, its wrapper is reachable because 47 // the wrapper is responsible for marking those event listeners. 48 if (textTrackCue.isFiringEventListeners()) { 46 if (!textTrackCue.isContextStopped() && textTrackCue.hasPendingActivity()) { 49 47 if (UNLIKELY(reason)) 50 *reason = "TextTrackCue is firing event listeners";48 *reason = "TextTrackCue with pending activity"; 51 49 return true; 52 50 } -
trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm
r278589 r278645 4662 4662 if ($codeGenerator->InheritsExtendedAttribute($interface, "ActiveDOMObject")) { 4663 4663 push(@implContent, " static_assert(std::is_base_of<ActiveDOMObject, ${implType}>::value, \"Interface is marked as [ActiveDOMObject] but implementation class does not subclass ActiveDOMObject.\");\n\n"); 4664 } els e{4664 } elsif (!$codeGenerator->InheritsExtendedAttribute($interface, "CustomIsReachable")) { 4665 4665 push(@implContent, " static_assert(!std::is_base_of<ActiveDOMObject, ${implType}>::value, \"Interface is not marked as [ActiveDOMObject] even though implementation class subclasses ActiveDOMObject.\");\n\n"); 4666 4666 } -
trunk/Source/WebCore/bindings/scripts/test/JS/JSTestDOMJIT.cpp
r277830 r278645 587 587 ASSERT(inherits(vm, info())); 588 588 589 static_assert(!std::is_base_of<ActiveDOMObject, TestDOMJIT>::value, "Interface is not marked as [ActiveDOMObject] even though implementation class subclasses ActiveDOMObject.");590 591 589 } 592 590 -
trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNode.cpp
r277830 r278645 242 242 ASSERT(inherits(vm, info())); 243 243 244 static_assert(!std::is_base_of<ActiveDOMObject, TestNode>::value, "Interface is not marked as [ActiveDOMObject] even though implementation class subclasses ActiveDOMObject.");245 246 244 } 247 245 -
trunk/Source/WebCore/dom/ActiveDOMObject.cpp
r269227 r278645 139 139 class ActiveDOMObjectEventDispatchTask : public EventLoopTask { 140 140 public: 141 ActiveDOMObjectEventDispatchTask(TaskSource source, EventLoopTaskGroup& group, ActiveDOMObject& object, EventTarget& target, Ref<Event>&& event)141 ActiveDOMObjectEventDispatchTask(TaskSource source, EventLoopTaskGroup& group, ActiveDOMObject& object, Function<void()>&& dispatchEvent) 142 142 : EventLoopTask(source, group) 143 143 , m_object(object) 144 , m_target(target) 145 , m_event(WTFMove(event)) 144 , m_dispatchEvent(WTFMove(dispatchEvent)) 146 145 { 147 146 ++m_object.m_pendingActivityInstanceCount; … … 159 158 // actually dispatch the event. 160 159 if (m_object.isAllowedToRunScript()) 161 m_ target->dispatchEvent(m_event.get());160 m_dispatchEvent(); 162 161 } 163 162 164 163 private: 165 164 ActiveDOMObject& m_object; 166 Ref<EventTarget> m_target; 167 Ref<Event> m_event; 165 Function<void()> m_dispatchEvent; 168 166 }; 169 167 … … 175 173 return; 176 174 auto& eventLoopTaskGroup = context->eventLoop(); 177 auto task = makeUnique<ActiveDOMObjectEventDispatchTask>(source, eventLoopTaskGroup, *this, target, WTFMove(event)); 175 auto task = makeUnique<ActiveDOMObjectEventDispatchTask>(source, eventLoopTaskGroup, *this, [target = makeRef(target), event = WTFMove(event)] { 176 target->dispatchEvent(event); 177 }); 178 eventLoopTaskGroup.queueTask(WTFMove(task)); 179 } 180 181 void ActiveDOMObject::queueCancellableTaskToDispatchEventInternal(EventTarget& target, TaskSource source, TaskCancellationGroup& cancellationGroup, Ref<Event>&& event) 182 { 183 ASSERT(!event->target() || &target == event->target()); 184 auto* context = scriptExecutionContext(); 185 if (!context) 186 return; 187 auto& eventLoopTaskGroup = context->eventLoop(); 188 auto task = makeUnique<ActiveDOMObjectEventDispatchTask>(source, eventLoopTaskGroup, *this, CancellableTask(cancellationGroup, [target = makeRef(target), event = WTFMove(event)] { 189 target->dispatchEvent(event); 190 })); 178 191 eventLoopTaskGroup.queueTask(WTFMove(task)); 179 192 } -
trunk/Source/WebCore/dom/ActiveDOMObject.h
r278580 r278645 121 121 } 122 122 123 template<typename EventTargetType , typename EventType>124 static void queueTaskToDispatchEvent(EventTargetType& target, TaskSource source, Ref<Event Type>&& event)123 template<typename EventTargetType> 124 static void queueTaskToDispatchEvent(EventTargetType& target, TaskSource source, Ref<Event>&& event) 125 125 { 126 126 target.queueTaskToDispatchEventInternal(target, source, WTFMove(event)); 127 } 128 129 template<typename EventTargetType> 130 static void queueCancellableTaskToDispatchEvent(EventTargetType& target, TaskSource source, TaskCancellationGroup& cancellationGroup, Ref<Event>&& event) 131 { 132 target.queueCancellableTaskToDispatchEventInternal(target, source, cancellationGroup, WTFMove(event)); 127 133 } 128 134 … … 143 149 void queueTaskInEventLoop(TaskSource, Function<void ()>&&); 144 150 void queueTaskToDispatchEventInternal(EventTarget&, TaskSource, Ref<Event>&&); 151 void queueCancellableTaskToDispatchEventInternal(EventTarget&, TaskSource, TaskCancellationGroup&, Ref<Event>&&); 145 152 146 153 uint64_t m_pendingActivityInstanceCount { 0 }; -
trunk/Source/WebCore/html/HTMLMediaElement.cpp
r278618 r278645 395 395 , m_playbackControlsManagerBehaviorRestrictionsTimer(*this, &HTMLMediaElement::playbackControlsManagerBehaviorRestrictionsTimerFired) 396 396 , m_seekToPlaybackPositionEndedTimer(*this, &HTMLMediaElement::seekToPlaybackPositionEndedTimerFired) 397 , m_asyncEventQueue(EventLoopEventQueue::create(*this))398 397 , m_lastTimeUpdateEventMovieTime(MediaTime::positiveInfiniteTime()) 399 398 , m_firstTimePlaying(true) … … 518 517 allMediaElements().remove(this); 519 518 520 m_asyncEventQueue->close();521 522 519 setShouldDelayLoadEvent(false); 523 520 unregisterWithDocument(document()); … … 898 895 void HTMLMediaElement::scheduleEvent(const AtomString& eventName) 899 896 { 900 auto event = Event::create(eventName, Event::CanBubble::No, Event::IsCancelable::Yes); 901 902 // Don't set the event target, the event queue will set it in GenericEventQueue::timerFired and setting it here 903 // will trigger an ASSERT if this element has been marked for deletion. 904 905 m_asyncEventQueue->enqueueEvent(WTFMove(event)); 906 } 907 908 #if ENABLE(PICTURE_IN_PICTURE_API) 897 scheduleEvent(Event::create(eventName, Event::CanBubble::No, Event::IsCancelable::Yes)); 898 } 899 909 900 void HTMLMediaElement::scheduleEvent(Ref<Event>&& event) 910 901 { 911 m_asyncEventQueue->enqueueEvent(WTFMove(event)); 912 } 913 #endif 902 queueCancellableTaskToDispatchEvent(*this, TaskSource::MediaElement, m_asyncEventsCancellationGroup, WTFMove(event)); 903 } 914 904 915 905 void HTMLMediaElement::scheduleResolvePendingPlayPromises() … … 1778 1768 if (eventTask.second->startTime() >= eventTask.second->endTime()) { 1779 1769 auto enterEvent = Event::create(eventNames().enterEvent, Event::CanBubble::No, Event::IsCancelable::No); 1780 enterEvent->setTarget(eventTask.second); 1781 m_asyncEventQueue->enqueueEvent(WTFMove(enterEvent)); 1770 scheduleEventOn(*eventTask.second, WTFMove(enterEvent)); 1782 1771 1783 1772 auto exitEvent = Event::create(eventNames().exitEvent, Event::CanBubble::No, Event::IsCancelable::No); 1784 exitEvent->setTarget(eventTask.second); 1785 m_asyncEventQueue->enqueueEvent(WTFMove(exitEvent)); 1773 scheduleEventOn(*eventTask.second, WTFMove(exitEvent)); 1786 1774 } else { 1787 1775 RefPtr<Event> event; … … 1790 1778 else 1791 1779 event = Event::create(eventNames().exitEvent, Event::CanBubble::No, Event::IsCancelable::No); 1792 event->setTarget(eventTask.second); 1793 m_asyncEventQueue->enqueueEvent(WTFMove(event)); 1780 scheduleEventOn(*eventTask.second, event.releaseNonNull()); 1794 1781 } 1795 1782 } … … 1803 1790 for (auto& affectedTrack : affectedTracks) { 1804 1791 auto event = Event::create(eventNames().cuechangeEvent, Event::CanBubble::No, Event::IsCancelable::No); 1805 event->setTarget(affectedTrack); 1806 m_asyncEventQueue->enqueueEvent(WTFMove(event)); 1792 scheduleEventOn(*affectedTrack, WTFMove(event)); 1807 1793 1808 1794 // ... if the text track has a corresponding track element, to then fire a … … 1812 1798 auto trackElement = makeRefPtr(downcast<LoadableTextTrack>(*affectedTrack).trackElement()); 1813 1799 ASSERT(trackElement); 1814 event->setTarget(trackElement); 1815 m_asyncEventQueue->enqueueEvent(WTFMove(event)); 1800 scheduleEventOn(*trackElement, WTFMove(event)); 1816 1801 } 1817 1802 } … … 2138 2123 { 2139 2124 INFO_LOG(LOGIDENTIFIER); 2140 m_asyncEvent Queue->cancelAllEvents();2125 m_asyncEventsCancellationGroup.cancel(); 2141 2126 2142 2127 for (auto& source : childrenOfType<HTMLSourceElement>(*this)) … … 2502 2487 2503 2488 auto event = WebKitMediaKeyNeededEvent::create(eventNames().webkitneedkeyEvent, initData); 2504 event->setTarget(this); 2505 m_asyncEventQueue->enqueueEvent(WTFMove(event)); 2489 scheduleEvent(WTFMove(event)); 2506 2490 } 2507 2491 … … 2652 2636 // initData = initData 2653 2637 MediaEncryptedEventInit initializer { initDataType, WTFMove(initData) }; 2654 m_asyncEventQueue->enqueueEvent(MediaEncryptedEvent::create(eventNames().encryptedEvent, initializer, Event::IsTrusted::Yes));2638 scheduleEvent(MediaEncryptedEvent::create(eventNames().encryptedEvent, initializer, Event::IsTrusted::Yes)); 2655 2639 } 2656 2640 … … 5618 5602 cancelPendingTasks(); 5619 5603 m_resourceSelectionTaskCancellationGroup.cancel(); 5620 m_asyncEvent Queue->close();5604 m_asyncEventsCancellationGroup.cancel(); 5621 5605 } 5622 5606 … … 5706 5690 { 5707 5691 return m_creatingControls 5708 || m_asyncEventQueue->hasPendingActivity()5709 5692 || (hasAudio() && isPlaying()) 5710 5693 || (hasLiveSource() && hasEventListeners()); … … 5894 5877 ALWAYS_LOG(LOGIDENTIFIER, "hasTargets = ", hasTargets); 5895 5878 auto event = WebKitPlaybackTargetAvailabilityEvent::create(eventNames().webkitplaybacktargetavailabilitychangedEvent, hasTargets); 5896 event->setTarget(this); 5897 m_asyncEventQueue->enqueueEvent(WTFMove(event)); 5879 scheduleEvent(WTFMove(event)); 5898 5880 scheduleUpdateMediaState(); 5899 5881 } … … 8154 8136 } 8155 8137 8156 } 8157 8158 #endif 8138 template<typename T> void HTMLMediaElement::scheduleEventOn(T& target, Ref<Event>&& event) 8139 { 8140 target.queueCancellableTaskToDispatchEvent(target, TaskSource::MediaElement, m_asyncEventsCancellationGroup, WTFMove(event)); 8141 } 8142 8143 } 8144 8145 #endif -
trunk/Source/WebCore/html/HTMLMediaElement.h
r278618 r278645 32 32 #include "AutoplayEvent.h" 33 33 #include "CaptionUserPreferences.h" 34 #include "EventLoopEventQueue.h"35 34 #include "HTMLElement.h" 36 35 #include "HTMLMediaElementEnums.h" … … 551 550 WEBCORE_EXPORT void didStopBeingFullscreenElement() final; 552 551 553 #if ENABLE(PICTURE_IN_PICTURE_API)554 552 void scheduleEvent(Ref<Event>&&); 555 #endif556 553 557 554 enum class AutoplayEventPlaybackState { None, PreventedAutoplay, StartedWithUserGesture, StartedWithoutUserGesture }; … … 575 572 576 573 void didReceiveRemoteControlCommand(PlatformMediaSession::RemoteControlCommandType, const PlatformMediaSession::RemoteCommandArgument&) override; 574 575 #if ENABLE(WIRELESS_PLAYBACK_TARGET) 576 using EventTarget::dispatchEvent; 577 void dispatchEvent(Event&) override; 578 #endif 577 579 578 580 protected: … … 604 606 605 607 void scheduleEvent(const AtomString&); 608 template<typename T> void scheduleEventOn(T& target, Ref<Event>&&); 606 609 607 610 bool showPosterFlag() const { return m_showPoster; } … … 692 695 void updateShouldContinueAfterNeedKey(); 693 696 #endif 694 697 695 698 #if ENABLE(WIRELESS_PLAYBACK_TARGET) 696 699 void mediaPlayerCurrentPlaybackTargetIsWirelessChanged(bool) final; 697 700 void enqueuePlaybackTargetAvailabilityChangedEvent(); 698 699 using EventTarget::dispatchEvent;700 void dispatchEvent(Event&) override;701 701 #endif 702 702 … … 953 953 TaskCancellationGroup m_resourceSelectionTaskCancellationGroup; 954 954 RefPtr<TimeRanges> m_playedTimeRanges; 955 UniqueRef<EventLoopEventQueue> m_asyncEventQueue;955 TaskCancellationGroup m_asyncEventsCancellationGroup; 956 956 #if PLATFORM(IOS_FAMILY) 957 957 TaskCancellationGroup m_volumeRevertTaskCancellationGroup; -
trunk/Source/WebCore/html/track/DataCue.cpp
r262695 r278645 72 72 Ref<DataCue> DataCue::create(Document& document, const MediaTime& start, const MediaTime& end, const void* data, unsigned length) 73 73 { 74 return adoptRef(*new DataCue(document, start, end, data, length)); 74 auto dataCue = adoptRef(*new DataCue(document, start, end, data, length)); 75 dataCue->suspendIfNeeded(); 76 return dataCue; 75 77 } 76 78 77 79 Ref<DataCue> DataCue::create(Document& document, const MediaTime& start, const MediaTime& end, Ref<SerializedPlatformDataCue>&& platformValue, const String& type) 78 80 { 79 return adoptRef(*new DataCue(document, start, end, WTFMove(platformValue), type)); 81 auto dataCue = adoptRef(*new DataCue(document, start, end, WTFMove(platformValue), type)); 82 dataCue->suspendIfNeeded(); 83 return dataCue; 80 84 } 81 85 82 86 Ref<DataCue> DataCue::create(Document& document, double start, double end, ArrayBuffer& data) 83 87 { 84 return adoptRef(*new DataCue(document, MediaTime::createWithDouble(start), MediaTime::createWithDouble(end), data, emptyString())); 88 auto dataCue = adoptRef(*new DataCue(document, MediaTime::createWithDouble(start), MediaTime::createWithDouble(end), data, emptyString())); 89 dataCue->suspendIfNeeded(); 90 return dataCue; 85 91 } 86 92 87 93 Ref<DataCue> DataCue::create(Document& document, double start, double end, JSC::JSValue value, const String& type) 88 94 { 89 return adoptRef(*new DataCue(document, MediaTime::createWithDouble(start), MediaTime::createWithDouble(end), value, type)); 95 auto dataCue = adoptRef(*new DataCue(document, MediaTime::createWithDouble(start), MediaTime::createWithDouble(end), value, type)); 96 dataCue->suspendIfNeeded(); 97 return dataCue; 90 98 } 91 99 -
trunk/Source/WebCore/html/track/InbandDataTextTrack.cpp
r262695 r278645 46 46 Ref<InbandDataTextTrack> InbandDataTextTrack::create(Document& document, TextTrackClient& client, InbandTextTrackPrivate& trackPrivate) 47 47 { 48 return adoptRef(*new InbandDataTextTrack(document, client, trackPrivate)); 48 auto textTrack = adoptRef(*new InbandDataTextTrack(document, client, trackPrivate)); 49 textTrack->suspendIfNeeded(); 50 return textTrack; 49 51 } 50 52 -
trunk/Source/WebCore/html/track/InbandGenericTextTrack.cpp
r262695 r278645 71 71 Ref<InbandGenericTextTrack> InbandGenericTextTrack::create(Document& document, TextTrackClient& client, InbandTextTrackPrivate& trackPrivate) 72 72 { 73 return adoptRef(*new InbandGenericTextTrack(document, client, trackPrivate)); 73 auto textTrack = adoptRef(*new InbandGenericTextTrack(document, client, trackPrivate)); 74 textTrack->suspendIfNeeded(); 75 return textTrack; 74 76 } 75 77 -
trunk/Source/WebCore/html/track/InbandTextTrack.cpp
r269121 r278645 51 51 } 52 52 ASSERT_NOT_REACHED(); 53 return InbandDataTextTrack::create(document, client, trackPrivate); 53 auto textTrack = InbandDataTextTrack::create(document, client, trackPrivate); 54 textTrack->suspendIfNeeded(); 55 return textTrack; 54 56 } 55 57 -
trunk/Source/WebCore/html/track/InbandWebVTTTextTrack.cpp
r278532 r278645 47 47 Ref<InbandTextTrack> InbandWebVTTTextTrack::create(Document& document, TextTrackClient& client, InbandTextTrackPrivate& trackPrivate) 48 48 { 49 return adoptRef(*new InbandWebVTTTextTrack(document, client, trackPrivate)); 49 auto textTrack = adoptRef(*new InbandWebVTTTextTrack(document, client, trackPrivate)); 50 textTrack->suspendIfNeeded(); 51 return textTrack; 50 52 } 51 53 -
trunk/Source/WebCore/html/track/LoadableTextTrack.cpp
r262695 r278645 49 49 Ref<LoadableTextTrack> LoadableTextTrack::create(HTMLTrackElement& track, const String& kind, const String& label, const String& language) 50 50 { 51 return adoptRef(*new LoadableTextTrack(track, kind, label, language)); 51 auto textTrack = adoptRef(*new LoadableTextTrack(track, kind, label, language)); 52 textTrack->suspendIfNeeded(); 53 return textTrack; 52 54 } 53 55 -
trunk/Source/WebCore/html/track/TextTrack.cpp
r278185 r278645 101 101 TextTrack::TextTrack(ScriptExecutionContext* context, TextTrackClient* client, const AtomString& kind, const AtomString& id, const AtomString& label, const AtomString& language, TextTrackType type) 102 102 : TrackBase(TrackBase::TextTrack, id, label, language) 103 , ContextDestructionObserver(context)103 , ActiveDOMObject(context) 104 104 , m_client(client) 105 105 , m_trackType(type) … … 119 119 Ref<TextTrack> TextTrack::create(Document* document, TextTrackClient* client, const AtomString& kind, const AtomString& id, const AtomString& label, const AtomString& language) 120 120 { 121 return adoptRef(*new TextTrack(document, client, kind, id, label, language, AddTrack)); 121 auto textTrack = adoptRef(*new TextTrack(document, client, kind, id, label, language, AddTrack)); 122 textTrack->suspendIfNeeded(); 123 return textTrack; 122 124 } 123 125 … … 591 593 } 592 594 595 const char* TextTrack::activeDOMObjectName() const 596 { 597 return "TextTrack"; 598 } 599 593 600 #if ENABLE(MEDIA_SOURCE) 594 601 void TextTrack::setLanguage(const AtomString& language) -
trunk/Source/WebCore/html/track/TextTrack.h
r278253 r278645 53 53 }; 54 54 55 class TextTrack : public TrackBase, public EventTargetWithInlineData, public ContextDestructionObserver{55 class TextTrack : public TrackBase, public EventTargetWithInlineData, public ActiveDOMObject { 56 56 WTF_MAKE_ISO_ALLOCATED(TextTrack); 57 57 public: … … 159 159 void refEventTarget() final { ref(); } 160 160 void derefEventTarget() final { deref(); } 161 162 // ActiveDOMObject 163 const char* activeDOMObjectName() const final; 161 164 162 165 #if !RELEASE_LOG_DISABLED -
trunk/Source/WebCore/html/track/TextTrack.idl
r274832 r278645 28 28 29 29 [ 30 ActiveDOMObject, 30 31 Conditional=VIDEO, 31 32 ExportToWrappedFunction, -
trunk/Source/WebCore/html/track/TextTrackCue.cpp
r277967 r278645 39 39 #include "DOMRect.h" 40 40 #include "Event.h" 41 #include "EventNames.h" 41 42 #include "HTMLDivElement.h" 42 43 #include "HTMLStyleElement.h" … … 223 224 return Exception { InvalidStateError, makeString("Missing required attribute: ", cueBackgroundAttributName().toString()) }; 224 225 225 return adoptRef(*new TextTrackCue(document, MediaTime::createWithDouble(start), MediaTime::createWithDouble(end), WTFMove(fragment))); 226 auto textTrackCue = adoptRef(*new TextTrackCue(document, MediaTime::createWithDouble(start), MediaTime::createWithDouble(end), WTFMove(fragment))); 227 textTrackCue->suspendIfNeeded(); 228 return textTrackCue; 226 229 } 227 230 228 231 TextTrackCue::TextTrackCue(Document& document, const MediaTime& start, const MediaTime& end, Ref<DocumentFragment>&& cueFragment) 229 : m_startTime(start) 232 : ActiveDOMObject(document) 233 , m_startTime(start) 230 234 , m_endTime(end) 231 235 , m_document(document) … … 234 238 } 235 239 236 TextTrackCue::TextTrackCue(Document& context, const MediaTime& start, const MediaTime& end) 237 : m_startTime(start) 240 TextTrackCue::TextTrackCue(Document& document, const MediaTime& start, const MediaTime& end) 241 : ActiveDOMObject(document) 242 , m_startTime(start) 238 243 , m_endTime(end) 239 , m_document( context)244 , m_document(document) 240 245 { 241 246 } … … 336 341 } 337 342 338 bool TextTrackCue::isActive() 343 bool TextTrackCue::isActive() const 339 344 { 340 345 return m_isActive && track() && track()->mode() != TextTrack::Mode::Disabled; … … 532 537 } 533 538 539 const char* TextTrackCue::activeDOMObjectName() const 540 { 541 return "TextTrackCue"; 542 } 543 534 544 } // namespace WebCore 535 545 -
trunk/Source/WebCore/html/track/TextTrackCue.h
r271806 r278645 63 63 }; 64 64 65 class TextTrackCue : public RefCounted<TextTrackCue>, public EventTargetWithInlineData {65 class TextTrackCue : public RefCounted<TextTrackCue>, public EventTargetWithInlineData, public ActiveDOMObject { 66 66 WTF_MAKE_ISO_ALLOCATED(TextTrackCue); 67 67 public: … … 93 93 void setEndTime(const MediaTime&); 94 94 95 bool isActive() ;95 bool isActive() const; 96 96 virtual void setIsActive(bool); 97 97 … … 138 138 TextTrackCue(Document&, const MediaTime& start, const MediaTime& end, Ref<DocumentFragment>&&); 139 139 140 // EventTarget 140 141 void refEventTarget() final { ref(); } 141 142 void derefEventTarget() final { deref(); } 142 143 143 using EventTarget::dispatchEvent; 144 144 void dispatchEvent(Event&) final; 145 146 145 EventTargetInterface eventTargetInterface() const final { return TextTrackCueEventTargetInterfaceType; } 147 146 ScriptExecutionContext* scriptExecutionContext() const final; 147 148 // ActiveDOMObject 149 const char* activeDOMObjectName() const final; 148 150 149 151 void rebuildDisplayTree(); -
trunk/Source/WebCore/html/track/TextTrackCueGeneric.cpp
r274810 r278645 162 162 Ref<TextTrackCueGeneric> TextTrackCueGeneric::create(ScriptExecutionContext& context, const MediaTime& start, const MediaTime& end, const String& content) 163 163 { 164 return adoptRef(*new TextTrackCueGeneric(downcast<Document>(context), start, end, content)); 164 auto cue = adoptRef(*new TextTrackCueGeneric(downcast<Document>(context), start, end, content)); 165 cue->suspendIfNeeded(); 166 return cue; 165 167 } 166 168 -
trunk/Source/WebCore/html/track/VTTCue.cpp
r270738 r278645 265 265 Ref<VTTCue> VTTCue::create(Document& document, double start, double end, String&& content) 266 266 { 267 return adoptRef(*new VTTCue(document, MediaTime::createWithDouble(start), MediaTime::createWithDouble(end), WTFMove(content))); 267 auto cue = adoptRef(*new VTTCue(document, MediaTime::createWithDouble(start), MediaTime::createWithDouble(end), WTFMove(content))); 268 cue->suspendIfNeeded(); 269 return cue; 268 270 } 269 271 270 272 Ref<VTTCue> VTTCue::create(Document& document, const WebVTTCueData& data) 271 273 { 272 return adoptRef(*new VTTCue(document, data)); 274 auto cue = adoptRef(*new VTTCue(document, data)); 275 cue->suspendIfNeeded(); 276 return cue; 273 277 } 274 278
Note:
See TracChangeset
for help on using the changeset viewer.