diff --git a/packages/react-dom-bindings/src/events/DOMEventNames.js b/packages/react-dom-bindings/src/events/DOMEventNames.js index 73f0e2f632c5..579762b6962d 100644 --- a/packages/react-dom-bindings/src/events/DOMEventNames.js +++ b/packages/react-dom-bindings/src/events/DOMEventNames.js @@ -51,6 +51,7 @@ export type DOMEventName = | 'focusin' | 'focusout' | 'fullscreenchange' + | 'fullscreenerror' | 'gotpointercapture' | 'hashchange' | 'input' diff --git a/packages/react-dom-bindings/src/events/DOMEventProperties.js b/packages/react-dom-bindings/src/events/DOMEventProperties.js index 534cae3045e3..6b2e80ecd1eb 100644 --- a/packages/react-dom-bindings/src/events/DOMEventProperties.js +++ b/packages/react-dom-bindings/src/events/DOMEventProperties.js @@ -62,6 +62,8 @@ const simpleEventPluginEvents = [ 'encrypted', 'ended', 'error', + 'fullscreenChange', + 'fullscreenError', 'gotPointerCapture', 'input', 'invalid', diff --git a/packages/react-dom-bindings/src/events/ReactDOMEventListener.js b/packages/react-dom-bindings/src/events/ReactDOMEventListener.js index ee187bc7f480..0b2fffbcf902 100644 --- a/packages/react-dom-bindings/src/events/ReactDOMEventListener.js +++ b/packages/react-dom-bindings/src/events/ReactDOMEventListener.js @@ -362,6 +362,7 @@ export function getEventPriority(domEventName: DOMEventName): EventPriority { case 'beforeinput': case 'blur': case 'fullscreenchange': + case 'fullscreenerror': case 'focus': case 'hashchange': case 'popstate': diff --git a/packages/react-dom/src/__tests__/ReactDOMEventPropagation-test.js b/packages/react-dom/src/__tests__/ReactDOMEventPropagation-test.js index 7e578fbba14e..752c8bba961b 100644 --- a/packages/react-dom/src/__tests__/ReactDOMEventPropagation-test.js +++ b/packages/react-dom/src/__tests__/ReactDOMEventPropagation-test.js @@ -834,6 +834,40 @@ describe('ReactDOMEventListener', () => { }, }); }); + + it('onFullscreenChange', async () => { + await testNativeBubblingEvent({ + type: 'div', + reactEvent: 'onFullscreenChange', + reactEventType: 'fullscreenchange', + nativeEvent: 'fullscreenchange', + dispatch(node) { + node.dispatchEvent( + new Event('fullscreenchange', { + bubbles: true, + cancelable: false, + }), + ); + }, + }); + }); + + it('onFullscreenError', async () => { + await testNativeBubblingEvent({ + type: 'div', + reactEvent: 'onFullscreenError', + reactEventType: 'fullscreenerror', + nativeEvent: 'fullscreenerror', + dispatch(node) { + node.dispatchEvent( + new Event('fullscreenerror', { + bubbles: true, + cancelable: false, + }), + ); + }, + }); + }); }); describe('non-bubbling events that bubble in React', () => {