@samitouri / QOS-React / commits / 518336e2fb

Fix #5839 Add error event to source element (#6941)

* Fix #5839 Add error event to source element * Add test case for <source onError={callback}>

Hiroyuki Wada committed Jun 9, 2016 at 05:30 UTC 518336e2fbe2c1371d24401ee4c43de0edb8c303
2 files changed +31 -1
src/renderers/dom/shared/ReactDOMComponent.js
+11 -1
@@ -359,7 +359,15 @@ function trapBubbledEventsLocal() {
359 );
360 }
361 }
362 -
362 + break;
363 + case 'source':
364 + inst._wrapperState.listeners = [
365 + ReactBrowserEventEmitter.trapBubbledEvent(
366 + EventConstants.topLevelTypes.topError,
367 + 'error',
368 + node
369 + ),
370 + ];
371 break;
372 case 'img':
373 inst._wrapperState.listeners = [
@@ -535,6 +543,7 @@ ReactDOMComponent.Mixin = {
543 case 'img':
544 case 'link':
545 case 'object':
546 + case 'source':
547 case 'video':
548 this._wrapperState = {
549 listeners: null,
@@ -1143,6 +1152,7 @@ ReactDOMComponent.Mixin = {
1152 case 'img':
1153 case 'link':
1154 case 'object':
1155 + case 'source':
1156 case 'video':
1157 var listeners = this._wrapperState.listeners;
1158 if (listeners) {
src/renderers/dom/shared/__tests__/ReactDOMComponent-test.js
+20
@@ -723,6 +723,26 @@ describe('ReactDOMComponent', function() {
723 };
724 });
725
726 + it('should work error event on <source> element', function() {
727 + spyOn(console, 'error');
728 + var container = document.createElement('div');
729 + ReactDOM.render(
730 + <video>
731 + <source src="http://example.org/video" type="video/mp4" onError={(e) => console.error('onError called')} />
732 + </video>,
733 + container
734 + );
735 +
736 + var errorEvent = document.createEvent('Event');
737 + errorEvent.initEvent('error', false, false);
738 + container.getElementsByTagName('source')[0].dispatchEvent(errorEvent);
739 +
740 + expect(console.error.calls.count()).toBe(1);
741 + expect(console.error.calls.argsFor(0)[0]).toContain(
742 + 'onError called'
743 + );
744 + });
745 +
746 it('should not duplicate uppercased selfclosing tags', function() {
747 var Container = React.createClass({
748 render: function() {