⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 124301 in webkit


Ignore:
Timestamp:
Jul 31, 2012, 10:10:30 PM (14 years ago)
Author:
scheib@chromium.org
Message:

webkitRequestPointerLock and webkitExitPointerLock limited to the same document of an active Pointer lock.
https://bugs.webkit.org/show_bug.cgi?id=91284

Reviewed by Adrienne Walker.

Previously, cross-talk between documents was possible, e.g. allowing one
document.webkitExitPointerLock to exit the lock from another document.
This change brings Pointer Lock closer to the Fullscreen API behavior,
and stops the pointer lock target from being transferable between
documents.

Source/WebCore:

Test: http/tests/pointer-lock/requestPointerLock-can-not-transfer-between-documents.html

  • dom/Document.cpp:

(WebCore::Document::webkitExitPointerLock):

  • page/PointerLockController.cpp:

(WebCore::PointerLockController::requestPointerLock):

LayoutTests:

  • http/tests/pointer-lock/requestPointerLock-can-not-transfer-between-documents-expected.txt: Added.
  • http/tests/pointer-lock/requestPointerLock-can-not-transfer-between-documents.html: Added.
  • http/tests/resources/pointer-lock/iframe-common.js:

(document.onwebkitpointerlockchange):
(document.onwebkitpointerlockerror):

  • pointer-lock/pointerlockchange-pointerlockerror-events-expected.txt:
  • pointer-lock/pointerlockchange-pointerlockerror-events.html:
