Bug 1369309 - Part 4: Modify the test case 'test_video_stats_resistfingerprinting.html'. r?cpearce,arthuredelstein draft
authorTim Huang <tihuang@mozilla.com>
Mon, 17 Jul 2017 17:30:08 +0800
changeset 643931 1d93798772423c01218c7b2103ba5e3e9e2fc506
parent 643930 beda8f5d86c01c67c506e43be2953321eda34f92
child 725446 2f4890a5ee42e0397a56e5fd21fab62a18778c7e
push id73260
push userbmo:tihuang@mozilla.com
push dateThu, 10 Aug 2017 08:38:35 +0000
reviewerscpearce, arthuredelstein
bugs1369309
milestone57.0a1
Bug 1369309 - Part 4: Modify the test case 'test_video_stats_resistfingerprinting.html'. r?cpearce,arthuredelstein This patch modifies the test case 'test_video_stats_resistfingerprinting.html' to check media statistics report spoofed values when fingerprinting resistance is enabled. This test will play a video and test the media statistics when the video is finished. It will make sure all media statistics report correct spoofed values corresponding to the play time of the video. MozReview-Commit-ID: GpYewu7cIbY
dom/media/test/test_video_stats_resistfingerprinting.html
--- a/dom/media/test/test_video_stats_resistfingerprinting.html
+++ b/dom/media/test/test_video_stats_resistfingerprinting.html
@@ -15,55 +15,70 @@ https://trac.torproject.org/projects/tor
 </head>
 <body>
 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=682299">Mozilla Bug 1369309</a>
 <a target="_blank" href="https://trac.torproject.org/projects/tor/ticket/15757">Tor Ticket 15757</a>
 
 <!-- The main testing script -->
 <script class="testbody" type="text/javascript">
   var manager = new MediaTestManager;
+  const SPOOFED_FRAMES_PER_SECOND = 30;
+  const SPOOFED_DROPPED_RATIO = 0.05;
   // Push the setting of 'privacy.resistFingerprinting' into gTestPrefs, which
   // will be set during MediaTestManager.runTests().
   gTestPrefs.push(
-    ["privacy.resistFingerprinting", true]
+    ["privacy.resistFingerprinting", true],
+    // We use 240p as the target resoultion since 480p is greater than every video
+    // source in our test suite, so we need to use 240p here for allowing us to
+    // test dropped rate here.
+    ["privacy.resistFingerprinting.target_video_res", 240]
   );
   var testCases = [
-    { name:"320x240.ogv", type:"video/ogg", width:320, height:240, duration:0.266 },
-    { name:"seek-short.webm", type:"video/webm", width:320, height:240, duration:0.23 },
+    { name:"320x240.ogv", type:"video/ogg", width:320, height:240, duration:0.266, drop: false },
+    { name:"seek.webm", type:"video/webm", width:320, height:240, duration:3.966, drop: false },
+    { name:"gizmo.mp4", type:"video/mp4", width:560, height:320, duration:5.56, drop: true }
   ];
 
-  function checkStats(v) {
-    is(v.mozParsedFrames, 0,
-        "mozParsedFrames should be 0 if fingerprinting resistance is enabled");
-    is(v.mozDecodedFrames, 0,
-        "mozDecodedFrames should be 0 if fingerprinting resistance is enabled");
-    is(v.mozPresentedFrames, 0,
-        "mozPresentedFrames should be 0 if fingerprinting resistance is enabled");
-    is(v.mozPaintedFrames, 0,
-        "mozPaintedFrames should be 0 if fingerprinting resistance is enabled");
+  function checkStats(v, shouldDrop) {
+    // Rounding the current time to 100ms.
+    let currentTime = Math.floor(v.currentTime * 10) / 10;
+    let dropRate = 0;
+
+    if (shouldDrop) {
+      dropRate = SPOOFED_DROPPED_RATIO;
+    }
+
+    is(v.mozParsedFrames, parseInt(currentTime * SPOOFED_FRAMES_PER_SECOND, 10),
+        "mozParsedFrames should be spoofed if fingerprinting resistance is enabled");
+    is(v.mozDecodedFrames, parseInt(currentTime * SPOOFED_FRAMES_PER_SECOND, 10),
+        "mozDecodedFrames should be spoofed if fingerprinting resistance is enabled");
+    is(v.mozPresentedFrames,
+        parseInt(currentTime * SPOOFED_FRAMES_PER_SECOND * (1 - dropRate), 10),
+        "mozPresentedFrames should be spoofed if fingerprinting resistance is enabled");
+    is(v.mozPaintedFrames,
+        parseInt(currentTime * SPOOFED_FRAMES_PER_SECOND * (1 - dropRate), 10),
+        "mozPaintedFrames should be spoofed if fingerprinting resistance is enabled");
     is(v.mozFrameDelay, 0.0,
         "mozFrameDelay should be 0.0 if fingerprinting resistance is enabled");
     let playbackQuality = v.getVideoPlaybackQuality();
-    is(playbackQuality.creationTime, 0,
-        "VideoPlaybackQuality.creationTime should be 0 if fingerprinting resistance is enabled");
-    is(playbackQuality.totalVideoFrames, 0,
-        "VideoPlaybackQuality.totalVideoFrames should be 0 if fingerprinting resistance is enabled");
-    is(playbackQuality.droppedVideoFrames, 0,
-        "VideoPlaybackQuality.droppedVideoFrames should be 0 if fingerprinting resistance is enabled");
+    is(playbackQuality.totalVideoFrames, parseInt(currentTime * SPOOFED_FRAMES_PER_SECOND, 10),
+        "VideoPlaybackQuality.totalVideoFrames should be spoofed if fingerprinting resistance is enabled");
+    is(playbackQuality.droppedVideoFrames, parseInt(currentTime * SPOOFED_FRAMES_PER_SECOND * dropRate, 10),
+        "VideoPlaybackQuality.droppedVideoFrames should be spoofed if fingerprinting resistance is enabled");
     is(playbackQuality.corruptedVideoFrames, 0,
         "VideoPlaybackQuality.corruptedVideoFrames should be 0 if fingerprinting resistance is enabled");
   }
 
   function startTest(test, token) {
     let v = document.createElement("video");
     v.token = token;
     v.src = test.name;
     manager.started(token);
     once(v, "ended", () => {
-      checkStats(v);
+      checkStats(v, test.drop);
       removeNodeAndSource(v);
       manager.finished(v.token);
     });
     v.play();
   }
 
   manager.runTests(testCases, startTest);