Title: [114021] trunk
Revision
114021
Author
[email protected]
Date
2012-04-12 12:58:10 -0700 (Thu, 12 Apr 2012)

Log Message

Media engine should not be told to prepare for playback if media loading is not allowed
https://bugs.webkit.org/show_bug.cgi?id=83620

Reviewed by Dan Bernstein.

Source/WebCore: 

Test: media/video-load-require-user-gesture.html

* html/HTMLMediaElement.cpp:
(WebCore::HTMLMediaElement::load): Early return if user gesture requirement is not met.

* testing/InternalSettings.cpp:
(WebCore::InternalSettings::setMediaPlaybackRequiresUserGesture): Moved the method here from
    Internals to be with the rest of the Internals methods that expose preferences.
* testing/InternalSettings.h:
* testing/InternalSettings.idl:

* testing/Internals.cpp: Moved setMediaPlaybackRequiresUserGesture to InternalSettings.
* testing/Internals.h:
* testing/Internals.idl:

LayoutTests: 

* media/video-load-require-user-gesture-expected.txt: Added.
* media/video-load-require-user-gesture.html: Added.
* media/video-play-require-user-gesture.html: Update for move of setMediaPlaybackRequiresUserGesture
    from window.internals to window.internals.settings.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (114020 => 114021)


--- trunk/LayoutTests/ChangeLog	2012-04-12 19:54:21 UTC (rev 114020)
+++ trunk/LayoutTests/ChangeLog	2012-04-12 19:58:10 UTC (rev 114021)
@@ -1,3 +1,16 @@
+2012-04-12  Eric Carlson  <[email protected]>
+
+        Media engine should not be told to prepare for playback if media loading is not allowed
+        https://bugs.webkit.org/show_bug.cgi?id=83620
+
+        Reviewed by Dan Bernstein.
+
+        * platform/efl/Skipped: Skipped new test because it requires preload=none support.
+        * media/video-load-require-user-gesture-expected.txt: Added.
+        * media/video-load-require-user-gesture.html: Added.
+        * media/video-play-require-user-gesture.html: Update for move of setMediaPlaybackRequiresUserGesture
+            from window.internals to window.internals.settings.
+
 2012-04-12  Bear Travis  <[email protected]>
 
         [CSS Exclusions] Add flag to enable / disable exclusions at runtime

Added: trunk/LayoutTests/media/video-load-require-user-gesture-expected.txt (0 => 114021)


--- trunk/LayoutTests/media/video-load-require-user-gesture-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/media/video-load-require-user-gesture-expected.txt	2012-04-12 19:58:10 UTC (rev 114021)
@@ -0,0 +1,9 @@
+Test that video.load() should not cause media loading when user gesture is required.
+
+* Setting video.src, no data should load.
+
+* Calling video.load(). It should throw an exception, and no data should load.
+TEST(video.load()) THROWS(DOMException.INVALID_STATE_ERR) OK
+
+END OF TEST
+

Added: trunk/LayoutTests/media/video-load-require-user-gesture.html (0 => 114021)


--- trunk/LayoutTests/media/video-load-require-user-gesture.html	                        (rev 0)
+++ trunk/LayoutTests/media/video-load-require-user-gesture.html	2012-04-12 19:58:10 UTC (rev 114021)
@@ -0,0 +1,56 @@
+<html>
+    <head>
+        <script src=""
+        <script src=""
+        <script>
+            var state = 0;
+            var userGestureInitiated = 0;
+
+            if (window.internals) 
+                window.internals.settings.setMediaPlaybackRequiresUserGesture(document, true);
+
+            function finishTest(success)
+            {
+                if (window.internals) 
+                    window.internals.settings.setMediaPlaybackRequiresUserGesture(document, false);
+
+                if (success)
+                    endTest();
+                else
+                    failTest("<b>Data loaded despite restriction.</b>");
+            }
+
+            function checkLoad()
+            {
+                consoleWrite("");
+
+                if (state == "load")
+                {
+                    finishTest(true);
+                    return;
+                }
+                
+                state = "load";
+                consoleWrite("* Calling video.load(). It should throw an exception, and no data should load.");
+                testException("video.load()", "DOMException.INVALID_STATE_ERR");
+                setTimeout(checkLoad, 250);
+            }
+
+            function start()
+            {
+                findMediaElement();
+                waitForEvent('loadedmetadata', function() { finishTest(false) } );
+
+                state = "src";
+                consoleWrite("* Setting video.src, no data should load.");
+                video.src = "" "content/test");
+                setTimeout(checkLoad, 250);
+            }
+        </script>
+    </head>
+
+    <body _onload_="start()">
+        <video controls preload=none></video>
+        <p>Test that video.load() should not cause media loading when user gesture is required.</p>
+    </body>
+</html>

Modified: trunk/LayoutTests/media/video-play-require-user-gesture.html (114020 => 114021)


--- trunk/LayoutTests/media/video-play-require-user-gesture.html	2012-04-12 19:54:21 UTC (rev 114020)
+++ trunk/LayoutTests/media/video-play-require-user-gesture.html	2012-04-12 19:58:10 UTC (rev 114021)
@@ -7,11 +7,11 @@
         <script>
             var userGestureInitiated = 0;
             if (window.internals) 
-                window.internals.setMediaPlaybackRequiresUserGesture(document, true);
+                window.internals.settings.setMediaPlaybackRequiresUserGesture(document, true);
 
             function cleanGestureRequirement() {
                 if (window.internals) 
-                    window.internals.setMediaPlaybackRequiresUserGesture(document, false);
+                    window.internals.settings.setMediaPlaybackRequiresUserGesture(document, false);
             }
 
             function click()

Modified: trunk/LayoutTests/platform/efl/Skipped (114020 => 114021)


--- trunk/LayoutTests/platform/efl/Skipped	2012-04-12 19:54:21 UTC (rev 114020)
+++ trunk/LayoutTests/platform/efl/Skipped	2012-04-12 19:58:10 UTC (rev 114021)
@@ -1483,6 +1483,7 @@
 media/video-load-networkState.html
 media/video-load-preload-none.html
 media/video-load-readyState.html
+media/video-load-require-user-gesture.html
 media/video-muted.html
 media/video-no-autoplay.html
 media/video-pause-empty-events.html

Modified: trunk/Source/WebCore/ChangeLog (114020 => 114021)


--- trunk/Source/WebCore/ChangeLog	2012-04-12 19:54:21 UTC (rev 114020)
+++ trunk/Source/WebCore/ChangeLog	2012-04-12 19:58:10 UTC (rev 114021)
@@ -1,3 +1,25 @@
+2012-04-12  Eric Carlson  <[email protected]>
+
+        Media engine should not be told to prepare for playback if media loading is not allowed
+        https://bugs.webkit.org/show_bug.cgi?id=83620
+
+        Reviewed by Dan Bernstein.
+
+        Test: media/video-load-require-user-gesture.html
+
+        * html/HTMLMediaElement.cpp:
+        (WebCore::HTMLMediaElement::load): Early return if user gesture requirement is not met.
+
+        * testing/InternalSettings.cpp:
+        (WebCore::InternalSettings::setMediaPlaybackRequiresUserGesture): Moved the method here from
+            Internals to be with the rest of the Internals methods that expose preferences.
+        * testing/InternalSettings.h:
+        * testing/InternalSettings.idl:
+
+        * testing/Internals.cpp: Moved setMediaPlaybackRequiresUserGesture to InternalSettings.
+        * testing/Internals.h:
+        * testing/Internals.idl:
+
 2012-04-12  Bear Travis  <[email protected]>
 
         [CSS Exclusions] Add flag to enable / disable exclusions at runtime

Modified: trunk/Source/WebCore/html/HTMLMediaElement.cpp (114020 => 114021)


--- trunk/Source/WebCore/html/HTMLMediaElement.cpp	2012-04-12 19:54:21 UTC (rev 114020)
+++ trunk/Source/WebCore/html/HTMLMediaElement.cpp	2012-04-12 19:58:10 UTC (rev 114021)
@@ -267,8 +267,10 @@
     document->registerForMediaVolumeCallbacks(this);
     document->registerForPrivateBrowsingStateChangedCallbacks(this);
     
-    if (document->settings() && document->settings()->mediaPlaybackRequiresUserGesture())
+    if (document->settings() && document->settings()->mediaPlaybackRequiresUserGesture()) {
         addBehaviorRestriction(RequireUserGestureForRateChangeRestriction);
+        addBehaviorRestriction(RequireUserGestureForLoadRestriction);
+    }
 
 #if ENABLE(MEDIA_SOURCE)
     m_mediaSourceURL.setProtocol(mediaSourceURLProtocol);
@@ -634,16 +636,17 @@
     RefPtr<HTMLMediaElement> protect(this); // loadInternal may result in a 'beforeload' event, which can make arbitrary DOM mutations.
     
     LOG(Media, "HTMLMediaElement::load()");
-
-    if (userGestureRequiredForLoad() && !ScriptController::processingUserGesture())
+    
+    if (userGestureRequiredForLoad() && !ScriptController::processingUserGesture()) {
         ec = INVALID_STATE_ERR;
-    else {
-        m_loadInitiatedByUserGesture = ScriptController::processingUserGesture();
-        if (m_loadInitiatedByUserGesture)
-            removeBehaviorsRestrictionsAfterFirstUserGesture();
-        prepareForLoad();
-        loadInternal();
+        return;
     }
+    
+    m_loadInitiatedByUserGesture = ScriptController::processingUserGesture();
+    if (m_loadInitiatedByUserGesture)
+        removeBehaviorsRestrictionsAfterFirstUserGesture();
+    prepareForLoad();
+    loadInternal();
     prepareToPlay();
 }
 

