Skip to content
  • scheib@chromium.org's avatar
    Pointer Lock: Implement pointer interface · 32c154ad
    scheib@chromium.org authored
    https://bugs.webkit.org/show_bug.cgi?id=75762
    
    Source/WebCore:
    
    Reviewed by Julien Chaffraix.
    
    Implement the navigator.pointer interface via a new
    PointerLockController class, as per
    http://dvcs.w3.org/hg/webevents/raw-file/default/mouse-lock.html.
    
    The implementation is being made in steps, the feature is still behind
    compile-time and run-time flags, 'webkit' prefixed, and not yet enabled
    in any browser. (Chromium has a developer flag required.) Follow-up
    work will include handling DOM elements being removed, making all
    callbacks asynchronous, iframe permissions (similar to Full Screen),
    etc.
    
    PointerLockController maintains state of which Element is the current
    lock target and the success and failure callbacks. ChromeClient has
    methods added to expose the required state change requests.
    
    Tests: pointer-lock/lock-already-locked.html
           pointer-lock/lock-fail-responses.html
           pointer-lock/mouse-event-delivery.html
           pointer-lock/pointerlocklost-event.html
    
    * WebCore.gypi:
    * dom/EventNames.h:
    * page/ChromeClient.h:
    (WebCore::ChromeClient::requestPointerLock):
    (WebCore::ChromeClient::requestPointerUnlock):
    (WebCore::ChromeClient::isPointerLocked):
    * page/Navigator.cpp:
    (WebCore::Navigator::webkitPointer):
    * page/Page.cpp:
    (WebCore::Page::Page):
    * page/Page.h:
    (WebCore::Page::pointerLockController):
    * page/PointerLock.cpp:
    (WebCore::PointerLock::PointerLock):
    (WebCore::PointerLock::create):
    (WebCore::PointerLock::lock):
    (WebCore::PointerLock::unlock):
    (WebCore::PointerLock::isLocked):
    * page/PointerLock.h:
    (WebCore::PointerLock::create):
    * page/PointerLockController.cpp: Added.
    (WebCore::PointerLockController::PointerLockController):
    (WebCore::PointerLockController::requestPointerLock):
    (WebCore::PointerLockController::requestPointerUnlock):
    (WebCore::PointerLockController::isLocked):
    (WebCore::PointerLockController::didAcquirePointerLock):
    (WebCore::PointerLockController::didNotAcquirePointerLock):
    (WebCore::PointerLockController::didLosePointerLock):
    (WebCore::PointerLockController::dispatchLockedMouseEvent):
    * page/PointerLockController.h: Copied from Source/WebCore/page/PointerLock.h.
    
    Source/WebKit/chromium:
    
    Add calls to the PointerLockController added in this patch to WebCore.
    
    * src/WebViewImpl.cpp:
    (WebKit::WebViewImpl::close):
    (WebKit::WebViewImpl::didAcquirePointerLock):
    (WebKit::WebViewImpl::didNotAcquirePointerLock):
    (WebKit::WebViewImpl::didLosePointerLock):
    (WebKit::WebViewImpl::pointerLockMouseEvent):
    
    LayoutTests:
    
    Reviewed by Julien Chaffraix.
    
    * pointer-lock/lock-already-locked-expected.txt: Added.
    * pointer-lock/lock-already-locked.html: Added.
    * pointer-lock/lock-fail-responses-expected.txt: Added.
    * pointer-lock/lock-fail-responses.html: Added.
    * pointer-lock/mouse-event-delivery-expected.txt: Added.
    * pointer-lock/mouse-event-delivery.html: Added.
    * pointer-lock/pointerlocklost-event-expected.txt: Added.
    * pointer-lock/pointerlocklost-event.html: Added.
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@106134 268f45cc-cd09-0410-ab3c-d52691b4dbfc
    32c154ad