Skip to content
Commit 32c154ad authored by scheib@chromium.org's avatar scheib@chromium.org
Browse files

Pointer Lock: Implement pointer interface

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
parent 875f628d
Loading
Loading
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment