Title: [233549] trunk
Revision
233549
Author
[email protected]
Date
2018-07-05 16:24:53 -0700 (Thu, 05 Jul 2018)

Log Message

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

Modified Paths

Removed Paths

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&);
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to