From 870f08ea998744b7c6299011bd0d778536100799 Mon Sep 17 00:00:00 2001 From: Rick Hanlon Date: Wed, 25 Feb 2026 16:07:19 -0500 Subject: [PATCH] [flags] Clean up enableTrustedTypes --- .../src/client/DOMPropertyOperations.js | 17 ++---- .../src/client/ReactDOMComponent.js | 18 ++----- .../src/client/ReactFiberConfigDOM.js | 3 +- .../events/plugins/FormActionEventPlugin.js | 5 +- .../src/__tests__/ReactDOMFloat-test.js | 24 +++------ .../src/__tests__/ReactDOMForm-test.js | 6 +-- ...ctDOMServerIntegrationUntrustedURL-test.js | 2 +- .../src/__tests__/ReactEmptyComponent-test.js | 16 +++--- .../__tests__/trustedTypes-test.internal.js | 52 +++++-------------- packages/shared/ReactFeatureFlags.js | 2 - .../forks/ReactFeatureFlags.native-fb.js | 1 - .../forks/ReactFeatureFlags.native-oss.js | 1 - .../forks/ReactFeatureFlags.test-renderer.js | 1 - ...actFeatureFlags.test-renderer.native-fb.js | 1 - .../ReactFeatureFlags.test-renderer.www.js | 1 - .../shared/forks/ReactFeatureFlags.www.js | 1 - 16 files changed, 39 insertions(+), 112 deletions(-) diff --git a/packages/react-dom-bindings/src/client/DOMPropertyOperations.js b/packages/react-dom-bindings/src/client/DOMPropertyOperations.js index df09445acc55..2bd0e5e70f5d 100644 --- a/packages/react-dom-bindings/src/client/DOMPropertyOperations.js +++ b/packages/react-dom-bindings/src/client/DOMPropertyOperations.js @@ -8,7 +8,6 @@ */ import isAttributeNameSafe from '../shared/isAttributeNameSafe'; -import {enableTrustedTypesIntegration} from 'shared/ReactFeatureFlags'; import {checkAttributeStringCoercion} from 'shared/CheckStringCoercion'; import {getFiberCurrentPropsFromNode} from './ReactDOMComponentTree'; import {trackHostMutation} from 'react-reconciler/src/ReactFiberMutationTracking'; @@ -124,10 +123,7 @@ export function setValueForAttribute( if (__DEV__) { checkAttributeStringCoercion(value, name); } - node.setAttribute( - name, - enableTrustedTypesIntegration ? (value: any) : '' + (value: any), - ); + node.setAttribute(name, (value: any)); } } @@ -152,10 +148,7 @@ export function setValueForKnownAttribute( if (__DEV__) { checkAttributeStringCoercion(value, name); } - node.setAttribute( - name, - enableTrustedTypesIntegration ? (value: any) : '' + (value: any), - ); + node.setAttribute(name, (value: any)); } export function setValueForNamespacedAttribute( @@ -180,11 +173,7 @@ export function setValueForNamespacedAttribute( if (__DEV__) { checkAttributeStringCoercion(value, name); } - node.setAttributeNS( - namespace, - name, - enableTrustedTypesIntegration ? (value: any) : '' + (value: any), - ); + node.setAttributeNS(namespace, name, (value: any)); } export function setValueForPropertyOnCustomComponent( diff --git a/packages/react-dom-bindings/src/client/ReactDOMComponent.js b/packages/react-dom-bindings/src/client/ReactDOMComponent.js index 1b25e3727023..f284477dbba2 100644 --- a/packages/react-dom-bindings/src/client/ReactDOMComponent.js +++ b/packages/react-dom-bindings/src/client/ReactDOMComponent.js @@ -71,7 +71,6 @@ import { enableHydrationChangeEvent, enableScrollEndPolyfill, enableSrcObject, - enableTrustedTypesIntegration, enableViewTransition, } from 'shared/ReactFeatureFlags'; import { @@ -525,9 +524,7 @@ function setProp( if (__DEV__) { checkAttributeStringCoercion(value, key); } - const sanitizedValue = (sanitizeURL( - enableTrustedTypesIntegration ? value : '' + (value: any), - ): any); + const sanitizedValue = (sanitizeURL(value): any); domElement.setAttribute(key, sanitizedValue); break; } @@ -596,9 +593,7 @@ function setProp( if (__DEV__) { checkAttributeStringCoercion(value, key); } - const sanitizedValue = (sanitizeURL( - enableTrustedTypesIntegration ? value : '' + (value: any), - ): any); + const sanitizedValue = (sanitizeURL(value): any); domElement.setAttribute(key, sanitizedValue); break; } @@ -699,9 +694,7 @@ function setProp( if (__DEV__) { checkAttributeStringCoercion(value, key); } - const sanitizedValue = (sanitizeURL( - enableTrustedTypesIntegration ? value : '' + (value: any), - ): any); + const sanitizedValue = (sanitizeURL(value): any); domElement.setAttributeNS(xlinkNamespace, 'xlink:href', sanitizedValue); break; } @@ -727,10 +720,7 @@ function setProp( if (__DEV__) { checkAttributeStringCoercion(value, key); } - domElement.setAttribute( - key, - enableTrustedTypesIntegration ? (value: any) : '' + (value: any), - ); + domElement.setAttribute(key, (value: any)); } else { domElement.removeAttribute(key); } diff --git a/packages/react-dom-bindings/src/client/ReactFiberConfigDOM.js b/packages/react-dom-bindings/src/client/ReactFiberConfigDOM.js index 94d37cfc902d..99a4ec7b6f64 100644 --- a/packages/react-dom-bindings/src/client/ReactFiberConfigDOM.js +++ b/packages/react-dom-bindings/src/client/ReactFiberConfigDOM.js @@ -116,7 +116,6 @@ import { import { enableCreateEventHandleAPI, enableScopeAPI, - enableTrustedTypesIntegration, disableLegacyMode, enableMoveBefore, disableCommentsAsDOMContainers, @@ -526,7 +525,7 @@ export function createInstance( // set to true and it does not execute const div = ownerDocument.createElement('div'); if (__DEV__) { - if (enableTrustedTypesIntegration && !didWarnScriptTags) { + if (!didWarnScriptTags) { console.error( 'Encountered a script tag while rendering React component. ' + 'Scripts inside React components are never executed when rendering ' + diff --git a/packages/react-dom-bindings/src/events/plugins/FormActionEventPlugin.js b/packages/react-dom-bindings/src/events/plugins/FormActionEventPlugin.js index 420d1d118820..713a9ffd5d00 100644 --- a/packages/react-dom-bindings/src/events/plugins/FormActionEventPlugin.js +++ b/packages/react-dom-bindings/src/events/plugins/FormActionEventPlugin.js @@ -14,7 +14,6 @@ import type {EventSystemFlags} from '../EventSystemFlags'; import type {Fiber} from 'react-reconciler/src/ReactInternalTypes'; import type {FormStatus} from 'react-dom-bindings/src/shared/ReactDOMFormActions'; -import {enableTrustedTypesIntegration} from 'shared/ReactFeatureFlags'; import {getFiberCurrentPropsFromNode} from '../../client/ReactDOMComponentTree'; import {startHostTransition} from 'react-reconciler/src/ReactFiberReconciler'; import {didCurrentEventScheduleTransition} from 'react-reconciler/src/ReactFiberRootScheduler'; @@ -39,9 +38,7 @@ function coerceFormActionProp( if (__DEV__) { checkAttributeStringCoercion(actionProp, 'action'); } - return (sanitizeURL( - enableTrustedTypesIntegration ? actionProp : '' + (actionProp: any), - ): any); + return (sanitizeURL(actionProp): any); } } diff --git a/packages/react-dom/src/__tests__/ReactDOMFloat-test.js b/packages/react-dom/src/__tests__/ReactDOMFloat-test.js index 21bf9684b285..97e6d16bd9e7 100644 --- a/packages/react-dom/src/__tests__/ReactDOMFloat-test.js +++ b/packages/react-dom/src/__tests__/ReactDOMFloat-test.js @@ -602,14 +602,10 @@ describe('ReactDOMFloat', () => { '> '); - if (gate('enableTrustedTypesIntegration')) { - assertConsoleErrorDev([ - 'Encountered a script tag while rendering React component. ' + - 'Scripts inside React components are never executed when rendering on the client. ' + - 'Consider using template tag instead (https://developer.mozilla.org/en-US/docs/Web/HTML/Element/template).\n' + - ' in script (at **)\n' + - ' in TogglingComponent (at **)', - ]); - } + assertConsoleErrorDev([ + 'Encountered a script tag while rendering React component. ' + + 'Scripts inside React components are never executed when rendering on the client. ' + + 'Consider using template tag instead (https://developer.mozilla.org/en-US/docs/Web/HTML/Element/template).\n' + + ' in script (at **)\n' + + ' in TogglingComponent (at **)', + ]); const container2 = document.createElement('div'); const root2 = ReactDOMClient.createRoot(container2); diff --git a/packages/react-dom/src/client/__tests__/trustedTypes-test.internal.js b/packages/react-dom/src/client/__tests__/trustedTypes-test.internal.js index 06744581ae95..b92027f9f9b1 100644 --- a/packages/react-dom/src/client/__tests__/trustedTypes-test.internal.js +++ b/packages/react-dom/src/client/__tests__/trustedTypes-test.internal.js @@ -115,11 +115,7 @@ describe('when Trusted Types are available in global object', () => { expect(setAttributeCalls[0][0]).toBe(container.firstChild); expect(setAttributeCalls[0][1]).toBe('data-foo'); // Ensure it didn't get stringified when passed to a DOM sink: - if (gate('enableTrustedTypesIntegration')) { - expect(setAttributeCalls[0][2]).toBe(ttObject1); - } else { - expect(setAttributeCalls[0][2]).toBe('Hi'); - } + expect(setAttributeCalls[0][2]).toBe(ttObject1); setAttributeCalls.length = 0; await act(() => { @@ -130,11 +126,7 @@ describe('when Trusted Types are available in global object', () => { expect(setAttributeCalls[0][0]).toBe(container.firstChild); expect(setAttributeCalls[0][1]).toBe('data-foo'); // Ensure it didn't get stringified when passed to a DOM sink: - if (gate('enableTrustedTypesIntegration')) { - expect(setAttributeCalls[0][2]).toBe(ttObject2); - } else { - expect(setAttributeCalls[0][2]).toBe('Bye'); - } + expect(setAttributeCalls[0][2]).toBe(ttObject2); } finally { Element.prototype.setAttribute = setAttribute; } @@ -158,11 +150,7 @@ describe('when Trusted Types are available in global object', () => { expect(setAttributeCalls[0][0]).toBe(container.firstChild); expect(setAttributeCalls[0][1]).toBe('class'); // Ensure it didn't get stringified when passed to a DOM sink: - if (gate('enableTrustedTypesIntegration')) { - expect(setAttributeCalls[0][2]).toBe(ttObject1); - } else { - expect(setAttributeCalls[0][2]).toBe('Hi'); - } + expect(setAttributeCalls[0][2]).toBe(ttObject1); setAttributeCalls.length = 0; await act(() => { @@ -173,11 +161,7 @@ describe('when Trusted Types are available in global object', () => { expect(setAttributeCalls[0][0]).toBe(container.firstChild); expect(setAttributeCalls[0][1]).toBe('class'); // Ensure it didn't get stringified when passed to a DOM sink: - if (gate('enableTrustedTypesIntegration')) { - expect(setAttributeCalls[0][2]).toBe(ttObject2); - } else { - expect(setAttributeCalls[0][2]).toBe('Bye'); - } + expect(setAttributeCalls[0][2]).toBe(ttObject2); } finally { Element.prototype.setAttribute = setAttribute; } @@ -202,11 +186,7 @@ describe('when Trusted Types are available in global object', () => { expect(setAttributeNSCalls[0][1]).toBe('http://www.w3.org/1999/xlink'); expect(setAttributeNSCalls[0][2]).toBe('xlink:href'); // Ensure it didn't get stringified when passed to a DOM sink: - if (gate('enableTrustedTypesIntegration')) { - expect(setAttributeNSCalls[0][3]).toBe(ttObject1); - } else { - expect(setAttributeNSCalls[0][3]).toBe('Hi'); - } + expect(setAttributeNSCalls[0][3]).toBe(ttObject1); setAttributeNSCalls.length = 0; await act(() => { @@ -218,11 +198,7 @@ describe('when Trusted Types are available in global object', () => { expect(setAttributeNSCalls[0][1]).toBe('http://www.w3.org/1999/xlink'); expect(setAttributeNSCalls[0][2]).toBe('xlink:href'); // Ensure it didn't get stringified when passed to a DOM sink: - if (gate('enableTrustedTypesIntegration')) { - expect(setAttributeNSCalls[0][3]).toBe(ttObject2); - } else { - expect(setAttributeNSCalls[0][3]).toBe('Bye'); - } + expect(setAttributeNSCalls[0][3]).toBe(ttObject2); } finally { Element.prototype.setAttributeNS = setAttributeNS; } @@ -233,15 +209,13 @@ describe('when Trusted Types are available in global object', () => { await act(() => { root.render(); }); - if (gate('enableTrustedTypesIntegration')) { - assertConsoleErrorDev([ - 'Encountered a script tag while rendering React component. ' + - 'Scripts inside React components are never executed when rendering ' + - 'on the client. Consider using template tag instead ' + - '(https://developer.mozilla.org/en-US/docs/Web/HTML/Element/template).\n' + - ' in script (at **)', - ]); - } + assertConsoleErrorDev([ + 'Encountered a script tag while rendering React component. ' + + 'Scripts inside React components are never executed when rendering ' + + 'on the client. Consider using template tag instead ' + + '(https://developer.mozilla.org/en-US/docs/Web/HTML/Element/template).\n' + + ' in script (at **)', + ]); // check that the warning is printed only once await act(() => { diff --git a/packages/shared/ReactFeatureFlags.js b/packages/shared/ReactFeatureFlags.js index ee5f22ab9588..db55cdfc28aa 100644 --- a/packages/shared/ReactFeatureFlags.js +++ b/packages/shared/ReactFeatureFlags.js @@ -203,8 +203,6 @@ export const disableLegacyMode: boolean = true; // in open source, but www codebase still relies on it. Need to remove. export const disableCommentsAsDOMContainers: boolean = true; -export const enableTrustedTypesIntegration: boolean = true; - // Prevent the value and checked attributes from syncing with their related // DOM properties export const disableInputAttributeSyncing: boolean = false; diff --git a/packages/shared/forks/ReactFeatureFlags.native-fb.js b/packages/shared/forks/ReactFeatureFlags.native-fb.js index bbb13a6eb174..58b271f9937d 100644 --- a/packages/shared/forks/ReactFeatureFlags.native-fb.js +++ b/packages/shared/forks/ReactFeatureFlags.native-fb.js @@ -61,7 +61,6 @@ export const enableSuspenseAvoidThisFallback: boolean = false; export const enableSuspenseCallback: boolean = true; export const enableTaint: boolean = true; export const enableTransitionTracing: boolean = false; -export const enableTrustedTypesIntegration: boolean = true; export const enableUpdaterTracking: boolean = __PROFILE__; export const retryLaneExpirationMs = 5000; export const syncLaneExpirationMs = 250; diff --git a/packages/shared/forks/ReactFeatureFlags.native-oss.js b/packages/shared/forks/ReactFeatureFlags.native-oss.js index 6b0d93447966..ed2b81775769 100644 --- a/packages/shared/forks/ReactFeatureFlags.native-oss.js +++ b/packages/shared/forks/ReactFeatureFlags.native-oss.js @@ -49,7 +49,6 @@ export const enableSuspenseAvoidThisFallback: boolean = false; export const enableSuspenseCallback: boolean = false; export const enableTaint: boolean = true; export const enableTransitionTracing: boolean = false; -export const enableTrustedTypesIntegration: boolean = true; export const passChildrenWhenCloningPersistedNodes: boolean = false; export const retryLaneExpirationMs = 5000; export const syncLaneExpirationMs = 250; diff --git a/packages/shared/forks/ReactFeatureFlags.test-renderer.js b/packages/shared/forks/ReactFeatureFlags.test-renderer.js index 954d9d88eaf5..c4f768a5f9a7 100644 --- a/packages/shared/forks/ReactFeatureFlags.test-renderer.js +++ b/packages/shared/forks/ReactFeatureFlags.test-renderer.js @@ -26,7 +26,6 @@ export const disableInputAttributeSyncing: boolean = false; export const enableScopeAPI: boolean = false; export const enableCreateEventHandleAPI: boolean = false; export const enableSuspenseCallback: boolean = false; -export const enableTrustedTypesIntegration: boolean = true; export const disableTextareaChildren: boolean = false; export const enableSuspenseAvoidThisFallback: boolean = false; export const enableCPUSuspense: boolean = false; diff --git a/packages/shared/forks/ReactFeatureFlags.test-renderer.native-fb.js b/packages/shared/forks/ReactFeatureFlags.test-renderer.native-fb.js index 6bc80d2b8e30..f7a01b4796ec 100644 --- a/packages/shared/forks/ReactFeatureFlags.test-renderer.native-fb.js +++ b/packages/shared/forks/ReactFeatureFlags.test-renderer.native-fb.js @@ -46,7 +46,6 @@ export const enableSuspenseAvoidThisFallback = false; export const enableSuspenseCallback = false; export const enableTaint = true; export const enableTransitionTracing = false; -export const enableTrustedTypesIntegration = true; export const enableUpdaterTracking = false; export const passChildrenWhenCloningPersistedNodes = false; export const retryLaneExpirationMs = 5000; diff --git a/packages/shared/forks/ReactFeatureFlags.test-renderer.www.js b/packages/shared/forks/ReactFeatureFlags.test-renderer.www.js index 91dc33b28f35..6d22d1f61abf 100644 --- a/packages/shared/forks/ReactFeatureFlags.test-renderer.www.js +++ b/packages/shared/forks/ReactFeatureFlags.test-renderer.www.js @@ -28,7 +28,6 @@ export const enableCreateEventHandleAPI: boolean = false; export const enableSuspenseCallback: boolean = true; export const disableLegacyContext: boolean = false; export const disableLegacyContextForFunctionComponents: boolean = false; -export const enableTrustedTypesIntegration: boolean = true; export const disableTextareaChildren: boolean = false; export const enableSuspenseAvoidThisFallback: boolean = true; export const enableCPUSuspense: boolean = false; diff --git a/packages/shared/forks/ReactFeatureFlags.www.js b/packages/shared/forks/ReactFeatureFlags.www.js index 76e3909ccafc..09e03a347075 100644 --- a/packages/shared/forks/ReactFeatureFlags.www.js +++ b/packages/shared/forks/ReactFeatureFlags.www.js @@ -43,7 +43,6 @@ export const enableProfilerTimer = __PROFILE__; export const enableProfilerCommitHooks = __PROFILE__; export const enableProfilerNestedUpdatePhase = __PROFILE__; export const enableUpdaterTracking = __PROFILE__; -export const enableTrustedTypesIntegration: boolean = true; export const enableSuspenseAvoidThisFallback: boolean = true; export const enableAsyncDebugInfo: boolean = true;