Title: [86741] trunk
Revision
86741
Author
jer.no...@apple.com
Date
2011-05-18 00:38:30 -0700 (Wed, 18 May 2011)

Log Message

2011-05-16  Jeremy Noble  <jer.no...@apple.com>

        Reviewed by Darin Adler.

        Disable keyboard input (with exceptions) in full-screen mode.
        https://bugs.webkit.org/show_bug.cgi?id=60943

        * fullscreen/full-screen-keyboard-disabled-expected.txt: Added.
        * fullscreen/full-screen-keyboard-disabled.html: Added.
        * fullscreen/full-screen-keyboard-enabled-expected.txt: Added.
        * fullscreen/full-screen-keyboard-enabled.html: Added.
2011-05-16  Jeremy Noble  <jer.no...@apple.com>

        Reviewed by Darin Adler.

        Disable keyboard input (with exceptions) in full-screen mode.
        https://bugs.webkit.org/show_bug.cgi?id=60943

        Tests: fullscreen/full-screen-keyboard-disabled.html
               fullscreen/full-screen-keyboard-enabled.html

        * page/EventHandler.cpp:
        (WebCore::EventHandler::isKeyEventAllowedInFullScreen): Added.  Implements the
            list of allowed keyboard events in the proposed API.
        (WebCore::EventHandler::keyEvent): Discard events which are not allowed in
            full-screen mode.
        * page/EventHandler.h:

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (86740 => 86741)


--- trunk/LayoutTests/ChangeLog	2011-05-18 07:34:07 UTC (rev 86740)
+++ trunk/LayoutTests/ChangeLog	2011-05-18 07:38:30 UTC (rev 86741)
@@ -1,3 +1,15 @@
+2011-05-16  Jeremy Noble  <jer.no...@apple.com>
+
+        Reviewed by Darin Adler.
+
+        Disable keyboard input (with exceptions) in full-screen mode.
+        https://bugs.webkit.org/show_bug.cgi?id=60943
+
+        * fullscreen/full-screen-keyboard-disabled-expected.txt: Added.
+        * fullscreen/full-screen-keyboard-disabled.html: Added.
+        * fullscreen/full-screen-keyboard-enabled-expected.txt: Added.
+        * fullscreen/full-screen-keyboard-enabled.html: Added.
+
 2011-05-17  Jeremy Noble  <jer.no...@apple.com>
 
         Reviewed by Darin Adler.

Added: trunk/LayoutTests/fullscreen/full-screen-keyboard-disabled-expected.txt (0 => 86741)


--- trunk/LayoutTests/fullscreen/full-screen-keyboard-disabled-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/fullscreen/full-screen-keyboard-disabled-expected.txt	2011-05-18 07:38:30 UTC (rev 86741)
@@ -0,0 +1,6 @@
+EVENT(webkitfullscreenchange)
+EXPECTED (document.webkitIsFullScreen == 'true') OK
+EVENT(keypress)
+EXPECTED (event.keyCode == '32') OK
+END OF TEST
+This tests that full screen mode does not allow alphanumeric key events. Press space to continue, then press an alphanumeric key, followed by space.

Added: trunk/LayoutTests/fullscreen/full-screen-keyboard-disabled.html (0 => 86741)


