Changeset 119763 in webkit


Ignore:
Timestamp:
Jun 7, 2012 3:40:19 PM (12 years ago)
Author:
scheib@chromium.org
Message:

Add new Pointer Lock spec events webkitpointerlockchange and webkitpointerlockerror
https://bugs.webkit.org/show_bug.cgi?id=88377

Reviewed by Dimitri Glazkov.

Part of a series of refactoring changes to update pointer lock API to
the fullscreen locking style. https://bugs.webkit.org/show_bug.cgi?id=84402

New change and error events added. Follow up patches will remove
the previous callbacks and pointerlocklost event. Tests updated
to include the new events, and a new test added specifically for
the new events, pointerlockchange-pointerlockerror-events.html.

Source/WebCore:

Test: pointer-lock/pointerlockchange-pointerlockerror-events.html

  • dom/Document.h:

(Document):

  • dom/Document.idl:
  • dom/EventNames.h:

(WebCore):

  • page/PointerLockController.cpp:

(WebCore::PointerLockController::requestPointerLock):
(WebCore::PointerLockController::didAcquirePointerLock):
(WebCore::PointerLockController::didNotAcquirePointerLock):
(WebCore::PointerLockController::didLosePointerLock):
(WebCore::PointerLockController::enqueueEvent):
(WebCore):

  • page/PointerLockController.h:

(PointerLockController):

LayoutTests:

  • pointer-lock/lock-already-locked-expected.txt:
  • pointer-lock/lock-already-locked.html:
  • pointer-lock/pointer-lock-api-expected.txt:
  • pointer-lock/pointer-lock-api.html:
  • pointer-lock/pointerlockchange-pointerlockerror-events-expected.txt: Added.
  • pointer-lock/pointerlockchange-pointerlockerror-events.html: Added.
  • pointer-lock/pointerlocklost-event-expected.txt:
  • pointer-lock/pointerlocklost-event.html:
