Bug 1443942 - Block mid-flight redirects to cross origin destinations during media loads. r=jya

There's no compelling use case for mid-flight redirects, and Chrome
already blocks it, so there's little point in maintaining it.

Add a hidden pref to toggle blocking, so we can toggle it off during
testing to ensure that we're blocking a working mid-flight redirect.

MozReview-Commit-ID: EnGNmYFr8Uv

--HG--
extra : rebase_source : 3ed71273da24f8f0c8bc24ceede49afa7775650d
This commit is contained in:
Chris Pearce 2018-03-06 09:55:03 +13:00
Родитель 2434b5b7b1
Коммит 0ebc1bfba0
4 изменённых файлов: 4 добавлений и 14 удалений

Просмотреть файл

@ -167,9 +167,9 @@ ChannelMediaDecoder::NotifyPrincipalChanged()
return;
}
if (!mSameOriginMedia &&
DecoderTraits::CrossOriginRedirectsProhibited(ContainerType())) {
// For some content types we block mid-flight channel redirects to cross
// origin destinations due to security constraints. See bug 1441153.
Preferences::GetBool("media.block-midflight-redirects", true)) {
// Block mid-flight redirects to non CORS same origin destinations.
// See bugs 1441153, 1443942.
LOG("ChannnelMediaDecoder prohibited cross origin redirect blocked.");
NetworkError(MediaResult(NS_ERROR_DOM_BAD_URI,
"Prohibited cross origin redirect blocked"));

Просмотреть файл

@ -325,11 +325,4 @@ bool DecoderTraits::IsSupportedInVideoDocument(const nsACString& aType)
false;
}
/* static */
bool
DecoderTraits::CrossOriginRedirectsProhibited(const MediaContainerType& aType)
{
return WaveDecoder::IsSupportedType(aType);
}
} // namespace mozilla

Просмотреть файл

@ -57,10 +57,6 @@ public:
static bool IsMatroskaType(const MediaContainerType& aType);
static bool IsSupportedType(const MediaContainerType& aType);
// For some content types we block channel redirects to cross origin
// destinations due to security constraints. See bug 1441153.
static bool CrossOriginRedirectsProhibited(const MediaContainerType& aType);
};
} // namespace mozilla

Просмотреть файл

@ -205,6 +205,7 @@ private:
// Media Seamless Looping
DECL_MEDIA_PREF("media.seamless-looping", SeamlessLooping, bool, true);
public:
// Manage the singleton:
static MediaPrefs& GetSingleton();