Modified: trunk/Source/WebCore/testing/InternalSettings.cpp (114020 => 114021)


--- trunk/Source/WebCore/testing/InternalSettings.cpp	2012-04-12 19:54:21 UTC (rev 114020)
+++ trunk/Source/WebCore/testing/InternalSettings.cpp	2012-04-12 19:58:10 UTC (rev 114021)
@@ -322,4 +322,11 @@
     UNUSED_PARAM(ec);
     RuntimeEnabledFeatures::setCSSExclusionsEnabled(enabled);
 }
+
+void InternalSettings::setMediaPlaybackRequiresUserGesture(bool enabled, ExceptionCode& ec)
+{
+    InternalSettingsGuardForSettings();
+    settings()->setMediaPlaybackRequiresUserGesture(enabled);
 }
+
+}

Modified: trunk/Source/WebCore/testing/InternalSettings.h (114020 => 114021)


--- trunk/Source/WebCore/testing/InternalSettings.h	2012-04-12 19:54:21 UTC (rev 114020)
+++ trunk/Source/WebCore/testing/InternalSettings.h	2012-04-12 19:58:10 UTC (rev 114021)
@@ -73,6 +73,7 @@
     void setEnableScrollAnimator(bool enabled, ExceptionCode&);
     bool scrollAnimatorEnabled(ExceptionCode&);
     void setCSSExclusionsEnabled(bool enabled, ExceptionCode&);
+    void setMediaPlaybackRequiresUserGesture(bool, ExceptionCode&);
 
     void restoreTo(Settings*);
 

Modified: trunk/Source/WebCore/testing/InternalSettings.idl (114020 => 114021)


--- trunk/Source/WebCore/testing/InternalSettings.idl	2012-04-12 19:54:21 UTC (rev 114020)
+++ trunk/Source/WebCore/testing/InternalSettings.idl	2012-04-12 19:58:10 UTC (rev 114021)
@@ -52,6 +52,7 @@
         void setEnableScrollAnimator(in boolean enabled) raises(DOMException);
         boolean scrollAnimatorEnabled() raises(DOMException);
         void setCSSExclusionsEnabled(in boolean enabled) raises(DOMException);
+        void setMediaPlaybackRequiresUserGesture(in boolean enabled) raises(DOMException);
     };
 }
 

Modified: trunk/Source/WebCore/testing/Internals.cpp (114020 => 114021)


--- trunk/Source/WebCore/testing/Internals.cpp	2012-04-12 19:54:21 UTC (rev 114020)
+++ trunk/Source/WebCore/testing/Internals.cpp	2012-04-12 19:58:10 UTC (rev 114021)
@@ -739,16 +739,6 @@
     return checker->lastProcessedSequence();
 }
 
-void Internals::setMediaPlaybackRequiresUserGesture(Document* document, bool enabled, ExceptionCode& ec)
-{
-    if (!document || !document->settings()) {
-        ec = INVALID_ACCESS_ERR;
-        return;
-    }
-
-    document->settings()->setMediaPlaybackRequiresUserGesture(enabled);
-}
-
 Vector<String> Internals::userPreferredLanguages() const
 {
     return WebCore::userPreferredLanguages();

Modified: trunk/Source/WebCore/testing/Internals.h (114020 => 114021)


--- trunk/Source/WebCore/testing/Internals.h	2012-04-12 19:54:21 UTC (rev 114020)
+++ trunk/Source/WebCore/testing/Internals.h	2012-04-12 19:58:10 UTC (rev 114021)
@@ -130,8 +130,6 @@
     int lastSpellCheckRequestSequence(Document*, ExceptionCode&);
     int lastSpellCheckProcessedSequence(Document*, ExceptionCode&);
     
-    void setMediaPlaybackRequiresUserGesture(Document*, bool enabled, ExceptionCode&);
-
     Vector<String> userPreferredLanguages() const;
     void setUserPreferredLanguages(const Vector<String>&);
 

Modified: trunk/Source/WebCore/testing/Internals.idl (114020 => 114021)


--- trunk/Source/WebCore/testing/Internals.idl	2012-04-12 19:54:21 UTC (rev 114020)
+++ trunk/Source/WebCore/testing/Internals.idl	2012-04-12 19:58:10 UTC (rev 114021)
@@ -103,8 +103,6 @@
         long lastSpellCheckRequestSequence(in Document document) raises (DOMException);
         long lastSpellCheckProcessedSequence(in Document document) raises (DOMException);
 
-        void setMediaPlaybackRequiresUserGesture(in Document document, in boolean enabled) raises(DOMException);
-
 #if defined(ENABLE_VIDEO_TRACK) && ENABLE_VIDEO_TRACK
         void setShouldDisplayTrackKind(in Document document, in DOMString kind, in boolean enabled) raises (DOMException);
         boolean shouldDisplayTrackKind(in Document document, in DOMString trackKind) raises (DOMException);
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to