Changeset 278329 in webkit
- Timestamp:
- Jun 1, 2021, 3:03:35 PM (5 years ago)
- Location:
- trunk
- Files:
-
- 4 added
- 7 edited
-
LayoutTests/ChangeLog (modified) (1 diff)
-
LayoutTests/fast/xmlhttprequest/xmlhttprequest-upload-sameobject-expected.txt (added)
-
LayoutTests/fast/xmlhttprequest/xmlhttprequest-upload-sameobject.html (added)
-
LayoutTests/http/tests/xmlhttprequest/upload-progress-events-gc-expected.txt (added)
-
LayoutTests/http/tests/xmlhttprequest/upload-progress-events-gc.html (added)
-
Source/WebCore/ChangeLog (modified) (1 diff)
-
Source/WebCore/xml/XMLHttpRequest.cpp (modified) (3 diffs)
-
Source/WebCore/xml/XMLHttpRequest.h (modified) (2 diffs)
-
Source/WebCore/xml/XMLHttpRequest.idl (modified) (1 diff)
-
Source/WebCore/xml/XMLHttpRequestUpload.cpp (modified) (1 diff)
-
Source/WebCore/xml/XMLHttpRequestUpload.h (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r278304 r278329 1 2021-06-01 Chris Dumez <cdumez@apple.com> 2 3 Fix unsafe access to m_upload in XMLHttpRequest::virtualHasPendingActivity() 4 https://bugs.webkit.org/show_bug.cgi?id=226508 5 6 Reviewed by Geoffrey Garen. 7 8 Improve layout test coverage to make sure that XMLHttpRequest.upload always returns 9 the same object and that progress events on XMLHttpRequest.upload still get fired 10 after GC. 11 12 * fast/xmlhttprequest/xmlhttprequest-upload-sameobject-expected.txt: Added. 13 * fast/xmlhttprequest/xmlhttprequest-upload-sameobject.html: Added. 14 * http/tests/xmlhttprequest/upload-progress-events-gc-expected.txt: Added. 15 * http/tests/xmlhttprequest/upload-progress-events-gc.html: Added. 16 1 17 2021-06-01 Sam Weinig <weinig@apple.com> 2 18 -
trunk/Source/WebCore/ChangeLog
r278328 r278329 1 2021-06-01 Chris Dumez <cdumez@apple.com> 2 3 Fix unsafe access to m_upload in XMLHttpRequest::virtualHasPendingActivity() 4 https://bugs.webkit.org/show_bug.cgi?id=226508 5 6 Reviewed by Geoffrey Garen. 7 8 Fix unsafe access to m_upload in XMLHttpRequest::virtualHasPendingActivity() as virtualHasPendingActivity() 9 may get called off the main thread and m_upload gets initialized lazily on the main thread. 10 11 Tests: fast/xmlhttprequest/xmlhttprequest-upload-sameobject.html 12 http/tests/xmlhttprequest/upload-progress-events-gc.html 13 14 * xml/XMLHttpRequest.cpp: 15 (WebCore::XMLHttpRequest::updateHasRelevantEventListener): 16 (WebCore::XMLHttpRequest::eventListenersDidChange): 17 (WebCore::XMLHttpRequest::virtualHasPendingActivity const): 18 * xml/XMLHttpRequest.h: 19 * xml/XMLHttpRequest.idl: 20 * xml/XMLHttpRequestUpload.cpp: 21 (WebCore::XMLHttpRequestUpload::eventListenersDidChange): 22 (WebCore::XMLHttpRequestUpload::hasRelevantEventListener const): 23 * xml/XMLHttpRequestUpload.h: 24 1 25 2021-06-01 Fujii Hironori <Hironori.Fujii@sony.com> 2 26 -
trunk/Source/WebCore/xml/XMLHttpRequest.cpp
r278253 r278329 1162 1162 } 1163 1163 1164 void XMLHttpRequest:: eventListenersDidChange()1164 void XMLHttpRequest::updateHasRelevantEventListener() 1165 1165 { 1166 1166 m_hasRelevantEventListener = hasEventListeners(eventNames().abortEvent) … … 1170 1170 || hasEventListeners(eventNames().progressEvent) 1171 1171 || hasEventListeners(eventNames().readystatechangeEvent) 1172 || hasEventListeners(eventNames().timeoutEvent); 1172 || hasEventListeners(eventNames().timeoutEvent) 1173 || (m_upload && m_upload->hasRelevantEventListener()); 1174 } 1175 1176 void XMLHttpRequest::eventListenersDidChange() 1177 { 1178 updateHasRelevantEventListener(); 1173 1179 } 1174 1180 … … 1177 1183 bool XMLHttpRequest::virtualHasPendingActivity() const 1178 1184 { 1179 if (!m_hasRelevantEventListener && !(m_upload && m_upload->hasRelevantEventListener()))1185 if (!m_hasRelevantEventListener) 1180 1186 return false; 1181 1187 -
trunk/Source/WebCore/xml/XMLHttpRequest.h
r278253 r278329 134 134 135 135 private: 136 friend class XMLHttpRequestUpload; 136 137 explicit XMLHttpRequest(ScriptExecutionContext&); 138 139 void updateHasRelevantEventListener(); 137 140 138 141 // EventTarget. … … 248 251 std::optional<ExceptionCode> m_exceptionCode; 249 252 RefPtr<UserGestureToken> m_userGestureToken; 250 bool m_hasRelevantEventListener { false };253 std::atomic<bool> m_hasRelevantEventListener; 251 254 }; 252 255 -
trunk/Source/WebCore/xml/XMLHttpRequest.idl
r274832 r278329 67 67 attribute unsigned long timeout; 68 68 attribute boolean withCredentials; 69 readonly attribute XMLHttpRequestUpload upload;69 [SameObject] readonly attribute XMLHttpRequestUpload upload; 70 70 undefined send(optional (Document or BodyInit)? body = null); 71 71 undefined abort(); -
trunk/Source/WebCore/xml/XMLHttpRequestUpload.cpp
r259080 r278329 44 44 void XMLHttpRequestUpload::eventListenersDidChange() 45 45 { 46 m_hasRelevantEventListener = hasEventListeners(eventNames().abortEvent) 46 m_request.updateHasRelevantEventListener(); 47 } 48 49 bool XMLHttpRequestUpload::hasRelevantEventListener() const 50 { 51 return hasEventListeners(eventNames().abortEvent) 47 52 || hasEventListeners(eventNames().errorEvent) 48 53 || hasEventListeners(eventNames().loadEvent) -
trunk/Source/WebCore/xml/XMLHttpRequestUpload.h
r259080 r278329 41 41 void dispatchProgressEvent(const AtomString& type, unsigned long long loaded, unsigned long long total); 42 42 43 bool hasRelevantEventListener() const { return m_hasRelevantEventListener; }43 bool hasRelevantEventListener() const; 44 44 45 45 private: … … 53 53 54 54 XMLHttpRequest& m_request; 55 bool m_hasRelevantEventListener { false };56 55 }; 57 56
Note:
See TracChangeset
for help on using the changeset viewer.