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>