From 4842fbea02c48fa5cfcb28eb6ceaec12f6f41a45 Mon Sep 17 00:00:00 2001 From: chirokas <157580465+chirokas@users.noreply.github.com> Date: Wed, 18 Feb 2026 09:34:16 +0800 Subject: [PATCH] [react-dom] Add support for `onFullscreenChange` and `onFullscreenError` events (#34621) --- .../src/events/DOMEventNames.js | 1 + .../src/events/DOMEventProperties.js | 2 ++ .../src/events/ReactDOMEventListener.js | 1 + .../ReactDOMEventPropagation-test.js | 34 +++++++++++++++++++ 4 files changed, 38 insertions(+) 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', () => {