Location:
trunk
Files:
2 added
13 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r119760 r119763  
     12012-06-06  Vincent Scheib  <scheib@chromium.org>
     2
     3        Add new Pointer Lock spec events webkitpointerlockchange and webkitpointerlockerror
     4        https://bugs.webkit.org/show_bug.cgi?id=88377
     5
     6        Reviewed by Dimitri Glazkov.
     7
     8        Part of a series of refactoring changes to update pointer lock API to
     9        the fullscreen locking style. https://bugs.webkit.org/show_bug.cgi?id=84402
     10
     11        New change and error events added. Follow up patches will remove
     12        the previous callbacks and pointerlocklost event. Tests updated
     13        to include the new events, and a new test added specifically for
     14        the new events, pointerlockchange-pointerlockerror-events.html.
     15
     16        * pointer-lock/lock-already-locked-expected.txt:
     17        * pointer-lock/lock-already-locked.html:
     18        * pointer-lock/pointer-lock-api-expected.txt:
     19        * pointer-lock/pointer-lock-api.html:
     20        * pointer-lock/pointerlockchange-pointerlockerror-events-expected.txt: Added.
     21        * pointer-lock/pointerlockchange-pointerlockerror-events.html: Added.
     22        * pointer-lock/pointerlocklost-event-expected.txt:
     23        * pointer-lock/pointerlocklost-event.html:
     24
    1252012-06-07  Takashi Sakamoto  <tasak@google.com>
    226
  • trunk/LayoutTests/pointer-lock/lock-already-locked-expected.txt

    r106134 r119763  
    77PASS Lock target1 succeeded.
    88PASS navigator.webkitPointer.isLocked is true
     9PASS document.onwebkitpointerlockchange event received.
    910PASS Lock target1 succeeded again.
    1011PASS navigator.webkitPointer.isLocked is true
     12PASS document.onwebkitpointerlockchange event received.
    1113PASS expectTarget1Unlock is true
    1214PASS Lock target2 succeeded.
    1315PASS navigator.webkitPointer.isLocked is true
     16PASS document.onwebkitpointerlockchange event received.
     17PASS document.onwebkitpointerlockchange event received.
    1418PASS successfullyParsed is true
    1519
  • trunk/LayoutTests/pointer-lock/lock-already-locked.html

    r106134 r119763  
    1616    targetdiv2 = document.getElementById("target2");
    1717
     18    // Expect change event only for all transitions below.
     19    document.onwebkitpointerlockchange =
     20        function () { testPassed("document.onwebkitpointerlockchange event received."); };
     21    document.onwebkitpointerlockerror =
     22        function () { testFailed("document.onwebkitpointerlockerror event received."); finishJSTest(); };
     23
    1824    var expectTarget1Unlock = false;
    1925    targetdiv1.addEventListener("webkitpointerlocklost",
     
    2531    currentStep = 0;
    2632    function doNextStep() {
    27       todo[currentStep++]();
     33      setTimeout(function () { todo[currentStep++](); }, 0);
    2834    }
    2935    todo = [
  • trunk/LayoutTests/pointer-lock/pointer-lock-api-expected.txt

    r105011 r119763  
    55PASS navigator.webkitPointer.lock(document) is undefined
    66PASS navigator.webkitPointer.unlock() is undefined
     7PASS document.onwebkitpointerlockchange is defined.
     8PASS document.onwebkitpointerlockerror is defined.
    79PASS successfullyParsed is true
    810
  • trunk/LayoutTests/pointer-lock/pointer-lock-api.html

    r106134 r119763  
    1111    shouldEvaluateTo("navigator.webkitPointer.lock(document)", "undefined");
    1212    shouldEvaluateTo("navigator.webkitPointer.unlock()", "undefined");
     13    shouldBeDefined("document.onwebkitpointerlockchange");
     14    shouldBeDefined("document.onwebkitpointerlockerror");
    1315</script>
    1416<script src="../fast/js/resources/js-test-post.js"></script>
  • trunk/LayoutTests/pointer-lock/pointerlocklost-event-expected.txt

    r106134 r119763  
    1010PASS webkitpointerlocklost handler call 1
    1111PASS All expected webkitpointerlocklost events received.
     12PASS onwebkitpointerlockchange received.
     13PASS All expected onwebkitpointerlockchange events received.
    1214PASS navigator.webkitPointer.isLocked is false
    1315PASS navigator.webkitPointer.isLocked is true
     
    1618PASS webkitpointerlocklost handler call 1
    1719PASS All expected webkitpointerlocklost events received.
     20PASS onwebkitpointerlockchange received.
     21PASS All expected onwebkitpointerlockchange events received.
    1822PASS navigator.webkitPointer.isLocked is false
    1923PASS successfullyParsed is true
  • trunk/LayoutTests/pointer-lock/pointerlocklost-event.html

    r106134 r119763  
    99</div>
    1010<script>
     11    // FIXME: Rename this test to pointerlockchange-event-on-lock-lost. (https://bugs.webkit.org/show_bug.cgi?id=84402)
     12
    1113    description("Test that pointerlocklost event is dispatched.")
    1214    window.jsTestIsAsync = true;
     
    1517    targetdiv = document.getElementById("target");
    1618
     19    // FIXME: Keep pointerlockchange and pointerlockerror event usage. (https://bugs.webkit.org/show_bug.cgi?id=84402)
     20    document.onwebkitpointerlockchange = lockchangeToUnlockedHandler;
     21    document.onwebkitpointerlockerror =
     22        function () { testFailed("document.onwebkitpointerlockerror dispatched"); finishJSTest(); };
     23    lockchangeToUnlockedHandlers = 1;
     24
     25    lockchangeToUnlockedReceipts = 0;
     26    function lockchangeToUnlockedHandler() {
     27        if (navigator.webkitPointer.isLocked == false) {
     28            testPassed("onwebkitpointerlockchange received.");
     29            lockchangeToUnlockedReceipts++;
     30            if (lockchangeToUnlockedReceipts == lockchangeToUnlockedHandlers) {
     31                testPassed("All expected onwebkitpointerlockchange events received.");
     32            }
     33        }
     34    }
     35
     36    // FIXME: Remove pointerlocklost usage. (https://bugs.webkit.org/show_bug.cgi?id=84402)
    1737    document.addEventListener("webkitpointerlocklost", locklostHandler);
    1838    targetdiv.addEventListener("webkitpointerlocklost", locklostHandler);
     
    3151    currentStep = 0;
    3252    function doNextStep() {
    33       todo[currentStep++]();
     53      setTimeout(function () { todo[currentStep++](); }, 0);
    3454    }
    3555    todo = [
     
    6888        function () {
    6989            debug("Host initiated unlock.")
     90            lockchangeToUnlockedReceipts = 0;
    7091            locklostreceipts = 0;
    7192            layoutTestController.didLosePointerLock();
  • trunk/Source/WebCore/ChangeLog

    r119762 r119763  
     12012-06-06  Vincent Scheib  <scheib@chromium.org>
     2
     3        Add new Pointer Lock spec events webkitpointerlockchange and webkitpointerlockerror
     4        https://bugs.webkit.org/show_bug.cgi?id=88377
     5
     6        Reviewed by Dimitri Glazkov.
     7
     8        Part of a series of refactoring changes to update pointer lock API to
     9        the fullscreen locking style. https://bugs.webkit.org/show_bug.cgi?id=84402
     10
     11        New change and error events added. Follow up patches will remove
     12        the previous callbacks and pointerlocklost event. Tests updated
     13        to include the new events, and a new test added specifically for
     14        the new events, pointerlockchange-pointerlockerror-events.html.
     15
     16        Test: pointer-lock/pointerlockchange-pointerlockerror-events.html
     17
     18        * dom/Document.h:
     19        (Document):
     20        * dom/Document.idl:
     21        * dom/EventNames.h:
     22        (WebCore):
     23        * page/PointerLockController.cpp:
     24        (WebCore::PointerLockController::requestPointerLock):
     25        (WebCore::PointerLockController::didAcquirePointerLock):
     26        (WebCore::PointerLockController::didNotAcquirePointerLock):
     27        (WebCore::PointerLockController::didLosePointerLock):
     28        (WebCore::PointerLockController::enqueueEvent):
     29        (WebCore):
     30        * page/PointerLockController.h:
     31        (PointerLockController):
     32
    1332012-06-07  Sheriff Bot  <webkit.review.bot@gmail.com>
    234
  • trunk/Source/WebCore/dom/Document.h

    r119690 r119763  
    331331    DEFINE_ATTRIBUTE_EVENT_LISTENER(webkitfullscreenerror);
    332332#endif
     333#if ENABLE(POINTER_LOCK)
     334    DEFINE_ATTRIBUTE_EVENT_LISTENER(webkitpointerlockchange);
     335    DEFINE_ATTRIBUTE_EVENT_LISTENER(webkitpointerlockerror);
     336#endif
    333337#if ENABLE(PAGE_VISIBILITY_API)
    334338    DEFINE_ATTRIBUTE_EVENT_LISTENER(webkitvisibilitychange);
  • trunk/Source/WebCore/dom/Document.idl

    r118484 r119763  
    331331        attribute [NotEnumerable, Conditional=FULLSCREEN_API] EventListener onwebkitfullscreenchange;
    332332        attribute [NotEnumerable, Conditional=FULLSCREEN_API] EventListener onwebkitfullscreenerror;
     333        attribute [NotEnumerable, Conditional=POINTER_LOCK] EventListener onwebkitpointerlockchange;
     334        attribute [NotEnumerable, Conditional=POINTER_LOCK] EventListener onwebkitpointerlockerror;
    333335#endif
    334336
  • trunk/Source/WebCore/dom/EventNames.h

    r114067 r119763  
    221221    \
    222222    macro(webkitpointerlocklost) \
     223    macro(webkitpointerlockchange) \
     224    macro(webkitpointerlockerror) \
    223225    \
    224226    macro(webkitRegionLayoutUpdate) \
  • trunk/Source/WebCore/page/PointerLockController.cpp

    r106134 r119763  
    4949void PointerLockController::requestPointerLock(Element* target, PassRefPtr<VoidCallback> successCallback, PassRefPtr<VoidCallback> failureCallback)
    5050{
     51    if (!target)
     52        return;
     53
    5154    if (isLocked()) {
     55        // FIXME: Keep enqueueEvent usage. (https://bugs.webkit.org/show_bug.cgi?id=84402)
     56        enqueueEvent(eventNames().webkitpointerlockchangeEvent, target);
     57        if (m_element->document() != target->document())
     58            enqueueEvent(eventNames().webkitpointerlockchangeEvent, m_element.get());
     59
     60        // FIXME: Remove callback usage, keep assignment of m_element = target. (https://bugs.webkit.org/show_bug.cgi?id=84402)
    5261        if (m_element == target) {
    5362            if (successCallback)
     
    6372        m_successCallback = successCallback;
    6473        m_failureCallback = failureCallback;
    65     } else if (failureCallback)
    66         failureCallback->handleEvent();
     74    } else {
     75        // FIXME: Keep enqueueEvent usage. (https://bugs.webkit.org/show_bug.cgi?id=84402)
     76        enqueueEvent(eventNames().webkitpointerlockerrorEvent, target);
     77
     78        // FIXME: Remove callback usage. (https://bugs.webkit.org/show_bug.cgi?id=84402)
     79        if (failureCallback)
     80            failureCallback->handleEvent();
     81    }
    6782}
    6883
     
    7994void PointerLockController::didAcquirePointerLock()
    8095{
     96    // FIXME: Keep enqueueEvent usage. (https://bugs.webkit.org/show_bug.cgi?id=84402)
     97    enqueueEvent(eventNames().webkitpointerlockchangeEvent, m_element.get());
     98
     99    // FIXME: Remove callback usage. (https://bugs.webkit.org/show_bug.cgi?id=84402)
    81100    RefPtr<Element> elementToNotify(m_element);
    82101    RefPtr<VoidCallback> callbackToIssue(m_successCallback);
     
    90109void PointerLockController::didNotAcquirePointerLock()
    91110{
     111    // FIXME: Keep enqueueEvent usage. (https://bugs.webkit.org/show_bug.cgi?id=84402)
     112    enqueueEvent(eventNames().webkitpointerlockerrorEvent, m_element.get());
     113
     114    // FIXME: Remove callback usage. (https://bugs.webkit.org/show_bug.cgi?id=84402)
    92115    RefPtr<Element> elementToNotify(m_element);
    93116    RefPtr<VoidCallback> callbackToIssue(m_failureCallback);
     
    102125void PointerLockController::didLosePointerLock()
    103126{
     127    // FIXME: Keep enqueueEvent usage. (https://bugs.webkit.org/show_bug.cgi?id=84402)
     128    enqueueEvent(eventNames().webkitpointerlockchangeEvent, m_element.get());
     129
     130    // FIXME: Remove callback usage. (https://bugs.webkit.org/show_bug.cgi?id=84402)
    104131    RefPtr<Element> elementToNotify(m_element);
    105132    m_element = 0;
     
    122149}
    123150
     151void PointerLockController::enqueueEvent(const AtomicString& type, Element* element)
     152{
     153    if (!element)
     154        return;
     155    element->document()->enqueueDocumentEvent(Event::create(type, true, false));
     156}
     157
    124158} // namespace WebCore
    125159
  • trunk/Source/WebCore/page/PointerLockController.h

    r106134 r119763  
    5555private:
    5656    explicit PointerLockController(Page*);
     57    void enqueueEvent(const AtomicString& type, Element*);
    5758    Page* m_page;
    5859    RefPtr<Element> m_element;
     60
     61    // FIXME: Remove callback usage. (https://bugs.webkit.org/show_bug.cgi?id=84402)
    5962    RefPtr<VoidCallback> m_successCallback;
    6063    RefPtr<VoidCallback> m_failureCallback;
Note: See TracChangeset for help on using the changeset viewer.