OLD | NEW |
1 <!DOCTYPE html> | 1 <!DOCTYPE html> |
2 <html> | 2 <html> |
3 <head> | 3 <head> |
4 <title>Test EME syntax</title> | 4 <title>Test EME syntax</title> |
5 <script src="encrypted-media-utils.js"></script> | 5 <script src="encrypted-media-utils.js"></script> |
6 <script src="../../resources/testharness.js"></script> | 6 <script src="../../resources/testharness.js"></script> |
7 <script src="../../resources/testharnessreport.js"></script> | 7 <script src="../../resources/testharnessreport.js"></script> |
8 </head> | 8 </head> |
9 <body> | 9 <body> |
10 <div id="log"></div> | 10 <div id="log"></div> |
(...skipping 360 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
371 assert_true(testCase.isNotSupportedAllowed); | 371 assert_true(testCase.isNotSupportedAllowed); |
372 return; | 372 return; |
373 } | 373 } |
374 | 374 |
375 // FIXME: Update this set of tests when done | 375 // FIXME: Update this set of tests when done |
376 // implementing the latest spec. | 376 // implementing the latest spec. |
377 assert_equals(typeof mediaKeySession, 'object'); | 377 assert_equals(typeof mediaKeySession, 'object'); |
378 assert_equals(typeof mediaKeySession.addEventListener, 'function
'); | 378 assert_equals(typeof mediaKeySession.addEventListener, 'function
'); |
379 assert_equals(typeof mediaKeySession.generateRequest, 'function'
); | 379 assert_equals(typeof mediaKeySession.generateRequest, 'function'
); |
380 assert_equals(typeof mediaKeySession.update, 'function'); | 380 assert_equals(typeof mediaKeySession.update, 'function'); |
381 assert_equals(typeof mediaKeySession.release, 'function'); | 381 assert_equals(typeof mediaKeySession.close, 'function'); |
| 382 assert_equals(typeof mediaKeySession.remove, 'function'); |
382 assert_equals(mediaKeySession.error, null); | 383 assert_equals(mediaKeySession.error, null); |
383 assert_equals(mediaKeySession.sessionId, ''); | 384 assert_equals(mediaKeySession.sessionId, ''); |
384 assert_equals(typeof mediaKeySession.sessionId, 'string'); | 385 assert_equals(typeof mediaKeySession.sessionId, 'string'); |
385 assert_equals(typeof mediaKeySession.onopen, 'undefined'); | 386 assert_equals(typeof mediaKeySession.onopen, 'undefined'); |
386 assert_equals(typeof mediaKeySession.onmessage, 'undefined'); | 387 assert_equals(typeof mediaKeySession.onmessage, 'undefined'); |
387 assert_equals(typeof mediaKeySession.onclose, 'undefined'); | 388 assert_equals(typeof mediaKeySession.onclose, 'undefined'); |
388 assert_equals(typeof mediaKeySession.onerror, 'undefined'); | 389 assert_equals(typeof mediaKeySession.onerror, 'undefined'); |
389 } | 390 } |
390 | 391 |
391 async_test(function(test) | 392 async_test(function(test) |
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
546 | 547 |
547 assert_not_equals(promises.length, 0); | 548 assert_not_equals(promises.length, 0); |
548 return Promise.all(promises); | 549 return Promise.all(promises); |
549 }).then(function(result) { | 550 }).then(function(result) { |
550 test.done(); | 551 test.done(); |
551 }).catch(function(error) { | 552 }).catch(function(error) { |
552 forceTestFailureFromPromise(test, error, 'update() tests fai
led'); | 553 forceTestFailureFromPromise(test, error, 'update() tests fai
led'); |
553 }); | 554 }); |
554 }, 'Test MediaKeySession update().'); | 555 }, 'Test MediaKeySession update().'); |
555 | 556 |
556 function create_release_test(mediaKeys, type, initData) | 557 function create_close_exception_test(mediaKeys, type, initData) |
| 558 { |
| 559 var mediaKeySession = mediaKeys.createSession(); |
| 560 return mediaKeySession.close().then(function(result) { |
| 561 assert_unreached('close() should not succeed if session unin
itialized'); |
| 562 }).catch(function(error) { |
| 563 assert_equals(error.name, 'InvalidStateError'); |
| 564 // Return something so the promise resolves. |
| 565 return Promise.resolve(); |
| 566 }); |
| 567 } |
| 568 |
| 569 async_test(function(test) |
| 570 { |
| 571 MediaKeys.create('org.w3.clearkey').then(function(mediaKeys) { |
| 572 var promises = []; |
| 573 |
| 574 if (MediaKeys.isTypeSupported('org.w3.clearkey', 'video/webm
')) { |
| 575 promises.push(create_close_exception_test(mediaKeys, 'we
bm', getInitData('webm'))); |
| 576 } |
| 577 |
| 578 if (MediaKeys.isTypeSupported('org.w3.clearkey', 'video/mp4'
)) { |
| 579 promises.push(create_close_exception_test(mediaKeys, 'ce
nc', getInitData('cenc'))); |
| 580 } |
| 581 |
| 582 assert_not_equals(promises.length, 0); |
| 583 return Promise.all(promises); |
| 584 }).then(function(result) { |
| 585 test.done(); |
| 586 }).catch(function(error) { |
| 587 forceTestFailureFromPromise(test, error, 'close() exception
tests failed'); |
| 588 }); |
| 589 }, 'Test MediaKeySession close() exceptions.'); |
| 590 |
| 591 |
| 592 function create_close_test(mediaKeys, type, initData) |
557 { | 593 { |
558 var mediaKeySession = mediaKeys.createSession(); | 594 var mediaKeySession = mediaKeys.createSession(); |
559 var promise = mediaKeySession.generateRequest(type, initData).th
en(function(result) { | 595 var promise = mediaKeySession.generateRequest(type, initData).th
en(function(result) { |
560 return mediaKeySession.release(); | 596 return mediaKeySession.close(); |
561 // FIXME: Uncomment once the code supports multiple release() ca
lls. | 597 }).then(function(result) { |
562 // }).then(function(result) { | 598 // Call close() again with an extra parameter. The extra |
563 // // Call release() again with an extra parameter. The extra | 599 // parameter is ignored. |
564 // // parameter is ignored. | 600 return mediaKeySession.close('extra'); |
565 // return mediaKeySession.release('extra'); | |
566 }); | 601 }); |
567 return promise; | 602 return promise; |
568 } | 603 } |
569 | 604 |
570 async_test(function(test) | 605 async_test(function(test) |
571 { | 606 { |
572 MediaKeys.create('org.w3.clearkey').then(function(mediaKeys) { | 607 MediaKeys.create('org.w3.clearkey').then(function(mediaKeys) { |
573 var promises = []; | 608 var promises = []; |
574 | 609 |
575 if (MediaKeys.isTypeSupported('org.w3.clearkey', 'video/webm
')) { | 610 if (MediaKeys.isTypeSupported('org.w3.clearkey', 'video/webm
')) { |
576 promises.push(create_release_test(mediaKeys, 'webm', get
InitData('webm'))); | 611 promises.push(create_close_test(mediaKeys, 'webm', getIn
itData('webm'))); |
577 } | 612 } |
578 | 613 |
579 if (MediaKeys.isTypeSupported('org.w3.clearkey', 'video/mp4'
)) { | 614 if (MediaKeys.isTypeSupported('org.w3.clearkey', 'video/mp4'
)) { |
580 promises.push(create_release_test(mediaKeys, 'cenc', get
InitData('cenc'))); | 615 promises.push(create_close_test(mediaKeys, 'cenc', getIn
itData('cenc'))); |
581 } | 616 } |
582 | 617 |
583 assert_not_equals(promises.length, 0); | 618 assert_not_equals(promises.length, 0); |
| 619 return Promise.all(promises); |
| 620 }).then(function(result) { |
| 621 test.done(); |
| 622 }).catch(function(error) { |
| 623 forceTestFailureFromPromise(test, error, 'close() tests fail
ed'); |
| 624 }); |
| 625 }, 'Test MediaKeySession close().'); |
| 626 |
| 627 function create_remove_exception_test(mediaKeys, type, initData) |
| 628 { |
| 629 // remove() on an uninitialized session should fail. |
| 630 var mediaKeySession = mediaKeys.createSession('temporary'); |
| 631 return mediaKeySession.remove().then(function(result) { |
| 632 assert_unreached('remove() should not succeed if session uni
nitialized'); |
| 633 }).catch(function(error) { |
| 634 assert_equals(error.name, 'InvalidStateError'); |
| 635 |
| 636 // remove() on a temporary session should fail. |
| 637 return mediaKeySession.generateRequest(type, initData); |
| 638 }).then(function(result) { |
| 639 return mediaKeySession.remove(); |
| 640 }).then(function(result) { |
| 641 assert_unreached('remove() should not succeed for temporary
sessions'); |
| 642 }).catch(function(error) { |
| 643 assert_equals(error.name, 'InvalidAccessError'); |
| 644 |
| 645 // remove() on a closed persistent session should also fail. |
| 646 mediaKeySession = mediaKeys.createSession('persistent'); |
| 647 return mediaKeySession.generateRequest(type, initData); |
| 648 }).then(function(result) { |
| 649 return mediaKeySession.close(); |
| 650 }).then(function(result) { |
| 651 return mediaKeySession.remove(); |
| 652 }).then(function(result) { |
| 653 assert_unreached('remove() should not succeed for closed per
sistent sessions'); |
| 654 }).catch(function(error) { |
| 655 assert_equals(error.name, 'InvalidStateError'); |
| 656 |
| 657 // Return something so the promise resolves. |
| 658 return Promise.resolve(); |
| 659 }); |
| 660 } |
| 661 |
| 662 async_test(function(test) |
| 663 { |
| 664 MediaKeys.create('org.w3.clearkey').then(function(mediaKeys) { |
| 665 var promises = []; |
| 666 |
| 667 if (MediaKeys.isTypeSupported('org.w3.clearkey', 'video/webm
')) { |
| 668 promises.push(create_remove_exception_test(mediaKeys, 'w
ebm', getInitData('webm'))); |
| 669 } |
| 670 |
| 671 if (MediaKeys.isTypeSupported('org.w3.clearkey', 'video/mp4'
)) { |
| 672 promises.push(create_remove_exception_test(mediaKeys, 'c
enc', getInitData('cenc'))); |
| 673 } |
| 674 |
| 675 assert_not_equals(promises.length, 0); |
| 676 return Promise.all(promises); |
| 677 }).then(function(result) { |
| 678 test.done(); |
| 679 }).catch(function(error) { |
| 680 forceTestFailureFromPromise(test, error, 'remove() exception
tests failed'); |
| 681 }); |
| 682 }, 'Test MediaKeySession remove() exceptions.'); |
| 683 |
| 684 function create_remove_test(mediaKeys, type, initData) |
| 685 { |
| 686 // ClearKey may not support persistent sessions. |
| 687 var mediaKeySession; |
| 688 try { |
| 689 mediaKeySession = mediaKeys.createSession('persistent'); |
| 690 } catch (error) { |
| 691 // Not supported, so return a resolved promise. |
| 692 assert_equals(error.name, 'NotSupportedError'); |
| 693 return Promise.resolve(); |
| 694 } |
| 695 return mediaKeySession.generateRequest(type, initData).then(func
tion(result) { |
| 696 return mediaKeySession.remove(); |
| 697 }); |
| 698 } |
| 699 |
| 700 async_test(function(test) |
| 701 { |
| 702 MediaKeys.create('org.w3.clearkey').then(function(mediaKeys) { |
| 703 var promises = []; |
| 704 |
| 705 if (MediaKeys.isTypeSupported('org.w3.clearkey', 'video/webm
')) { |
| 706 promises.push(create_remove_test(mediaKeys, 'webm', getI
nitData('webm'))); |
| 707 } |
| 708 |
| 709 if (MediaKeys.isTypeSupported('org.w3.clearkey', 'video/mp4'
)) { |
| 710 promises.push(create_remove_test(mediaKeys, 'cenc', getI
nitData('cenc'))); |
| 711 } |
| 712 |
| 713 assert_not_equals(promises.length, 0); |
584 return Promise.all(promises); | 714 return Promise.all(promises); |
585 }).then(function(result) { | 715 }).then(function(result) { |
586 test.done(); | 716 test.done(); |
587 }).catch(function(error) { | 717 }).catch(function(error) { |
588 forceTestFailureFromPromise(test, error, 'release() tests fa
iled'); | 718 forceTestFailureFromPromise(test, error, 'remove() tests fai
led'); |
589 }); | 719 }); |
590 }, 'Test MediaKeySession release().'); | 720 }, 'Test MediaKeySession remove().'); |
591 | 721 |
592 // FIXME: Add syntax checks for MediaKeys.IsTypeSupported(). | 722 // FIXME: Add syntax checks for MediaKeys.IsTypeSupported(). |
593 // FIXME: Add syntax checks for MediaKeyError and MediaKeySession ev
ents. | 723 // FIXME: Add syntax checks for MediaKeyError and MediaKeySession ev
ents. |
594 // FIXME: Add HTMLMediaElement syntax checks, e.g. setMediaKeys, med
iakeys, onencrypted. | 724 // FIXME: Add HTMLMediaElement syntax checks, e.g. setMediaKeys, med
iakeys, onencrypted. |
595 </script> | 725 </script> |
596 </body> | 726 </body> |
597 </html> | 727 </html> |
OLD | NEW |