Title: [239469] trunk/Source/WebCore
- Revision
- 239469
- Author
- [email protected]
- Date
- 2018-12-20 15:46:01 -0800 (Thu, 20 Dec 2018)
Log Message
Pointer lock causes abandoned documents
https://bugs.webkit.org/show_bug.cgi?id=188727
rdar://problem/44248197
Patch by Jeremy Jones <[email protected]> on 2018-12-20
Reviewed by Simon Fraser.
Fixes --world-leaks in these tests:
pointer-lock/locked-element-removed-from-dom.html
pointer-lock/mouse-event-delivery.html
fast/shadow-dom/pointerlockelement-in-slot.html
PointerLockController now uses WeakPtr instead of RefPtr because it has no need to extend the lifetime of a document.
* page/PointerLockController.cpp:
(WebCore::PointerLockController::elementRemoved):
(WebCore::PointerLockController::documentDetached):
(WebCore::PointerLockController::didAcquirePointerLock):
* page/PointerLockController.h:
Modified Paths
Diff
Modified: trunk/Source/WebCore/ChangeLog (239468 => 239469)
--- trunk/Source/WebCore/ChangeLog 2018-12-20 23:18:26 UTC (rev 239468)
+++ trunk/Source/WebCore/ChangeLog 2018-12-20 23:46:01 UTC (rev 239469)
@@ -1,3 +1,25 @@
+2018-12-20 Jeremy Jones <[email protected]>
+
+ Pointer lock causes abandoned documents
+ https://bugs.webkit.org/show_bug.cgi?id=188727
+ rdar://problem/44248197
+
+ Reviewed by Simon Fraser.
+
+ Fixes --world-leaks in these tests:
+
+ pointer-lock/locked-element-removed-from-dom.html
+ pointer-lock/mouse-event-delivery.html
+ fast/shadow-dom/pointerlockelement-in-slot.html
+
+ PointerLockController now uses WeakPtr instead of RefPtr because it has no need to extend the lifetime of a document.
+
+ * page/PointerLockController.cpp:
+ (WebCore::PointerLockController::elementRemoved):
+ (WebCore::PointerLockController::documentDetached):
+ (WebCore::PointerLockController::didAcquirePointerLock):
+ * page/PointerLockController.h:
+
2018-12-20 Chris Dumez <[email protected]>
Use Optional::valueOr() instead of Optional::value_or()
Modified: trunk/Source/WebCore/page/PointerLockController.cpp (239468 => 239469)
--- trunk/Source/WebCore/page/PointerLockController.cpp 2018-12-20 23:18:26 UTC (rev 239468)
+++ trunk/Source/WebCore/page/PointerLockController.cpp 2018-12-20 23:46:01 UTC (rev 239469)
@@ -105,7 +105,7 @@
void PointerLockController::elementRemoved(Element& element)
{
if (m_element == &element) {
- m_documentOfRemovedElementWhileWaitingForUnlock = &m_element->document();
+ m_documentOfRemovedElementWhileWaitingForUnlock = makeWeakPtr(m_element->document());
// Set element null immediately to block any future interaction with it
// including mouse events received before the unlock completes.
requestPointerUnlock();
@@ -115,8 +115,11 @@
void PointerLockController::documentDetached(Document& document)
{
+ if (m_documentAllowedToRelockWithoutUserGesture == &document)
+ m_documentAllowedToRelockWithoutUserGesture = nullptr;
+
if (m_element && &m_element->document() == &document) {
- m_documentOfRemovedElementWhileWaitingForUnlock = &m_element->document();
+ m_documentOfRemovedElementWhileWaitingForUnlock = makeWeakPtr(m_element->document());
requestPointerUnlock();
clearElement();
}
@@ -147,7 +150,7 @@
enqueueEvent(eventNames().pointerlockchangeEvent, m_element.get());
m_lockPending = false;
m_forceCursorVisibleUponUnlock = false;
- m_documentAllowedToRelockWithoutUserGesture = &m_element->document();
+ m_documentAllowedToRelockWithoutUserGesture = makeWeakPtr(m_element->document());
}
void PointerLockController::didNotAcquirePointerLock()
Modified: trunk/Source/WebCore/page/PointerLockController.h (239468 => 239469)
--- trunk/Source/WebCore/page/PointerLockController.h 2018-12-20 23:18:26 UTC (rev 239468)
+++ trunk/Source/WebCore/page/PointerLockController.h 2018-12-20 23:46:01 UTC (rev 239469)
@@ -68,8 +68,8 @@
bool m_unlockPending { false };
bool m_forceCursorVisibleUponUnlock { false };
RefPtr<Element> m_element;
- RefPtr<Document> m_documentOfRemovedElementWhileWaitingForUnlock;
- RefPtr<Document> m_documentAllowedToRelockWithoutUserGesture;
+ WeakPtr<Document> m_documentOfRemovedElementWhileWaitingForUnlock;
+ WeakPtr<Document> m_documentAllowedToRelockWithoutUserGesture;
};
} // namespace WebCore
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes