зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1112761
part 2. Enable MediaSource based on a whitelist, not in general. r=kinetik
This commit is contained in:
Родитель
a4c77d8da7
Коммит
ef4aa6e180
|
@ -19,10 +19,14 @@
|
|||
#include "mozilla/dom/TimeRanges.h"
|
||||
#include "mozilla/mozalloc.h"
|
||||
#include "nsContentTypeParser.h"
|
||||
#include "nsContentUtils.h"
|
||||
#include "nsDebug.h"
|
||||
#include "nsError.h"
|
||||
#include "nsIEffectiveTLDService.h"
|
||||
#include "nsIRunnable.h"
|
||||
#include "nsIScriptObjectPrincipal.h"
|
||||
#include "nsIURI.h"
|
||||
#include "nsNetCID.h"
|
||||
#include "nsPIDOMWindow.h"
|
||||
#include "nsString.h"
|
||||
#include "nsThreadUtils.h"
|
||||
|
@ -309,7 +313,44 @@ MediaSource::IsTypeSupported(const GlobalObject&, const nsAString& aType)
|
|||
/* static */ bool
|
||||
MediaSource::Enabled(JSContext* cx, JSObject* aGlobal)
|
||||
{
|
||||
return Preferences::GetBool("media.mediasource.enabled");
|
||||
MOZ_ASSERT(NS_IsMainThread());
|
||||
|
||||
// Don't use aGlobal across Preferences stuff, which the static
|
||||
// analysis thinks can GC.
|
||||
JS::Rooted<JSObject*> global(cx, aGlobal);
|
||||
|
||||
bool enabled = Preferences::GetBool("media.mediasource.enabled");
|
||||
if (!enabled) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check whether it's enabled everywhere or just YouTube.
|
||||
bool restrict = Preferences::GetBool("media.mediasource.youtubeonly", false);
|
||||
if (!restrict) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// We want to restrict to YouTube only. We define that as the
|
||||
// origin being https://*.youtube.com.
|
||||
nsIPrincipal* principal = nsContentUtils::ObjectPrincipal(global);
|
||||
nsCOMPtr<nsIURI> uri;
|
||||
if (NS_FAILED(principal->GetURI(getter_AddRefs(uri))) || !uri) {
|
||||
return false;
|
||||
}
|
||||
|
||||
bool isHttps = false;
|
||||
if (NS_FAILED(uri->SchemeIs("https", &isHttps)) || !isHttps) {
|
||||
return false;
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIEffectiveTLDService> tldServ =
|
||||
do_GetService(NS_EFFECTIVETLDSERVICE_CONTRACTID);
|
||||
NS_ENSURE_TRUE(tldServ, false);
|
||||
|
||||
nsAutoCString eTLDplusOne;
|
||||
return
|
||||
NS_SUCCEEDED(tldServ->GetBaseDomain(uri, 0, eTLDplusOne)) &&
|
||||
eTLDplusOne.EqualsLiteral("youtube.com");
|
||||
}
|
||||
|
||||
bool
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
|
||||
/*
|
||||
user_pref("media.mediasource.enabled", true);
|
||||
user_pref("media.mediasource.youtubeonly", false);
|
||||
*/
|
||||
|
||||
function boom()
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
|
||||
/*
|
||||
user_pref("media.mediasource.enabled", true);
|
||||
user_pref("media.mediasource.youtubeonly", false);
|
||||
*/
|
||||
|
||||
function boom()
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
test-pref(media.mediasource.enabled,true) load 926665.html
|
||||
test-pref(media.mediasource.enabled,true) load 931388.html
|
||||
test-pref(media.mediasource.enabled,true) load 1005366.html
|
||||
test-pref(media.mediasource.enabled,true) load 1059035.html
|
||||
test-pref(media.mediasource.enabled,true) test-pref(media.mediasource.youtubeonly,false) load 926665.html
|
||||
test-pref(media.mediasource.enabled,true) test-pref(media.mediasource.youtubeonly,false) load 931388.html
|
||||
test-pref(media.mediasource.enabled,true) test-pref(media.mediasource.youtubeonly,false) load 1005366.html
|
||||
test-pref(media.mediasource.enabled,true) test-pref(media.mediasource.youtubeonly,false) load 1059035.html
|
||||
|
|
|
@ -17,7 +17,10 @@ function runWithMSE(testFunction) {
|
|||
}
|
||||
|
||||
addLoadEvent(function () {
|
||||
SpecialPowers.pushPrefEnv({"set": [[ "media.mediasource.enabled", true ]]},
|
||||
SpecialPowers.pushPrefEnv({"set": [
|
||||
[ "media.mediasource.enabled", true ],
|
||||
[ "media.mediasource.youtubeonly", false ],
|
||||
]},
|
||||
bootstrapTest);
|
||||
});
|
||||
}
|
||||
|
|
|
@ -19,7 +19,12 @@ function test() {
|
|||
SimpleTest.finish();
|
||||
}
|
||||
|
||||
SpecialPowers.pushPrefEnv({"set": [["media.mediasource.enabled", false]]},
|
||||
SpecialPowers.pushPrefEnv({"set":
|
||||
[
|
||||
["media.mediasource.enabled", false],
|
||||
["media.mediasource.youtubeonly", false],
|
||||
]
|
||||
},
|
||||
test);
|
||||
|
||||
</script>
|
||||
|
|
|
@ -51,7 +51,12 @@ function test() {
|
|||
}
|
||||
|
||||
addLoadEvent(function() {
|
||||
SpecialPowers.pushPrefEnv({"set": [["media.mediasource.enabled", true]]}, test);
|
||||
SpecialPowers.pushPrefEnv({"set":
|
||||
[
|
||||
["media.mediasource.enabled", true],
|
||||
["media.mediasource.youtubeonly", false],
|
||||
]
|
||||
}, test);
|
||||
});
|
||||
</script>
|
||||
</pre>
|
||||
|
|
|
@ -25,7 +25,12 @@ function test() {
|
|||
}
|
||||
|
||||
addLoadEvent(function() {
|
||||
SpecialPowers.pushPrefEnv({"set": [["media.mediasource.enabled", false]]}, test);
|
||||
SpecialPowers.pushPrefEnv({"set":
|
||||
[
|
||||
["media.mediasource.enabled", false],
|
||||
["media.mediasource.youtubeonly", false],
|
||||
]
|
||||
}, test);
|
||||
});
|
||||
</script>
|
||||
</pre>
|
||||
|
|
|
@ -49,6 +49,7 @@ function beginTest() {
|
|||
|
||||
var prefs = [
|
||||
[ "media.mediasource.enabled", true ],
|
||||
[ "media.mediasource.youtubeonly", false ],
|
||||
[ "media.mediasource.mp4.enabled", true ],
|
||||
];
|
||||
|
||||
|
|
|
@ -92,6 +92,7 @@ function beginTest() {
|
|||
|
||||
var prefs = [
|
||||
[ "media.mediasource.enabled", true ],
|
||||
[ "media.mediasource.youtubeonly", false ],
|
||||
[ "media.mediasource.mp4.enabled", true ],
|
||||
];
|
||||
|
||||
|
|
|
@ -274,6 +274,7 @@ function beginTest() {
|
|||
|
||||
var prefs = [
|
||||
[ "media.mediasource.enabled", true ],
|
||||
[ "media.mediasource.youtubeonly", false ],
|
||||
[ "media.mediasource.mp4.enabled", true ],
|
||||
];
|
||||
|
||||
|
|
|
@ -81,6 +81,7 @@ function beginTest() {
|
|||
|
||||
var prefs = [
|
||||
[ "media.mediasource.enabled", true ],
|
||||
[ "media.mediasource.youtubeonly", false ],
|
||||
[ "media.mediasource.mp4.enabled", true ],
|
||||
];
|
||||
|
||||
|
|
|
@ -428,13 +428,22 @@ pref("media.webvtt.regions.enabled", false);
|
|||
// AudioTrack and VideoTrack support
|
||||
pref("media.track.enabled", false);
|
||||
|
||||
// Whether to enable MediaSource support
|
||||
#ifdef RELEASE_BUILD
|
||||
pref("media.mediasource.enabled", false);
|
||||
#else
|
||||
// Whether to enable MediaSource support. We want to enable on non-release
|
||||
// builds and on release windows, but on release builds restrict to YouTube. We
|
||||
// don't enable for YouTube on non-Windows for now because the MP4 code for
|
||||
// those platforms isn't ready yet.
|
||||
#if defined(XP_WIN) || !defined(RELEASE_BUILD)
|
||||
pref("media.mediasource.enabled", true);
|
||||
#else
|
||||
pref("media.mediasource.enabled", false);
|
||||
#endif
|
||||
|
||||
#ifdef RELEASE_BUILD
|
||||
pref("media.mediasource.youtubeonly", true);
|
||||
#else
|
||||
pref("media.mediasource.youtubeonly", false);
|
||||
#endif // RELEASE_BUILD
|
||||
|
||||
#ifdef MOZ_WIDGET_GONK
|
||||
pref("media.mediasource.mp4.enabled", false);
|
||||
pref("media.mediasource.webm.enabled", false);
|
||||
|
|
|
@ -157,6 +157,7 @@ user_pref("layout.spammy_warnings.enabled", false);
|
|||
|
||||
// Enable Media Source Extensions for testing
|
||||
user_pref("media.mediasource.enabled", true);
|
||||
user_pref("media.mediasource.youtubeonly", false);
|
||||
user_pref("media.mediasource.mp4.enabled", true);
|
||||
user_pref("media.mediasource.webm.enabled", true);
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче