зеркало из https://github.com/mozilla/gecko-dev.git
Bug 654550 - Add a preference to disable media statistics. r = padenot,jaws
This commit is contained in:
Родитель
3cd6869d28
Коммит
6dcc6a8a61
|
@ -47,6 +47,9 @@ public:
|
||||||
const nsAString& aValue,
|
const nsAString& aValue,
|
||||||
nsAttrValue& aResult);
|
nsAttrValue& aResult);
|
||||||
NS_IMETHOD_(bool) IsAttributeMapped(const nsIAtom* aAttribute) const MOZ_OVERRIDE;
|
NS_IMETHOD_(bool) IsAttributeMapped(const nsIAtom* aAttribute) const MOZ_OVERRIDE;
|
||||||
|
|
||||||
|
static void Init();
|
||||||
|
|
||||||
virtual nsMapRuleToAttributesFunc GetAttributeMappingFunction() const MOZ_OVERRIDE;
|
virtual nsMapRuleToAttributesFunc GetAttributeMappingFunction() const MOZ_OVERRIDE;
|
||||||
|
|
||||||
virtual nsresult Clone(nsINodeInfo *aNodeInfo, nsINode **aResult) const MOZ_OVERRIDE;
|
virtual nsresult Clone(nsINodeInfo *aNodeInfo, nsINode **aResult) const MOZ_OVERRIDE;
|
||||||
|
|
|
@ -33,12 +33,15 @@
|
||||||
#include "nsIPowerManagerService.h"
|
#include "nsIPowerManagerService.h"
|
||||||
#include "MediaError.h"
|
#include "MediaError.h"
|
||||||
#include "MediaDecoder.h"
|
#include "MediaDecoder.h"
|
||||||
|
#include "mozilla/Preferences.h"
|
||||||
|
|
||||||
NS_IMPL_NS_NEW_HTML_ELEMENT(Video)
|
NS_IMPL_NS_NEW_HTML_ELEMENT(Video)
|
||||||
|
|
||||||
namespace mozilla {
|
namespace mozilla {
|
||||||
namespace dom {
|
namespace dom {
|
||||||
|
|
||||||
|
static bool sVideoStatsEnabled;
|
||||||
|
|
||||||
NS_IMPL_ADDREF_INHERITED(HTMLVideoElement, HTMLMediaElement)
|
NS_IMPL_ADDREF_INHERITED(HTMLVideoElement, HTMLMediaElement)
|
||||||
NS_IMPL_RELEASE_INHERITED(HTMLVideoElement, HTMLMediaElement)
|
NS_IMPL_RELEASE_INHERITED(HTMLVideoElement, HTMLMediaElement)
|
||||||
|
|
||||||
|
@ -160,6 +163,9 @@ NS_IMPL_URI_ATTR(HTMLVideoElement, Poster, poster)
|
||||||
uint32_t HTMLVideoElement::MozParsedFrames() const
|
uint32_t HTMLVideoElement::MozParsedFrames() const
|
||||||
{
|
{
|
||||||
MOZ_ASSERT(NS_IsMainThread(), "Should be on main thread.");
|
MOZ_ASSERT(NS_IsMainThread(), "Should be on main thread.");
|
||||||
|
if (!sVideoStatsEnabled) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
return mDecoder ? mDecoder->GetFrameStatistics().GetParsedFrames() : 0;
|
return mDecoder ? mDecoder->GetFrameStatistics().GetParsedFrames() : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -172,6 +178,9 @@ NS_IMETHODIMP HTMLVideoElement::GetMozParsedFrames(uint32_t *aMozParsedFrames)
|
||||||
uint32_t HTMLVideoElement::MozDecodedFrames() const
|
uint32_t HTMLVideoElement::MozDecodedFrames() const
|
||||||
{
|
{
|
||||||
MOZ_ASSERT(NS_IsMainThread(), "Should be on main thread.");
|
MOZ_ASSERT(NS_IsMainThread(), "Should be on main thread.");
|
||||||
|
if (!sVideoStatsEnabled) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
return mDecoder ? mDecoder->GetFrameStatistics().GetDecodedFrames() : 0;
|
return mDecoder ? mDecoder->GetFrameStatistics().GetDecodedFrames() : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -184,6 +193,9 @@ NS_IMETHODIMP HTMLVideoElement::GetMozDecodedFrames(uint32_t *aMozDecodedFrames)
|
||||||
uint32_t HTMLVideoElement::MozPresentedFrames() const
|
uint32_t HTMLVideoElement::MozPresentedFrames() const
|
||||||
{
|
{
|
||||||
MOZ_ASSERT(NS_IsMainThread(), "Should be on main thread.");
|
MOZ_ASSERT(NS_IsMainThread(), "Should be on main thread.");
|
||||||
|
if (!sVideoStatsEnabled) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
return mDecoder ? mDecoder->GetFrameStatistics().GetPresentedFrames() : 0;
|
return mDecoder ? mDecoder->GetFrameStatistics().GetPresentedFrames() : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -196,6 +208,9 @@ NS_IMETHODIMP HTMLVideoElement::GetMozPresentedFrames(uint32_t *aMozPresentedFra
|
||||||
uint32_t HTMLVideoElement::MozPaintedFrames()
|
uint32_t HTMLVideoElement::MozPaintedFrames()
|
||||||
{
|
{
|
||||||
MOZ_ASSERT(NS_IsMainThread(), "Should be on main thread.");
|
MOZ_ASSERT(NS_IsMainThread(), "Should be on main thread.");
|
||||||
|
if (!sVideoStatsEnabled) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
layers::ImageContainer* container = GetImageContainer();
|
layers::ImageContainer* container = GetImageContainer();
|
||||||
return container ? container->GetPaintCount() : 0;
|
return container ? container->GetPaintCount() : 0;
|
||||||
}
|
}
|
||||||
|
@ -282,5 +297,10 @@ HTMLVideoElement::WakeLockUpdate()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
HTMLVideoElement::Init()
|
||||||
|
{
|
||||||
|
Preferences::AddBoolVarCache(&sVideoStatsEnabled, "media.video_stats.enabled");
|
||||||
|
}
|
||||||
} // namespace dom
|
} // namespace dom
|
||||||
} // namespace mozilla
|
} // namespace mozilla
|
||||||
|
|
|
@ -72,6 +72,7 @@ MOCHITEST_FILES = \
|
||||||
test_bug493187.html \
|
test_bug493187.html \
|
||||||
test_bug495145.html \
|
test_bug495145.html \
|
||||||
test_bug495300.html \
|
test_bug495300.html \
|
||||||
|
test_bug654550.html \
|
||||||
test_bug686942.html \
|
test_bug686942.html \
|
||||||
test_can_play_type.html \
|
test_can_play_type.html \
|
||||||
test_can_play_type_mpeg.html \
|
test_can_play_type_mpeg.html \
|
||||||
|
|
|
@ -16,6 +16,13 @@ var gSmallTests = [
|
||||||
{ name:"bogus.duh", type:"bogus/duh" }
|
{ name:"bogus.duh", type:"bogus/duh" }
|
||||||
];
|
];
|
||||||
|
|
||||||
|
// Used by test_bug654550.html, for videoStats preference
|
||||||
|
var gVideoTests = [
|
||||||
|
{ name:"320x240.ogv", type:"video/ogg", width:320, height:240, duration:0.266 },
|
||||||
|
{ name:"seek.webm", type:"video/webm", width:320, height:240, duration:3.966 },
|
||||||
|
{ name:"bogus.duh", type:"bogus/duh" }
|
||||||
|
];
|
||||||
|
|
||||||
// Used by test_progress to ensure we get the correct progress information
|
// Used by test_progress to ensure we get the correct progress information
|
||||||
// during resource download.
|
// during resource download.
|
||||||
var gProgressTests = [
|
var gProgressTests = [
|
||||||
|
|
|
@ -0,0 +1,70 @@
|
||||||
|
<!DOCTYPE HTML>
|
||||||
|
<html>
|
||||||
|
<!--
|
||||||
|
https://bugzilla.mozilla.org/show_bug.cgi?id=654550
|
||||||
|
-->
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<title>Test for Bug 654550</title>
|
||||||
|
<script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
|
||||||
|
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
|
||||||
|
<script type="text/javascript" src="manifest.js"></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=654550">Mozilla Bug 654550</a>
|
||||||
|
<pre id="test">
|
||||||
|
<script class="testbody" type="text/javascript">
|
||||||
|
|
||||||
|
/* Test for Bug 654550 */
|
||||||
|
|
||||||
|
var manager = new MediaTestManager;
|
||||||
|
|
||||||
|
function checkStats(v, aShouldBeEnabled) {
|
||||||
|
if (aShouldBeEnabled) {
|
||||||
|
ok(v.mozParsedFrames != 0,
|
||||||
|
"At least one value should be different from 0 if stats are enabled");
|
||||||
|
} else {
|
||||||
|
ok(!v.mozParsedFrames,
|
||||||
|
"mozParsedFrames should be 0 if stats are disabled");
|
||||||
|
ok(!v.mozDecodedFrames,
|
||||||
|
"mozDecodedFrames should be 0 if stats are disabled");
|
||||||
|
ok(!v.mozPresentedFrames,
|
||||||
|
"mozPresentedFrames should be 0 if stats are disabled");
|
||||||
|
ok(!v.mozPaintedFrames,
|
||||||
|
"mozPaintedFrames should be 0 if stats are disabled");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function ontimeupdate(event) {
|
||||||
|
var v = event.target;
|
||||||
|
if (SpecialPowers.getBoolPref("media.video_stats.enabled")) {
|
||||||
|
checkStats(v, true);
|
||||||
|
SpecialPowers.setBoolPref("media.video_stats.enabled", false);
|
||||||
|
} else {
|
||||||
|
checkStats(v, false);
|
||||||
|
SpecialPowers.setBoolPref("media.video_stats.enabled", true);
|
||||||
|
v.removeEventListener("timeupdate", ontimeupdate);
|
||||||
|
SpecialPowers.clearUserPref("media.video_stats.enabled");
|
||||||
|
manager.finished(v.token);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function startTest(test, token) {
|
||||||
|
var v = document.createElement('video');
|
||||||
|
v.token = token;
|
||||||
|
v.src = test.name;
|
||||||
|
manager.started(token);
|
||||||
|
v.play();
|
||||||
|
SpecialPowers.setBoolPref("media.video_stats.enabled", true);
|
||||||
|
v.addEventListener("timeupdate", ontimeupdate);
|
||||||
|
SimpleTest.waitForExplicitFinish();
|
||||||
|
}
|
||||||
|
|
||||||
|
manager.runTests(gVideoTests, startTest);
|
||||||
|
|
||||||
|
</script>
|
||||||
|
</pre>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -116,6 +116,7 @@ using namespace mozilla::system;
|
||||||
#include "mozilla/dom/time/DateCacheCleaner.h"
|
#include "mozilla/dom/time/DateCacheCleaner.h"
|
||||||
#include "nsIMEStateManager.h"
|
#include "nsIMEStateManager.h"
|
||||||
#include "nsDocument.h"
|
#include "nsDocument.h"
|
||||||
|
#include "mozilla/dom/HTMLVideoElement.h"
|
||||||
|
|
||||||
extern void NS_ShutdownEventTargetChainItemRecyclePool();
|
extern void NS_ShutdownEventTargetChainItemRecyclePool();
|
||||||
|
|
||||||
|
@ -272,6 +273,8 @@ nsLayoutStatics::Initialize()
|
||||||
|
|
||||||
InitializeDateCacheCleaner();
|
InitializeDateCacheCleaner();
|
||||||
|
|
||||||
|
HTMLVideoElement::Init();
|
||||||
|
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -232,6 +232,9 @@ pref("media.autoplay.enabled", true);
|
||||||
// MediaDecoderReader's mVideoQueue.
|
// MediaDecoderReader's mVideoQueue.
|
||||||
pref("media.video-queue.default-size", 10);
|
pref("media.video-queue.default-size", 10);
|
||||||
|
|
||||||
|
// Whether to disable the video stats to prevent fingerprinting
|
||||||
|
pref("media.video_stats.enabled", true);
|
||||||
|
|
||||||
// Whether to enable the audio writing APIs on the audio element
|
// Whether to enable the audio writing APIs on the audio element
|
||||||
pref("media.audio_data.enabled", true);
|
pref("media.audio_data.enabled", true);
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче