Fix <embed> not triggering onLoad (#15614)
Andrew Cherniavskii committed
May 16, 2019 at 11:05 UTC
4bf88ddeca37d5971c05a9ab720f898409c143fd
2 files changed
+29
packages/react-dom/src/__tests__/ReactDOMEventListener-test.js
+27
@@ -446,4 +446,31 @@ describe('ReactDOMEventListener', () => {
446
document.body.removeChild(container);
447
}
448
});
449
+
450
+ it('should dispatch load for embed elements', () => {
451
+ const container = document.createElement('div');
452
+ document.body.appendChild(container);
453
+
454
+ try {
455
+ const ref = React.createRef();
456
+ const handleLoad = jest.fn();
457
+
458
+ ReactDOM.render(
459
+ <div>
460
+ <embed ref={ref} onLoad={handleLoad} />
461
+ </div>,
462
+ container,
463
+ );
464
+
465
+ ref.current.dispatchEvent(
466
+ new ProgressEvent('load', {
467
+ bubbles: false,
468
+ }),
469
+ );
470
+
471
+ expect(handleLoad).toHaveBeenCalledTimes(1);
472
+ } finally {
473
+ document.body.removeChild(container);
474
+ }
475
+ });
476
});
packages/react-dom/src/client/ReactDOMComponent.js
+2
@@ -522,6 +522,7 @@ export function setInitialProperties(
522
switch (tag) {
523
case 'iframe':
524
case 'object':
525
+ case 'embed':
526
trapBubbledEvent(TOP_LOAD, domElement);
527
props = rawProps;
528
break;
@@ -916,6 +917,7 @@ export function diffHydratedProperties(
917
switch (tag) {
918
case 'iframe':
919
case 'object':
920
+ case 'embed':
921
trapBubbledEvent(TOP_LOAD, domElement);
922
break;
923
case 'video':