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;