--- trunk/LayoutTests/fullscreen/full-screen-keyboard-disabled.html	                        (rev 0)
+++ trunk/LayoutTests/fullscreen/full-screen-keyboard-disabled.html	2011-05-18 07:38:30 UTC (rev 86741)
@@ -0,0 +1,40 @@
+<body>
+<script src=""
+<p>This tests that full screen mode does not allow alphanumeric key events.  Press space to continue, then press an alphanumeric key, followed by space.
+<span></span>
+<script>
+    // Bail out early if the full screen API is not enabled or is missing:
+    if (Element.prototype.webkitRequestFullScreen == undefined) {
+        logResult(false, "Element.prototype.webkitRequestFullScreen == undefined");
+        endTest();
+    } else {
+        var callback;
+        var fullscreenChanged = function(event)
+        {
+            if (callback)
+                callback(event)
+        };
+        waitForEvent(document, 'webkitfullscreenchange', fullscreenChanged);
+
+        var spanEnteredFullScreen = function() {
+            callback = null;
+            testExpected("document.webkitIsFullScreen", true);
+            if (window.layoutTestController && eventSender.keyDown) {
+                waitForEvent(document, 'keypress', keyPressed);
+                eventSender.keyDown('a', []);
+                eventSender.keyDown(' ', []);
+            }
+        };
+
+        var keyPressed = function(event) {
+            testExpected('event.keyCode', 32); // Space
+            endTest();
+            document.webkitCancelFullScreen();
+        }
+        waitForEvent(document, 'webkitfullscreenchange', fullscreenChanged);
+
+        var span = document.getElementsByTagName('span')[0];
+        callback = spanEnteredFullScreen;
+        runWithKeyDown(function(){span.webkitRequestFullScreen()});
+    }
+</script>

Added: trunk/LayoutTests/fullscreen/full-screen-keyboard-enabled-expected.txt (0 => 86741)


--- trunk/LayoutTests/fullscreen/full-screen-keyboard-enabled-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/fullscreen/full-screen-keyboard-enabled-expected.txt	2011-05-18 07:38:30 UTC (rev 86741)
@@ -0,0 +1,6 @@
+EVENT(webkitfullscreenchange)
+EXPECTED (document.webkitIsFullScreen == 'true') OK
+EVENT(keypress)
+EXPECTED (event.keyCode == '97') OK
+END OF TEST
+This tests that full screen mode does not allow alphanumeric key events. Press space to continue, then press the 'a' key.

Added: trunk/LayoutTests/fullscreen/full-screen-keyboard-enabled.html (0 => 86741)


--- trunk/LayoutTests/fullscreen/full-screen-keyboard-enabled.html	                        (rev 0)
+++ trunk/LayoutTests/fullscreen/full-screen-keyboard-enabled.html	2011-05-18 07:38:30 UTC (rev 86741)
@@ -0,0 +1,37 @@
+<body>
+<script src=""
+<p>This tests that full screen mode does not allow alphanumeric key events.  Press space to continue, then press the 'a' key.
+<span></span>
+<script>
+    // Bail out early if the full screen API is not enabled or is missing:
+    if (Element.prototype.webkitRequestFullScreen == undefined) {
+        logResult(false, "Element.prototype.webkitRequestFullScreen == undefined");
+        endTest();
+    } else {
+        var callback;
+        var fullscreenChanged = function(event)
+        {
+            if (callback)
+                callback(event)
+        };
+        waitForEvent(document, 'webkitfullscreenchange', fullscreenChanged);
+
+        var spanEnteredFullScreen = function() {
+            callback = null;
+            testExpected("document.webkitIsFullScreen", true);
+            if (window.layoutTestController && eventSender.keyDown) {
+                waitForEvent(document, 'keypress', keyPressed);
+                eventSender.keyDown('a', []);
+            }
+        };
+        
+        var keyPressed = function(event) {
+            testExpected('event.keyCode', 97); // 'A'
+            endTest();
+        }
+        
+        var span = document.getElementsByTagName('span')[0];
+        callback = spanEnteredFullScreen;
+        runWithKeyDown(function(){span.webkitRequestFullScreen(Element.ALLOW_KEYBOARD_INPUT)});
+    }
+</script>

Modified: trunk/LayoutTests/platform/mac-wk2/Skipped (86740 => 86741)


--- trunk/LayoutTests/platform/mac-wk2/Skipped	2011-05-18 07:34:07 UTC (rev 86740)
+++ trunk/LayoutTests/platform/mac-wk2/Skipped	2011-05-18 07:38:30 UTC (rev 86741)
@@ -1679,16 +1679,7 @@
 
 # WebKit2 needs fullscreen support
 # https://bugs.webkit.org/show_bug.cgi?id=56318
