WebKit Bugzilla
Attachment 347518 Details for
Bug 188749
: UIWebView crash when enter/exit fullscreen happens too quickly.
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch
bug-188749-20180820114410.patch (text/plain), 9.65 KB, created by
Jeremy Jones
on 2018-08-20 11:44:11 PDT
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
Jeremy Jones
Created:
2018-08-20 11:44:11 PDT
Size:
9.65 KB
patch
obsolete
>Subversion Revision: 233866 >diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index c5a38686af624c2c0a340a1824c93c02cc1276b5..b7d42790233dec81001e99c203470e832b1f8b3b 100644 >--- a/Source/WebCore/ChangeLog >+++ b/Source/WebCore/ChangeLog >@@ -1,3 +1,23 @@ >+2018-08-20 Jeremy Jones <jeremyj@apple.com> >+ >+ UIWebView crash when enter/exit fullscreen happens too quickly. >+ https://bugs.webkit.org/show_bug.cgi?id=188749 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Test: media/ios/media-fullscreen-return-to-inline.html >+ >+ Null check m_interface when it is accessed after a dispatch. >+ >+ * platform/ios/WebVideoFullscreenControllerAVKit.mm: >+ (VideoFullscreenControllerContext::requestUpdateInlineRect): >+ (VideoFullscreenControllerContext::requestVideoContentLayer): >+ (VideoFullscreenControllerContext::returnVideoContentLayer): >+ (VideoFullscreenControllerContext::didSetupFullscreen): >+ (VideoFullscreenControllerContext::didExitFullscreen): >+ (VideoFullscreenControllerContext::fullscreenMayReturnToInline): >+ (VideoFullscreenControllerContext::exitFullscreen): >+ > 2018-07-16 Aditya Keerthi <akeerthi@apple.com> > > [Datalist][macOS] Add suggestions UI for TextFieldInputTypes >diff --git a/Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.mm b/Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.mm >index 72b8448b293fe3f4309cc7780a76f1f028f17429..b544ef7782cc3d23aaed788ed28529a98f3d80d4 100644 >--- a/Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.mm >+++ b/Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.mm >@@ -222,7 +222,8 @@ void VideoFullscreenControllerContext::requestUpdateInlineRect() > WebThreadRun([protectedThis = makeRefPtr(this), this] () mutable { > IntRect clientRect = elementRectInWindow(m_videoElement.get()); > dispatch_async(dispatch_get_main_queue(), [protectedThis = WTFMove(protectedThis), this, clientRect] { >- m_interface->setInlineRect(clientRect, clientRect != IntRect(0, 0, 0, 0)); >+ if (m_interface) >+ m_interface->setInlineRect(clientRect, clientRect != IntRect(0, 0, 0, 0)); > }); > }); > #else >@@ -238,7 +239,8 @@ void VideoFullscreenControllerContext::requestVideoContentLayer() > [videoFullscreenLayer setBackgroundColor:cachedCGColor(WebCore::Color::transparent)]; > m_fullscreenModel->setVideoFullscreenLayer(videoFullscreenLayer.get(), [protectedThis = WTFMove(protectedThis), this] () mutable { > dispatch_async(dispatch_get_main_queue(), [protectedThis = WTFMove(protectedThis), this] { >- m_interface->setHasVideoContentLayer(true); >+ if (m_interface) >+ m_interface->setHasVideoContentLayer(true); > }); > }); > }); >@@ -255,7 +257,8 @@ void VideoFullscreenControllerContext::returnVideoContentLayer() > [videoFullscreenLayer setBackgroundColor:cachedCGColor(WebCore::Color::transparent)]; > m_fullscreenModel->setVideoFullscreenLayer(nil, [protectedThis = WTFMove(protectedThis), this] () mutable { > dispatch_async(dispatch_get_main_queue(), [protectedThis = WTFMove(protectedThis), this] { >- m_interface->setHasVideoContentLayer(false); >+ if (m_interface) >+ m_interface->setHasVideoContentLayer(false); > }); > }); > }); >@@ -269,14 +272,16 @@ void VideoFullscreenControllerContext::didSetupFullscreen() > ASSERT(isUIThread()); > #if PLATFORM(IOS) && ENABLE(FULLSCREEN_API) > dispatch_async(dispatch_get_main_queue(), [protectedThis = makeRefPtr(this), this] { >- m_interface->enterFullscreen(); >+ if (m_interface) >+ m_interface->enterFullscreen(); > }); > #else > WebThreadRun([protectedThis = makeRefPtr(this), this, videoFullscreenLayer = retainPtr([m_videoFullscreenView layer])] () mutable { > [videoFullscreenLayer setBackgroundColor:cachedCGColor(WebCore::Color::transparent)]; > m_fullscreenModel->setVideoFullscreenLayer(videoFullscreenLayer.get(), [protectedThis = WTFMove(protectedThis), this] () mutable { > dispatch_async(dispatch_get_main_queue(), [protectedThis = WTFMove(protectedThis), this] { >- m_interface->enterFullscreen(); >+ if (m_interface) >+ m_interface->enterFullscreen(); > }); > }); > }); >@@ -298,13 +303,15 @@ void VideoFullscreenControllerContext::didExitFullscreen() > ASSERT(isUIThread()); > #if PLATFORM(IOS) && ENABLE(FULLSCREEN_API) > dispatch_async(dispatch_get_main_queue(), [protectedThis = makeRefPtr(this), this] { >- m_interface->cleanupFullscreen(); >+ if (m_interface) >+ m_interface->cleanupFullscreen(); > }); > #else > WebThreadRun([protectedThis = makeRefPtr(this), this] () mutable { > m_fullscreenModel->setVideoFullscreenLayer(nil, [protectedThis = WTFMove(protectedThis), this] () mutable { > dispatch_async(dispatch_get_main_queue(), [protectedThis = WTFMove(protectedThis), this] { >- m_interface->cleanupFullscreen(); >+ if (m_interface) >+ m_interface->cleanupFullscreen(); > }); > }); > }); >@@ -337,7 +344,8 @@ void VideoFullscreenControllerContext::fullscreenMayReturnToInline() > WebThreadRun([protectedThis = makeRefPtr(this), this] () mutable { > IntRect clientRect = elementRectInWindow(m_videoElement.get()); > dispatch_async(dispatch_get_main_queue(), [protectedThis = WTFMove(protectedThis), this, clientRect] { >- m_interface->preparedToReturnToInline(true, clientRect); >+ if (m_interface) >+ m_interface->preparedToReturnToInline(true, clientRect); > }); > }); > } >@@ -930,7 +938,8 @@ void VideoFullscreenControllerContext::exitFullscreen() > IntRect clientRect = elementRectInWindow(m_videoElement.get()); > dispatch_async(dispatch_get_main_queue(), [protectedThis = makeRefPtr(this), this, clientRect] { > ASSERT(isUIThread()); >- m_interface->exitFullscreen(clientRect); >+ if (m_interface) >+ m_interface->exitFullscreen(clientRect); > }); > } > >diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog >index 68358d3621c0b1b2f39f0d62c927a8886ce2e11e..79e33c839f64e3f074da15fb6d218913395755d4 100644 >--- a/LayoutTests/ChangeLog >+++ b/LayoutTests/ChangeLog >@@ -1,3 +1,15 @@ >+2018-08-20 Jeremy Jones <jeremyj@apple.com> >+ >+ UIWebView crash when enter/exit fullscreen happens too quickly. >+ https://bugs.webkit.org/show_bug.cgi?id=188749 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Added test for iOS fullscreen. >+ >+ * media/ios/media-fullscreen-return-to-inline-expected.txt: Added. >+ * media/ios/media-fullscreen-return-to-inline.html: Added. >+ > 2018-07-16 Aditya Keerthi <akeerthi@apple.com> > > [Datalist][macOS] Add suggestions UI for TextFieldInputTypes >diff --git a/LayoutTests/media/ios/media-fullscreen-return-to-inline-expected.txt b/LayoutTests/media/ios/media-fullscreen-return-to-inline-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..ad5c1e4a31203719c23abfd40e688d74a37a3886 >--- /dev/null >+++ b/LayoutTests/media/ios/media-fullscreen-return-to-inline-expected.txt >@@ -0,0 +1,17 @@ >+ >+RUN(internals.settings.setAllowsInlineMediaPlayback(false)) >+RUN(internals.settings.setAllowsInlineMediaPlaybackAfterFullscreen(false)) >+RUN(video.src = findMediaFile("video", "../content/test")) >+EVENT(canplaythrough) >+RUN(video.play()) >+EVENT(webkitbeginfullscreen) >+RUN(video.webkitExitFullscreen()) >+EVENT(pause) >+RUN(internals.settings.setAllowsInlineMediaPlaybackAfterFullscreen(true)) >+RUN(video.play()) >+EVENT(webkitbeginfullscreen) >+RUN(video.webkitExitFullscreen()) >+EVENT(webkitendfullscreen) >+EXPECTED (video.paused == 'false') OK >+END OF TEST >+ >diff --git a/LayoutTests/media/ios/media-fullscreen-return-to-inline.html b/LayoutTests/media/ios/media-fullscreen-return-to-inline.html >new file mode 100644 >index 0000000000000000000000000000000000000000..fa3c4606e09d86179aac56e84328105ba02a0b8b >--- /dev/null >+++ b/LayoutTests/media/ios/media-fullscreen-return-to-inline.html >@@ -0,0 +1,56 @@ >+<!DOCTYPE html><!-- webkit-test-runner [ enableModernMediaControls=false ] --> >+<html> >+<head> >+ <title>media-fullscreen-return-to-inline</title> >+ >+ <script src="../video-test.js"></script> >+ <script src="../media-file.js"></script> >+ >+ <script> >+ function go() >+ { >+ findMediaElement(); >+ run('internals.settings.setAllowsInlineMediaPlayback(false)'); >+ run('internals.settings.setAllowsInlineMediaPlaybackAfterFullscreen(false)'); >+ runWithKeyDown('video.src = findMediaFile("video", "../content/test")'); >+ waitForEventOnce('canplaythrough', canplaythrough); >+ } >+ >+ function canplaythrough() >+ { >+ runWithKeyDown('video.play()'); >+ waitForEventOnce('webkitbeginfullscreen', beginfullscreen1); >+ } >+ >+ function beginfullscreen1() >+ { >+ run('video.webkitExitFullscreen()'); >+ waitForEventOnce('pause', pause); >+ } >+ >+ function pause() >+ { >+ run('internals.settings.setAllowsInlineMediaPlaybackAfterFullscreen(true)'); >+ runWithKeyDown('video.play()'); >+ waitForEventOnce('webkitbeginfullscreen', beginfullscreen2); >+ } >+ >+ function beginfullscreen2() >+ { >+ run('video.webkitExitFullscreen()'); >+ waitForEventOnce('webkitendfullscreen', endfullscreen); >+ } >+ >+ function endfullscreen() >+ { >+ testExpected('video.paused', false); >+ endTest(); >+ } >+ </script> >+ >+</head> >+ >+<body onload="go()"> >+ <video controls preload="auto"></video> >+</body> >+</html>
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Flags:
jer.noble
:
review+
commit-queue
:
commit-queue-
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 188749
: 347518 |
347535
|
347544
|
348190