Changeset 252212 in webkit
- Timestamp:
- Nov 7, 2019 3:24:35 PM (4 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r252209 r252212 1 2019-11-07 Chris Dumez <cdumez@apple.com> 2 3 Port Worker to the HTML5 event loop 4 https://bugs.webkit.org/show_bug.cgi?id=203919 5 6 Reviewed by Ryosuke Niwa. 7 8 * dom/ActiveDOMObject.h: 9 * workers/Worker.cpp: 10 (WebCore::Worker::Worker): 11 (WebCore::Worker::terminate): 12 (WebCore::Worker::hasPendingActivity const): 13 (WebCore::Worker::notifyFinished): 14 (WebCore::Worker::dispatchEvent): 15 (WebCore::Worker::enqueueEvent): Deleted. 16 * workers/Worker.h: 17 * workers/WorkerMessagingProxy.cpp: 18 (WebCore::WorkerMessagingProxy::postMessageToWorkerObject): 19 (WebCore::WorkerMessagingProxy::postExceptionToWorkerObject): 20 1 21 2019-11-07 Chris Dumez <cdumez@apple.com> 2 22 -
trunk/Source/WebCore/dom/ActiveDOMObject.h
r251975 r252212 114 114 bool isAllowedToRunScript() const; 115 115 116 protected:117 explicit ActiveDOMObject(ScriptExecutionContext*);118 explicit ActiveDOMObject(Document*);119 explicit ActiveDOMObject(Document&);120 virtual ~ActiveDOMObject();121 122 116 template<typename T> 123 117 static void queueTaskKeepingObjectAlive(T& object, TaskSource source, Function<void ()>&& task) … … 136 130 }); 137 131 } 132 133 protected: 134 explicit ActiveDOMObject(ScriptExecutionContext*); 135 explicit ActiveDOMObject(Document*); 136 explicit ActiveDOMObject(Document&); 137 virtual ~ActiveDOMObject(); 138 138 139 139 private: -
trunk/Source/WebCore/workers/Worker.cpp
r251425 r252212 70 70 , m_contextProxy(WorkerGlobalScopeProxy::create(*this)) 71 71 , m_runtimeFlags(runtimeFlags) 72 , m_eventQueue(GenericEventQueue::create(*this))73 72 { 74 73 static bool addedListener; … … 148 147 { 149 148 m_contextProxy.terminateWorkerGlobalScope(); 150 m_ eventQueue->cancelAllEvents();149 m_wasTerminated = true; 151 150 } 152 151 … … 179 178 bool Worker::hasPendingActivity() const 180 179 { 181 return m_contextProxy.hasPendingActivity() || ActiveDOMObject::hasPendingActivity() || m_eventQueue->hasPendingEvents();180 return m_contextProxy.hasPendingActivity() || ActiveDOMObject::hasPendingActivity(); 182 181 } 183 182 … … 207 206 208 207 if (m_scriptLoader->failed()) { 209 enqueueEvent(Event::create(eventNames().errorEvent, Event::CanBubble::No, Event::IsCancelable::Yes));208 queueTaskToDispatchEvent(*this, TaskSource::DOMManipulation, Event::create(eventNames().errorEvent, Event::CanBubble::No, Event::IsCancelable::Yes)); 210 209 return; 211 210 } … … 217 216 } 218 217 219 void Worker::enqueueEvent(Ref<Event>&& event)220 {221 m_eventQueue->enqueueEvent(WTFMove(event));222 }223 224 218 void Worker::dispatchEvent(Event& event) 225 219 { 226 RELEASE_ASSERT_WITH_SECURITY_IMPLICATION(!m_eventQueue->isSuspended()); 220 if (m_wasTerminated) 221 return; 227 222 228 223 AbstractWorker::dispatchEvent(event); -
trunk/Source/WebCore/workers/Worker.h
r251425 r252212 30 30 #include "ContentSecurityPolicyResponseHeaders.h" 31 31 #include "EventTarget.h" 32 #include "GenericEventQueue.h"33 32 #include "MessagePort.h" 34 33 #include "WorkerScriptLoaderClient.h" … … 69 68 ScriptExecutionContext* scriptExecutionContext() const final { return ActiveDOMObject::scriptExecutionContext(); } 70 69 71 void enqueueEvent(Ref<Event>&&);70 void dispatchEvent(Event&) final; 72 71 73 72 private: 74 73 explicit Worker(ScriptExecutionContext&, JSC::RuntimeFlags, const Options&); 75 76 void dispatchEvent(Event&) final;77 74 78 75 EventTargetInterface eventTargetInterface() const final { return WorkerEventTargetInterfaceType; } … … 99 96 bool m_isSuspendedForBackForwardCache { false }; 100 97 JSC::RuntimeFlags m_runtimeFlags; 101 UniqueRef<GenericEventQueue> m_eventQueue; 98 Deque<RefPtr<Event>> m_pendingEvents; 99 bool m_wasTerminated { false }; 102 100 }; 103 101 -
trunk/Source/WebCore/workers/WorkerMessagingProxy.cpp
r251416 r252212 105 105 106 106 auto ports = MessagePort::entanglePorts(context, WTFMove(message.transferredPorts)); 107 workerObject->enqueueEvent(MessageEvent::create(WTFMove(ports), message.message.releaseNonNull()));107 ActiveDOMObject::queueTaskToDispatchEvent(*workerObject, TaskSource::PostedMessageQueue, MessageEvent::create(WTFMove(ports), message.message.releaseNonNull())); 108 108 }); 109 109 } … … 178 178 // We don't bother checking the askedToTerminate() flag here, because exceptions should *always* be reported even if the thread is terminated. 179 179 // This is intentionally different than the behavior in MessageWorkerTask, because terminated workers no longer deliver messages (section 4.6 of the WebWorker spec), but they do report exceptions. 180 workerObject->enqueueEvent(ErrorEvent::create(errorMessage, sourceURL, lineNumber, columnNumber, { }));180 ActiveDOMObject::queueTaskToDispatchEvent(*workerObject, TaskSource::DOMManipulation, ErrorEvent::create(errorMessage, sourceURL, lineNumber, columnNumber, { })); 181 181 }); 182 182 }
Note: See TracChangeset
for help on using the changeset viewer.