/** * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * * @emails react-core */ 'use strict'; import {patchMessageChannel} from '../../../../scripts/jest/patchMessageChannel'; import { getVisibleChildren, insertNodesAndExecuteScripts, } from '../test-utils/FizzTestUtils'; // Polyfills for test environment global.ReadableStream = require('web-streams-polyfill/ponyfill/es6').ReadableStream; global.TextEncoder = require('util').TextEncoder; let React; let ReactDOM; let ReactDOMFizzServer; let ReactDOMFizzStatic; let Suspense; let container; let Scheduler; let act; describe('ReactDOMFizzStaticFloat', () => { beforeEach(() => { jest.resetModules(); Scheduler = require('scheduler'); patchMessageChannel(Scheduler); act = require('internal-test-utils').act; React = require('react'); ReactDOM = require('react-dom'); ReactDOMFizzServer = require('react-dom/server.browser'); if (__EXPERIMENTAL__) { ReactDOMFizzStatic = require('react-dom/static.browser'); } Suspense = React.Suspense; container = document.createElement('div'); document.body.appendChild(container); }); afterEach(() => { document.body.removeChild(container); }); async function serverAct(callback) { let maybePromise; await act(() => { maybePromise = callback(); if (maybePromise && typeof maybePromise.catch === 'function') { maybePromise.catch(() => {}); } }); return maybePromise; } async function readIntoContainer(stream) { const reader = stream.getReader(); let result = ''; while (true) { const {done, value} = await reader.read(); if (done) { break; } result += Buffer.from(value).toString('utf8'); } const temp = document.createElement('div'); temp.innerHTML = result; await insertNodesAndExecuteScripts(temp, container, null); } // @gate enablePostpone it('should transfer connection credentials across prerender and resume for stylesheets, scripts, and moduleScripts', async () => { let prerendering = true; function Postpone() { if (prerendering) { React.unstable_postpone(); } return ( <> > ); } function App() { ReactDOM.preload('style creds', { as: 'style', crossOrigin: 'use-credentials', }); ReactDOM.preload('script creds', { as: 'script', crossOrigin: 'use-credentials', integrity: 'script-hash', }); ReactDOM.preloadModule('module creds', { crossOrigin: 'use-credentials', integrity: 'module-hash', }); ReactDOM.preload('style anon', { as: 'style', crossOrigin: 'anonymous', }); ReactDOM.preload('script anon', { as: 'script', crossOrigin: 'foobar', }); ReactDOM.preloadModule('module default', { integrity: 'module-hash', }); return (