react-native-windows 0.84.0 → 0.85.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.
- package/.flowconfig +1 -5
- package/Directory.Build.props +1 -16
- package/Directory.Build.targets +12 -4
- package/Folly/ThreadNameStub.cpp +4 -6
- package/Libraries/ActionSheetIOS/ActionSheetIOS.js +3 -3
- package/Libraries/Animated/Animated.d.ts +8 -1
- package/Libraries/Animated/AnimatedEvent.js +4 -4
- package/Libraries/Animated/AnimatedImplementation.js +2 -2
- package/Libraries/Animated/animations/Animation.js +3 -3
- package/Libraries/Animated/animations/DecayAnimation.js +4 -4
- package/Libraries/Animated/animations/SpringAnimation.js +5 -5
- package/Libraries/Animated/animations/TimingAnimation.js +5 -5
- package/Libraries/Animated/createAnimatedComponent.js +7 -7
- package/Libraries/Animated/nodes/AnimatedColor.js +2 -2
- package/Libraries/Animated/nodes/AnimatedInterpolation.js +12 -12
- package/Libraries/Animated/nodes/AnimatedNode.js +3 -3
- package/Libraries/Animated/nodes/AnimatedObject.js +3 -3
- package/Libraries/Animated/nodes/AnimatedProps.js +6 -6
- package/Libraries/Animated/nodes/AnimatedStyle.js +7 -7
- package/Libraries/Animated/nodes/AnimatedTransform.js +13 -13
- package/Libraries/Animated/nodes/AnimatedValue.js +1 -1
- package/Libraries/Animated/nodes/AnimatedValueXY.js +1 -1
- package/Libraries/Animated/nodes/AnimatedWithChildren.js +1 -1
- package/Libraries/Animated/useAnimatedColor.d.ts +15 -0
- package/Libraries/Animated/useAnimatedColor.js +25 -0
- package/Libraries/Animated/useAnimatedValueXY.d.ts +15 -0
- package/Libraries/Animated/useAnimatedValueXY.js +26 -0
- package/Libraries/AppState/AppState.js +1 -1
- package/Libraries/BatchedBridge/MessageQueue.js +3 -3
- package/Libraries/BatchedBridge/NativeModules.js +12 -10
- package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.js +30 -26
- package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.windows.js +34 -30
- package/Libraries/Components/ActivityIndicator/ActivityIndicator.js +2 -2
- package/Libraries/Components/Button.js +2 -2
- package/Libraries/Components/Button.windows.js +2 -2
- package/Libraries/Components/DrawerAndroid/DrawerLayoutAndroidTypes.js +2 -2
- package/Libraries/Components/Keyboard/Keyboard.js +6 -6
- package/Libraries/Components/Keyboard/KeyboardAvoidingView.js +1 -1
- package/Libraries/Components/LayoutConformance/LayoutConformance.js +1 -1
- package/Libraries/Components/LayoutConformance/LayoutConformanceNativeComponent.js +1 -1
- package/Libraries/Components/Pressable/Pressable.d.ts +5 -0
- package/Libraries/Components/Pressable/Pressable.js +3 -3
- package/Libraries/Components/Pressable/Pressable.windows.js +3 -3
- package/Libraries/Components/Pressable/useAndroidRippleForView.js +4 -4
- package/Libraries/Components/ProgressBarAndroid/ProgressBarAndroid.js +1 -1
- package/Libraries/Components/ProgressBarAndroid/ProgressBarAndroidTypes.js +3 -3
- package/Libraries/Components/RefreshControl/RefreshControl.js +5 -5
- package/Libraries/Components/RefreshControl/RefreshControl.windows.js +5 -5
- package/Libraries/Components/ScrollView/AndroidHorizontalScrollViewNativeComponent.js +8 -12
- package/Libraries/Components/ScrollView/ScrollView.d.ts +9 -0
- package/Libraries/Components/ScrollView/ScrollView.js +19 -9
- package/Libraries/Components/ScrollView/ScrollView.windows.js +19 -9
- package/Libraries/Components/ScrollView/ScrollViewNativeComponent.js +8 -18
- package/Libraries/Components/ScrollView/ScrollViewNativeComponent.windows.js +8 -18
- package/Libraries/Components/ScrollView/ScrollViewNativeComponentType.js +4 -3
- package/Libraries/Components/ScrollView/ScrollViewStickyHeader.js +1 -1
- package/Libraries/Components/StaticRenderer.js +1 -1
- package/Libraries/Components/StatusBar/StatusBar.js +8 -8
- package/Libraries/Components/Switch/Switch.js +3 -3
- package/Libraries/Components/Switch/Switch.windows.js +3 -3
- package/Libraries/Components/TextInput/AndroidTextInputNativeComponent.js +33 -48
- package/Libraries/Components/TextInput/InputAccessoryView.js +1 -1
- package/Libraries/Components/TextInput/RCTTextInputViewConfig.js +6 -11
- package/Libraries/Components/TextInput/TextInput.flow.js +21 -20
- package/Libraries/Components/TextInput/TextInput.flow.windows.js +23 -22
- package/Libraries/Components/TextInput/TextInput.js +8 -4
- package/Libraries/Components/TextInput/TextInput.windows.js +3 -4
- package/Libraries/Components/TextInput/WindowsTextInputNativeComponent.js +33 -48
- package/Libraries/Components/Touchable/PooledClass.js +1 -1
- package/Libraries/Components/Touchable/Touchable.js +2 -2
- package/Libraries/Components/Touchable/Touchable.windows.js +2 -2
- package/Libraries/Components/Touchable/TouchableBounce.js +4 -4
- package/Libraries/Components/Touchable/TouchableBounce.windows.js +4 -4
- package/Libraries/Components/Touchable/TouchableHighlight.js +8 -8
- package/Libraries/Components/Touchable/TouchableHighlight.windows.js +9 -9
- package/Libraries/Components/Touchable/TouchableNativeFeedback.js +7 -7
- package/Libraries/Components/Touchable/TouchableNativeFeedback.windows.js +7 -7
- package/Libraries/Components/Touchable/TouchableOpacity.js +4 -4
- package/Libraries/Components/Touchable/TouchableOpacity.windows.js +4 -4
- package/Libraries/Components/Touchable/TouchableWithoutFeedback.js +1 -1
- package/Libraries/Components/Touchable/TouchableWithoutFeedback.windows.js +1 -1
- package/Libraries/Components/UnimplementedViews/UnimplementedView.js +1 -1
- package/Libraries/Components/View/ReactNativeStyleAttributes.js +68 -31
- package/Libraries/Components/View/View.windows.js +1 -1
- package/Libraries/Components/View/ViewAccessibility.js +7 -7
- package/Libraries/Components/View/ViewAccessibility.windows.js +7 -7
- package/Libraries/Components/View/ViewPropTypes.js +14 -14
- package/Libraries/Components/View/ViewPropTypes.windows.js +18 -16
- package/Libraries/Core/Devtools/parseHermesStack.js +8 -8
- package/Libraries/Core/Devtools/symbolicateStackTrace.js +2 -2
- package/Libraries/Core/ExceptionsManager.js +2 -2
- package/Libraries/Core/ExtendedError.js +3 -3
- package/Libraries/Core/RawEventEmitter.js +1 -1
- package/Libraries/Core/ReactNativeVersion.js +2 -2
- package/Libraries/Core/Timers/JSTimers.js +3 -2
- package/Libraries/Core/setUpDeveloperTools.js +1 -1
- package/Libraries/Core/setUpErrorHandling.js +4 -2
- package/Libraries/Core/setUpReactDevTools.js +23 -6
- package/Libraries/Core/setUpSegmentFetcher.js +1 -1
- package/Libraries/Debugging/DebuggingOverlay.js +2 -2
- package/Libraries/EventEmitter/NativeEventEmitter.js +7 -9
- package/Libraries/EventEmitter/RCTDeviceEventEmitter.js +1 -1
- package/Libraries/Image/AssetSourceResolver.js +1 -1
- package/Libraries/Image/AssetSourceResolver.windows.js +1 -1
- package/Libraries/Image/Image.android.js +172 -306
- package/Libraries/Image/ImageProps.js +9 -11
- package/Libraries/Image/ImageSource.js +2 -2
- package/Libraries/Image/ImageSourceUtils.js +8 -4
- package/Libraries/Image/ImageTypes.flow.js +2 -2
- package/Libraries/Image/ImageViewNativeComponent.js +7 -16
- package/Libraries/Image/nativeImageSource.js +1 -1
- package/Libraries/Interaction/InteractionManager.js +5 -4
- package/Libraries/Interaction/PanResponder.js +1 -1
- package/Libraries/LayoutAnimation/LayoutAnimation.js +2 -2
- package/Libraries/Linking/Linking.js +1 -1
- package/Libraries/Lists/FlatList.js +3 -3
- package/Libraries/Lists/SectionList.js +1 -1
- package/Libraries/Lists/SectionListModern.js +2 -2
- package/Libraries/LogBox/Data/LogBoxData.js +38 -24
- package/Libraries/LogBox/Data/LogBoxLog.js +43 -112
- package/Libraries/LogBox/Data/parseLogBoxLog.js +21 -117
- package/Libraries/LogBox/LogBox.js +42 -19
- package/Libraries/LogBox/LogBoxInspectorContainer.js +2 -2
- package/Libraries/LogBox/LogBoxNotificationContainer.js +2 -2
- package/Libraries/LogBox/UI/LogBoxButton.js +14 -16
- package/Libraries/LogBox/UI/LogBoxInspector.js +2 -2
- package/Libraries/LogBox/UI/LogBoxInspectorCodeFrame.js +6 -9
- package/Libraries/LogBox/UI/LogBoxInspectorCodeFrame.windows.js +6 -9
- package/Libraries/LogBox/UI/LogBoxInspectorFooter.js +1 -1
- package/Libraries/LogBox/UI/LogBoxInspectorFooterButton.js +1 -1
- package/Libraries/LogBox/UI/LogBoxInspectorHeader.js +1 -1
- package/Libraries/LogBox/UI/LogBoxInspectorHeader.windows.js +1 -1
- package/Libraries/LogBox/UI/LogBoxInspectorHeaderButton.js +1 -1
- package/Libraries/LogBox/UI/LogBoxInspectorMessageHeader.js +10 -15
- package/Libraries/LogBox/UI/LogBoxInspectorReactFrames.js +25 -18
- package/Libraries/LogBox/UI/LogBoxInspectorReactFrames.windows.js +15 -16
- package/Libraries/LogBox/UI/LogBoxInspectorSection.js +5 -7
- package/Libraries/LogBox/UI/LogBoxInspectorSourceMapStatus.js +8 -10
- package/Libraries/LogBox/UI/LogBoxInspectorStackFrame.js +8 -6
- package/Libraries/LogBox/UI/LogBoxInspectorStackFrame.windows.js +3 -5
- package/Libraries/LogBox/UI/LogBoxInspectorStackFrames.js +17 -29
- package/Libraries/LogBox/UI/LogBoxMessage.js +28 -37
- package/Libraries/LogBox/UI/LogBoxNotification.js +1 -1
- package/Libraries/Modal/Modal.d.ts +4 -0
- package/Libraries/Modal/Modal.js +3 -3
- package/Libraries/Modal/Modal.windows.js +7 -3
- package/Libraries/NativeComponent/BaseViewConfig.android.js +28 -52
- package/Libraries/NativeComponent/BaseViewConfig.ios.js +19 -21
- package/Libraries/NativeComponent/BaseViewConfig.windows.js +26 -17
- package/Libraries/Network/RCTNetworking.android.js +1 -1
- package/Libraries/Network/RCTNetworking.ios.js +1 -1
- package/Libraries/Network/RCTNetworking.js.flow +1 -1
- package/Libraries/Network/RCTNetworking.windows.js +1 -1
- package/Libraries/Network/RCTNetworkingEventDefinitions.flow.js +1 -1
- package/Libraries/Network/XMLHttpRequest.js +1 -1
- package/Libraries/PermissionsAndroid/PermissionsAndroid.js +3 -3
- package/Libraries/Pressability/Pressability.js +5 -5
- package/Libraries/Pressability/Pressability.windows.js +5 -5
- package/Libraries/Pressability/PressabilityDebug.js +1 -1
- package/Libraries/Pressability/PressabilityPerformanceEventEmitter.js +1 -1
- package/Libraries/Pressability/usePressability.js +3 -14
- package/Libraries/PushNotificationIOS/PushNotificationIOS.js +2 -2
- package/Libraries/ReactNative/AppContainer-dev.js +18 -1
- package/Libraries/ReactNative/AppContainer.js +1 -1
- package/Libraries/ReactNative/AppRegistry.flow.js +2 -2
- package/Libraries/ReactNative/AppRegistryImpl.js +2 -2
- package/Libraries/ReactNative/FabricUIManager.js +1 -1
- package/Libraries/ReactNative/RendererImplementation.js +4 -4
- package/Libraries/ReactNative/UIManagerProperties.js +1 -1
- package/Libraries/Renderer/implementations/ReactNativeRenderer-dev.js +3 -2
- package/Libraries/Renderer/implementations/ReactNativeRenderer-prod.js +3 -2
- package/Libraries/Renderer/implementations/ReactNativeRenderer-profiling.js +3 -2
- package/Libraries/Renderer/shims/ReactFabric.js +1 -3
- package/Libraries/Renderer/shims/ReactFeatureFlags.js +1 -3
- package/Libraries/Renderer/shims/ReactNative.js +3 -2
- package/Libraries/Renderer/shims/ReactNativeTypes.js +1 -3
- package/Libraries/Renderer/shims/ReactNativeTypes.windows.js +1 -3
- package/Libraries/Renderer/shims/ReactNativeViewConfigRegistry.js +1 -3
- package/Libraries/Renderer/shims/createReactNativeComponentClass.js +1 -3
- package/Libraries/StyleSheet/PointPropType.js +1 -1
- package/Libraries/StyleSheet/Rect.js +1 -1
- package/Libraries/StyleSheet/StyleSheet.d.ts +0 -5
- package/Libraries/StyleSheet/StyleSheet.js +1 -1
- package/Libraries/StyleSheet/StyleSheet.js.flow +1 -1
- package/Libraries/StyleSheet/StyleSheetExports.js +16 -25
- package/Libraries/StyleSheet/StyleSheetExports.js.flow +2 -7
- package/Libraries/StyleSheet/StyleSheetTypes.js +33 -35
- package/Libraries/StyleSheet/private/_StyleSheetTypesOverrides.js +5 -5
- package/Libraries/StyleSheet/private/_TransformStyle.js +7 -7
- package/Libraries/StyleSheet/processBackgroundImage.js +7 -7
- package/Libraries/StyleSheet/processBackgroundPosition.js +4 -4
- package/Libraries/StyleSheet/processBackgroundRepeat.js +4 -4
- package/Libraries/StyleSheet/processBackgroundSize.js +4 -4
- package/Libraries/StyleSheet/processBoxShadow.js +44 -4
- package/Libraries/StyleSheet/processColorArray.js +2 -2
- package/Libraries/StyleSheet/processFilter.js +2 -2
- package/Libraries/Text/Text.js +295 -627
- package/Libraries/Text/Text.windows.js +342 -717
- package/Libraries/Text/TextNativeComponent.js +14 -7
- package/Libraries/Text/TextProps.js +4 -4
- package/Libraries/Text/TextProps.windows.js +4 -4
- package/Libraries/Types/CodegenTypes.js +1 -1
- package/Libraries/Types/CoreEventTypes.js +21 -21
- package/Libraries/Types/CoreEventTypes.windows.js +21 -21
- package/Libraries/Types/ReactDevToolsTypes.js +2 -2
- package/Libraries/Utilities/Appearance.js +6 -1
- package/Libraries/Utilities/Dimensions.js +1 -1
- package/Libraries/Utilities/HMRClient.js +32 -5
- package/Libraries/Utilities/IPerformanceLogger.js +4 -4
- package/Libraries/Utilities/codegenNativeCommands.js +4 -4
- package/Libraries/Utilities/codegenNativeComponent.d.ts +2 -0
- package/Libraries/Utilities/codegenNativeComponent.js +2 -2
- package/Libraries/Utilities/logError.js +1 -1
- package/Libraries/Utilities/stringifySafe.js +3 -3
- package/Libraries/Utilities/useMergeRefs.js +2 -2
- package/Libraries/vendor/core/ErrorUtils.js +4 -4
- package/Libraries/vendor/emitter/EventEmitter.js +16 -20
- package/Microsoft.ReactNative/CallInvoker.cpp +14 -4
- package/Microsoft.ReactNative/Fabric/AbiComponentDescriptor.cpp +1 -1
- package/Microsoft.ReactNative/Fabric/AbiPortalShadowNode.cpp +2 -2
- package/Microsoft.ReactNative/Fabric/AbiViewComponentDescriptor.h +1 -1
- package/Microsoft.ReactNative/Fabric/Composition/BorderPrimitive.cpp +73 -97
- package/Microsoft.ReactNative/Fabric/Composition/BorderPrimitive.h +4 -1
- package/Microsoft.ReactNative/Fabric/Composition/CompositionContextHelper.cpp +0 -1
- package/Microsoft.ReactNative/Fabric/Composition/CompositionEventHandler.cpp +4 -4
- package/Microsoft.ReactNative/Fabric/Composition/CompositionViewComponentView.cpp +135 -18
- package/Microsoft.ReactNative/Fabric/Composition/CompositionViewComponentView.h +10 -0
- package/Microsoft.ReactNative/Fabric/Composition/ImageComponentView.cpp +7 -2
- package/Microsoft.ReactNative/Fabric/Composition/ImageComponentView.h +2 -0
- package/Microsoft.ReactNative/Fabric/Composition/Modal/WindowsModalHostViewComponentView.cpp +63 -15
- package/Microsoft.ReactNative/Fabric/Composition/ParagraphComponentView.cpp +3 -1
- package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputComponentView.cpp +1 -1
- package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputState.cpp +1 -1
- package/Microsoft.ReactNative/Fabric/FabricUIManagerModule.cpp +11 -0
- package/Microsoft.ReactNative/Fabric/FabricUIManagerModule.h +1 -0
- package/Microsoft.ReactNative/Fabric/platform/react/renderer/graphics/HostPlatformColor.h +3 -0
- package/Microsoft.ReactNative/Fabric/platform/react/renderer/graphics/PlatformColorUtils.cpp +0 -3
- package/Microsoft.ReactNative/Fabric/platform/react/renderer/textlayoutmanager/WindowsTextLayoutManager.cpp +2 -7
- package/Microsoft.ReactNative/IReactPackageBuilder.idl +6 -0
- package/Microsoft.ReactNative/Microsoft.ReactNative.vcxproj +1 -61
- package/Microsoft.ReactNative/Microsoft.ReactNative.vcxproj.filters +1 -26
- package/Microsoft.ReactNative/Modules/AlertModule.cpp +2 -1
- package/Microsoft.ReactNative/Modules/AppStateModule.cpp +2 -17
- package/Microsoft.ReactNative/Modules/AppStateModule.h +0 -4
- package/Microsoft.ReactNative/Modules/AppThemeModuleUwp.cpp +0 -2
- package/Microsoft.ReactNative/Modules/AppearanceModule.cpp +16 -15
- package/Microsoft.ReactNative/Modules/AppearanceModule.h +5 -1
- package/Microsoft.ReactNative/Modules/DeviceInfoModule.cpp +2 -7
- package/Microsoft.ReactNative/Modules/DeviceInfoModule.h +0 -1
- package/Microsoft.ReactNative/Modules/I18nManagerModule.h +4 -4
- package/Microsoft.ReactNative/QuirkSettings.cpp +0 -133
- package/Microsoft.ReactNative/QuirkSettings.h +0 -43
- package/Microsoft.ReactNative/QuirkSettings.idl +0 -41
- package/Microsoft.ReactNative/ReactHost/CrashManager.cpp +0 -4
- package/Microsoft.ReactNative/ReactHost/MsoReactContext.cpp +0 -2
- package/Microsoft.ReactNative/ReactHost/React.h +0 -5
- package/Microsoft.ReactNative/ReactHost/ReactHost.cpp +0 -1
- package/Microsoft.ReactNative/ReactHost/ReactInstanceWin.cpp +3 -26
- package/Microsoft.ReactNative/ReactHost/ReactInstanceWin.h +0 -5
- package/Microsoft.ReactNative/ReactHost/React_Win.h +0 -2
- package/Microsoft.ReactNative/ReactNativeAppBuilder.idl +3 -0
- package/Microsoft.ReactNative/ReactPackageBuilder.cpp +7 -0
- package/Microsoft.ReactNative/ReactPackageBuilder.h +1 -0
- package/Microsoft.ReactNative/RedBox.cpp +0 -9
- package/Microsoft.ReactNative/RedBoxHandler.cpp +0 -4
- package/Microsoft.ReactNative/TurboModulesProvider.cpp +5 -10
- package/Microsoft.ReactNative/TurboModulesProvider.h +2 -0
- package/Microsoft.ReactNative/Utils/ValueUtils.cpp +1 -1
- package/Microsoft.ReactNative.Cxx/CppWinRTIncludes.h +0 -7
- package/Microsoft.ReactNative.Cxx/DesktopWindowBridge.h +0 -22
- package/Microsoft.ReactNative.Cxx/ModuleRegistration.cpp +8 -2
- package/Microsoft.ReactNative.Cxx/ModuleRegistration.h +36 -20
- package/Microsoft.ReactNative.Cxx/NamespaceRedirect.h +0 -3
- package/Microsoft.ReactNative.Cxx/NativeModules.h +8 -2
- package/Microsoft.ReactNative.Cxx/XamlUtils.h +0 -9
- package/Microsoft.ReactNative.Managed/ReactContext.cs +0 -9
- package/PropertySheets/Autolink.props +1 -1
- package/PropertySheets/Bundle.props +1 -1
- package/PropertySheets/Codegen.props +1 -1
- package/PropertySheets/Generated/PackageVersion.g.props +3 -3
- package/PropertySheets/NuGet.LockFile.props +8 -0
- package/PropertySheets/React.Cpp.props +4 -4
- package/PropertySheets/ReactNativeArchitecture.props +6 -24
- package/ReactCommon/ReactCommon.vcxproj +5 -6
- package/ReactCommon/TEMP_UntilReactCommonUpdate/jsi/jsi/test/testlib.cpp +1 -1
- package/ReactCommon/TEMP_UntilReactCommonUpdate/jsinspector-modern/NetworkIOAgent.cpp +15 -4
- package/ReactCommon/TEMP_UntilReactCommonUpdate/jsinspector-modern/NetworkIOAgent.h +13 -0
- package/ReactCommon/TEMP_UntilReactCommonUpdate/react/nativemodule/defaults/DefaultTurboModules.cpp +69 -0
- package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/animationbackend/AnimatedPropSerializer.cpp +717 -0
- package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/components/text/ParagraphShadowNode.cpp +10 -10
- package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/components/view/AccessibilityPrimitives.h +2 -21
- package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/components/view/TouchEventEmitter.cpp +151 -0
- package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/components/view/TouchEventEmitter.h +50 -0
- package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/mapbuffer/MapBuffer.cpp +178 -0
- package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/uimanager/UIManager.cpp +69 -39
- package/Scripts/OfficeReact.Win32.nuspec +0 -1
- package/Scripts/Tfs/Layout-Desktop-Headers.ps1 +4 -39
- package/Scripts/creaternwapp.cmd +1 -9
- package/Scripts/creaternwlib.cmd +4 -24
- package/Shared/DevSettings.h +0 -3
- package/Shared/Networking/WinRTWebSocketResource.cpp +23 -408
- package/Shared/Networking/WinRTWebSocketResource.h +3 -119
- package/Shared/Shared.vcxitems +63 -38
- package/Shared/Shared.vcxitems.filters +54 -0
- package/Shared/Utils.cpp +0 -88
- package/Shared/Utils.h +0 -14
- package/Shared/WebSocketResourceFactory.cpp +28 -0
- package/Shared/tracing/fbsystrace.h +1 -0
- package/codegen/NativeReactNativeFeatureFlagsSpec.g.h +172 -160
- package/codegen/react/components/rnwcore/ModalHostView.g.h +8 -0
- package/codegen/react/components/rnwcore/Props.cpp +17 -7
- package/codegen/react/components/rnwcore/Props.h +3 -1
- package/codegen/react/components/rnwcore/VirtualViewExperimental.g.h +4 -4
- package/codegen/rnwcoreJSI.h +93 -77
- package/index.js +9 -0
- package/index.windows.js +9 -0
- package/jest/RefreshControlMock.js +2 -2
- package/jest/assetFileTransformer.js +8 -3
- package/jest/mockComponent.js +3 -4
- package/jest/mockNativeComponent.js +1 -1
- package/jest/mocks/ActivityIndicator.js +2 -2
- package/jest/mocks/Image.js +2 -2
- package/jest/mocks/Modal.js +2 -2
- package/jest/mocks/RefreshControl.js +3 -3
- package/jest/mocks/RendererProxy.js +2 -2
- package/jest/mocks/ScrollView.js +5 -5
- package/jest/mocks/Text.js +2 -2
- package/jest/mocks/TextInput.js +2 -2
- package/jest/mocks/View.js +2 -2
- package/jest/mocks/ViewNativeComponent.js +1 -1
- package/jest/mocks/requireNativeComponent.js +1 -1
- package/jest/mocks/useColorScheme.js +1 -1
- package/jest/setup.js +68 -31
- package/package.json +27 -22
- package/src/private/animated/NativeAnimatedHelper.js +2 -2
- package/src/private/animated/createAnimatedPropsMemoHook.js +19 -19
- package/src/private/components/virtualview/VirtualView.js +14 -21
- package/src/private/components/virtualview/VirtualViewExperimentalNativeComponent.js +11 -10
- package/src/private/components/virtualview/VirtualViewNativeComponent.js +4 -4
- package/src/private/devsupport/devmenu/elementinspector/BorderBox.js +2 -2
- package/src/private/devsupport/devmenu/elementinspector/BoxInspector.js +3 -3
- package/src/private/devsupport/devmenu/elementinspector/ElementBox.js +4 -4
- package/src/private/devsupport/devmenu/elementinspector/ElementProperties.js +1 -1
- package/src/private/devsupport/devmenu/elementinspector/Inspector.js +39 -17
- package/src/private/devsupport/devmenu/elementinspector/InspectorOverlay.js +15 -3
- package/src/private/devsupport/devmenu/elementinspector/InspectorPanel.js +2 -2
- package/src/private/devsupport/devmenu/elementinspector/ReactDevToolsOverlay.js +2 -8
- package/src/private/devsupport/devmenu/elementinspector/StyleInspector.js +1 -1
- package/src/private/devsupport/devmenu/elementinspector/resolveBoxStyle.js +1 -1
- package/src/private/devsupport/devmenu/elementinspector/useExternalInspection.js +102 -0
- package/src/private/devsupport/rndevtools/FuseboxSessionObserver.js +12 -25
- package/src/private/devsupport/rndevtools/GlobalStateObserver.js +56 -0
- package/src/private/devsupport/rndevtools/TracingStateObserver.js +28 -0
- package/src/private/featureflags/ReactNativeFeatureFlags.js +71 -79
- package/src/private/featureflags/ReactNativeFeatureFlagsBase.js +2 -2
- package/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js +14 -12
- package/src/private/setup/setUpDefaultReactNativeEnvironment.js +6 -0
- package/src/private/specs_DEPRECATED/components/ActivityIndicatorViewNativeComponent.js +1 -1
- package/src/private/specs_DEPRECATED/components/AndroidDrawerLayoutNativeComponent.js +3 -3
- package/src/private/specs_DEPRECATED/components/AndroidHorizontalScrollContentViewNativeComponent.js +1 -1
- package/src/private/specs_DEPRECATED/components/AndroidSwipeRefreshLayoutNativeComponent.js +2 -2
- package/src/private/specs_DEPRECATED/components/AndroidSwitchNativeComponent.js +2 -2
- package/src/private/specs_DEPRECATED/components/DebuggingOverlayNativeComponent.js +3 -3
- package/src/private/specs_DEPRECATED/components/ProgressBarAndroidNativeComponent.js +1 -1
- package/src/private/specs_DEPRECATED/components/PullToRefreshViewNativeComponent.js +1 -1
- package/src/private/specs_DEPRECATED/components/RCTInputAccessoryViewNativeComponent.js +1 -1
- package/src/private/specs_DEPRECATED/components/RCTModalHostViewNativeComponent.js +7 -3
- package/src/private/specs_DEPRECATED/components/RCTSafeAreaViewNativeComponent.js +1 -1
- package/src/private/specs_DEPRECATED/components/SwitchNativeComponent.js +2 -2
- package/src/private/specs_DEPRECATED/components/UnimplementedNativeViewNativeComponent.js +1 -1
- package/src/private/specs_DEPRECATED/modules/NativeImageLoaderIOS.js +1 -1
- package/src/private/styles/composeStyles.js +1 -1
- package/src/private/utilities/toError.js +27 -0
- package/src/private/utilities/toExtendedError.js +30 -0
- package/src/private/webapis/dom/events/Event.js +1 -1
- package/src/private/webapis/dom/events/EventHandlerAttributes.js +2 -2
- package/src/private/webapis/dom/events/EventTarget.js +3 -3
- package/src/private/webapis/dom/events/internals/EventInternals.js +2 -2
- package/src/private/webapis/dom/nodes/ReadOnlyElement.js +1 -1
- package/src/private/webapis/dom/nodes/ReadOnlyNode.js +2 -2
- package/src/private/webapis/dom/nodes/specs/NativeDOM.js +14 -14
- package/src/private/webapis/dom/oldstylecollections/HTMLCollection.js +2 -2
- package/src/private/webapis/dom/oldstylecollections/NodeList.js +2 -2
- package/src/private/webapis/geometry/DOMRectList.js +2 -2
- package/src/private/webapis/intersectionobserver/IntersectionObserver.js +8 -8
- package/src/private/webapis/intersectionobserver/specs/NativeIntersectionObserver.js +6 -6
- package/src/private/webapis/mutationobserver/MutationObserver.js +2 -2
- package/src/private/webapis/mutationobserver/MutationRecord.js +2 -2
- package/src/private/webapis/mutationobserver/internals/MutationObserverManager.js +1 -1
- package/src/private/webapis/mutationobserver/specs/NativeMutationObserver.js +3 -3
- package/src/private/webapis/performance/LongTasks.js +3 -3
- package/src/private/webapis/performance/Performance.js +4 -4
- package/src/private/webapis/performance/PerformanceEntry.js +1 -1
- package/src/private/webapis/performance/PerformanceObserver.js +2 -2
- package/src/private/webapis/performance/specs/NativePerformance.js +8 -8
- package/src/private/webapis/structuredClone/structuredClone.js +2 -2
- package/src/types/globals.d.ts +4 -4
- package/template/cpp-lib/proj/MyLib.sln +0 -33
- package/template/cpp-lib/proj/MyLib.vcxproj +1 -1
- package/template/cs-lib/proj/MyLib.sln +0 -33
- package/template/metro.config.js +12 -2
- package/templates/cpp-app/metro.config.js +12 -2
- package/templates/cpp-app/windows/MyApp/MyApp.cpp +9 -6
- package/templates/cpp-app/windows/MyApp/MyApp.vcxproj +1 -1
- package/templates/cpp-app/windows/MyApp.sln +0 -33
- package/templates/cpp-lib/example/metro.config.js +12 -2
- package/templates/cpp-lib/windows/MyLib/MyLib.vcxproj +1 -1
- package/templates/cpp-lib/windows/MyLib.sln +0 -33
- package/types/index.d.ts +2 -0
- package/Folly/.clang-format +0 -2
- package/Folly/Folly.natvis +0 -25
- package/Folly/Folly.vcxproj +0 -378
- package/Folly/Folly.vcxproj.filters +0 -558
- package/Folly/TEMP_UntilFollyUpdate/ConstexprMath.h +0 -978
- package/Folly/TEMP_UntilFollyUpdate/Conv.cpp +0 -1205
- package/Folly/TEMP_UntilFollyUpdate/chrono/Hardware.h +0 -155
- package/Folly/TEMP_UntilFollyUpdate/concurrency/CacheLocality.cpp +0 -633
- package/Folly/TEMP_UntilFollyUpdate/json/dynamic-inl.h +0 -1438
- package/Folly/TEMP_UntilFollyUpdate/json/json.cpp +0 -1118
- package/Folly/TEMP_UntilFollyUpdate/lang/SafeAssert.h +0 -188
- package/Folly/TEMP_UntilFollyUpdate/lang/ToAscii.cpp +0 -348
- package/Folly/TEMP_UntilFollyUpdate/lang/ToAscii.h +0 -182
- package/Folly/TEMP_UntilFollyUpdate/portability/Unistd.cpp +0 -33
- package/Folly/cgmanifest.json +0 -25
- package/Libraries/Components/View/ReactNativeViewAttributes.js +0 -60
- package/Libraries/Components/View/ReactNativeViewAttributes.windows.js +0 -64
- package/Libraries/Image/TextInlineImageNativeComponent.js +0 -49
- package/Microsoft.ReactNative/Fabric/Composition/CompositionContextHelper_emptyimpl.cpp +0 -75
- package/Microsoft.ReactNative/Fabric/Composition/CompositionUIService_emptyimpl.cpp +0 -27
- package/Microsoft.ReactNative/Fabric/Composition/Theme_emptyimpl.cpp +0 -81
- package/Microsoft.ReactNative/Modules/CreateModules.cpp +0 -24
- package/Microsoft.ReactNative/ReactSupport.cpp +0 -221
- package/Microsoft.ReactNative/ReactSupport.h +0 -13
- package/Microsoft.ReactNative/Utils/UwpPreparedScriptStore.cpp +0 -107
- package/Microsoft.ReactNative/Utils/UwpPreparedScriptStore.h +0 -62
- package/Microsoft.ReactNative/Utils/UwpScriptStore.cpp +0 -56
- package/Microsoft.ReactNative/Utils/UwpScriptStore.h +0 -23
- package/Microsoft.ReactNative/XamlUIService.cpp +0 -68
- package/Microsoft.ReactNative/XamlUIService.h +0 -37
- package/Microsoft.ReactNative/XamlUIService.idl +0 -53
- package/ReactCommon/TEMP_UntilReactCommonUpdate/cxxreact/CxxNativeModule.cpp +0 -259
- package/ReactCommon/TEMP_UntilReactCommonUpdate/cxxreact/Instance.cpp +0 -381
- package/ReactCommon/TEMP_UntilReactCommonUpdate/cxxreact/JSIndexedRAMBundle.cpp +0 -145
- package/ReactCommon/TEMP_UntilReactCommonUpdate/cxxreact/MethodCall.cpp +0 -100
- package/ReactCommon/TEMP_UntilReactCommonUpdate/cxxreact/ModuleRegistry.cpp +0 -256
- package/ReactCommon/TEMP_UntilReactCommonUpdate/cxxreact/NativeToJsBridge.cpp +0 -363
- package/ReactCommon/TEMP_UntilReactCommonUpdate/cxxreact/RAMBundleRegistry.cpp +0 -93
- package/ReactCommon/TEMP_UntilReactCommonUpdate/cxxreact/ReactMarker.cpp +0 -148
- package/ReactCommon/TEMP_UntilReactCommonUpdate/cxxreact/TraceSection.h +0 -190
- package/ReactCommon/TEMP_UntilReactCommonUpdate/jsiexecutor/jsireact/JSINativeModules.cpp +0 -123
- package/ReactCommon/TEMP_UntilReactCommonUpdate/react/nativemodule/core/ReactCommon/TurboModuleWithJSIBindings.cpp +0 -27
- package/ReactCommon/TEMP_UntilReactCommonUpdate/react/nativemodule/webperformance/NativePerformance.cpp +0 -414
- package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/components/text/platform/android/react/renderer/components/text/ParagraphState.h +0 -91
- package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/core/EventDispatcher.cpp +0 -80
- package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/core/EventQueueProcessor.cpp +0 -138
- package/fmt/.clang-format +0 -2
- package/fmt/cgmanifest.json +0 -15
- package/fmt/fmt.vcxproj +0 -153
- package/fmt/fmt.vcxproj.filters +0 -59
- package/fmt/pch.cpp +0 -4
- package/fmt/pch.h +0 -2
|
@@ -24,8 +24,6 @@ using Microsoft::Common::Utilities::CheckedReinterpretCast;
|
|
|
24
24
|
using Mso::DispatchQueue;
|
|
25
25
|
|
|
26
26
|
using std::function;
|
|
27
|
-
using std::lock_guard;
|
|
28
|
-
using std::mutex;
|
|
29
27
|
using std::string;
|
|
30
28
|
using std::vector;
|
|
31
29
|
|
|
@@ -33,8 +31,6 @@ using winrt::fire_and_forget;
|
|
|
33
31
|
using winrt::hresult;
|
|
34
32
|
using winrt::hresult_error;
|
|
35
33
|
using winrt::hstring;
|
|
36
|
-
using winrt::resume_background;
|
|
37
|
-
using winrt::resume_on_signal;
|
|
38
34
|
using winrt::Windows::Foundation::IAsyncAction;
|
|
39
35
|
using winrt::Windows::Foundation::Uri;
|
|
40
36
|
using winrt::Windows::Networking::Sockets::IMessageWebSocket;
|
|
@@ -93,9 +89,9 @@ DispatchQueue GetCurrentOrSerialQueue() noexcept {
|
|
|
93
89
|
|
|
94
90
|
namespace Microsoft::React::Networking {
|
|
95
91
|
|
|
96
|
-
#pragma region
|
|
92
|
+
#pragma region WinRTWebSocketResource
|
|
97
93
|
|
|
98
|
-
|
|
94
|
+
WinRTWebSocketResource::WinRTWebSocketResource(
|
|
99
95
|
IMessageWebSocket &&socket,
|
|
100
96
|
IDataWriter &&writer,
|
|
101
97
|
vector<ChainValidationResult> &&certExceptions,
|
|
@@ -110,22 +106,22 @@ WinRTWebSocketResource2::WinRTWebSocketResource2(
|
|
|
110
106
|
}
|
|
111
107
|
|
|
112
108
|
// private
|
|
113
|
-
|
|
109
|
+
WinRTWebSocketResource::WinRTWebSocketResource(
|
|
114
110
|
IMessageWebSocket &&socket,
|
|
115
111
|
vector<ChainValidationResult> &&certExceptions)
|
|
116
|
-
:
|
|
112
|
+
: WinRTWebSocketResource(
|
|
117
113
|
std::move(socket),
|
|
118
114
|
DataWriter{socket.OutputStream()},
|
|
119
115
|
std::move(certExceptions),
|
|
120
116
|
GetCurrentOrSerialQueue()) {}
|
|
121
117
|
|
|
122
|
-
|
|
123
|
-
:
|
|
118
|
+
WinRTWebSocketResource::WinRTWebSocketResource(vector<ChainValidationResult> &&certExceptions)
|
|
119
|
+
: WinRTWebSocketResource(MessageWebSocket{}, std::move(certExceptions)) {}
|
|
124
120
|
|
|
125
|
-
|
|
121
|
+
WinRTWebSocketResource::~WinRTWebSocketResource() noexcept /*override*/
|
|
126
122
|
{}
|
|
127
123
|
|
|
128
|
-
void
|
|
124
|
+
void WinRTWebSocketResource::Fail(string &&message, ErrorType type) noexcept {
|
|
129
125
|
auto self = shared_from_this();
|
|
130
126
|
|
|
131
127
|
self->m_backgroundQueue.Post([self, message = std::move(message), type]() {
|
|
@@ -138,15 +134,15 @@ void WinRTWebSocketResource2::Fail(string &&message, ErrorType type) noexcept {
|
|
|
138
134
|
});
|
|
139
135
|
}
|
|
140
136
|
|
|
141
|
-
void
|
|
137
|
+
void WinRTWebSocketResource::Fail(hresult &&error, ErrorType type) noexcept {
|
|
142
138
|
Fail(Utilities::HResultToString(std::move(error)), type);
|
|
143
139
|
}
|
|
144
140
|
|
|
145
|
-
void
|
|
141
|
+
void WinRTWebSocketResource::Fail(hresult_error const &error, ErrorType type) noexcept {
|
|
146
142
|
Fail(Utilities::HResultToString(error), type);
|
|
147
143
|
}
|
|
148
144
|
|
|
149
|
-
void
|
|
145
|
+
void WinRTWebSocketResource::OnMessageReceived(
|
|
150
146
|
IMessageWebSocket const &,
|
|
151
147
|
IMessageWebSocketMessageReceivedEventArgs const &args) {
|
|
152
148
|
auto self = shared_from_this();
|
|
@@ -205,7 +201,7 @@ void WinRTWebSocketResource2::OnMessageReceived(
|
|
|
205
201
|
});
|
|
206
202
|
}
|
|
207
203
|
|
|
208
|
-
void
|
|
204
|
+
void WinRTWebSocketResource::OnClosed(IWebSocket const &sender, IWebSocketClosedEventArgs const &args) {
|
|
209
205
|
auto self = shared_from_this();
|
|
210
206
|
|
|
211
207
|
self->m_backgroundQueue.Post([self]() { self->m_readyState = ReadyState::Closed; });
|
|
@@ -217,7 +213,7 @@ void WinRTWebSocketResource2::OnClosed(IWebSocket const &sender, IWebSocketClose
|
|
|
217
213
|
});
|
|
218
214
|
}
|
|
219
215
|
|
|
220
|
-
fire_and_forget
|
|
216
|
+
fire_and_forget WinRTWebSocketResource::PerformConnect(Uri &&uri) noexcept {
|
|
221
217
|
auto self = shared_from_this();
|
|
222
218
|
auto movedUri = std::move(uri);
|
|
223
219
|
|
|
@@ -251,7 +247,7 @@ fire_and_forget WinRTWebSocketResource2::PerformConnect(Uri &&uri) noexcept {
|
|
|
251
247
|
});
|
|
252
248
|
}
|
|
253
249
|
|
|
254
|
-
fire_and_forget
|
|
250
|
+
fire_and_forget WinRTWebSocketResource::PerformClose() noexcept {
|
|
255
251
|
auto self = shared_from_this();
|
|
256
252
|
|
|
257
253
|
co_await resume_in_queue(self->m_backgroundQueue);
|
|
@@ -274,7 +270,7 @@ fire_and_forget WinRTWebSocketResource2::PerformClose() noexcept {
|
|
|
274
270
|
});
|
|
275
271
|
}
|
|
276
272
|
|
|
277
|
-
fire_and_forget
|
|
273
|
+
fire_and_forget WinRTWebSocketResource::EnqueueWrite(string &&message, bool isBinary) noexcept {
|
|
278
274
|
auto self = shared_from_this();
|
|
279
275
|
string coMessage = std::move(message);
|
|
280
276
|
|
|
@@ -289,7 +285,7 @@ fire_and_forget WinRTWebSocketResource2::EnqueueWrite(string &&message, bool isB
|
|
|
289
285
|
});
|
|
290
286
|
}
|
|
291
287
|
|
|
292
|
-
IAsyncAction
|
|
288
|
+
IAsyncAction WinRTWebSocketResource::PerformWrite(string &&message, bool isBinary) noexcept {
|
|
293
289
|
auto self = shared_from_this();
|
|
294
290
|
|
|
295
291
|
try {
|
|
@@ -331,7 +327,7 @@ IAsyncAction WinRTWebSocketResource2::PerformWrite(string &&message, bool isBina
|
|
|
331
327
|
|
|
332
328
|
#pragma region IWebSocketResource
|
|
333
329
|
|
|
334
|
-
void
|
|
330
|
+
void WinRTWebSocketResource::Connect(string &&url, const Protocols &protocols, const Options &options) noexcept {
|
|
335
331
|
// Register MessageReceived BEFORE calling Connect
|
|
336
332
|
// https://learn.microsoft.com/en-us/uwp/api/windows.networking.sockets.messagewebsocket.messagereceived?view=winrt-22621
|
|
337
333
|
m_socket.MessageReceived([self = shared_from_this()](
|
|
@@ -385,394 +381,17 @@ void WinRTWebSocketResource2::Connect(string &&url, const Protocols &protocols,
|
|
|
385
381
|
PerformConnect(std::move(uri));
|
|
386
382
|
}
|
|
387
383
|
|
|
388
|
-
void
|
|
389
|
-
|
|
390
|
-
void WinRTWebSocketResource2::Send(string &&message) noexcept {
|
|
391
|
-
EnqueueWrite(std::move(message), false);
|
|
392
|
-
}
|
|
393
|
-
|
|
394
|
-
void WinRTWebSocketResource2::SendBinary(string &&base64String) noexcept {
|
|
395
|
-
EnqueueWrite(std::move(base64String), true);
|
|
396
|
-
}
|
|
397
|
-
|
|
398
|
-
void WinRTWebSocketResource2::Close(CloseCode code, const string &reason) noexcept {
|
|
399
|
-
m_closeCode = code;
|
|
400
|
-
m_closeReason = reason;
|
|
401
|
-
PerformClose();
|
|
402
|
-
}
|
|
403
|
-
|
|
404
|
-
IWebSocketResource::ReadyState WinRTWebSocketResource2::GetReadyState() const noexcept {
|
|
405
|
-
return m_readyState;
|
|
406
|
-
}
|
|
407
|
-
|
|
408
|
-
void WinRTWebSocketResource2::SetOnConnect(function<void()> &&handler) noexcept {
|
|
409
|
-
m_connectHandler = std::move(handler);
|
|
410
|
-
}
|
|
411
|
-
|
|
412
|
-
void WinRTWebSocketResource2::SetOnPing(function<void()> && /*handler*/) noexcept {}
|
|
413
|
-
|
|
414
|
-
void WinRTWebSocketResource2::SetOnSend(function<void(size_t)> && /*handler*/) noexcept {}
|
|
415
|
-
|
|
416
|
-
void WinRTWebSocketResource2::SetOnMessage(function<void(size_t, const string &, bool isBinary)> &&handler) noexcept {
|
|
417
|
-
m_readHandler = std::move(handler);
|
|
418
|
-
}
|
|
419
|
-
|
|
420
|
-
void WinRTWebSocketResource2::SetOnClose(function<void(CloseCode, const string &)> &&handler) noexcept {
|
|
421
|
-
m_closeHandler = std::move(handler);
|
|
422
|
-
}
|
|
423
|
-
|
|
424
|
-
void WinRTWebSocketResource2::SetOnError(function<void(Error &&)> &&handler) noexcept {
|
|
425
|
-
m_errorHandler = std::move(handler);
|
|
426
|
-
}
|
|
427
|
-
|
|
428
|
-
#pragma endregion IWebSocketResource
|
|
429
|
-
|
|
430
|
-
#pragma endregion WinRTWebSocketResource2
|
|
431
|
-
|
|
432
|
-
#pragma region Legacy resource
|
|
433
|
-
// private
|
|
434
|
-
WinRTWebSocketResource::WinRTWebSocketResource(
|
|
435
|
-
IMessageWebSocket &&socket,
|
|
436
|
-
vector<ChainValidationResult> &&certExceptions)
|
|
437
|
-
: WinRTWebSocketResource(std::move(socket), DataWriter{socket.OutputStream()}, std::move(certExceptions)) {}
|
|
438
|
-
|
|
439
|
-
WinRTWebSocketResource::WinRTWebSocketResource(
|
|
440
|
-
IMessageWebSocket &&socket,
|
|
441
|
-
IDataWriter &&writer,
|
|
442
|
-
vector<ChainValidationResult> &&certExceptions)
|
|
443
|
-
: m_socket{std::move(socket)}, m_writer{std::move(writer)} {
|
|
444
|
-
for (const auto &certException : certExceptions) {
|
|
445
|
-
m_socket.Control().IgnorableServerCertificateErrors().Append(certException);
|
|
446
|
-
}
|
|
447
|
-
}
|
|
448
|
-
|
|
449
|
-
WinRTWebSocketResource::WinRTWebSocketResource(vector<ChainValidationResult> &&certExceptions)
|
|
450
|
-
: WinRTWebSocketResource(MessageWebSocket{}, std::move(certExceptions)) {}
|
|
451
|
-
|
|
452
|
-
WinRTWebSocketResource::~WinRTWebSocketResource() noexcept /*override*/
|
|
453
|
-
{
|
|
454
|
-
Close(CloseCode::GoingAway, "Disposed");
|
|
455
|
-
|
|
456
|
-
m_closePerformed.Wait();
|
|
457
|
-
}
|
|
458
|
-
|
|
459
|
-
#pragma region Private members
|
|
460
|
-
|
|
461
|
-
IAsyncAction WinRTWebSocketResource::PerformConnect(Uri &&uri) noexcept {
|
|
462
|
-
auto self = shared_from_this();
|
|
463
|
-
auto coUri = std::move(uri);
|
|
464
|
-
|
|
465
|
-
co_await resume_background();
|
|
466
|
-
|
|
467
|
-
try {
|
|
468
|
-
auto async = self->m_socket.ConnectAsync(coUri);
|
|
469
|
-
|
|
470
|
-
co_await lessthrow_await_adapter<IAsyncAction>{async};
|
|
471
|
-
|
|
472
|
-
auto result = async.ErrorCode();
|
|
473
|
-
if (result >= 0) {
|
|
474
|
-
self->m_readyState = ReadyState::Open;
|
|
475
|
-
if (self->m_connectHandler) {
|
|
476
|
-
self->m_connectHandler();
|
|
477
|
-
}
|
|
478
|
-
} else {
|
|
479
|
-
if (self->m_errorHandler) {
|
|
480
|
-
self->m_errorHandler({Utilities::HResultToString(std::move(result)), ErrorType::Connection});
|
|
481
|
-
}
|
|
482
|
-
}
|
|
483
|
-
} catch (hresult_error const &e) {
|
|
484
|
-
if (self->m_errorHandler) {
|
|
485
|
-
self->m_errorHandler({Utilities::HResultToString(e), ErrorType::Connection});
|
|
486
|
-
}
|
|
487
|
-
}
|
|
488
|
-
|
|
489
|
-
SetEvent(self->m_connectPerformed.get());
|
|
490
|
-
self->m_connectPerformedPromise.set_value();
|
|
491
|
-
self->m_connectRequested = false;
|
|
492
|
-
}
|
|
493
|
-
|
|
494
|
-
fire_and_forget WinRTWebSocketResource::PerformPing() noexcept {
|
|
495
|
-
auto self = shared_from_this();
|
|
496
|
-
|
|
497
|
-
co_await resume_background();
|
|
498
|
-
|
|
499
|
-
co_await resume_on_signal(self->m_connectPerformed.get());
|
|
500
|
-
|
|
501
|
-
if (self->m_readyState != ReadyState::Open) {
|
|
502
|
-
self = nullptr;
|
|
503
|
-
co_return;
|
|
504
|
-
}
|
|
505
|
-
|
|
506
|
-
try {
|
|
507
|
-
self->m_socket.Control().MessageType(SocketMessageType::Utf8);
|
|
508
|
-
|
|
509
|
-
string s{};
|
|
510
|
-
winrt::array_view<const uint8_t> arr(
|
|
511
|
-
CheckedReinterpretCast<const uint8_t *>(s.c_str()),
|
|
512
|
-
CheckedReinterpretCast<const uint8_t *>(s.c_str()) + s.length());
|
|
513
|
-
self->m_writer.WriteBytes(arr);
|
|
514
|
-
|
|
515
|
-
auto async = self->m_writer.StoreAsync();
|
|
516
|
-
|
|
517
|
-
co_await lessthrow_await_adapter<DataWriterStoreOperation>{async};
|
|
518
|
-
|
|
519
|
-
auto result = async.ErrorCode();
|
|
520
|
-
if (result >= 0) {
|
|
521
|
-
if (self->m_pingHandler) {
|
|
522
|
-
self->m_pingHandler();
|
|
523
|
-
}
|
|
524
|
-
} else {
|
|
525
|
-
if (self->m_errorHandler) {
|
|
526
|
-
self->m_errorHandler({Utilities::HResultToString(std::move(result)), ErrorType::Ping});
|
|
527
|
-
}
|
|
528
|
-
}
|
|
529
|
-
} catch (hresult_error const &e) {
|
|
530
|
-
if (self->m_errorHandler) {
|
|
531
|
-
self->m_errorHandler({Utilities::HResultToString(e), ErrorType::Ping});
|
|
532
|
-
}
|
|
533
|
-
}
|
|
534
|
-
}
|
|
535
|
-
|
|
536
|
-
fire_and_forget WinRTWebSocketResource::PerformWrite(string &&message, bool isBinary) noexcept {
|
|
537
|
-
auto self = shared_from_this();
|
|
538
|
-
{
|
|
539
|
-
auto guard = lock_guard<mutex>{m_writeQueueMutex};
|
|
540
|
-
m_writeQueue.emplace(std::move(message), isBinary);
|
|
541
|
-
}
|
|
542
|
-
|
|
543
|
-
co_await resume_background();
|
|
544
|
-
|
|
545
|
-
co_await resume_on_signal(self->m_connectPerformed.get()); // Ensure connection attempt has finished
|
|
546
|
-
|
|
547
|
-
co_await resume_in_queue(self->m_dispatchQueue); // Ensure writes happen sequentially
|
|
548
|
-
|
|
549
|
-
if (self->m_readyState != ReadyState::Open) {
|
|
550
|
-
self = nullptr;
|
|
551
|
-
co_return;
|
|
552
|
-
}
|
|
553
|
-
|
|
554
|
-
try {
|
|
555
|
-
size_t length = 0;
|
|
556
|
-
string messageLocal;
|
|
557
|
-
bool isBinaryLocal;
|
|
558
|
-
{
|
|
559
|
-
auto guard = lock_guard<mutex>{m_writeQueueMutex};
|
|
560
|
-
std::tie(messageLocal, isBinaryLocal) = m_writeQueue.front();
|
|
561
|
-
m_writeQueue.pop();
|
|
562
|
-
}
|
|
563
|
-
|
|
564
|
-
if (isBinaryLocal) {
|
|
565
|
-
self->m_socket.Control().MessageType(SocketMessageType::Binary);
|
|
566
|
-
|
|
567
|
-
auto buffer = CryptographicBuffer::DecodeFromBase64String(winrt::to_hstring(messageLocal));
|
|
568
|
-
if (buffer) {
|
|
569
|
-
length = buffer.Length();
|
|
570
|
-
self->m_writer.WriteBuffer(buffer);
|
|
571
|
-
}
|
|
572
|
-
} else {
|
|
573
|
-
self->m_socket.Control().MessageType(SocketMessageType::Utf8);
|
|
574
|
-
|
|
575
|
-
// TODO: Use char_t instead of uint8_t?
|
|
576
|
-
length = messageLocal.size();
|
|
577
|
-
winrt::array_view<const uint8_t> view(
|
|
578
|
-
CheckedReinterpretCast<const uint8_t *>(messageLocal.c_str()),
|
|
579
|
-
CheckedReinterpretCast<const uint8_t *>(messageLocal.c_str()) + messageLocal.length());
|
|
580
|
-
self->m_writer.WriteBytes(view);
|
|
581
|
-
}
|
|
582
|
-
|
|
583
|
-
auto async = self->m_writer.StoreAsync();
|
|
584
|
-
|
|
585
|
-
co_await lessthrow_await_adapter<DataWriterStoreOperation>{async};
|
|
586
|
-
|
|
587
|
-
auto result = async.ErrorCode();
|
|
588
|
-
if (result >= 0) {
|
|
589
|
-
if (self->m_writeHandler) {
|
|
590
|
-
self->m_writeHandler(length);
|
|
591
|
-
}
|
|
592
|
-
} else {
|
|
593
|
-
if (self->m_errorHandler) {
|
|
594
|
-
self->m_errorHandler({Utilities::HResultToString(std::move(result)), ErrorType::Send});
|
|
595
|
-
}
|
|
596
|
-
}
|
|
597
|
-
} catch (std::exception const &e) {
|
|
598
|
-
if (self->m_errorHandler) {
|
|
599
|
-
self->m_errorHandler({e.what(), ErrorType::Ping});
|
|
600
|
-
}
|
|
601
|
-
} catch (hresult_error const &e) {
|
|
602
|
-
// TODO: Remove after fixing unit tests exceptions.
|
|
603
|
-
if (self->m_errorHandler) {
|
|
604
|
-
self->m_errorHandler({Utilities::HResultToString(e), ErrorType::Ping});
|
|
605
|
-
}
|
|
606
|
-
}
|
|
607
|
-
}
|
|
608
|
-
|
|
609
|
-
fire_and_forget WinRTWebSocketResource::PerformClose() noexcept {
|
|
610
|
-
co_await resume_background();
|
|
611
|
-
|
|
612
|
-
co_await resume_on_signal(m_connectPerformed.get());
|
|
613
|
-
|
|
614
|
-
try {
|
|
615
|
-
m_socket.Close(static_cast<uint16_t>(m_closeCode), winrt::to_hstring(m_closeReason));
|
|
616
|
-
|
|
617
|
-
if (m_closeHandler) {
|
|
618
|
-
m_closeHandler(m_closeCode, m_closeReason);
|
|
619
|
-
}
|
|
620
|
-
} catch (winrt::hresult_invalid_argument const &e) {
|
|
621
|
-
if (m_errorHandler) {
|
|
622
|
-
m_errorHandler({winrt::to_string(e.message()), ErrorType::Close});
|
|
623
|
-
}
|
|
624
|
-
} catch (hresult_error const &e) {
|
|
625
|
-
if (m_errorHandler) {
|
|
626
|
-
m_errorHandler({Utilities::HResultToString(e), ErrorType::Close});
|
|
627
|
-
}
|
|
628
|
-
}
|
|
629
|
-
|
|
630
|
-
m_readyState = ReadyState::Closed;
|
|
631
|
-
m_closePerformed.Set();
|
|
632
|
-
}
|
|
633
|
-
|
|
634
|
-
void WinRTWebSocketResource::Synchronize() noexcept {
|
|
635
|
-
// Ensure sequence of other operations
|
|
636
|
-
if (m_connectRequested) {
|
|
637
|
-
m_connectPerformedPromise.get_future().wait();
|
|
638
|
-
}
|
|
639
|
-
}
|
|
640
|
-
|
|
641
|
-
#pragma endregion Private members
|
|
642
|
-
|
|
643
|
-
#pragma region IWebSocketResource
|
|
644
|
-
|
|
645
|
-
void WinRTWebSocketResource::Connect(string &&url, const Protocols &protocols, const Options &options) noexcept {
|
|
646
|
-
m_socket.MessageReceived([self = shared_from_this()](
|
|
647
|
-
IWebSocket const &sender, IMessageWebSocketMessageReceivedEventArgs const &args) {
|
|
648
|
-
try {
|
|
649
|
-
string response;
|
|
650
|
-
|
|
651
|
-
IDataReader reader{nullptr};
|
|
652
|
-
// Use ABI version to avoid throwing exceptions on expected code paths
|
|
653
|
-
HRESULT hr =
|
|
654
|
-
reinterpret_cast<ABI::Windows::Networking::Sockets::IMessageWebSocketMessageReceivedEventArgs *>(
|
|
655
|
-
winrt::get_abi(args))
|
|
656
|
-
->GetDataReader(reinterpret_cast<ABI::Windows::Storage::Streams::IDataReader **>(winrt::put_abi(reader)));
|
|
657
|
-
|
|
658
|
-
if (FAILED(hr)) {
|
|
659
|
-
// See
|
|
660
|
-
// https://docs.microsoft.com/uwp/api/windows.networking.sockets.messagewebsocketmessagereceivedeventargs.getdatareader?view=winrt-22621#remarks
|
|
661
|
-
if (hr == WININET_E_CONNECTION_ABORTED) {
|
|
662
|
-
string errorMessage{"[0x80072EFE] Underlying TCP connection suddenly terminated"};
|
|
663
|
-
self->m_errorHandler({errorMessage, ErrorType::Connection});
|
|
664
|
-
// Note: We are not clear whether all read-related errors should close the socket.
|
|
665
|
-
self->Close(CloseCode::BadPayload, std::move(errorMessage));
|
|
666
|
-
} else {
|
|
667
|
-
self->m_errorHandler({Utilities::HResultToString(hr), ErrorType::Receive});
|
|
668
|
-
}
|
|
669
|
-
return;
|
|
670
|
-
}
|
|
671
|
-
|
|
672
|
-
auto len = reader.UnconsumedBufferLength();
|
|
673
|
-
if (args.MessageType() == SocketMessageType::Utf8) {
|
|
674
|
-
reader.UnicodeEncoding(UnicodeEncoding::Utf8);
|
|
675
|
-
vector<uint8_t> data(len);
|
|
676
|
-
reader.ReadBytes(data);
|
|
677
|
-
|
|
678
|
-
response = string(CheckedReinterpretCast<char *>(data.data()), data.size());
|
|
679
|
-
} else {
|
|
680
|
-
auto buffer = reader.ReadBuffer(len);
|
|
681
|
-
hstring data = CryptographicBuffer::EncodeToBase64String(buffer);
|
|
682
|
-
|
|
683
|
-
response = winrt::to_string(std::wstring_view(data));
|
|
684
|
-
}
|
|
685
|
-
|
|
686
|
-
if (self->m_readHandler) {
|
|
687
|
-
self->m_readHandler(response.length(), response, args.MessageType() == SocketMessageType::Binary);
|
|
688
|
-
}
|
|
689
|
-
} catch (hresult_error const &e) {
|
|
690
|
-
if (self->m_errorHandler) {
|
|
691
|
-
string errorMessage;
|
|
692
|
-
ErrorType errorType;
|
|
693
|
-
errorMessage = Utilities::HResultToString(e);
|
|
694
|
-
errorType = ErrorType::Receive;
|
|
695
|
-
self->m_errorHandler({errorMessage, errorType});
|
|
696
|
-
}
|
|
697
|
-
}
|
|
698
|
-
});
|
|
699
|
-
|
|
700
|
-
m_readyState = ReadyState::Connecting;
|
|
701
|
-
|
|
702
|
-
bool hasOriginHeader = false;
|
|
703
|
-
for (const auto &header : options) {
|
|
704
|
-
m_socket.SetRequestHeader(header.first, winrt::to_hstring(header.second));
|
|
705
|
-
if (boost::iequals(header.first, L"Origin")) {
|
|
706
|
-
hasOriginHeader = true;
|
|
707
|
-
}
|
|
708
|
-
}
|
|
709
|
-
|
|
710
|
-
winrt::Windows::Foundation::Collections::IVector<hstring> supportedProtocols =
|
|
711
|
-
m_socket.Control().SupportedProtocols();
|
|
712
|
-
for (const auto &protocol : protocols) {
|
|
713
|
-
supportedProtocols.Append(winrt::to_hstring(protocol));
|
|
714
|
-
}
|
|
715
|
-
|
|
716
|
-
Uri uri{nullptr};
|
|
717
|
-
try {
|
|
718
|
-
uri = Uri{winrt::to_hstring(url)};
|
|
719
|
-
|
|
720
|
-
// #12626 - If Origin header is not provided, set to connect endpoint.
|
|
721
|
-
if (!hasOriginHeader) {
|
|
722
|
-
auto scheme = uri.SchemeName();
|
|
723
|
-
auto host = uri.Host();
|
|
724
|
-
auto port = uri.Port();
|
|
725
|
-
|
|
726
|
-
if (scheme == L"ws") {
|
|
727
|
-
scheme = L"http";
|
|
728
|
-
} else if (scheme == L"wss") {
|
|
729
|
-
scheme = L"https";
|
|
730
|
-
}
|
|
731
|
-
|
|
732
|
-
// Only add a port if a port is defined
|
|
733
|
-
hstring originPort = port != 0 ? L":" + winrt::to_hstring(port) : L"";
|
|
734
|
-
auto origin = hstring{scheme + L"://" + host + originPort};
|
|
735
|
-
|
|
736
|
-
m_socket.SetRequestHeader(L"Origin", std::move(origin));
|
|
737
|
-
}
|
|
738
|
-
|
|
739
|
-
} catch (hresult_error const &e) {
|
|
740
|
-
if (m_errorHandler) {
|
|
741
|
-
m_errorHandler({Utilities::HResultToString(e), ErrorType::Connection});
|
|
742
|
-
}
|
|
743
|
-
|
|
744
|
-
// Abort - Mark connection as concluded.
|
|
745
|
-
SetEvent(m_connectPerformed.get());
|
|
746
|
-
m_connectPerformedPromise.set_value();
|
|
747
|
-
m_connectRequested = false;
|
|
748
|
-
|
|
749
|
-
return;
|
|
750
|
-
}
|
|
751
|
-
|
|
752
|
-
m_connectRequested = true;
|
|
753
|
-
|
|
754
|
-
PerformConnect(std::move(uri));
|
|
755
|
-
}
|
|
756
|
-
|
|
757
|
-
void WinRTWebSocketResource::Ping() noexcept {
|
|
758
|
-
PerformPing();
|
|
759
|
-
}
|
|
384
|
+
void WinRTWebSocketResource::Ping() noexcept {}
|
|
760
385
|
|
|
761
386
|
void WinRTWebSocketResource::Send(string &&message) noexcept {
|
|
762
|
-
|
|
387
|
+
EnqueueWrite(std::move(message), false);
|
|
763
388
|
}
|
|
764
389
|
|
|
765
390
|
void WinRTWebSocketResource::SendBinary(string &&base64String) noexcept {
|
|
766
|
-
|
|
391
|
+
EnqueueWrite(std::move(base64String), true);
|
|
767
392
|
}
|
|
768
393
|
|
|
769
394
|
void WinRTWebSocketResource::Close(CloseCode code, const string &reason) noexcept {
|
|
770
|
-
if (m_readyState == ReadyState::Closing || m_readyState == ReadyState::Closed)
|
|
771
|
-
return;
|
|
772
|
-
|
|
773
|
-
Synchronize();
|
|
774
|
-
|
|
775
|
-
m_readyState = ReadyState::Closing;
|
|
776
395
|
m_closeCode = code;
|
|
777
396
|
m_closeReason = reason;
|
|
778
397
|
PerformClose();
|
|
@@ -786,13 +405,9 @@ void WinRTWebSocketResource::SetOnConnect(function<void()> &&handler) noexcept {
|
|
|
786
405
|
m_connectHandler = std::move(handler);
|
|
787
406
|
}
|
|
788
407
|
|
|
789
|
-
void WinRTWebSocketResource::SetOnPing(function<void()> &&handler) noexcept {
|
|
790
|
-
m_pingHandler = std::move(handler);
|
|
791
|
-
}
|
|
408
|
+
void WinRTWebSocketResource::SetOnPing(function<void()> && /*handler*/) noexcept {}
|
|
792
409
|
|
|
793
|
-
void WinRTWebSocketResource::SetOnSend(function<void(size_t)> &&handler) noexcept {
|
|
794
|
-
m_writeHandler = std::move(handler);
|
|
795
|
-
}
|
|
410
|
+
void WinRTWebSocketResource::SetOnSend(function<void(size_t)> && /*handler*/) noexcept {}
|
|
796
411
|
|
|
797
412
|
void WinRTWebSocketResource::SetOnMessage(function<void(size_t, const string &, bool isBinary)> &&handler) noexcept {
|
|
798
413
|
m_readHandler = std::move(handler);
|
|
@@ -808,6 +423,6 @@ void WinRTWebSocketResource::SetOnError(function<void(Error &&)> &&handler) noex
|
|
|
808
423
|
|
|
809
424
|
#pragma endregion IWebSocketResource
|
|
810
425
|
|
|
811
|
-
#pragma endregion
|
|
426
|
+
#pragma endregion WinRTWebSocketResource
|
|
812
427
|
|
|
813
428
|
} // namespace Microsoft::React::Networking
|
|
@@ -9,15 +9,9 @@
|
|
|
9
9
|
#include <winrt/Windows.Storage.Streams.h>
|
|
10
10
|
#include "IWebSocketResource.h"
|
|
11
11
|
|
|
12
|
-
// Standard Library
|
|
13
|
-
#include <future>
|
|
14
|
-
#include <mutex>
|
|
15
|
-
#include <queue>
|
|
16
|
-
|
|
17
12
|
namespace Microsoft::React::Networking {
|
|
18
13
|
|
|
19
|
-
class
|
|
20
|
-
public std::enable_shared_from_this<WinRTWebSocketResource2> {
|
|
14
|
+
class WinRTWebSocketResource : public IWebSocketResource, public std::enable_shared_from_this<WinRTWebSocketResource> {
|
|
21
15
|
///
|
|
22
16
|
// See https://devblogs.microsoft.com/oldnewthing/20250328-00/?p=111016
|
|
23
17
|
///
|
|
@@ -144,126 +138,16 @@ class WinRTWebSocketResource2 : public IWebSocketResource,
|
|
|
144
138
|
winrt::Windows::Foundation::IAsyncAction PerformWrite(std::string &&message, bool isBinary) noexcept;
|
|
145
139
|
winrt::fire_and_forget PerformClose() noexcept;
|
|
146
140
|
|
|
147
|
-
WinRTWebSocketResource2(
|
|
148
|
-
winrt::Windows::Networking::Sockets::IMessageWebSocket &&socket,
|
|
149
|
-
std::vector<winrt::Windows::Security::Cryptography::Certificates::ChainValidationResult> &&certExceptions);
|
|
150
|
-
|
|
151
|
-
public:
|
|
152
|
-
WinRTWebSocketResource2(
|
|
153
|
-
winrt::Windows::Networking::Sockets::IMessageWebSocket &&socket,
|
|
154
|
-
winrt::Windows::Storage::Streams::IDataWriter &&writer,
|
|
155
|
-
std::vector<winrt::Windows::Security::Cryptography::Certificates::ChainValidationResult> &&certExceptions,
|
|
156
|
-
Mso::DispatchQueue callingQueue);
|
|
157
|
-
|
|
158
|
-
WinRTWebSocketResource2(
|
|
159
|
-
std::vector<winrt::Windows::Security::Cryptography::Certificates::ChainValidationResult> &&certExceptions);
|
|
160
|
-
|
|
161
|
-
~WinRTWebSocketResource2() noexcept override;
|
|
162
|
-
|
|
163
|
-
#pragma region IWebSocketResource
|
|
164
|
-
|
|
165
|
-
/// <summary>
|
|
166
|
-
/// <see cref="IWebSocketResource::Connect" />
|
|
167
|
-
/// </summary>
|
|
168
|
-
void Connect(std::string &&url, const Protocols &protocols, const Options &options) noexcept override;
|
|
169
|
-
|
|
170
|
-
/// <summary>
|
|
171
|
-
/// <see cref="IWebSocketResource::Ping" />
|
|
172
|
-
/// </summary>
|
|
173
|
-
void Ping() noexcept override;
|
|
174
|
-
|
|
175
|
-
/// <summary>
|
|
176
|
-
/// <see cref="IWebSocketResource::Send" />
|
|
177
|
-
/// </summary>
|
|
178
|
-
void Send(std::string &&message) noexcept override;
|
|
179
|
-
|
|
180
|
-
/// <summary>
|
|
181
|
-
/// <see cref="IWebSocketResource::SendBinary" />
|
|
182
|
-
/// </summary>
|
|
183
|
-
void SendBinary(std::string &&base64String) noexcept override;
|
|
184
|
-
|
|
185
|
-
/// <summary>
|
|
186
|
-
/// <see cref="IWebSocketResource::Close" />
|
|
187
|
-
/// </summary>
|
|
188
|
-
void Close(CloseCode code, const std::string &reason) noexcept override;
|
|
189
|
-
|
|
190
|
-
ReadyState GetReadyState() const noexcept override;
|
|
191
|
-
|
|
192
|
-
/// <summary>
|
|
193
|
-
/// <see cref="IWebSocketResource::SetOnConnect" />
|
|
194
|
-
/// </summary>
|
|
195
|
-
void SetOnConnect(std::function<void()> &&handler) noexcept override;
|
|
196
|
-
|
|
197
|
-
/// <summary>
|
|
198
|
-
/// <see cref="IWebSocketResource::SetOnPing" />
|
|
199
|
-
/// </summary>
|
|
200
|
-
void SetOnPing(std::function<void()> &&handler) noexcept override;
|
|
201
|
-
|
|
202
|
-
/// <summary>
|
|
203
|
-
/// <see cref="IWebSocketResource::SetOnSend" />
|
|
204
|
-
/// </summary>
|
|
205
|
-
void SetOnSend(std::function<void(std::size_t)> &&handler) noexcept override;
|
|
206
|
-
|
|
207
|
-
/// <summary>
|
|
208
|
-
/// <see cref="IWebSocketResource::SetOnMessage" />
|
|
209
|
-
/// </summary>
|
|
210
|
-
void SetOnMessage(std::function<void(std::size_t, const std::string &, bool isBinary)> &&handler) noexcept override;
|
|
211
|
-
|
|
212
|
-
/// <summary>
|
|
213
|
-
/// <see cref="IWebSocketResource::SetOnClose" />
|
|
214
|
-
/// </summary>
|
|
215
|
-
void SetOnClose(std::function<void(CloseCode, const std::string &)> &&handler) noexcept override;
|
|
216
|
-
|
|
217
|
-
/// <summary>
|
|
218
|
-
/// <see cref="IWebSocketResource::SetOnError" />
|
|
219
|
-
/// </summary>
|
|
220
|
-
void SetOnError(std::function<void(Error &&)> &&handler) noexcept override;
|
|
221
|
-
|
|
222
|
-
#pragma endregion IWebSocketResource
|
|
223
|
-
};
|
|
224
|
-
|
|
225
|
-
class WinRTWebSocketResource : public IWebSocketResource, public std::enable_shared_from_this<WinRTWebSocketResource> {
|
|
226
|
-
winrt::Windows::Networking::Sockets::IMessageWebSocket m_socket;
|
|
227
|
-
// TODO: Use or remove.
|
|
228
|
-
winrt::Windows::Networking::Sockets::IMessageWebSocket::MessageReceived_revoker m_revoker;
|
|
229
|
-
winrt::Windows::Storage::Streams::IDataWriter m_writer;
|
|
230
|
-
|
|
231
|
-
Mso::DispatchQueue m_dispatchQueue;
|
|
232
|
-
Mso::ManualResetEvent m_closePerformed;
|
|
233
|
-
std::atomic_bool m_connectRequested;
|
|
234
|
-
std::promise<void> m_connectPerformedPromise;
|
|
235
|
-
winrt::handle m_connectPerformed{
|
|
236
|
-
CreateEvent(/*attributes*/ nullptr, /*manual reset*/ true, /*state*/ false, /*name*/ nullptr)};
|
|
237
|
-
ReadyState m_readyState{ReadyState::Connecting};
|
|
238
|
-
|
|
239
|
-
CloseCode m_closeCode{CloseCode::Normal};
|
|
240
|
-
std::string m_closeReason;
|
|
241
|
-
std::queue<std::pair<std::string, bool>> m_writeQueue;
|
|
242
|
-
std::mutex m_writeQueueMutex;
|
|
243
|
-
|
|
244
|
-
std::function<void()> m_connectHandler;
|
|
245
|
-
std::function<void()> m_pingHandler;
|
|
246
|
-
std::function<void(std::size_t)> m_writeHandler;
|
|
247
|
-
std::function<void(std::size_t, const std::string &, bool)> m_readHandler;
|
|
248
|
-
std::function<void(CloseCode, const std::string &)> m_closeHandler;
|
|
249
|
-
std::function<void(Error &&)> m_errorHandler;
|
|
250
|
-
|
|
251
141
|
WinRTWebSocketResource(
|
|
252
142
|
winrt::Windows::Networking::Sockets::IMessageWebSocket &&socket,
|
|
253
143
|
std::vector<winrt::Windows::Security::Cryptography::Certificates::ChainValidationResult> &&certExceptions);
|
|
254
144
|
|
|
255
|
-
winrt::Windows::Foundation::IAsyncAction PerformConnect(winrt::Windows::Foundation::Uri &&uri) noexcept;
|
|
256
|
-
winrt::fire_and_forget PerformPing() noexcept;
|
|
257
|
-
winrt::fire_and_forget PerformWrite(std::string &&message, bool isBinary) noexcept;
|
|
258
|
-
winrt::fire_and_forget PerformClose() noexcept;
|
|
259
|
-
|
|
260
|
-
void Synchronize() noexcept;
|
|
261
|
-
|
|
262
145
|
public:
|
|
263
146
|
WinRTWebSocketResource(
|
|
264
147
|
winrt::Windows::Networking::Sockets::IMessageWebSocket &&socket,
|
|
265
148
|
winrt::Windows::Storage::Streams::IDataWriter &&writer,
|
|
266
|
-
std::vector<winrt::Windows::Security::Cryptography::Certificates::ChainValidationResult> &&certExceptions
|
|
149
|
+
std::vector<winrt::Windows::Security::Cryptography::Certificates::ChainValidationResult> &&certExceptions,
|
|
150
|
+
Mso::DispatchQueue callingQueue);
|
|
267
151
|
|
|
268
152
|
WinRTWebSocketResource(
|
|
269
153
|
std::vector<winrt::Windows::Security::Cryptography::Certificates::ChainValidationResult> &&certExceptions);
|