Skip to content

Commit 518336e

Browse files
wadahirojimfb
authored andcommitted
Fix #5839 Add error event to source element (#6941)
* Fix #5839 Add error event to source element * Add test case for <source onError={callback}>
1 parent 99d8524 commit 518336e

File tree

2 files changed

+31
-1
lines changed

2 files changed

+31
-1
lines changed

src/renderers/dom/shared/ReactDOMComponent.js

+11-1
Original file line numberDiff line numberDiff line change
@@ -359,7 +359,15 @@ function trapBubbledEventsLocal() {
359359
);
360360
}
361361
}
362-
362+
break;
363+
case 'source':
364+
inst._wrapperState.listeners = [
365+
ReactBrowserEventEmitter.trapBubbledEvent(
366+
EventConstants.topLevelTypes.topError,
367+
'error',
368+
node
369+
),
370+
];
363371
break;
364372
case 'img':
365373
inst._wrapperState.listeners = [
@@ -535,6 +543,7 @@ ReactDOMComponent.Mixin = {
535543
case 'img':
536544
case 'link':
537545
case 'object':
546+
case 'source':
538547
case 'video':
539548
this._wrapperState = {
540549
listeners: null,
@@ -1143,6 +1152,7 @@ ReactDOMComponent.Mixin = {
11431152
case 'img':
11441153
case 'link':
11451154
case 'object':
1155+
case 'source':
11461156
case 'video':
11471157
var listeners = this._wrapperState.listeners;
11481158
if (listeners) {

src/renderers/dom/shared/__tests__/ReactDOMComponent-test.js

+20
Original file line numberDiff line numberDiff line change
@@ -723,6 +723,26 @@ describe('ReactDOMComponent', function() {
723723
};
724724
});
725725

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+
726746
it('should not duplicate uppercased selfclosing tags', function() {
727747
var Container = React.createClass({
728748
render: function() {

0 commit comments

Comments
 (0)