react-native-windows 0.68.3 → 0.69.0-preview.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (378) hide show
  1. package/.flowconfig +1 -3
  2. package/Chakra/ChakraHelpers.cpp +0 -1
  3. package/Directory.Build.props +3 -0
  4. package/Directory.Build.targets +1 -1
  5. package/Folly/TEMP_UntilFollyUpdate/dynamic-inl.h +1411 -0
  6. package/Folly/TEMP_UntilFollyUpdate/lang/ToAscii.cpp +336 -0
  7. package/Folly/TEMP_UntilFollyUpdate/lang/ToAscii.h +182 -0
  8. package/Libraries/ActionSheetIOS/ActionSheetIOS.js +7 -0
  9. package/Libraries/ActionSheetIOS/NativeActionSheetManager.js +1 -0
  10. package/Libraries/Alert/Alert.windows.js +2 -2
  11. package/Libraries/Animated/AnimatedImplementation.js +1 -1
  12. package/Libraries/Animated/NativeAnimatedHelper.js +55 -9
  13. package/Libraries/Animated/NativeAnimatedModule.js +1 -0
  14. package/Libraries/Animated/NativeAnimatedTurboModule.js +1 -0
  15. package/Libraries/Animated/animations/TimingAnimation.js +6 -11
  16. package/Libraries/Animated/createAnimatedComponent.js +2 -2
  17. package/Libraries/Animated/nodes/AnimatedColor.js +95 -29
  18. package/Libraries/Animated/nodes/AnimatedInterpolation.js +19 -22
  19. package/Libraries/Animated/nodes/AnimatedNode.js +2 -2
  20. package/Libraries/Animated/nodes/AnimatedValue.js +1 -1
  21. package/Libraries/AppState/AppState.js +1 -1
  22. package/Libraries/Blob/URL.js +7 -1
  23. package/Libraries/Components/Button.js +3 -0
  24. package/Libraries/Components/Button.windows.js +4 -0
  25. package/Libraries/Components/DatePickerAndroid/NativeDatePickerAndroid.js +5 -0
  26. package/Libraries/Components/Pressable/Pressable.js +3 -3
  27. package/Libraries/Components/Pressable/Pressable.windows.js +3 -3
  28. package/Libraries/Components/ScrollView/AndroidHorizontalScrollViewNativeComponent.js +47 -38
  29. package/Libraries/Components/ScrollView/ScrollContentViewNativeComponent.js +15 -7
  30. package/Libraries/Components/ScrollView/ScrollView.js +1 -1
  31. package/Libraries/Components/ScrollView/ScrollViewNativeComponent.js +16 -3
  32. package/Libraries/Components/ScrollView/ScrollViewStickyHeader.js +3 -1
  33. package/Libraries/Components/Slider/Slider.js +0 -2
  34. package/Libraries/Components/Slider/SliderNativeComponent.js +0 -1
  35. package/Libraries/Components/StatusBar/StatusBar.js +6 -1
  36. package/Libraries/Components/Switch/Switch.js +11 -1
  37. package/Libraries/Components/TextInput/AndroidTextInputNativeComponent.js +114 -109
  38. package/Libraries/Components/TextInput/RCTMultilineTextInputNativeComponent.js +17 -9
  39. package/Libraries/Components/TextInput/RCTSingelineTextInputNativeComponent.js +13 -5
  40. package/Libraries/Components/TextInput/RCTTextInputViewConfig.js +10 -0
  41. package/Libraries/Components/TextInput/TextInput.js +1 -8
  42. package/Libraries/Components/TextInput/TextInput.windows.js +4 -9
  43. package/Libraries/Components/TextInput/TextInputState.js +10 -2
  44. package/Libraries/Components/TextInput/TextInputState.windows.js +10 -3
  45. package/Libraries/Components/TextInput/WindowsTextInputNativeComponent.js +1 -1
  46. package/Libraries/Components/Touchable/TouchableBounce.js +1 -0
  47. package/Libraries/Components/Touchable/TouchableHighlight.js +1 -0
  48. package/Libraries/Components/Touchable/TouchableHighlight.windows.js +6 -5
  49. package/Libraries/Components/Touchable/TouchableNativeFeedback.js +1 -0
  50. package/Libraries/Components/Touchable/TouchableOpacity.js +7 -1
  51. package/Libraries/Components/Touchable/TouchableOpacity.windows.js +11 -5
  52. package/Libraries/Components/Touchable/TouchableWithoutFeedback.js +2 -0
  53. package/Libraries/Components/Touchable/TouchableWithoutFeedback.windows.js +2 -0
  54. package/Libraries/Components/View/ReactNativeViewAttributes.js +1 -0
  55. package/Libraries/Components/View/ReactNativeViewAttributes.windows.js +1 -0
  56. package/Libraries/Components/View/View.windows.js +33 -1
  57. package/Libraries/Components/View/ViewNativeComponent.js +68 -8
  58. package/Libraries/Components/View/ViewPropTypes.js +36 -4
  59. package/Libraries/Components/View/ViewPropTypes.windows.js +36 -4
  60. package/Libraries/Core/Devtools/parseHermesStack.js +1 -1
  61. package/Libraries/Core/ExceptionsManager.js +1 -1
  62. package/Libraries/Core/RawEventEmitter.js +38 -0
  63. package/Libraries/Core/ReactNativeVersion.js +2 -2
  64. package/Libraries/Core/polyfillPromise.js +32 -0
  65. package/Libraries/Core/setUpReactDevTools.js +3 -2
  66. package/Libraries/EventEmitter/NativeEventEmitter.js +3 -3
  67. package/Libraries/EventEmitter/RCTDeviceEventEmitter.js +2 -1
  68. package/Libraries/EventEmitter/__mocks__/NativeEventEmitter.js +3 -3
  69. package/Libraries/Events/CustomEvent.js +32 -0
  70. package/Libraries/Events/EventPolyfill.js +239 -0
  71. package/Libraries/Image/Image.android.js +0 -6
  72. package/Libraries/Image/Image.ios.js +0 -6
  73. package/Libraries/Image/Image.windows.js +2 -8
  74. package/Libraries/Image/ImageViewNativeComponent.js +18 -3
  75. package/Libraries/Image/TextInlineImageNativeComponent.js +23 -15
  76. package/Libraries/Inspector/Inspector.js +2 -4
  77. package/Libraries/Interaction/BridgeSpyStallHandler.js +4 -3
  78. package/Libraries/Interaction/InteractionManager.js +1 -12
  79. package/Libraries/Interaction/TaskQueue.js +5 -4
  80. package/Libraries/LayoutAnimation/LayoutAnimation.js +13 -0
  81. package/Libraries/Linking/Linking.js +1 -1
  82. package/Libraries/Lists/FlatList.js +27 -6
  83. package/Libraries/Lists/VirtualizedList.js +71 -55
  84. package/Libraries/Lists/VirtualizedListContext.js +7 -3
  85. package/Libraries/Lists/VirtualizedSectionList.js +2 -2
  86. package/Libraries/Lists/__tests__/{FillRateHelper-test.windows.js → FillRateHelper-test.js} +2 -2
  87. package/Libraries/Lists/__tests__/{FlatList-test.windows.js → FlatList-test.js} +2 -2
  88. package/Libraries/Lists/__tests__/{SectionList-test.windows.js → SectionList-test.js} +14 -14
  89. package/Libraries/Lists/__tests__/{VirtualizeUtils-test.windows.js → VirtualizeUtils-test.js} +3 -3
  90. package/Libraries/Lists/__tests__/{VirtualizedList-test.windows.js → VirtualizedList-test.js} +91 -42
  91. package/Libraries/Lists/__tests__/{VirtualizedSectionList-test.windows.js → VirtualizedSectionList-test.js} +13 -13
  92. package/Libraries/LogBox/Data/LogBoxData.js +2 -2
  93. package/Libraries/LogBox/Data/LogBoxLog.js +1 -1
  94. package/Libraries/LogBox/Data/LogBoxSymbolication.js +1 -1
  95. package/Libraries/LogBox/Data/parseLogBoxLog.js +1 -1
  96. package/Libraries/LogBox/LogBox.js +2 -21
  97. package/Libraries/LogBox/UI/LogBoxInspectorFooter.js +1 -0
  98. package/Libraries/LogBox/UI/LogBoxInspectorHeader.js +2 -1
  99. package/Libraries/NativeComponent/BaseViewConfig.android.js +295 -0
  100. package/Libraries/NativeComponent/BaseViewConfig.ios.js +333 -0
  101. package/Libraries/NativeComponent/BaseViewConfig.windows.js +334 -0
  102. package/Libraries/NativeComponent/NativeComponentRegistry.js +0 -2
  103. package/Libraries/NativeComponent/PlatformBaseViewConfig.js +24 -0
  104. package/Libraries/NativeComponent/StaticViewConfigValidator.js +7 -42
  105. package/Libraries/NativeComponent/ViewConfig.js +4 -4
  106. package/Libraries/NativeComponent/ViewConfigIgnore.js +54 -0
  107. package/Libraries/Network/FormData.js +7 -1
  108. package/Libraries/Pressability/Pressability.js +115 -46
  109. package/Libraries/Pressability/Pressability.windows.js +190 -74
  110. package/Libraries/Pressability/PressabilityDebug.js +5 -9
  111. package/Libraries/PushNotificationIOS/NativePushNotificationManagerIOS.js +1 -0
  112. package/Libraries/ReactNative/AppContainer.js +1 -1
  113. package/Libraries/ReactNative/{DummyUIManager.js → BridgelessUIManager.js} +62 -40
  114. package/Libraries/ReactNative/PaperUIManager.windows.js +5 -5
  115. package/Libraries/ReactNative/ReactNativeFeatureFlags.js +39 -0
  116. package/Libraries/ReactNative/UIManager.js +2 -3
  117. package/Libraries/ReactNative/renderApplication.js +4 -0
  118. package/Libraries/ReactPrivate/ReactNativePrivateInterface.js +8 -0
  119. package/Libraries/Renderer/implementations/ReactFabric-dev.js +5908 -4906
  120. package/Libraries/Renderer/implementations/ReactFabric-prod.js +2100 -1918
  121. package/Libraries/Renderer/implementations/ReactFabric-profiling.js +2567 -2352
  122. package/Libraries/Renderer/implementations/ReactNativeRenderer-dev.js +5610 -4844
  123. package/Libraries/Renderer/implementations/ReactNativeRenderer-prod.js +1710 -1556
  124. package/Libraries/Renderer/implementations/ReactNativeRenderer-profiling.js +1830 -1639
  125. package/Libraries/Renderer/shims/ReactNativeTypes.js +2 -1
  126. package/Libraries/Renderer/shims/ReactNativeViewConfigRegistry.js +2 -1
  127. package/Libraries/StyleSheet/EdgeInsetsPropType.js +4 -1
  128. package/Libraries/StyleSheet/StyleSheetTypes.js +59 -66
  129. package/Libraries/StyleSheet/normalizeColor.js +1 -1
  130. package/Libraries/StyleSheet/private/_StyleSheetTypesOverrides.js +15 -0
  131. package/Libraries/StyleSheet/private/_TransformStyle.js +53 -0
  132. package/Libraries/StyleSheet/processTransform.windows.js +272 -0
  133. package/Libraries/Text/Text.js +13 -7
  134. package/Libraries/Text/Text.windows.js +16 -7
  135. package/Libraries/Text/TextNativeComponent.js +2 -0
  136. package/Libraries/Text/TextProps.js +10 -0
  137. package/Libraries/Types/CoreEventTypes.js +13 -1
  138. package/Libraries/Types/CoreEventTypes.windows.js +26 -1
  139. package/Libraries/Utilities/Appearance.js +0 -8
  140. package/Libraries/Utilities/HMRClient.js +1 -1
  141. package/Libraries/Utilities/ReactNativeTestTools.js +1 -0
  142. package/Libraries/Utilities/codegenNativeComponent.js +17 -6
  143. package/Libraries/Utilities/stringifySafe.js +4 -1
  144. package/Libraries/Utilities/verifyComponentAttributeEquivalence.js +3 -3
  145. package/Libraries/WebSocket/WebSocket.js +1 -1
  146. package/Libraries/vendor/emitter/_EmitterSubscription.js +1 -1
  147. package/Libraries/vendor/emitter/_EventEmitter.js +1 -1
  148. package/Libraries/vendor/emitter/_EventSubscription.js +1 -1
  149. package/Microsoft.ReactNative/DynamicReader.cpp +3 -3
  150. package/Microsoft.ReactNative/Fabric/ComponentView.h +1 -0
  151. package/Microsoft.ReactNative/Fabric/ComponentViewRegistry.cpp +36 -2
  152. package/Microsoft.ReactNative/Fabric/ComponentViewRegistry.h +1 -0
  153. package/Microsoft.ReactNative/Fabric/DWriteHelpers.cpp +19 -0
  154. package/Microsoft.ReactNative/Fabric/DWriteHelpers.h +13 -0
  155. package/Microsoft.ReactNative/Fabric/FabricUIManagerModule.cpp +65 -19
  156. package/Microsoft.ReactNative/Fabric/FabricUIManagerModule.h +2 -0
  157. package/Microsoft.ReactNative/Fabric/ParagraphComponentView.cpp +36 -10
  158. package/Microsoft.ReactNative/Fabric/ScrollViewComponentView.cpp +2 -0
  159. package/Microsoft.ReactNative/Fabric/SliderComponentView.cpp +107 -0
  160. package/Microsoft.ReactNative/Fabric/SliderComponentView.h +51 -0
  161. package/Microsoft.ReactNative/Fabric/SwitchComponentView.cpp +109 -0
  162. package/Microsoft.ReactNative/Fabric/SwitchComponentView.h +52 -0
  163. package/Microsoft.ReactNative/Fabric/TextInput/WindowsTextInputComponentDescriptor.h +197 -0
  164. package/Microsoft.ReactNative/Fabric/TextInput/WindowsTextInputComponentView.cpp +308 -0
  165. package/Microsoft.ReactNative/Fabric/TextInput/WindowsTextInputComponentView.h +52 -0
  166. package/Microsoft.ReactNative/Fabric/TextInput/WindowsTextInputEventEmitter.cpp +31 -0
  167. package/Microsoft.ReactNative/Fabric/TextInput/WindowsTextInputEventEmitter.h +33 -0
  168. package/Microsoft.ReactNative/Fabric/TextInput/WindowsTextInputProps.cpp +81 -0
  169. package/Microsoft.ReactNative/Fabric/TextInput/WindowsTextInputProps.h +132 -0
  170. package/Microsoft.ReactNative/Fabric/TextInput/WindowsTextInputShadowNode.cpp +193 -0
  171. package/Microsoft.ReactNative/Fabric/TextInput/WindowsTextInputShadowNode.h +85 -0
  172. package/Microsoft.ReactNative/Fabric/TextInput/WindowsTextInputState.cpp +76 -0
  173. package/Microsoft.ReactNative/Fabric/TextInput/WindowsTextInputState.h +99 -0
  174. package/Microsoft.ReactNative/Fabric/ViewComponentView.cpp +35 -3
  175. package/Microsoft.ReactNative/Fabric/ViewComponentView.h +1 -0
  176. package/Microsoft.ReactNative/Fabric/platform/react/renderer/components/rncore/EventEmitters.h +5 -0
  177. package/Microsoft.ReactNative/Fabric/platform/react/renderer/components/rncore/Props.h +5 -0
  178. package/Microsoft.ReactNative/Fabric/platform/react/renderer/components/slider/SliderMeasurementsManager.cpp +46 -0
  179. package/Microsoft.ReactNative/Fabric/platform/react/renderer/components/slider/SliderMeasurementsManager.h +30 -0
  180. package/Microsoft.ReactNative/Fabric/platform/react/renderer/graphics/Color.cpp +2 -0
  181. package/Microsoft.ReactNative/Fabric/platform/react/renderer/graphics/conversions.h +1 -9
  182. package/Microsoft.ReactNative/Fabric/platform/react/renderer/graphics/platform/cxx/react/renderer/graphics/Color.h +3 -1
  183. package/Microsoft.ReactNative/Fabric/platform/react/renderer/textlayoutmanager/TextLayoutManager.cpp +119 -57
  184. package/Microsoft.ReactNative/Fabric/platform/react/renderer/textlayoutmanager/TextLayoutManager.h +18 -1
  185. package/Microsoft.ReactNative/IViewManager.idl +3 -3
  186. package/Microsoft.ReactNative/Microsoft.ReactNative.vcxproj +13 -107
  187. package/Microsoft.ReactNative/Microsoft.ReactNative.vcxproj.filters +2 -2
  188. package/Microsoft.ReactNative/Modules/AppStateModule.cpp +2 -0
  189. package/Microsoft.ReactNative/Modules/AppStateModule.h +2 -0
  190. package/Microsoft.ReactNative/Modules/CreateModules.cpp +3 -3
  191. package/Microsoft.ReactNative/Modules/NativeUIManager.cpp +7 -5
  192. package/Microsoft.ReactNative/Modules/TimingModule.cpp +2 -2
  193. package/Microsoft.ReactNative/Modules/TimingModule.h +2 -2
  194. package/Microsoft.ReactNative/ReactHost/{ReactContext.cpp → MsoReactContext.cpp} +1 -1
  195. package/Microsoft.ReactNative/ReactHost/{ReactContext.h → MsoReactContext.h} +0 -0
  196. package/Microsoft.ReactNative/ReactHost/ReactInstanceWin.cpp +14 -1
  197. package/Microsoft.ReactNative/ReactHost/ReactInstanceWin.h +1 -1
  198. package/Microsoft.ReactNative/ReactHost/ReactNativeHeaders.h +1 -1
  199. package/Microsoft.ReactNative/ReactRootView.cpp +2 -1
  200. package/Microsoft.ReactNative/RedBox.cpp +3 -2
  201. package/Microsoft.ReactNative/Utils/ValueUtils.cpp +3 -2
  202. package/Microsoft.ReactNative/Views/ControlViewManager.cpp +32 -0
  203. package/Microsoft.ReactNative/Views/ControlViewManager.h +11 -0
  204. package/Microsoft.ReactNative/Views/DevMenu.cpp +2 -2
  205. package/Microsoft.ReactNative/Views/FrameworkElementTransferProperties.cpp +13 -2
  206. package/Microsoft.ReactNative/Views/FrameworkElementViewManager.cpp +149 -22
  207. package/Microsoft.ReactNative/Views/Image/ImageViewManager.cpp +1 -1
  208. package/Microsoft.ReactNative/Views/Image/Microsoft.UI.Composition.Effects_Impl.h +5 -11
  209. package/Microsoft.ReactNative/Views/Image/ReactImage.cpp +2 -1
  210. package/Microsoft.ReactNative/Views/SliderViewManager.cpp +12 -4
  211. package/Microsoft.ReactNative/Views/TextInputViewManager.cpp +1 -1
  212. package/Microsoft.ReactNative/Views/TextViewManager.cpp +2 -2
  213. package/Microsoft.ReactNative/Views/TouchEventHandler.cpp +163 -37
  214. package/Microsoft.ReactNative/Views/TouchEventHandler.h +11 -4
  215. package/Microsoft.ReactNative/Views/ViewPanel.cpp +3 -23
  216. package/Microsoft.ReactNative/Views/ViewPanel.h +2 -3
  217. package/Microsoft.ReactNative/Views/ViewViewManager.cpp +21 -0
  218. package/Microsoft.ReactNative/XamlUIService.cpp +1 -1
  219. package/Microsoft.ReactNative/XamlView.h +8 -3
  220. package/Microsoft.ReactNative.Cxx/CppWinRTIncludes.h +3 -5
  221. package/Microsoft.ReactNative.Cxx/DesktopWindowBridge.h +1 -1
  222. package/Microsoft.ReactNative.Cxx/JSI/JsiAbiApi.cpp +11 -2
  223. package/Microsoft.ReactNative.Cxx/JSI/JsiAbiApi.h +1 -0
  224. package/Microsoft.ReactNative.Cxx/JSI/NodeApiJsiRuntime.cpp +10 -1
  225. package/Microsoft.ReactNative.Cxx/JSValueReader.h +2 -2
  226. package/Microsoft.ReactNative.Cxx/JSValueWriter.h +5 -5
  227. package/Microsoft.ReactNative.Cxx/Microsoft.ReactNative.Cxx.vcxitems +5 -1
  228. package/Microsoft.ReactNative.Cxx/Microsoft.ReactNative.Cxx.vcxitems.filters +2 -3
  229. package/Microsoft.ReactNative.Cxx/NativeModules.h +1 -1
  230. package/Microsoft.ReactNative.Cxx/ReactContext.h +3 -3
  231. package/Microsoft.ReactNative.Cxx/ReactNonAbiValue.h +3 -3
  232. package/Microsoft.ReactNative.Cxx/XamlUtils.h +44 -5
  233. package/Microsoft.ReactNative.Managed/Microsoft.ReactNative.Managed.csproj +0 -6
  234. package/Mso/activeObject/activeObject.h +2 -2
  235. package/Mso/compilerAdapters/cppMacros.h +3 -5
  236. package/Mso/errorCode/errorProvider.h +2 -2
  237. package/Mso/errorCode/maybe.h +4 -4
  238. package/Mso/functional/functor.h +6 -6
  239. package/Mso/functional/functorRef.h +2 -2
  240. package/Mso/future/details/executor.h +2 -2
  241. package/Mso/future/details/futureFuncInl.h +4 -4
  242. package/Mso/future/details/ifuture.h +3 -3
  243. package/Mso/future/details/maybeInvoker.h +6 -6
  244. package/Mso/future/details/promiseGroupInl.h +4 -4
  245. package/Mso/future/details/promiseInl.h +4 -4
  246. package/Mso/future/details/resultTraits.h +4 -4
  247. package/Mso/future/details/whenAllInl.h +1 -1
  248. package/Mso/future/future.h +13 -13
  249. package/Mso/guid/msoGuidDetails.h +1 -1
  250. package/Mso/memoryApi/memoryApi.h +13 -7
  251. package/Mso/motifCpp/gTestAdapter.h +1 -1
  252. package/Mso/motifCpp/testInfo.h +7 -9
  253. package/Mso/object/make.h +8 -8
  254. package/Mso/object/objectRefCount.h +3 -5
  255. package/Mso/object/objectWithWeakRef.h +10 -14
  256. package/Mso/object/queryCast.h +4 -4
  257. package/Mso/object/refCountedObject.h +4 -4
  258. package/Mso/object/unknownObject.h +7 -7
  259. package/Mso/platformAdapters/windowsFirst.h +1 -1
  260. package/Mso/smartPtr/cntPtr.h +8 -8
  261. package/Mso/src/dispatchQueue/uiScheduler_winrt.cpp +2 -2
  262. package/Mso/src/future/futureImpl.h +1 -1
  263. package/Mso/src/memoryApi/memoryApi.cpp +4 -4
  264. package/PropertySheets/CppAppConsumeCSharpModule.props +3 -0
  265. package/PropertySheets/External/Microsoft.ReactNative.WinAppSDK.CSharpApp.props +26 -0
  266. package/PropertySheets/External/Microsoft.ReactNative.WinAppSDK.Common.props +12 -0
  267. package/PropertySheets/Generated/PackageVersion.g.props +3 -3
  268. package/PropertySheets/React.Cpp.props +13 -0
  269. package/PropertySheets/WinUI.props +3 -6
  270. package/ReactCommon/ReactCommon.vcxproj +2 -4
  271. package/ReactCommon/ReactCommon.vcxproj.filters +4 -1
  272. package/ReactCommon/TEMP_UntilReactCommonUpdate/jsi/JSCRuntime.cpp +1480 -0
  273. package/ReactCommon/TEMP_UntilReactCommonUpdate/jsi/jsi/decorator.h +753 -0
  274. package/ReactCommon/TEMP_UntilReactCommonUpdate/jsi/jsi/jsi.h +1331 -0
  275. package/ReactCommon/TEMP_UntilReactCommonUpdate/jsi/jsi/test/testlib.cpp +1431 -0
  276. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/bridging/CallbackWrapper.h +103 -0
  277. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/nativemodule/core/ReactCommon/TurboModule.h +87 -0
  278. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/nativemodule/core/ReactCommon/TurboModuleUtils.h +61 -0
  279. package/ReactCommon/Yoga.cpp +1 -1
  280. package/Scripts/{Microsoft.ReactNative.ProjectReunion.nuspec → Microsoft.ReactNative.WindowsAppSDK.nuspec} +7 -9
  281. package/Scripts/OfficeReact.Win32.nuspec +1 -3
  282. package/Scripts/Tfs/Layout-MSRN-Headers.ps1 +2 -1
  283. package/Scripts/copyRNLibraries.js +8 -8
  284. package/Scripts/just.js +1 -1
  285. package/Scripts/rnw-dependencies.ps1 +41 -10
  286. package/Scripts/run-desktop-integration-tests.js +6 -6
  287. package/Shared/AbiSafe.h +3 -3
  288. package/Shared/BaseScriptStoreImpl.cpp +1 -1
  289. package/Shared/CppRuntimeOptions.h +50 -0
  290. package/Shared/DevSupportManager.cpp +32 -36
  291. package/Shared/DevSupportManager.h +1 -2
  292. package/Shared/HermesRuntimeHolder.cpp +23 -14
  293. package/Shared/HermesRuntimeHolder.h +8 -2
  294. package/Shared/IDevSupportManager.h +1 -2
  295. package/Shared/InspectorPackagerConnection.cpp +7 -5
  296. package/Shared/InspectorPackagerConnection.h +2 -2
  297. package/Shared/JSI/ChakraApi.cpp +0 -1
  298. package/Shared/JSI/ChakraRuntime.cpp +1 -2
  299. package/Shared/JSI/RuntimeHolder.h +2 -0
  300. package/Shared/Modules/HttpModule.cpp +1 -1
  301. package/Shared/Modules/HttpModule.h +2 -2
  302. package/Shared/Modules/WebSocketModule.cpp +1 -1
  303. package/Shared/Modules/WebSocketModule.h +8 -5
  304. package/Shared/{IHttpResource.h → Networking/IHttpResource.h} +4 -4
  305. package/Shared/{IWebSocketResource.h → Networking/IWebSocketResource.h} +2 -2
  306. package/Shared/Networking/OriginPolicy.h +15 -0
  307. package/Shared/Networking/OriginPolicyHttpFilter.cpp +746 -0
  308. package/Shared/Networking/OriginPolicyHttpFilter.h +112 -0
  309. package/Shared/{WinRTHttpResource.cpp → Networking/WinRTHttpResource.cpp} +129 -99
  310. package/Shared/{WinRTHttpResource.h → Networking/WinRTHttpResource.h} +8 -12
  311. package/Shared/Networking/WinRTTypes.h +30 -0
  312. package/Shared/{WinRTWebSocketResource.cpp → Networking/WinRTWebSocketResource.cpp} +2 -2
  313. package/Shared/{WinRTWebSocketResource.h → Networking/WinRTWebSocketResource.h} +3 -3
  314. package/Shared/OInstance.cpp +5 -5
  315. package/Shared/RuntimeOptions.cpp +93 -15
  316. package/Shared/RuntimeOptions.h +22 -9
  317. package/Shared/Shared.vcxitems +122 -7
  318. package/Shared/Shared.vcxitems.filters +40 -21
  319. package/Shared/Threading/BatchingQueueThread.cpp +1 -1
  320. package/Shared/tracing/fbsystrace.h +2 -2
  321. package/codegen/NativeActionSheetManagerSpec.g.h +6 -0
  322. package/codegen/NativeAnimatedModuleSpec.g.h +43 -37
  323. package/codegen/NativeAnimatedTurboModuleSpec.g.h +43 -37
  324. package/codegen/NativePushNotificationManagerIOSSpec.g.h +2 -0
  325. package/codegen/react/components/rnwcore/ComponentDescriptors.h +0 -1
  326. package/codegen/react/components/rnwcore/EventEmitters.cpp +133 -0
  327. package/codegen/react/components/rnwcore/EventEmitters.h +0 -18
  328. package/codegen/react/components/rnwcore/Props.cpp +0 -13
  329. package/codegen/react/components/rnwcore/Props.h +0 -16
  330. package/codegen/react/components/rnwcore/ShadowNodes.cpp +0 -1
  331. package/codegen/react/components/rnwcore/ShadowNodes.h +0 -10
  332. package/include/Shared/cdebug.h +9 -9
  333. package/index.js +30 -25
  334. package/index.windows.js +30 -25
  335. package/jest/preprocessor.js +24 -107
  336. package/jest/preprocessor_DO_NOT_USE.js +122 -0
  337. package/metro.config.js +3 -70
  338. package/package.json +29 -28
  339. package/react-native.config.js +40 -6
  340. package/rntypes/index.d.ts +19 -7
  341. package/stubs/glog/logging.h +1 -1
  342. package/template/cpp-app/src/App.h +0 -4
  343. package/template/cs-app/src/App.xaml.cs +0 -5
  344. package/template/cs-app/src/MainPage.xaml.cs +1 -10
  345. package/template/cs-app-WinAppSDK/MyApp/App.xaml +16 -0
  346. package/template/cs-app-WinAppSDK/MyApp/App.xaml.cs +70 -0
  347. package/template/cs-app-WinAppSDK/MyApp/MainWindow.xaml +14 -0
  348. package/template/cs-app-WinAppSDK/MyApp/MainWindow.xaml.cs +38 -0
  349. package/template/cs-app-WinAppSDK/MyApp/Package.appxmanifest +48 -0
  350. package/template/cs-app-WinAppSDK/MyApp/Properties/PublishProfiles/win10-arm64.pubxml +19 -0
  351. package/template/cs-app-WinAppSDK/MyApp/Properties/PublishProfiles/win10-x64.pubxml +19 -0
  352. package/template/cs-app-WinAppSDK/MyApp/Properties/PublishProfiles/win10-x86.pubxml +19 -0
  353. package/template/cs-app-WinAppSDK/MyApp/Properties/launchSettings.json +10 -0
  354. package/template/cs-app-WinAppSDK/MyApp/app.manifest +15 -0
  355. package/template/cs-app-WinAppSDK/proj/ExperimentalFeatures.props +23 -0
  356. package/template/cs-app-WinAppSDK/proj/MyApp.csproj +49 -0
  357. package/template/cs-app-WinAppSDK/proj/MyApp.sln +43 -0
  358. package/template/cs-app-WinAppSDK/proj/NuGet.Config +17 -0
  359. package/template/metro.devMode.config.js +2 -51
  360. package/typings-index.js +5 -1
  361. package/typings-index.js.map +1 -1
  362. package/Libraries/Components/SegmentedControlIOS/RCTSegmentedControlNativeComponent.js +0 -44
  363. package/Libraries/Components/SegmentedControlIOS/SegmentedControlIOS.android.js +0 -45
  364. package/Libraries/Components/SegmentedControlIOS/SegmentedControlIOS.ios.js +0 -123
  365. package/Libraries/Components/SegmentedControlIOS/SegmentedControlIOS.windows.js +0 -45
  366. package/Libraries/Components/View/ReactNativeViewViewConfig.js +0 -360
  367. package/Libraries/Components/View/ReactNativeViewViewConfig.windows.js +0 -390
  368. package/Libraries/Components/View/ReactNativeViewViewConfigAndroid.js +0 -83
  369. package/Libraries/ReactNative/UIManagerInjection.js +0 -15
  370. package/Libraries/Renderer/implementations/ReactFabric-dev.fb.js +0 -24527
  371. package/Libraries/Renderer/implementations/ReactFabric-prod.fb.js +0 -8309
  372. package/Libraries/Renderer/implementations/ReactFabric-profiling.fb.js +0 -8961
  373. package/Libraries/Renderer/implementations/ReactNativeRenderer-dev.fb.js +0 -24948
  374. package/Libraries/Renderer/implementations/ReactNativeRenderer-prod.fb.js +0 -8400
  375. package/Libraries/Renderer/implementations/ReactNativeRenderer-profiling.fb.js +0 -9049
  376. package/PropertySheets/CppEnablePackageReferences.props +0 -13
  377. package/Shared/cdebug.cpp +0 -6
  378. package/include/Shared/ViewManager.h +0 -34
@@ -0,0 +1,112 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT License.
3
+
4
+ #pragma once
5
+
6
+ #include "OriginPolicy.h"
7
+
8
+ // Windows API
9
+ #include <winrt/Windows.Foundation.h>
10
+ #include <winrt/Windows.Web.Http.Filters.h>
11
+ #include <winrt/Windows.Web.Http.h>
12
+
13
+ // Standard Library
14
+ #include <set>
15
+
16
+ namespace Microsoft::React::Networking {
17
+
18
+ class OriginPolicyHttpFilter
19
+ : public winrt::implements<OriginPolicyHttpFilter, winrt::Windows::Web::Http::Filters::IHttpFilter> {
20
+ public:
21
+ struct ConstWcharComparer {
22
+ bool operator()(const wchar_t *, const wchar_t *) const;
23
+ };
24
+
25
+ private:
26
+ static std::set<const wchar_t *, ConstWcharComparer> s_forbiddenMethods;
27
+ static std::set<const wchar_t *, ConstWcharComparer> s_simpleCorsMethods;
28
+ static std::set<const wchar_t *, ConstWcharComparer> s_simpleCorsRequestHeaderNames;
29
+ static std::set<const wchar_t *, ConstWcharComparer> s_simpleCorsResponseHeaderNames;
30
+ static std::set<const wchar_t *, ConstWcharComparer> s_simpleCorsContentTypeValues;
31
+ static std::set<const wchar_t *, ConstWcharComparer> s_corsForbiddenRequestHeaderNames;
32
+ static std::set<const wchar_t *, ConstWcharComparer> s_corsForbiddenRequestHeaderNamePrefixes;
33
+ static std::set<const wchar_t *, ConstWcharComparer> s_cookieSettingResponseHeaders;
34
+
35
+ // NOTE: Assumes static origin through owning client/resource/module/(React) instance's lifetime.
36
+ static winrt::Windows::Foundation::Uri s_origin;
37
+
38
+ struct AccessControlValues {
39
+ winrt::hstring AllowedOrigin;
40
+ winrt::hstring AllowedCredentials;
41
+ std::set<std::wstring> AllowedHeaders;
42
+ std::set<std::wstring> AllowedMethods;
43
+ std::set<std::wstring> ExposedHeaders;
44
+ size_t MaxAge;
45
+ };
46
+
47
+ winrt::Windows::Web::Http::Filters::IHttpFilter m_innerFilter;
48
+
49
+ public:
50
+ static void SetStaticOrigin(std::string &&url);
51
+
52
+ static bool IsSameOrigin(
53
+ winrt::Windows::Foundation::Uri const &u1,
54
+ winrt::Windows::Foundation::Uri const &u2) noexcept;
55
+
56
+ static winrt::Windows::Foundation::Uri GetOrigin(winrt::Windows::Foundation::Uri const &uri) noexcept;
57
+
58
+ static bool IsSimpleCorsRequest(winrt::Windows::Web::Http::HttpRequestMessage const &request) noexcept;
59
+
60
+ static bool AreSafeRequestHeaders(
61
+ winrt::Windows::Web::Http::Headers::HttpRequestHeaderCollection const &headers) noexcept;
62
+
63
+ static std::set<const wchar_t *> CorsUnsafeNotForbiddenRequestHeaderNames(
64
+ winrt::Windows::Web::Http::Headers::HttpRequestHeaderCollection const &headers) noexcept;
65
+
66
+ static AccessControlValues ExtractAccessControlValues(
67
+ winrt::Windows::Foundation::Collections::IMap<winrt::hstring, winrt::hstring> const &headers);
68
+
69
+ static bool IsCorsSafelistedRequestHeader(winrt::hstring const &name, winrt::hstring const &value) noexcept;
70
+
71
+ static bool IsCorsUnsafeRequestHeaderByte(wchar_t c) noexcept;
72
+
73
+ // Filter out Http-Only cookies from response headers to prevent malicious code from being sent to a malicious server
74
+ static void RemoveHttpOnlyCookiesFromResponseHeaders(
75
+ winrt::Windows::Web::Http::HttpResponseMessage const &response,
76
+ bool removeAll);
77
+
78
+ OriginPolicyHttpFilter(winrt::Windows::Web::Http::Filters::IHttpFilter &&innerFilter);
79
+
80
+ OriginPolicyHttpFilter();
81
+
82
+ OriginPolicy ValidateRequest(winrt::Windows::Web::Http::HttpRequestMessage const &request);
83
+
84
+ void ValidatePreflightResponse(
85
+ winrt::Windows::Web::Http::HttpRequestMessage const &request,
86
+ winrt::Windows::Web::Http::HttpResponseMessage const &response) const;
87
+
88
+ void ValidateResponse(
89
+ winrt::Windows::Web::Http::HttpResponseMessage const &response,
90
+ const OriginPolicy effectivePolicy) const;
91
+
92
+ void ValidateAllowOrigin(
93
+ winrt::hstring const &allowedOrigin,
94
+ winrt::hstring const &allowCredentials,
95
+ winrt::Windows::Foundation::IInspectable const &iArgs) const;
96
+
97
+ winrt::Windows::Foundation::IAsyncOperationWithProgress<
98
+ winrt::Windows::Web::Http::HttpResponseMessage,
99
+ winrt::Windows::Web::Http::HttpProgress>
100
+ SendPreflightAsync(winrt::Windows::Web::Http::HttpRequestMessage const &request) const;
101
+
102
+ #pragma region IHttpFilter
103
+
104
+ winrt::Windows::Foundation::IAsyncOperationWithProgress<
105
+ winrt::Windows::Web::Http::HttpResponseMessage,
106
+ winrt::Windows::Web::Http::HttpProgress>
107
+ SendRequestAsync(winrt::Windows::Web::Http::HttpRequestMessage const &request);
108
+
109
+ #pragma endregion IHttpFilter
110
+ };
111
+
112
+ } // namespace Microsoft::React::Networking
@@ -3,9 +3,14 @@
3
3
 
