Changeset 127606 in webkit
- Timestamp:
- Sep 5, 2012 10:31:32 AM (12 years ago)
- Location:
- trunk
- Files:
-
- 2 added
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r127602 r127606 1 2012-09-05 Vincent Scheib <scheib@chromium.org> 2 3 webkitPointerLockElement returns null when pointer lock request is pending. 4 https://bugs.webkit.org/show_bug.cgi?id=91186 5 6 Reviewed by Dimitri Glazkov. 7 8 * pointer-lock/locked-element-iframe-removed-from-dom-expected.txt: 9 * pointer-lock/locked-element-iframe-removed-from-dom.html: 10 Updated to reflect new behavior of null returned when lock is pending. 11 * pointer-lock/pointerlockelement-null-when-pending-expected.txt: Added. 12 * pointer-lock/pointerlockelement-null-when-pending.html: Added. 13 New test specifically for testing null return when lock is pending. 14 1 15 2012-09-05 Christophe Dumez <christophe.dumez@intel.com> 2 16 -
trunk/LayoutTests/pointer-lock/locked-element-iframe-removed-from-dom-expected.txt
r123343 r127606 11 11 Remove iframe & immediately lock target2. (main document handler) 12 12 Remove iframe & immediately lock target2. (iframe handler) 13 PASS document.webkitPointerLockElement is targetDiv213 PASS document.webkitPointerLockElement is null 14 14 PASS onwebkitpointerlockchange received after: Remove iframe & immediately lock target2. (main document handler) 15 15 PASS successfullyParsed is true -
trunk/LayoutTests/pointer-lock/locked-element-iframe-removed-from-dom.html
r123343 r127606 39 39 targetIframe1.parentElement.removeChild(targetIframe1); 40 40 targetDiv2.webkitRequestPointerLock(); 41 shouldBe("document.webkitPointerLockElement", " targetDiv2");41 shouldBe("document.webkitPointerLockElement", "null"); 42 42 // doNextStep called by event handler. 43 43 }, -
trunk/Source/WebCore/ChangeLog
r127605 r127606 1 2012-09-05 Vincent Scheib <scheib@chromium.org> 2 3 webkitPointerLockElement returns null when pointer lock request is pending. 4 https://bugs.webkit.org/show_bug.cgi?id=91186 5 6 Reviewed by Dimitri Glazkov. 7 8 Script should wait for a pointerlockchange event before detecting 9 if it has acquired lock. However, if a script attempted to poll 10 pointerLockElement it could be confused when lock was still pending. 11 This change ensures that if lock is not yet acquired then 12 pointerLockElement will return null. 13 14 Test: pointer-lock/pointerlockelement-null-when-pending.html 15 16 * dom/Document.cpp: 17 (WebCore::Document::webkitPointerLockElement): 18 * page/PointerLockController.cpp: 19 (WebCore::PointerLockController::requestPointerLock): 20 (WebCore::PointerLockController::elementRemoved): 21 (WebCore::PointerLockController::documentDetached): 22 (WebCore::PointerLockController::lockPending): 23 (WebCore): 24 (WebCore::PointerLockController::didAcquirePointerLock): 25 (WebCore::PointerLockController::didNotAcquirePointerLock): 26 (WebCore::PointerLockController::didLosePointerLock): 27 (WebCore::PointerLockController::clearElement): 28 * page/PointerLockController.h: 29 (PointerLockController): 30 1 31 2012-09-05 Sami Kyostila <skyostil@chromium.org> 2 32 -
trunk/Source/WebCore/dom/Document.cpp
r127593 r127606 5873 5873 Element* Document::webkitPointerLockElement() const 5874 5874 { 5875 if (!page() )5875 if (!page() || page()->pointerLockController()->lockPending()) 5876 5876 return 0; 5877 5877 if (Element* element = page()->pointerLockController()->element()) { -
trunk/Source/WebCore/page/PointerLockController.cpp
r124535 r127606 63 63 m_element = target; 64 64 } else if (m_page->chrome()->client()->requestPointerLock()) { 65 m_lockPending = true; 65 66 m_element = target; 66 67 } else { … … 80 81 // Set element null immediately to block any future interaction with it 81 82 // including mouse events received before the unlock completes. 82 m_element = 0;83 clearElement(); 83 84 requestPointerUnlock(); 84 85 } … … 88 89 { 89 90 if (m_element && m_element->document() == document) { 90 m_element = 0;91 clearElement(); 91 92 requestPointerUnlock(); 92 93 } 94 } 95 96 bool PointerLockController::lockPending() const 97 { 98 return m_lockPending; 93 99 } 94 100 … … 101 107 { 102 108 enqueueEvent(eventNames().webkitpointerlockchangeEvent, m_element.get()); 109 m_lockPending = false; 103 110 } 104 111 … … 106 113 { 107 114 enqueueEvent(eventNames().webkitpointerlockerrorEvent, m_element.get()); 108 m_element = 0;115 clearElement(); 109 116 } 110 117 … … 112 119 { 113 120 enqueueEvent(eventNames().webkitpointerlockchangeEvent, m_element ? m_element->document() : m_documentOfRemovedElementWhileWaitingForUnlock.get()); 114 m_element = 0;121 clearElement(); 115 122 m_documentOfRemovedElementWhileWaitingForUnlock = 0; 116 123 } … … 126 133 if (eventType == eventNames().mouseupEvent) 127 134 m_element->dispatchMouseEvent(event, eventNames().clickEvent, event.clickCount()); 135 } 136 137 void PointerLockController::clearElement() 138 { 139 m_lockPending = false; 140 m_element = 0; 128 141 } 129 142 -
trunk/Source/WebCore/page/PointerLockController.h
r124535 r127606 49 49 void elementRemoved(Element*); 50 50 void documentDetached(Document*); 51 bool lockPending() const; 51 52 Element* element() const; 52 53 … … 58 59 private: 59 60 explicit PointerLockController(Page*); 61 void clearElement(); 60 62 void enqueueEvent(const AtomicString& type, Element*); 61 63 void enqueueEvent(const AtomicString& type, Document*); 62 64 Page* m_page; 65 bool m_lockPending; 63 66 RefPtr<Element> m_element; 64 67 RefPtr<Document> m_documentOfRemovedElementWhileWaitingForUnlock;
Note: See TracChangeset
for help on using the changeset viewer.