tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

detection-security-test.https.html (2665B)


      1 <!DOCTYPE html>
      2 <script src="/resources/testharness.js"></script>
      3 <script src="/resources/testharnessreport.js"></script>
      4 <script src="resources/shapedetection-helpers.js"></script>
      5 <script>
      6 
      7 // Detectors should reject undecodable images with an InvalidStateError.
      8 const badImageTests =
      9    [
     10      {
     11        createDetector: () => { return new FaceDetector(); },
     12        name: "Face - detect(broken image)"
     13      },
     14      {
     15        createDetector: () => { return new BarcodeDetector(); },
     16        name: "Barcode - detect(broken image)"
     17      },
     18      {
     19        createDetector: () => { return new TextDetector(); },
     20        name: "Text - detect(broken image)"
     21      }
     22    ];
     23 
     24 for (let badImageTest of badImageTests) {
     25  // This test verifies that a Detector will reject an undecodable image.
     26  promise_test(async t => {
     27    const img = new Image();
     28    const error =
     29        await detectOnElementAndExpectError(badImageTest.createDetector,
     30                                            img, "/images/broken.png");
     31    assert_equals(error.name, "InvalidStateError");
     32  }, badImageTest.name);
     33 }
     34 
     35 // Detectors should reject undecodable videos with an InvalidStateError.
     36 const badVideoTests =
     37    [
     38      {
     39        createDetector: () => { return new FaceDetector(); },
     40        name: "Face - detect(broken video)"
     41      },
     42      {
     43        createDetector: () => { return new BarcodeDetector(); },
     44        name: "Barcode - detect(broken video)"
     45      },
     46      {
     47        createDetector: () => { return new TextDetector(); },
     48        name: "Text - detect(broken video)"
     49      }
     50    ];
     51 
     52 for (let badVideoTest of badVideoTests) {
     53  // This test verifies that a Detector will reject a broken video.
     54  promise_test(async t => {
     55    const video = document.createElement('video');
     56    const error =
     57        await detectOnElementAndExpectError(badVideoTest.createDetector,
     58                                            video, "garbage.webm");
     59    assert_equals(error.name, "InvalidStateError");
     60  }, badVideoTest.name);
     61 }
     62 
     63 // Returns a Promise that is resolve()d if detect() is rejected. Needs an input
     64 // |element| (e.g. an HTMLImageElement or HTMLVideoElement) and a |url| to load.
     65 function detectOnElementAndExpectError(createDetector, element, url) {
     66  return new Promise((resolve, reject) => {
     67    const tryDetection = async () => {
     68      const detector = createDetector();
     69      try {
     70        const detectionResult = await detector.detect(element);
     71        reject("Promise should have been rejected.");
     72      } catch (error) {
     73        resolve(error);
     74      }
     75    };
     76    element.onload = tryDetection;
     77    element.onerror = tryDetection;
     78    element.src = url;
     79  });
     80 };
     81 
     82 </script>