Bug 1440195 Address CSS Animations r=birtles

For now, we are going to make _all_ CSS Animations related timer fuzzing
only applicable in Resist Fingerprinting Mode (addressing the last couple
that had not already been configured that way.)

We hardcode their content mix-ins as zero, but leave comments indicating
how they should behave.

MozReview-Commit-ID: KhmV7wO8Pt5

--HG--
extra : rebase_source : 3b087d40b6332d447b442b435ed6fee8993e0145
This commit is contained in:
Tom Ritter 2018-03-05 15:58:46 -06:00
Родитель 6ebcecc30e
Коммит 88fc3fb4ea
3 изменённых файлов: 17 добавлений и 3 удалений

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

@ -32,8 +32,12 @@ public:
dom::Nullable<double> result; dom::Nullable<double> result;
if (!aTime.IsNull()) { if (!aTime.IsNull()) {
// 0 is an inappropriate mixin for this this area; however CSS Animations needs to
// have it's Time Reduction Logic refactored, so it's currently only clamping for
// RFP mode. RFP mode gives a much lower time precision, so we accept the security
// leak here for now
result.SetValue( result.SetValue(
nsRFPService::ReduceTimePrecisionAsMSecs(aTime.Value().ToMilliseconds(), TimerPrecisionType::RFPOnly) nsRFPService::ReduceTimePrecisionAsMSecs(aTime.Value().ToMilliseconds(), 0, TimerPrecisionType::RFPOnly)
); );
} }

7
layout/style/nsAnimationManager.cpp Normal file → Executable file
Просмотреть файл

@ -246,7 +246,12 @@ CSSAnimation::QueueEvents(const StickyTimeDuration& aActiveTime)
const TimeStamp& aTimeStamp) { const TimeStamp& aTimeStamp) {
double elapsedTime = aElapsedTime.ToSeconds(); double elapsedTime = aElapsedTime.ToSeconds();
if (aMessage == eAnimationCancel) { if (aMessage == eAnimationCancel) {
elapsedTime = nsRFPService::ReduceTimePrecisionAsSecs(elapsedTime); // 0 is an inappropriate value for this callsite. What we need to do is
// use a single random value for all increasing times reportable.
// That is to say, whenever elapsedTime goes negative (because an
// animation restarts, something rewinds the animation, or otherwise)
// a new random value for the mix-in must be generated.
elapsedTime = nsRFPService::ReduceTimePrecisionAsSecs(elapsedTime, 0, TimerPrecisionType::RFPOnly);
} }
events.AppendElement(AnimationEventInfo(mAnimationName, events.AppendElement(AnimationEventInfo(mAnimationName,
mOwningElement.Target(), mOwningElement.Target(),

7
layout/style/nsTransitionManager.cpp Normal file → Executable file
Просмотреть файл

@ -267,7 +267,12 @@ CSSTransition::QueueEvents(const StickyTimeDuration& aActiveTime)
const TimeStamp& aTimeStamp) { const TimeStamp& aTimeStamp) {
double elapsedTime = aElapsedTime.ToSeconds(); double elapsedTime = aElapsedTime.ToSeconds();
if (aMessage == eTransitionCancel) { if (aMessage == eTransitionCancel) {
elapsedTime = nsRFPService::ReduceTimePrecisionAsSecs(elapsedTime); // 0 is an inappropriate value for this callsite. What we need to do is
// use a single random value for all increasing times reportable.
// That is to say, whenever elapsedTime goes negative (because an
// animation restarts, something rewinds the animation, or otherwise)
// a new random value for the mix-in must be generated.
elapsedTime = nsRFPService::ReduceTimePrecisionAsSecs(elapsedTime, 0, TimerPrecisionType::RFPOnly);
} }
events.AppendElement(AnimationEventInfo(TransitionProperty(), events.AppendElement(AnimationEventInfo(TransitionProperty(),
mOwningElement.Target(), mOwningElement.Target(),