Diff
Modified: trunk/LayoutTests/ChangeLog (233548 => 233549)
--- trunk/LayoutTests/ChangeLog 2018-07-05 23:17:40 UTC (rev 233548)
+++ trunk/LayoutTests/ChangeLog 2018-07-05 23:24:53 UTC (rev 233549)
@@ -1,3 +1,17 @@
+2018-07-05 Commit Queue <[email protected]>
+
+ Unreviewed, rolling out r233539.
+ https://bugs.webkit.org/show_bug.cgi?id=187368
+
+ Changes made for youtube crashes has caused 15 api failures
+ (Requested by Truitt on #webkit).
+
+ Reverted changeset:
+
+ "Youtube video pages crash after a couple of minutes"
+ https://bugs.webkit.org/show_bug.cgi?id=187316
+ https://trac.webkit.org/changeset/233539
+
2018-07-04 Ryosuke Niwa <[email protected]>
Youtube video pages crash after a couple of minutes
Deleted: trunk/LayoutTests/media/remove-video-best-media-element-in-main-frame-crash-expected.txt (233548 => 233549)
--- trunk/LayoutTests/media/remove-video-best-media-element-in-main-frame-crash-expected.txt 2018-07-05 23:17:40 UTC (rev 233548)
+++ trunk/LayoutTests/media/remove-video-best-media-element-in-main-frame-crash-expected.txt 2018-07-05 23:24:53 UTC (rev 233549)
@@ -1,4 +0,0 @@
-This tests removing a video element inside an iframe while another video in the main frame is playing does not hit a release assertion.
-
-PASS
-
Deleted: trunk/LayoutTests/media/remove-video-best-media-element-in-main-frame-crash.html (233548 => 233549)
--- trunk/LayoutTests/media/remove-video-best-media-element-in-main-frame-crash.html 2018-07-05 23:17:40 UTC (rev 233548)
+++ trunk/LayoutTests/media/remove-video-best-media-element-in-main-frame-crash.html 2018-07-05 23:24:53 UTC (rev 233549)
@@ -1,49 +0,0 @@
-<!DOCTYPE html>
-<html>
-<body>
-<p id="description">This tests removing a video element inside an iframe while another video in the main frame is playing does not hit a release assertion.</p>
-<div id="result"></div>
-<video id="video" autoplay width="500"></video>
-<script src=""
-<script>
-
-if (window.testRunner) {
- testRunner.waitUntilDone();
- testRunner.dumpAsText();
-}
-
-let count = 0;
-function continueTest() {
- count++;
- if (count < 2)
- return;
- setTimeout(() => {
- iframe.remove();
- result.textContent = 'PASS';
- if (window.testRunner)
- testRunner.notifyDone();
- }, 0);
-}
-
-if (window.internals) {
- testRunner.overridePreference("WebKitMainContentUserGestureOverrideEnabled", 1);
- internals.setMediaElementRestrictions(video, "OverrideUserGestureRequirementForMainContent");
-} else
- description.innerHTML += '<br>This test requries OverrideUserGestureRequirementForMainContent. Manually set this setting or use WebKitTestRunner.';
-
-const videoURL = findMediaFile("video", "content/test");
-const iframe = document.createElement('iframe');
-document.body.appendChild(iframe);
-video.src = ""
-video.addEventListener('loadeddata', continueTest);
-
-const doc = iframe.contentDocument;
-doc.open();
-doc.write(`<!DOCTYPE html><html><body>`);
-doc.write(`<video autoplay src=""
-doc.write(`<script>document.querySelector('video').addEventListener('loadeddata', () => top.continueTest());</` + `script>`);
-doc.close();
-
-</script>
-</body>
-</html>
\ No newline at end of file
Modified: trunk/Source/WebCore/ChangeLog (233548 => 233549)
--- trunk/Source/WebCore/ChangeLog 2018-07-05 23:17:40 UTC (rev 233548)
+++ trunk/Source/WebCore/ChangeLog 2018-07-05 23:24:53 UTC (rev 233549)
@@ -1,3 +1,17 @@
+2018-07-05 Commit Queue <[email protected]>
+
+ Unreviewed, rolling out r233539.
+ https://bugs.webkit.org/show_bug.cgi?id=187368
+
+ Changes made for youtube crashes has caused 15 api failures
+ (Requested by Truitt on #webkit).
+
+ Reverted changeset:
+
+ "Youtube video pages crash after a couple of minutes"
+ https://bugs.webkit.org/show_bug.cgi?id=187316
+ https://trac.webkit.org/changeset/233539
+
2018-07-05 Chris Dumez <[email protected]>
Update Element API to use qualifiedName instead of name/localName where applicable
Modified: trunk/Source/WebCore/html/HTMLMediaElement.cpp (233548 => 233549)
--- trunk/Source/WebCore/html/HTMLMediaElement.cpp 2018-07-05 23:17:40 UTC (rev 233548)
+++ trunk/Source/WebCore/html/HTMLMediaElement.cpp 2018-07-05 23:24:53 UTC (rev 233549)
@@ -680,6 +680,7 @@
m_seekTaskQueue.close();
m_promiseTaskQueue.close();
m_pauseAfterDetachedTaskQueue.close();
+ m_updatePlaybackControlsManagerQueue.close();
m_playbackControlsManagerBehaviorRestrictionsQueue.close();
m_resourceSelectionTaskQueue.close();
m_visibilityChangeTaskQueue.close();
@@ -695,7 +696,7 @@
}
m_mediaSession = nullptr;
- scheduleUpdatePlaybackControlsManager();
+ updatePlaybackControlsManager();
}
static bool needsAutoplayPlayPauseEventsQuirk(const Document& document)
@@ -708,7 +709,7 @@
return loader && loader->allowedAutoplayQuirks().contains(AutoplayQuirk::SynthesizedPauseEvents);
}
-RefPtr<HTMLMediaElement> HTMLMediaElement::bestMediaElementForShowingPlaybackControlsManager(MediaElementSession::PlaybackControlsPurpose purpose)
+HTMLMediaElement* HTMLMediaElement::bestMediaElementForShowingPlaybackControlsManager(MediaElementSession::PlaybackControlsPurpose purpose)
{
auto allSessions = PlatformMediaSessionManager::sharedManager().currentSessionsMatching([] (const PlatformMediaSession& session) {
return is<MediaElementSession>(session);
@@ -5521,7 +5522,7 @@
m_player->invalidate();
m_player = nullptr;
}
- scheduleUpdatePlaybackControlsManager();
+ updatePlaybackControlsManager();
stopPeriodicTimers();
m_pendingActionTimer.stop();
@@ -5561,13 +5562,13 @@
setPreparedToReturnVideoLayerToInline(true);
- scheduleUpdatePlaybackControlsManager();
+ updatePlaybackControlsManager();
setInActiveDocument(false);
// Stop the playback without generating events
setPlaying(false);
setPausedInternal(true);
- m_mediaSession->stopSession();
+ m_mediaSession->clientWillPausePlayback();
setPlaybackWithoutUserGesture(PlaybackWithoutUserGesture::None);
@@ -5586,6 +5587,7 @@
m_shadowDOMTaskQueue.close();
m_promiseTaskQueue.close();
m_pauseAfterDetachedTaskQueue.close();
+ m_updatePlaybackControlsManagerQueue.close();
#if ENABLE(ENCRYPTED_MEDIA)
m_encryptedMediaQueue.close();
#endif
@@ -5604,6 +5606,7 @@
m_asyncEventQueue.close();
m_promiseTaskQueue.close();
+ m_updatePlaybackControlsManagerQueue.close();
m_resourceSelectionTaskQueue.close();
// Once an active DOM object has been stopped it can not be restarted, so we can deallocate
@@ -7905,14 +7908,25 @@
return renderer && renderer->visibleInViewportState() == VisibleInViewportState::Yes;
}
-void HTMLMediaElement::scheduleUpdatePlaybackControlsManager()
+void HTMLMediaElement::updatePlaybackControlsManager()
{
Page* page = document().page();
if (!page)
return;
- page->schedulePlaybackControlsManagerUpdate();
+
+ // FIXME: Ensure that the renderer here should be up to date.
+ if (auto bestMediaElement = bestMediaElementForShowingPlaybackControlsManager(MediaElementSession::PlaybackControlsPurpose::ControlsManager))
+ page->chrome().client().setUpPlaybackControlsManager(*bestMediaElement);
+ else
+ page->chrome().client().clearPlaybackControlsManager();
}
+void HTMLMediaElement::scheduleUpdatePlaybackControlsManager()
+{
+ if (!m_updatePlaybackControlsManagerQueue.hasPendingTasks())
+ m_updatePlaybackControlsManagerQueue.enqueueTask(std::bind(&HTMLMediaElement::updatePlaybackControlsManager, this));
+}
+
void HTMLMediaElement::playbackControlsManagerBehaviorRestrictionsTimerFired()
{
if (m_playbackControlsManagerBehaviorRestrictionsQueue.hasPendingTasks())
Modified: trunk/Source/WebCore/html/HTMLMediaElement.h (233548 => 233549)
--- trunk/Source/WebCore/html/HTMLMediaElement.h 2018-07-05 23:17:40 UTC (rev 233548)
+++ trunk/Source/WebCore/html/HTMLMediaElement.h 2018-07-05 23:24:53 UTC (rev 233549)
@@ -155,7 +155,7 @@
static HashSet<HTMLMediaElement*>& allMediaElements();
- WEBCORE_EXPORT static RefPtr<HTMLMediaElement> bestMediaElementForShowingPlaybackControlsManager(MediaElementSession::PlaybackControlsPurpose);
+ WEBCORE_EXPORT static HTMLMediaElement* bestMediaElementForShowingPlaybackControlsManager(MediaElementSession::PlaybackControlsPurpose);
static bool isRunningDestructor();
@@ -933,6 +933,7 @@
GenericTaskQueue<Timer> m_shadowDOMTaskQueue;
GenericTaskQueue<Timer> m_promiseTaskQueue;
GenericTaskQueue<Timer> m_pauseAfterDetachedTaskQueue;
+ GenericTaskQueue<Timer> m_updatePlaybackControlsManagerQueue;
GenericTaskQueue<Timer> m_playbackControlsManagerBehaviorRestrictionsQueue;
GenericTaskQueue<Timer> m_resourceSelectionTaskQueue;
GenericTaskQueue<Timer> m_visibilityChangeTaskQueue;
Modified: trunk/Source/WebCore/page/Page.cpp (233548 => 233549)
--- trunk/Source/WebCore/page/Page.cpp 2018-07-05 23:17:40 UTC (rev 233548)
+++ trunk/Source/WebCore/page/Page.cpp 2018-07-05 23:24:53 UTC (rev 233549)
@@ -1487,19 +1487,6 @@
chrome().client().isPlayingMediaDidChange(state, sourceElementID);
}
-void Page::schedulePlaybackControlsManagerUpdate()
-{
- if (m_playbackControlsManagerUpdateTimer)
- return;
-
- m_playbackControlsManagerUpdateTimer = std::make_unique<DeferrableOneShotTimer>([this] () mutable {
- if (auto bestMediaElement = HTMLMediaElement::bestMediaElementForShowingPlaybackControlsManager(MediaElementSession::PlaybackControlsPurpose::ControlsManager))
- chrome().client().setUpPlaybackControlsManager(*bestMediaElement);
- else
- chrome().client().clearPlaybackControlsManager();
- }, 0_s);
-}
-
void Page::setMuted(MediaProducer::MutedStateFlags muted)
{
if (m_mutedState == muted)
Modified: trunk/Source/WebCore/page/Page.h (233548 => 233549)
--- trunk/Source/WebCore/page/Page.h 2018-07-05 23:17:40 UTC (rev 233548)
+++ trunk/Source/WebCore/page/Page.h 2018-07-05 23:24:53 UTC (rev 233549)
@@ -569,7 +569,6 @@
MediaProducer::MutedStateFlags mutedState() const { return m_mutedState; }
bool isAudioMuted() const { return m_mutedState & MediaProducer::AudioIsMuted; }
bool isMediaCaptureMuted() const { return m_mutedState & MediaProducer::CaptureDevicesAreMuted; };
- void schedulePlaybackControlsManagerUpdate();
WEBCORE_EXPORT void setMuted(MediaProducer::MutedStateFlags);
WEBCORE_EXPORT void stopMediaCapture();
@@ -850,9 +849,7 @@
bool m_isRestoringCachedPage { false };
MediaProducer::MediaStateFlags m_mediaState { MediaProducer::IsNotPlaying };
-
- std::unique_ptr<DeferrableOneShotTimer> m_playbackControlsManagerUpdateTimer;
-
+
bool m_allowsMediaDocumentInlinePlayback { false };
bool m_allowsPlaybackControlsForAutoplayingAudio { false };
bool m_showAllPlugins { false };
Modified: trunk/Source/WebCore/testing/Internals.cpp (233548 => 233549)
--- trunk/Source/WebCore/testing/Internals.cpp 2018-07-05 23:17:40 UTC (rev 233548)
+++ trunk/Source/WebCore/testing/Internals.cpp 2018-07-05 23:24:53 UTC (rev 233549)
@@ -3750,7 +3750,7 @@
}
#if ENABLE(VIDEO)
-RefPtr<HTMLMediaElement> Internals::bestMediaElementForShowingPlaybackControlsManager(Internals::PlaybackControlsPurpose purpose)
+HTMLMediaElement* Internals::bestMediaElementForShowingPlaybackControlsManager(Internals::PlaybackControlsPurpose purpose)
{
return HTMLMediaElement::bestMediaElementForShowingPlaybackControlsManager(purpose);
}
Modified: trunk/Source/WebCore/testing/Internals.h (233548 => 233549)
--- trunk/Source/WebCore/testing/Internals.h 2018-07-05 23:17:40 UTC (rev 233548)
+++ trunk/Source/WebCore/testing/Internals.h 2018-07-05 23:24:53 UTC (rev 233549)
@@ -704,7 +704,7 @@
#if ENABLE(VIDEO)
using PlaybackControlsPurpose = MediaElementSession::PlaybackControlsPurpose;
- RefPtr<HTMLMediaElement> bestMediaElementForShowingPlaybackControlsManager(PlaybackControlsPurpose);
+ HTMLMediaElement* bestMediaElementForShowingPlaybackControlsManager(PlaybackControlsPurpose);
using MediaSessionState = PlatformMediaSession::State;
MediaSessionState mediaSessionState(HTMLMediaElement&);