4
4
  #include "WinRTHttpResource.h"
5
5
 
6
+ #include <CppRuntimeOptions.h>
6
7
  #include <Utils/CppWinrtLessExceptions.h>
7
8
  #include <Utils/WinRTConversions.h>
8
9
  #include <utilities.h>
10
+ #include "OriginPolicyHttpFilter.h"
11
+
12
+ // Boost Libraries
13
+ #include <boost/algorithm/string.hpp>
9
14
 
10
15
  // Windows API
11
16
  #include <winrt/Windows.Security.Cryptography.h>
@@ -21,6 +26,7 @@ using winrt::fire_and_forget;
21
26
  using winrt::hresult_error;
22
27
  using winrt::to_hstring;
23
28
  using winrt::to_string;
29
+ using winrt::Windows::Foundation::IInspectable;
24
30
  using winrt::Windows::Foundation::Uri;
25
31
  using winrt::Windows::Security::Cryptography::CryptographicBuffer;
26
32
  using winrt::Windows::Storage::StorageFile;
@@ -35,7 +41,7 @@ using winrt::Windows::Web::Http::IHttpClient;
35
41
  using winrt::Windows::Web::Http::IHttpContent;
36
42
  using winrt::Windows::Web::Http::Headers::HttpMediaTypeHeaderValue;
