Title: [247018] trunk
Revision
247018
Author
[email protected]
Date
2019-07-01 13:52:58 -0700 (Mon, 01 Jul 2019)

Log Message

[iOS] Exiting from fullscreen scrolls to top of page
https://bugs.webkit.org/show_bug.cgi?id=199338
<rdar://problem/51273017>

Reviewed by Jer Noble.

Source/WebKit:

* UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mm:
(-[WKFullScreenWindowController _completedExitFullScreen]): Restore scroll position.
Hide window after restoring scroll position.
(-[WKFullScreenWindowController _exitFullscreenImmediately]): Drive-by fix: remove code
already also done in _completedExitFullScreen.

LayoutTests:

* fullscreen/fullscreen-restore-scroll-position-expected.txt: Added.
* fullscreen/fullscreen-restore-scroll-position.html: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (247017 => 247018)


--- trunk/LayoutTests/ChangeLog	2019-07-01 20:29:20 UTC (rev 247017)
+++ trunk/LayoutTests/ChangeLog	2019-07-01 20:52:58 UTC (rev 247018)
@@ -1,3 +1,14 @@
+2019-07-01  Eric Carlson  <[email protected]>
+
+        [iOS] Exiting from fullscreen scrolls to top of page
+        https://bugs.webkit.org/show_bug.cgi?id=199338
+        <rdar://problem/51273017>
+
+        Reviewed by Jer Noble.
+
+        * fullscreen/fullscreen-restore-scroll-position-expected.txt: Added.
+        * fullscreen/fullscreen-restore-scroll-position.html: Added.
+
 2019-07-01  Russell Epstein  <[email protected]>
 
         Layout Test imported/mozilla/svg/text/selectSubString.svg is flaky.

Added: trunk/LayoutTests/fullscreen/fullscreen-restore-scroll-position-expected.txt (0 => 247018)


--- trunk/LayoutTests/fullscreen/fullscreen-restore-scroll-position-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/fullscreen/fullscreen-restore-scroll-position-expected.txt	2019-07-01 20:52:58 UTC (rev 247018)
@@ -0,0 +1,6 @@
+This tests that page scroll is restored after fullscreen. Press any key to start the test.
+
+
+EVENT(load)
+EXPECTED ((document.scrollingElement.scrollTop === originalScroll) == 'true') OK
+

Added: trunk/LayoutTests/fullscreen/fullscreen-restore-scroll-position.html (0 => 247018)


--- trunk/LayoutTests/fullscreen/fullscreen-restore-scroll-position.html	                        (rev 0)
+++ trunk/LayoutTests/fullscreen/fullscreen-restore-scroll-position.html	2019-07-01 20:52:58 UTC (rev 247018)
@@ -0,0 +1,61 @@
+<!DOCTYPE html>
+<html>
+    <head>
+        <title>fullscreen-restore-scroll-position</title>
+        <script src=""
+        <script src=""
+        <style>
+            html, body, #spacer {
+                height: 100%;
+            }
+            video {
+                width: 600px;
+                height: 400px;
+            }
+        </style>
+        <script>
+
+        let originalScroll = 0;
+
+        waitFor(window, 'load').then(async event => { 
+
+            if (Element.prototype.webkitRequestFullScreen == undefined) {
+                logResult(false, "Element.prototype.webkitRequestFullScreen == undefined");
+                endTest();
+                returh;
+            }
+
+            video = document.getElementsByTagName('video')[0];
+            video.src = "" '../media/content/test');
+            waitFor(video, 'canplaythrough', true);
+
+            originalScroll = document.body.clientHeight;
+            document.scrollingElement.scrollTop = originalScroll;
+            originalScroll = document.scrollingElement.scrollTop;
+
+            document._onwebkitfullscreenchange_ = async (event) => {
+
+                if (document.webkitIsFullScreen) {
+                    await sleepFor(100);
+                    document.webkitCancelFullScreen();
+                    return;
+                }
+
+                await testExpectedEventually("(document.scrollingElement.scrollTop === originalScroll)", true);
+                if (window.testRunner)
+                    testRunner.notifyDone();
+            };
+
+            runWithKeyDown(() => document.getElementById('parent').webkitRequestFullScreen());
+        });
+
+        </script>
+    </head>
+    <body>
+    <p>This tests that page scroll is restored after fullscreen. Press any key to start the test.</p>
+    <div id="spacer"></div>
+    <div id="parent">
+        <video id="video" controls><video>
+    </div>
+    </body>
+</html>

Modified: trunk/Source/WebKit/ChangeLog (247017 => 247018)


--- trunk/Source/WebKit/ChangeLog	2019-07-01 20:29:20 UTC (rev 247017)
+++ trunk/Source/WebKit/ChangeLog	2019-07-01 20:52:58 UTC (rev 247018)
@@ -1,3 +1,17 @@
+2019-07-01  Eric Carlson  <[email protected]>
+
+        [iOS] Exiting from fullscreen scrolls to top of page
+        https://bugs.webkit.org/show_bug.cgi?id=199338
+        <rdar://problem/51273017>
+
+        Reviewed by Jer Noble.
+
+        * UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mm:
+        (-[WKFullScreenWindowController _completedExitFullScreen]): Restore scroll position.
+        Hide window after restoring scroll position.
+        (-[WKFullScreenWindowController _exitFullscreenImmediately]): Drive-by fix: remove code
+        already also done in _completedExitFullScreen.
+
 2019-07-01  Zalan Bujtas  <[email protected]>
 
         Tapping on the bottom part of youtube video behaves as if controls were visible

Modified: trunk/Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mm (247017 => 247018)


--- trunk/Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mm	2019-07-01 20:29:20 UTC (rev 247017)
+++ trunk/Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mm	2019-07-01 20:52:58 UTC (rev 247018)
@@ -735,14 +735,15 @@
 
     [CATransaction commit];
 
-    [_window setHidden:YES];
-    _window = nil;
-
     if (auto* manager = self._manager) {
+        manager->restoreScrollPosition();
         manager->setAnimatingFullScreen(false);
         manager->didExitFullScreen();
     }
 
+    [_window setHidden:YES];
+    _window = nil;
+
     if (_repaintCallback) {
         _repaintCallback->invalidate(WebKit::CallbackBase::Error::OwnerWasInvalidated);
         ASSERT(!_repaintCallback);
@@ -873,10 +874,6 @@
     WebKit::replaceViewWithView(_webViewPlaceholder.get(), webView.get());
     if (auto* page = [webView _page])
         page->setSuppressVisibilityUpdates(false);
-    if (manager) {
-        manager->didExitFullScreen();
-        manager->setAnimatingFullScreen(false);
-    }
     _webViewPlaceholder = nil;
 }
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to