-fullscreen/full-screen-css.html
-fullscreen/full-screen-iframe-allowed.html
-fullscreen/full-screen-iframe-not-allowed.html
-fullscreen/full-screen-frameset.html
-fullscreen/full-screen-remove-ancestor.html
-fullscreen/full-screen-remove.html
-fullscreen/full-screen-request.html
-fullscreen/full-screen-twice.html
-fullscreen/full-screen-zIndex.html
-fullscreen/video-specified-size.html
+fullscreen/
 
 # WebKit2 needs to support synchronous creation of about:blank/data:url frames
 fast/dom/HTMLDocument/hasFocus.html

Modified: trunk/Source/WebCore/ChangeLog (86740 => 86741)


--- trunk/Source/WebCore/ChangeLog	2011-05-18 07:34:07 UTC (rev 86740)
+++ trunk/Source/WebCore/ChangeLog	2011-05-18 07:38:30 UTC (rev 86741)
@@ -1,3 +1,20 @@
+2011-05-16  Jeremy Noble  <jer.no...@apple.com>
+
+        Reviewed by Darin Adler.
+
+        Disable keyboard input (with exceptions) in full-screen mode.
+        https://bugs.webkit.org/show_bug.cgi?id=60943
+
+        Tests: fullscreen/full-screen-keyboard-disabled.html
+               fullscreen/full-screen-keyboard-enabled.html
+
+        * page/EventHandler.cpp:
+        (WebCore::EventHandler::isKeyEventAllowedInFullScreen): Added.  Implements the 
+            list of allowed keyboard events in the proposed API.
+        (WebCore::EventHandler::keyEvent): Discard events which are not allowed in
+            full-screen mode.
+        * page/EventHandler.h:
+
 2011-05-17  Nikolas Zimmermann  <nzimmerm...@rim.com>
 
         Reviewed by Dirk Schulze.

Modified: trunk/Source/WebCore/page/EventHandler.cpp (86740 => 86741)


--- trunk/Source/WebCore/page/EventHandler.cpp	2011-05-18 07:34:07 UTC (rev 86740)
+++ trunk/Source/WebCore/page/EventHandler.cpp	2011-05-18 07:38:30 UTC (rev 86741)
@@ -2425,10 +2425,30 @@
 }
 #endif
 
+#if ENABLE(FULLSCREEN_API)
+bool EventHandler::isKeyEventAllowedInFullScreen(const PlatformKeyboardEvent& keyEvent) const
+{
+    Document* document = m_frame->document();
+    if (document->webkitFullScreenKeyboardInputAllowed())
+        return true;
+
+    int keyCode = keyEvent.windowsVirtualKeyCode();
+    return (keyCode >= VK_BACK && keyCode <= VK_CAPITAL)
+        || (keyCode >= VK_SPACE && keyCode <= VK_DELETE)
+        || (keyCode >= VK_OEM_1 && keyCode <= VK_OEM_PLUS)
+        || (keyCode >= VK_MULTIPLY && keyCode <= VK_OEM_8);
+}
+#endif
+
 bool EventHandler::keyEvent(const PlatformKeyboardEvent& initialKeyEvent)
 {
     RefPtr<FrameView> protector(m_frame->view()); 
 
+#if ENABLE(FULLSCREEN_API)
+    if (m_frame->document()->webkitIsFullScreen() && !isKeyEventAllowedInFullScreen(initialKeyEvent))
+        return false;
+#endif
+
     if (initialKeyEvent.windowsVirtualKeyCode() == VK_CAPITAL)
         capsLockStateMayHaveChanged();
 

Modified: trunk/Source/WebCore/page/EventHandler.h (86740 => 86741)


--- trunk/Source/WebCore/page/EventHandler.h	2011-05-18 07:34:07 UTC (rev 86740)
+++ trunk/Source/WebCore/page/EventHandler.h	2011-05-18 07:38:30 UTC (rev 86741)
@@ -351,6 +351,10 @@
     PlatformMouseEvent currentPlatformMouseEvent() const;
 #endif
 
+#if ENABLE(FULLSCREEN_API)
+    bool isKeyEventAllowedInFullScreen(const PlatformKeyboardEvent&) const;
+#endif
+
     Frame* m_frame;
 
     bool m_mousePressed;
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to