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);