37
43
 
38
- namespace Microsoft::React {
44
+ namespace Microsoft::React::Networking {
39
45
 
40
46
  #pragma region WinRTHttpResource
41
47
 
@@ -71,72 +77,18 @@ void WinRTHttpResource::SendRequest(
71
77
  HttpMethod httpMethod{to_hstring(std::move(method))};
72
78
  Uri uri{to_hstring(std::move(url))};
73
79
  HttpRequestMessage request{httpMethod, uri};
74
- HttpMediaTypeHeaderValue contentType{nullptr};
75
- string contentEncoding;
76
- string contentLength;
77
-
78
- // Headers are generally case-insensitive
79
- // https://www.ietf.org/rfc/rfc2616.txt section 4.2
80
- for (auto &header : headers) {
81
- if (_stricmp(header.first.c_str(), "content-type") == 0) {
82
- bool success = HttpMediaTypeHeaderValue::TryParse(to_hstring(header.second), contentType);
83
- if (!success && m_onError) {
84
- return m_onError(requestId, "Failed to parse Content-Type");
85
- }
86
- } else if (_stricmp(header.first.c_str(), "content-encoding") == 0) {
87
- contentEncoding = header.second;
88
- } else if (_stricmp(header.first.c_str(), "content-length") == 0) {
89
- contentLength = header.second;
90
- } else if (_stricmp(header.first.c_str(), "authorization") == 0) {
91
- bool success =
92
- request.Headers().TryAppendWithoutValidation(to_hstring(header.first), to_hstring(header.second));
93
- if (!success && m_onError) {
94
- return m_onError(requestId, "Failed to append Authorization");
95
- }
96
- } else {
97
- request.Headers().Append(to_hstring(header.first), to_hstring(header.second));
98
- }
99
- }
100
-
101
- IHttpContent content{nullptr};
102
- if (BodyData::Type::String == bodyData.Type) {
103
- content = HttpStringContent{to_hstring(bodyData.Data)};
104
- } else if (BodyData::Type::Base64 == bodyData.Type) {
105
- auto buffer = CryptographicBuffer::DecodeFromBase64String(to_hstring(bodyData.Data));
106
- content = HttpBufferContent{buffer};
107
- } else if (BodyData::Type::Uri == bodyData.Type) {
108
- auto file = StorageFile::GetFileFromApplicationUriAsync(Uri{to_hstring(bodyData.Data)}).get();
109
- auto stream = file.OpenReadAsync().get();
110
- content = HttpStreamContent{stream};
111
- } else if (BodyData::Type::Form == bodyData.Type) {
112
- // TODO: Add support
113
- } else {
114
- // BodyData::Type::Empty
115
- // TODO: Error 'cause unsupported??
116
- }
117
-
118
- if (content != nullptr) {
119
- // Attach content headers
120
- if (contentType) {
121
- content.Headers().ContentType(contentType);
122
- }
123
- if (!contentEncoding.empty()) {
124
- if (!content.Headers().ContentEncoding().TryParseAdd(to_hstring(contentEncoding))) {
125
- if (m_onError) {
126
- m_onError(requestId, "Failed to parse Content-Encoding");
127
- }
128
- return;
129
- }
130
- }
131
- if (!contentLength.empty()) {
132
- const auto contentLengthHeader = _atoi64(contentLength.c_str()); // TODO: Alternatives to _atoi64?
133
- content.Headers().ContentLength(contentLengthHeader);
134
- }
135
-
136
- request.Content(content);
137
- }
138
80
 
139
- PerformSendRequest(requestId, std::move(request), responseType == "text");
81
+ auto args = winrt::make<RequestArgs>();
82
+ auto concreteArgs = args.as<RequestArgs>();
83
+ concreteArgs->RequestId = requestId;
84
+ concreteArgs->Headers = std::move(headers);
85
+ concreteArgs->Body = std::move(bodyData);
86
+ concreteArgs->IncrementalUpdates = useIncrementalUpdates;
87
+ concreteArgs->WithCredentials = withCredentials;
88
+ concreteArgs->IsText = responseType == "text";
89
+ concreteArgs->Timeout = timeout;
90
+
91
+ PerformSendRequest(std::move(request), args);
140
92
  } catch (std::exception const &e) {
141
93
  if (m_onError) {
142
94
  m_onError(requestId, e.what());
@@ -151,7 +103,7 @@ void WinRTHttpResource::SendRequest(
151
103
  }
152
104
 
153
105
  void WinRTHttpResource::AbortRequest(int64_t requestId) noexcept /*override*/ {
154
- ResponseType request{nullptr};
106
+ ResponseOperation request{nullptr};
155
107
 
156
108
  {
157
109
  scoped_lock lock{m_mutex};
@@ -183,7 +135,7 @@ void WinRTHttpResource::SetOnResponse(function<void(int64_t requestId, Response
183
135
  m_onResponse = std::move(handler);
184
136
  }
185
137
 
186
- void WinRTHttpResource::SetOnData(function<void(int64_t requestId, std::string &&responseData)> &&handler) noexcept
138
+ void WinRTHttpResource::SetOnData(function<void(int64_t requestId, string &&responseData)> &&handler) noexcept
187
139
  /*override*/ {
188
140
  m_onData = std::move(handler);
189
141
  }
@@ -195,7 +147,7 @@ void WinRTHttpResource::SetOnError(function<void(int64_t requestId, string &&err
195
147
 
196
148
  #pragma endregion IHttpResource
197
149
 
198
- void WinRTHttpResource::TrackResponse(int64_t requestId, ResponseType response) noexcept {
150
+ void WinRTHttpResource::TrackResponse(int64_t requestId, ResponseOperation response) noexcept {
199
151
  scoped_lock lock{m_mutex};
200
152
  m_responses[requestId] = response;
201
153
  }
@@ -205,70 +157,142 @@ void WinRTHttpResource::UntrackResponse(int64_t requestId) noexcept {
205
157
  m_responses.erase(requestId);
206
158
  }
207
159
 
208
- fire_and_forget
209
- WinRTHttpResource::PerformSendRequest(int64_t requestId, HttpRequestMessage &&request, bool textResponse) noexcept {
160
+ fire_and_forget WinRTHttpResource::PerformSendRequest(HttpRequestMessage &&request, IInspectable const &args) noexcept {
210
161
  // Keep references after coroutine suspension.
211
162
  auto self = shared_from_this();
212
163
  auto coRequest = std::move(request);
164
+ auto coArgs = args;
165
+ auto coReqArgs = coArgs.as<RequestArgs>();
213
166
 
214
167
  // Ensure background thread
215
168
  co_await winrt::resume_background();
216
169
 
170
+ HttpMediaTypeHeaderValue contentType{nullptr};
171
+ string contentEncoding;
172
+ string contentLength;
173
+
174
+ // Headers are generally case-insensitive
175
+ // https://www.ietf.org/rfc/rfc2616.txt section 4.2
176
+ for (auto &header : coReqArgs->Headers) {
177
+ if (boost::iequals(header.first.c_str(), "Content-Type")) {
178
+ bool success = HttpMediaTypeHeaderValue::TryParse(to_hstring(header.second), contentType);
179
+ if (!success && m_onError) {
180
+ co_return m_onError(coReqArgs->RequestId, "Failed to parse Content-Type");
181
+ }
182
+ } else if (boost::iequals(header.first.c_str(), "Content-Encoding")) {
183
+ contentEncoding = header.second;
184
+ } else if (boost::iequals(header.first.c_str(), "Content-Length")) {
185
+ contentLength = header.second;
186
+ } else if (boost::iequals(header.first.c_str(), "Authorization")) {
187
+ bool success =
188
+ coRequest.Headers().TryAppendWithoutValidation(to_hstring(header.first), to_hstring(header.second));
189
+ if (!success && m_onError) {
190
+ co_return m_onError(coReqArgs->RequestId, "Failed to append Authorization");
191
+ }
192
+ } else {
193
+ try {
194
+ coRequest.Headers().Append(to_hstring(header.first), to_hstring(header.second));
195
+ } catch (hresult_error const &e) {
196
+ if (self->m_onError) {
197
+ co_return self->m_onError(coReqArgs->RequestId, Utilities::HResultToString(e));
198
+ }
199
+ }
200
+ }
201
+ }
202
+
203
+ IHttpContent content{nullptr};
204
+ if (BodyData::Type::String == coReqArgs->Body.Type) {
205
+ content = HttpStringContent{to_hstring(coReqArgs->Body.Data)};
206
+ } else if (BodyData::Type::Base64 == coReqArgs->Body.Type) {
207
+ auto buffer = CryptographicBuffer::DecodeFromBase64String(to_hstring(coReqArgs->Body.Data));
208
+ content = HttpBufferContent{buffer};
209
+ } else if (BodyData::Type::Uri == coReqArgs->Body.Type) {
210
+ auto file = co_await StorageFile::GetFileFromApplicationUriAsync(Uri{to_hstring(coReqArgs->Body.Data)});
211
+ auto stream = co_await file.OpenReadAsync();
212
+ content = HttpStreamContent{stream};
213
+ } else if (BodyData::Type::Form == coReqArgs->Body.Type) {
214
+ // #9535 - HTTP form data support
215
+ } else {
216
+ // BodyData::Type::Empty
217
+ // TODO: Error => unsupported??
218
+ }
219
+
220
+ if (content != nullptr) {
221
+ // Attach content headers
222
+ if (contentType) {
223
+ content.Headers().ContentType(contentType);
224
+ }
225
+ if (!contentEncoding.empty()) {
226
+ if (!content.Headers().ContentEncoding().TryParseAdd(to_hstring(contentEncoding))) {
227
+ if (m_onError) {
228
+ m_onError(coReqArgs->RequestId, "Failed to parse Content-Encoding");
229
+ }
230
+ co_return;
231
+ }
232
+ }
233
+ if (!contentLength.empty()) {
234
+ const auto contentLengthHeader = _atoi64(contentLength.c_str());
235
+ content.Headers().ContentLength(contentLengthHeader);
236
+ }
237
+
238
+ coRequest.Content(content);
239
+ }
240
+
217
241
  try {
242
+ coRequest.Properties().Insert(L"RequestArgs", coArgs);
218
243
  auto sendRequestOp = self->m_client.SendRequestAsync(coRequest);
244
+ self->TrackResponse(coReqArgs->RequestId, sendRequestOp);
219
245
 
220
- self->TrackResponse(requestId, sendRequestOp);
221
-
222
- co_await lessthrow_await_adapter<ResponseType>{sendRequestOp};
246
+ co_await lessthrow_await_adapter<ResponseOperation>{sendRequestOp};
223
247
  auto result = sendRequestOp.ErrorCode();
224
248
  if (result < 0) {
225
249
  if (self->m_onError) {
226
- self->m_onError(requestId, Utilities::HResultToString(std::move(result)));
250
+ self->m_onError(coReqArgs->RequestId, Utilities::HResultToString(std::move(result)));
227
251
  }
228
- self->UntrackResponse(requestId);
229
- co_return;
252
+ co_return self->UntrackResponse(coReqArgs->RequestId);
230
253
  }
231
254
 
232
255
  auto response = sendRequestOp.GetResults();
233
256
  if (response) {
234
257
  if (self->m_onResponse) {
235
- Headers headers;
258
+ string url = to_string(response.RequestMessage().RequestUri().AbsoluteUri());
236
259
 
237
260
  // Gather headers for both the response content and the response itself
238
261
  // See Invoke-WebRequest PowerShell cmdlet or Chromium response handling
262
+ Headers responseHeaders;
239
263
  for (auto header : response.Headers()) {
240
- headers.emplace(to_string(header.Key()), to_string(header.Value()));
264
+ responseHeaders.emplace(to_string(header.Key()), to_string(header.Value()));
241
265
  }
242
266
  for (auto header : response.Content().Headers()) {
243
- headers.emplace(to_string(header.Key()), to_string(header.Value()));
267
+ responseHeaders.emplace(to_string(header.Key()), to_string(header.Value()));
244
268
  }
245
- string url = to_string(response.RequestMessage().RequestUri().AbsoluteUri());
269
+
246
270
  self->m_onResponse(
247
- requestId, {static_cast<int32_t>(response.StatusCode()), std::move(headers), std::move(url)});
271
+ coReqArgs->RequestId,
272
+ {static_cast<int32_t>(response.StatusCode()), std::move(url), std::move(responseHeaders)});
248
273
  }
249
274
  }
250
275
 
251
- // TODO: Incremental updates?
276
+ // #9534 - Support HTTP incremental updates
252
277
  if (response && response.Content()) {
253
278
  auto inputStream = co_await response.Content().ReadAsInputStreamAsync();
254
279
  auto reader = DataReader{inputStream};
255
280
 
256
- if (textResponse) {
281
+ if (coReqArgs->IsText) {
257
282
  reader.UnicodeEncoding(UnicodeEncoding::Utf8);
258
283
  }
259
284
 
260
- // Only support response sizes up to 10MB.
261
- // TODO: WHY????
285
+ // #9510 - 10mb limit on fetch
262
286
  co_await reader.LoadAsync(10 * 1024 * 1024);
263
287
  auto length = reader.UnconsumedBufferLength();
264
288
 
265
- if (textResponse) {
289
+ if (coReqArgs->IsText) {
266
290
  std::vector<uint8_t> data(length);
267
291
  reader.ReadBytes(data);
268
292
  string responseData = string(Common::Utilities::CheckedReinterpretCast<char *>(data.data()), data.size());
269
293
 
270
294
  if (self->m_onData) {
271
- self->m_onData(requestId, std::move(responseData));
295
+ self->m_onData(coReqArgs->RequestId, std::move(responseData));
272
296
  }
273
297
  } else {
274
298
  auto buffer = reader.ReadBuffer(length);
@@ -276,32 +300,29 @@ WinRTHttpResource::PerformSendRequest(int64_t requestId, HttpRequestMessage &&re
276
300
  auto responseData = to_string(std::wstring_view(data));
277
301
 
278
302
  if (self->m_onData) {
279
- self->m_onData(requestId, std::move(responseData));
303
+ self->m_onData(coReqArgs->RequestId, std::move(responseData));
280
304
  }
281
305
  }
282
306
  } else {
283
307
  if (self->m_onError) {
284
- self->m_onError(requestId, response == nullptr ? "request failed" : "No response content");
308
+ self->m_onError(coReqArgs->RequestId, response == nullptr ? "request failed" : "No response content");
285
309
  }
286
310
  }
287
311
  } catch (std::exception const &e) {
288
312
  if (self->m_onError) {
289
- self->m_onError(requestId, e.what());
313
+ self->m_onError(coReqArgs->RequestId, e.what());
290
314
  }
291
315
  } catch (hresult_error const &e) {
292
316
  if (self->m_onError) {
293
- self->m_onError(requestId, Utilities::HResultToString(e));
317
+ self->m_onError(coReqArgs->RequestId, Utilities::HResultToString(e));
294
318
  }
295
319
  } catch (...) {
296
320
  if (self->m_onError) {
297
- self->m_onError(requestId, "Unhandled exception during request");
321
+ self->m_onError(coReqArgs->RequestId, "Unhandled exception during request");
298
322
  }
299
323
  }
300
324
 
301
- self->UntrackResponse(requestId);
302
-
303
- // TODO: keep? See https://devblogs.microsoft.com/oldnewthing/?p=106160
304
- co_return;
325
+ self->UntrackResponse(coReqArgs->RequestId);
305
326
  }
306
327
 
307
328
  #pragma endregion WinRTHttpResource
@@ -309,9 +330,18 @@ WinRTHttpResource::PerformSendRequest(int64_t requestId, HttpRequestMessage &&re
309
330
  #pragma region IHttpResource
310
331
 
311
332
  /*static*/ shared_ptr<IHttpResource> IHttpResource::Make() noexcept {
312
- return std::make_shared<WinRTHttpResource>();
333
+ if (static_cast<OriginPolicy>(GetRuntimeOptionInt("Http.OriginPolicy")) == OriginPolicy::None) {
334
+ return std::make_shared<WinRTHttpResource>();
335
+ } else {
336
+ auto globalOrigin = GetRuntimeOptionString("Http.GlobalOrigin");
337
+ OriginPolicyHttpFilter::SetStaticOrigin(std::move(globalOrigin));
338
+ auto opFilter = winrt::make<OriginPolicyHttpFilter>();
339
+ auto client = winrt::Windows::Web::Http::HttpClient{opFilter};
340
+
341
+ return std::make_shared<WinRTHttpResource>(std::move(client));
342
+ }
313
343
  }
314
344
 
315
345
  #pragma endregion IHttpResource
316
346
 
317
- } // namespace Microsoft::React
347
+ } // namespace Microsoft::React::Networking
@@ -3,7 +3,9 @@
3
3
 
4
4
  #pragma once
5
5
 
6
- #include <IHttpResource.h>
6
+ #include "IHttpResource.h"
7
+
8
+ #include "WinRTTypes.h"
7
9
 
8
10
  // Windows API
9
11
  #include <winrt/Windows.Web.Http.h>
@@ -11,33 +13,27 @@
11
13
  // Standard Library
12
14
  #include <mutex>
13
15
 
14
- namespace Microsoft::React {
16
+ namespace Microsoft::React::Networking {
15
17
 
16
18
  class WinRTHttpResource : public IHttpResource, public std::enable_shared_from_this<WinRTHttpResource> {
17
- typedef winrt::Windows::Foundation::IAsyncOperationWithProgress<
18
- winrt::Windows::Web::Http::HttpResponseMessage,
19
- winrt::Windows::Web::Http::HttpProgress>
20
- ResponseType;
21
-
22
19
  static int64_t s_lastRequestId;
23
20
 
24
21
  winrt::Windows::Web::Http::IHttpClient m_client;
25
22
  std::mutex m_mutex;
26
- std::unordered_map<int64_t, ResponseType> m_responses;
23
+ std::unordered_map<int64_t, ResponseOperation> m_responses;
27
24
 
28
25
  std::function<void(int64_t requestId)> m_onRequest;
29
26
  std::function<void(int64_t requestId, Response &&response)> m_onResponse;
30
27
  std::function<void(int64_t requestId, std::string &&responseData)> m_onData;
31
28
  std::function<void(int64_t requestId, std::string &&errorMessage /*, bool isTimeout*/)> m_onError;
32
29
 
33
- void TrackResponse(int64_t requestId, ResponseType response) noexcept;
30
+ void TrackResponse(int64_t requestId, ResponseOperation response) noexcept;
34
31
 
35
32
  void UntrackResponse(int64_t requestId) noexcept;
36
33
 
37
34
  winrt::fire_and_forget PerformSendRequest(
38
- int64_t requestId,
39
35
  winrt::Windows::Web::Http::HttpRequestMessage &&request,
40
- bool textResponse) noexcept;
36
+ winrt::Windows::Foundation::IInspectable const &args) noexcept;
41
37
 
42
38
  public:
43
39
  WinRTHttpResource() noexcept;
@@ -68,4 +64,4 @@ class WinRTHttpResource : public IHttpResource, public std::enable_shared_from_t
68
64
  &&handler) noexcept override;
69
65
  };
70
66
 
71
- } // namespace Microsoft::React
67
+ } // namespace Microsoft::React::Networking
@@ -0,0 +1,30 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT License.
3
+
4
+ #pragma once
5
+
6
+ #include "IHttpResource.h"
7
+
8
+ // Windows API
9
+ #include <winrt/Windows.Web.Http.h>
10
+
11
+ // Standard Library
12
+ #include <mutex>
13
+
14
+ namespace Microsoft::React::Networking {
15
+
16
+ struct RequestArgs : public winrt::implements<RequestArgs, winrt::Windows::Foundation::IInspectable> {
17
+ int64_t RequestId;
18
+ IHttpResource::Headers Headers;
19
+ IHttpResource::BodyData Body;
20
+ bool IncrementalUpdates;
21
+ bool WithCredentials;
22
+ bool IsText;
23
+ int64_t Timeout;
24
+ };
25
+
26
+ typedef winrt::Windows::Foundation::
27
+ IAsyncOperationWithProgress<winrt::Windows::Web::Http::HttpResponseMessage, winrt::Windows::Web::Http::HttpProgress>
28
+ ResponseOperation;
29
+
30
+ } // namespace Microsoft::React::Networking
@@ -79,7 +79,7 @@ auto resume_in_queue(const Mso::DispatchQueue &queue) noexcept {
79
79
 
80
80
  } // namespace
81
81
 
82
- namespace Microsoft::React {
82
+ namespace Microsoft::React::Networking {
83
83
 
84
84
  // private
85
85
  WinRTWebSocketResource::WinRTWebSocketResource(
@@ -423,4 +423,4 @@ void WinRTWebSocketResource::SetOnError(function<void(Error &&)> &&handler) noex
423
423
 
424
424
  #pragma endregion IWebSocketResource
425
425
 
426
- } // namespace Microsoft::React
426
+ } // namespace Microsoft::React::Networking
@@ -3,18 +3,18 @@
3
3
 
4
4
  #pragma once
5
5
 
6
- #include <IWebSocketResource.h>
7
6
  #include <dispatchQueue/dispatchQueue.h>
8
7
  #include <eventWaitHandle/eventWaitHandle.h>
9
8
  #include <winrt/Windows.Networking.Sockets.h>
10
9
  #include <winrt/Windows.Storage.Streams.h>
10
+ #include "IWebSocketResource.h"
11
11
 
12
12
  // Standard Library
13
13
  #include <future>
14
14
  #include <mutex>
15
15
  #include <queue>
16
16
 
17
- namespace Microsoft::React {
17
+ namespace Microsoft::React::Networking {
18
18
 
19
19
  class WinRTWebSocketResource : public IWebSocketResource, public std::enable_shared_from_this<WinRTWebSocketResource> {
20
20
  winrt::Windows::Networking::Sockets::IMessageWebSocket m_socket;
@@ -126,4 +126,4 @@ class WinRTWebSocketResource : public IWebSocketResource, public std::enable_sha
126
126
  #pragma endregion IWebSocketResource
127
127
  };
128
128
 
129
- } // namespace Microsoft::React
129
+ } // namespace Microsoft::React::Networking
@@ -37,11 +37,11 @@
37
37
  #endif
38
38
 
39
39
  #include <BatchingMessageQueueThread.h>
40
+ #include <CppRuntimeOptions.h>
40
41
  #include <CreateModules.h>
41
42
  #include <DevSettings.h>
42
43
  #include <DevSupportManager.h>
43
44
  #include <IReactRootView.h>
44
- #include <RuntimeOptions.h>
45
45
  #include <Shlwapi.h>
46
46
  #include <WebSocketJSExecutorFactory.h>
47
47
  #include <safeint.h>
@@ -254,7 +254,7 @@ InstanceImpl::InstanceImpl(
254
254
  #endif
255
255
 
256
256
  if (shouldStartHermesInspector(*m_devSettings)) {
257
- m_devManager->StartInspector(m_devSettings->sourceBundleHost, m_devSettings->sourceBundlePort);
257
+ m_devManager->EnsureHermesInspector(m_devSettings->sourceBundleHost, m_devSettings->sourceBundlePort);
258
258
  }
259
259
 
260
260
  // Default (common) NativeModules
@@ -405,7 +405,7 @@ bool isHBCBundle(const std::string &bundle) {
405
405
  // can be potentially huge.
406
406
  // https://herbsutter.com/2008/04/07/cringe-not-vectors-are-guaranteed-to-be-contiguous/#comment-483
407
407
  auto header = reinterpret_cast<const BundleHeader *>(&bundle[0]);
408
- if (HBCBundleMagicNumber == folly::Endian::little(header->magic)) {
408
+ if (HBCBundleMagicNumber == header->magic32.value) {
409
409
  return true;
410
410
  } else {
411
411
  return false;
@@ -532,8 +532,8 @@ void InstanceImpl::loadBundleInternal(std::string &&jsBundleRelativePath, bool s
532
532
  }
533
533
 
534
534
  InstanceImpl::~InstanceImpl() {
535
- if (m_devSettings->jsiEngineOverride == JSIEngineOverride::Hermes) {
536
- m_devManager->StopInspector();
535
+ if (shouldStartHermesInspector(*m_devSettings) && m_devSettings->jsiRuntimeHolder) {
536
+ m_devSettings->jsiRuntimeHolder->teardown();
537
537
  }
538
538
  m_nativeQueue->quitSynchronous();
539
539
  }