Location:
trunk
Files:
2 added
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r124300 r124301  
     12012-07-31  Vincent Scheib  <scheib@chromium.org>
     2
     3        webkitRequestPointerLock and webkitExitPointerLock limited to the same document of an active Pointer lock.
     4        https://bugs.webkit.org/show_bug.cgi?id=91284
     5
     6        Reviewed by Adrienne Walker.
     7
     8        Previously, cross-talk between documents was possible, e.g. allowing one
     9        document.webkitExitPointerLock to exit the lock from another document.
     10        This change brings Pointer Lock closer to the Fullscreen API behavior,
     11        and stops the pointer lock target from being transferable between
     12        documents.
     13
     14        * http/tests/pointer-lock/requestPointerLock-can-not-transfer-between-documents-expected.txt: Added.
     15        * http/tests/pointer-lock/requestPointerLock-can-not-transfer-between-documents.html: Added.
     16        * http/tests/resources/pointer-lock/iframe-common.js:
     17        (document.onwebkitpointerlockchange):
     18        (document.onwebkitpointerlockerror):
     19        * pointer-lock/pointerlockchange-pointerlockerror-events-expected.txt:
     20        * pointer-lock/pointerlockchange-pointerlockerror-events.html:
     21
    1222012-07-31  Ami Fischman  <fischman@chromium.org>
    223
  • trunk/LayoutTests/http/tests/resources/pointer-lock/iframe-common.js

    r123343 r124301  
    1212}
    1313
     14document.onwebkitpointerlockchange = function () {
     15    parent.postMessage(thisFileName() + " onwebkitpointerlockchange, document.webkitPointerLockElement = " + document.webkitPointerLockElement, "*");
     16}
     17
     18document.onwebkitpointerlockerror = function () {
     19    parent.postMessage(thisFileName() + " onwebkitpointerlockerror", "*");
     20}
  • trunk/LayoutTests/pointer-lock/pointerlockchange-pointerlockerror-events-expected.txt

    r122158 r124301  
    1515     Lock targetDiv2 again.
    1616PASS onwebkitpointerlockchange received after: Lock targetDiv2 again.
     17     Unlock targetDiv2.
     18PASS onwebkitpointerlockchange received after: Unlock targetDiv2.
    1719     Lock targetIframe1.
    1820     Lock targetIframe1 (handler for iframe1).
    1921PASS onwebkitpointerlockchange received after: Lock targetIframe1 (handler for iframe1).
    20 PASS onwebkitpointerlockchange received after: Lock targetIframe1.
    2122     Lock targetIframe2.
    2223     Lock targetIframe2 (handler for iframe1).
    2324     Lock targetIframe2 (handler for iframe2).
    24 PASS onwebkitpointerlockchange received after: Lock targetIframe2 (handler for iframe2).
    25 PASS onwebkitpointerlockchange received after: Lock targetIframe2 (handler for iframe1).
     25PASS onwebkitpointerlockerror received after: Lock targetIframe2 (handler for iframe2).
    2626     Unlock targetIframe2.
    2727     Unlock targetIframe2 (handler for iframe1).
    2828     Unlock targetIframe2 (handler for iframe2).
    29 PASS onwebkitpointerlockchange received after: Unlock targetIframe2 (handler for iframe2).
     29PASS onwebkitpointerlockchange received after: Unlock targetIframe2 (handler for iframe1).
    3030PASS testRunner.setPointerLockWillFailSynchronously is defined.
    3131     Lock with synchronous failure.
  • trunk/LayoutTests/pointer-lock/pointerlockchange-pointerlockerror-events.html

    r123247 r124301  
    4848        },
    4949        function () {
     50            expectOnlyChangeEvent("Unlock targetDiv2.");
     51            document.webkitExitPointerLock();
     52        },
     53        function () {
    5054            targetIframe1.src = "about:blank";
    5155            targetIframe1.onload = function () { doNextStep(); }
     
    5660        },
    5761        function () {
    58             expectOnlyChangeEvent("Lock targetIframe1.");
     62            expectNoEvents("Lock targetIframe1.");
    5963            expectOnlyChangeEvent("Lock targetIframe1 (handler for iframe1).", targetIframe1.contentDocument);
    6064            targetIframe1.contentDocument.body.webkitRequestPointerLock();
    6165        },
    6266        function () {
    63             // Absorb an extra doNextStep() from previous event handlers.
    64         },
    65         function () {
    6667            expectNoEvents("Lock targetIframe2.");
    67             expectOnlyChangeEvent("Lock targetIframe2 (handler for iframe1).", targetIframe1.contentDocument);
    68             expectOnlyChangeEvent("Lock targetIframe2 (handler for iframe2).", targetIframe2.contentDocument);
     68            expectNoEvents("Lock targetIframe2 (handler for iframe1).", targetIframe1.contentDocument);
     69            expectOnlyErrorEvent("Lock targetIframe2 (handler for iframe2).", targetIframe2.contentDocument);
    6970            targetIframe2.contentDocument.body.webkitRequestPointerLock();
    7071        },
    7172        function () {
    72             // Absorb an extra doNextStep() from previous event handlers.
    73         },
    74         function () {
    7573            expectNoEvents("Unlock targetIframe2.");
    76             expectNoEvents("Unlock targetIframe2 (handler for iframe1).", targetIframe1.contentDocument);
    77             expectOnlyChangeEvent("Unlock targetIframe2 (handler for iframe2).", targetIframe2.contentDocument);
    78             document.webkitExitPointerLock();
     74            expectOnlyChangeEvent("Unlock targetIframe2 (handler for iframe1).", targetIframe1.contentDocument);
     75            expectNoEvents("Unlock targetIframe2 (handler for iframe2).", targetIframe2.contentDocument);
     76            targetIframe1.contentDocument.webkitExitPointerLock();
    7977        },
    8078        function () {
  • trunk/Source/WebCore/ChangeLog

    r124299 r124301  
     12012-07-31  Vincent Scheib  <scheib@chromium.org>
     2
     3        webkitRequestPointerLock and webkitExitPointerLock limited to the same document of an active Pointer lock.
     4        https://bugs.webkit.org/show_bug.cgi?id=91284
     5
     6        Reviewed by Adrienne Walker.
     7
     8        Previously, cross-talk between documents was possible, e.g. allowing one
     9        document.webkitExitPointerLock to exit the lock from another document.
     10        This change brings Pointer Lock closer to the Fullscreen API behavior,
     11        and stops the pointer lock target from being transferable between
     12        documents.
     13
     14        Test: http/tests/pointer-lock/requestPointerLock-can-not-transfer-between-documents.html
     15
     16        * dom/Document.cpp:
     17        (WebCore::Document::webkitExitPointerLock):
     18        * page/PointerLockController.cpp:
     19        (WebCore::PointerLockController::requestPointerLock):
     20
    1212012-07-31  Keishi Hattori  <keishi@webkit.org>
    222
  • trunk/Source/WebCore/dom/Document.cpp

    r123827 r124301  
    58305830void Document::webkitExitPointerLock()
    58315831{
    5832     if (page())
    5833         page()->pointerLockController()->requestPointerUnlock();
     5832    if (!page())
     5833        return;
     5834    if (Element* target = page()->pointerLockController()->element()) {
     5835        if (target->document() != this)
     5836            return;
     5837    }
     5838    page()->pointerLockController()->requestPointerUnlock();
    58345839}
    58355840
  • trunk/Source/WebCore/page/PointerLockController.cpp

    r122626 r124301  
    5555
    5656    if (m_element) {
     57        if (m_element->document() != target->document()) {
     58            enqueueEvent(eventNames().webkitpointerlockerrorEvent, target);
     59            return;
     60        }
     61
    5762        // FIXME: Keep enqueueEvent usage. (https://bugs.webkit.org/show_bug.cgi?id=84402)
    5863        enqueueEvent(eventNames().webkitpointerlockchangeEvent, target);
Note: See TracChangeset for help on using the changeset viewer.