Bug 1372073 - Spoof MediaTrackSettings.
MozReview-Commit-ID: 9S1av9KAU6I
--- a/dom/media/MediaStreamTrack.cpp
+++ b/dom/media/MediaStreamTrack.cpp
@@ -264,19 +264,28 @@ MediaStreamTrack::Stop()
void
MediaStreamTrack::GetConstraints(dom::MediaTrackConstraints& aResult)
{
aResult = mConstraints;
}
void
-MediaStreamTrack::GetSettings(dom::MediaTrackSettings& aResult)
+MediaStreamTrack::GetSettings(dom::MediaTrackSettings& aResult, CallerType aCallerType)
{
GetSource().GetSettings(aResult);
+
+ // Spoof values when privacy.resistFingerprinting is true.
+ if (!nsContentUtils::ResistFingerprinting(aCallerType)) {
+ return;
+ }
+ if (aResult.mFacingMode.WasPassed()) {
+ aResult.mFacingMode.Value().Assign(NS_ConvertASCIItoUTF16(
+ VideoFacingModeEnumValues::strings[uint8_t(VideoFacingModeEnum::User)].value));
+ }
}
already_AddRefed<Promise>
MediaStreamTrack::ApplyConstraints(const MediaTrackConstraints& aConstraints,
CallerType aCallerType,
ErrorResult &aRv)
{
if (MOZ_LOG_TEST(gMediaStreamTrackLog, LogLevel::Info)) {
--- a/dom/media/MediaStreamTrack.h
+++ b/dom/media/MediaStreamTrack.h
@@ -283,17 +283,17 @@ public:
// WebIDL
virtual void GetKind(nsAString& aKind) = 0;
void GetId(nsAString& aID) const;
virtual void GetLabel(nsAString& aLabel, CallerType /* aCallerType */) { GetSource().GetLabel(aLabel); }
bool Enabled() { return mEnabled; }
void SetEnabled(bool aEnabled);
void Stop();
void GetConstraints(dom::MediaTrackConstraints& aResult);
- void GetSettings(dom::MediaTrackSettings& aResult);
+ void GetSettings(dom::MediaTrackSettings& aResult, CallerType aCallerType);
already_AddRefed<Promise>
ApplyConstraints(const dom::MediaTrackConstraints& aConstraints,
CallerType aCallerType, ErrorResult &aRv);
already_AddRefed<MediaStreamTrack> Clone();
MediaStreamTrackState ReadyState() { return mReadyState; }
IMPL_EVENT_HANDLER(ended)
--- a/dom/webidl/MediaStreamTrack.webidl
+++ b/dom/webidl/MediaStreamTrack.webidl
@@ -86,14 +86,15 @@ interface MediaStreamTrack : EventTarget
// readonly attribute boolean _readonly;
// readonly attribute boolean remote;
readonly attribute MediaStreamTrackState readyState;
attribute EventHandler onended;
MediaStreamTrack clone ();
void stop ();
// MediaTrackCapabilities getCapabilities ();
MediaTrackConstraints getConstraints ();
+ [NeedsCallerType]
MediaTrackSettings getSettings ();
[Throws, NeedsCallerType]
Promise<void> applyConstraints (optional MediaTrackConstraints constraints);
// attribute EventHandler onoverconstrained;
};