react-native-windows 0.72.2 → 0.72.4
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/Microsoft.ReactNative.Cxx/JSValueReader.h +1 -1
- package/Microsoft.ReactNative.Cxx/JSValueWriter.h +1 -1
- package/Microsoft.ReactNative.Cxx/ModuleRegistration.h +22 -0
- package/Microsoft.ReactNative.Cxx/NativeModules.h +5 -0
- package/Microsoft.ReactNative.Cxx/StructInfo.h +4 -4
- package/Microsoft.ReactNative.Managed/packages.lock.json +73 -4
- package/PropertySheets/Generated/PackageVersion.g.props +3 -3
- package/Shared/Modules/HttpModule.cpp +10 -23
- package/Shared/Modules/HttpModule.h +0 -1
- package/Shared/Networking/DefaultBlobResource.cpp +6 -1
- package/Shared/Networking/WinRTHttpResource.cpp +9 -0
- package/Shared/OInstance.cpp +16 -36
- package/package.json +3 -3
|
@@ -409,7 +409,7 @@ inline void ReadValue(IJSValueReader const &reader, /*out*/ JSValueArray &value)
|
|
|
409
409
|
template <class T, std::enable_if_t<!std::is_void_v<decltype(GetStructInfo(static_cast<T *>(nullptr)))>, int>>
|
|
410
410
|
inline void ReadValue(IJSValueReader const &reader, /*out*/ T &value) noexcept {
|
|
411
411
|
if (reader.ValueType() == JSValueType::Object) {
|
|
412
|
-
const auto &fieldMap = StructInfo<T>::
|
|
412
|
+
const auto &fieldMap = StructInfo<T>::GetFieldMap();
|
|
413
413
|
hstring propertyName;
|
|
414
414
|
while (reader.GetNextObjectProperty(/*out*/ propertyName)) {
|
|
415
415
|
auto it = fieldMap.find(std::wstring_view(propertyName));
|
|
@@ -234,7 +234,7 @@ inline void WriteCustomDirectEventTypeConstant(IJSValueWriter const &writer, std
|
|
|
234
234
|
template <class T, std::enable_if_t<!std::is_void_v<decltype(GetStructInfo(static_cast<T *>(nullptr)))>, int>>
|
|
235
235
|
inline void WriteValue(IJSValueWriter const &writer, T const &value) noexcept {
|
|
236
236
|
writer.WriteObjectBegin();
|
|
237
|
-
for (const auto &fieldEntry : StructInfo<T>::
|
|
237
|
+
for (const auto &fieldEntry : StructInfo<T>::GetFieldMap()) {
|
|
238
238
|
writer.WritePropertyName(fieldEntry.first);
|
|
239
239
|
fieldEntry.second.WriteField(writer, &value);
|
|
240
240
|
}
|
|
@@ -51,6 +51,28 @@
|
|
|
51
51
|
INTERNAL_REACT_RECOMPOSER_4( \
|
|
52
52
|
(__VA_ARGS__, INTERNAL_REACT_MODULE_3_ARGS, INTERNAL_REACT_MODULE_2_ARGS, INTERNAL_REACT_MODULE_1_ARG, ))
|
|
53
53
|
|
|
54
|
+
// Another version of REACT_MODULE but does not do auto registration
|
|
55
|
+
#define INTERNAL_REACT_MODULE_NOREG_3_ARGS(moduleStruct, moduleName, eventEmitterName) \
|
|
56
|
+
struct moduleStruct; \
|
|
57
|
+
template <class TRegistry> \
|
|
58
|
+
constexpr void GetReactModuleInfo(moduleStruct *, TRegistry ®istry) noexcept { \
|
|
59
|
+
registry.RegisterModule( \
|
|
60
|
+
moduleName, eventEmitterName, winrt::Microsoft::ReactNative::ReactAttributeId<__COUNTER__>{}); \
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
#define INTERNAL_REACT_MODULE_NOREG_2_ARGS(moduleStruct, moduleName) \
|
|
64
|
+
INTERNAL_REACT_MODULE_NOREG_3_ARGS(moduleStruct, moduleName, L"")
|
|
65
|
+
|
|
66
|
+
#define INTERNAL_REACT_MODULE_NOREG_1_ARG(moduleStruct) \
|
|
67
|
+
INTERNAL_REACT_MODULE_NOREG_2_ARGS(moduleStruct, L## #moduleStruct)
|
|
68
|
+
|
|
69
|
+
#define INTERNAL_REACT_MODULE_NOREG(...) \
|
|
70
|
+
INTERNAL_REACT_RECOMPOSER_4( \
|
|
71
|
+
(__VA_ARGS__, \
|
|
72
|
+
INTERNAL_REACT_MODULE_NOREG_3_ARGS, \
|
|
73
|
+
INTERNAL_REACT_MODULE_NOREG_2_ARGS, \
|
|
74
|
+
INTERNAL_REACT_MODULE_NOREG_1_ARG, ))
|
|
75
|
+
|
|
54
76
|
// Provide meta data information about struct member.
|
|
55
77
|
// For each member with a 'custom attribute' macro we create a static method to provide meta data.
|
|
56
78
|
// The member Id is generated as a ReactMemberId<__COUNTER__> type.
|
|
@@ -30,6 +30,11 @@
|
|
|
30
30
|
#define REACT_MODULE(/* moduleStruct, [opt] moduleName, [opt] eventEmitterName */...) \
|
|
31
31
|
INTERNAL_REACT_MODULE(__VA_ARGS__)(__VA_ARGS__)
|
|
32
32
|
|
|
33
|
+
// REACT_MODULE_NOREG is REACT_MODULE without auto registration
|
|
34
|
+
// they have the same arguments
|
|
35
|
+
#define REACT_MODULE_NOREG(/* moduleStruct, [opt] moduleName, [opt] eventEmitterName */...) \
|
|
36
|
+
INTERNAL_REACT_MODULE_NOREG(__VA_ARGS__)(__VA_ARGS__)
|
|
37
|
+
|
|
33
38
|
// REACT_INIT(method)
|
|
34
39
|
// Arguments:
|
|
35
40
|
// - method (required) - the method name the macro is attached to.
|
|
@@ -113,12 +113,12 @@ void FieldWriter(IJSValueWriter const &writer, const void *obj, const uintptr_t
|
|
|
113
113
|
|
|
114
114
|
template <class T>
|
|
115
115
|
struct StructInfo {
|
|
116
|
-
static const FieldMap
|
|
116
|
+
static const FieldMap &GetFieldMap() {
|
|
117
|
+
static const FieldMap fieldMap = GetStructInfo(static_cast<T *>(nullptr));
|
|
118
|
+
return fieldMap;
|
|
119
|
+
}
|
|
117
120
|
};
|
|
118
121
|
|
|
119
|
-
template <class T>
|
|
120
|
-
/*static*/ const FieldMap StructInfo<T>::FieldMap = GetStructInfo(static_cast<T *>(nullptr));
|
|
121
|
-
|
|
122
122
|
template <int I>
|
|
123
123
|
using ReactFieldId = std::integral_constant<int, I>;
|
|
124
124
|
|
|
@@ -24,11 +24,21 @@
|
|
|
24
24
|
"Microsoft.SourceLink.Common": "1.0.0"
|
|
25
25
|
}
|
|
26
26
|
},
|
|
27
|
+
"boost": {
|
|
28
|
+
"type": "Transitive",
|
|
29
|
+
"resolved": "1.76.0",
|
|
30
|
+
"contentHash": "p+w3YvNdXL8Cu9Fzrmexssu0tZbWxuf6ywsQqHjDlKFE5ojXHof1HIyMC3zDLfLnh80dIeFcEUAuR2Asg/XHRA=="
|
|
31
|
+
},
|
|
27
32
|
"Microsoft.Build.Tasks.Git": {
|
|
28
33
|
"type": "Transitive",
|
|
29
34
|
"resolved": "1.0.0",
|
|
30
35
|
"contentHash": "z2fpmmt+1Jfl+ZnBki9nSP08S1/tbEOxFdsK1rSR+LBehIJz1Xv9/6qOOoGNqlwnAGGVGis1Oj6S8Kt9COEYlQ=="
|
|
31
36
|
},
|
|
37
|
+
"Microsoft.JavaScript.Hermes": {
|
|
38
|
+
"type": "Transitive",
|
|
39
|
+
"resolved": "0.1.15",
|
|
40
|
+
"contentHash": "My/u5RvxoymtwWokoweU6iVpuP79w271UjadcmSNqnQ9ESIv00tlVP4sHnIiN3t2lJNDeciyE1EVF4swGPECKQ=="
|
|
41
|
+
},
|
|
32
42
|
"Microsoft.Net.Native.Compiler": {
|
|
33
43
|
"type": "Transitive",
|
|
34
44
|
"resolved": "2.2.7-rel-27913-00",
|
|
@@ -53,17 +63,35 @@
|
|
|
53
63
|
"Microsoft.NETCore.Platforms": {
|
|
54
64
|
"type": "Transitive",
|
|
55
65
|
"resolved": "2.1.0",
|
|
56
|
-
"contentHash": "
|
|
66
|
+
"contentHash": "GmkKfoyerqmsHMn7OZj0AKpcBabD+GaafqphvX2Mw406IwiJRy1pKcKqdCfKJfYmkRyJ6+e+RaUylgdJoDa1jQ=="
|
|
57
67
|
},
|
|
58
68
|
"Microsoft.SourceLink.Common": {
|
|
59
69
|
"type": "Transitive",
|
|
60
70
|
"resolved": "1.0.0",
|
|
61
71
|
"contentHash": "G8DuQY8/DK5NN+3jm5wcMcd9QYD90UV7MiLmdljSJixi3U/vNaeBKmmXUqI4DJCOeWizIUEh4ALhSt58mR+5eg=="
|
|
62
72
|
},
|
|
73
|
+
"Microsoft.UI.Xaml": {
|
|
74
|
+
"type": "Transitive",
|
|
75
|
+
"resolved": "2.8.0",
|
|
76
|
+
"contentHash": "vxdHxTr63s5KVtNddMFpgvjBjUH50z7seq/5jLWmmSuf8poxg+sXrywkofUdE8ZstbpO9y3FL/IXXUcPYbeesA==",
|
|
77
|
+
"dependencies": {
|
|
78
|
+
"Microsoft.Web.WebView2": "1.0.1264.42"
|
|
79
|
+
}
|
|
80
|
+
},
|
|
81
|
+
"Microsoft.Web.WebView2": {
|
|
82
|
+
"type": "Transitive",
|
|
83
|
+
"resolved": "1.0.1264.42",
|
|
84
|
+
"contentHash": "7OBUTkzQ5VI/3gb0ufi5U4zjuCowAJwQg2li0zXXzqkM+S1kmOlivTy1R4jAW+gY5Vyg510M+qMAESCQUjrfgA=="
|
|
85
|
+
},
|
|
86
|
+
"Microsoft.Windows.SDK.BuildTools": {
|
|
87
|
+
"type": "Transitive",
|
|
88
|
+
"resolved": "10.0.22000.194",
|
|
89
|
+
"contentHash": "4L0P3zqut466SIqT3VBeLTNUQTxCBDOrTRymRuROCRJKazcK7ibLz9yAO1nKWRt50ttCj39oAa2Iuz9ZTDmLlg=="
|
|
90
|
+
},
|
|
63
91
|
"NETStandard.Library": {
|
|
64
92
|
"type": "Transitive",
|
|
65
93
|
"resolved": "2.0.3",
|
|
66
|
-
"contentHash": "
|
|
94
|
+
"contentHash": "548M6mnBSJWxsIlkQHfbzoYxpiYFXZZSL00p4GHYv8PkiqFBnnT68mW5mGEsA/ch9fDO9GkPgkFQpWiXZN7mAQ==",
|
|
67
95
|
"dependencies": {
|
|
68
96
|
"Microsoft.NETCore.Platforms": "1.1.0"
|
|
69
97
|
}
|
|
@@ -144,6 +172,7 @@
|
|
|
144
172
|
"folly": {
|
|
145
173
|
"type": "Project",
|
|
146
174
|
"dependencies": {
|
|
175
|
+
"boost": "[1.76.0, )",
|
|
147
176
|
"fmt": "[1.0.0, )"
|
|
148
177
|
}
|
|
149
178
|
},
|
|
@@ -152,13 +181,18 @@
|
|
|
152
181
|
"dependencies": {
|
|
153
182
|
"Common": "[1.0.0, )",
|
|
154
183
|
"Folly": "[1.0.0, )",
|
|
155
|
-
"
|
|
184
|
+
"Microsoft.JavaScript.Hermes": "[0.1.15, )",
|
|
185
|
+
"Microsoft.UI.Xaml": "[2.8.0, )",
|
|
186
|
+
"Microsoft.Windows.SDK.BuildTools": "[10.0.22000.194, )",
|
|
187
|
+
"ReactCommon": "[1.0.0, )",
|
|
188
|
+
"boost": "[1.76.0, )"
|
|
156
189
|
}
|
|
157
190
|
},
|
|
158
191
|
"reactcommon": {
|
|
159
192
|
"type": "Project",
|
|
160
193
|
"dependencies": {
|
|
161
|
-
"Folly": "[1.0.0, )"
|
|
194
|
+
"Folly": "[1.0.0, )",
|
|
195
|
+
"boost": "[1.76.0, )"
|
|
162
196
|
}
|
|
163
197
|
}
|
|
164
198
|
},
|
|
@@ -176,6 +210,11 @@
|
|
|
176
210
|
"runtime.win10-arm.Microsoft.NETCore.UniversalWindowsPlatform": "6.2.9"
|
|
177
211
|
}
|
|
178
212
|
},
|
|
213
|
+
"Microsoft.Web.WebView2": {
|
|
214
|
+
"type": "Transitive",
|
|
215
|
+
"resolved": "1.0.1264.42",
|
|
216
|
+
"contentHash": "7OBUTkzQ5VI/3gb0ufi5U4zjuCowAJwQg2li0zXXzqkM+S1kmOlivTy1R4jAW+gY5Vyg510M+qMAESCQUjrfgA=="
|
|
217
|
+
},
|
|
179
218
|
"runtime.win10-arm.Microsoft.NETCore.UniversalWindowsPlatform": {
|
|
180
219
|
"type": "Transitive",
|
|
181
220
|
"resolved": "6.2.9",
|
|
@@ -196,6 +235,11 @@
|
|
|
196
235
|
"runtime.win10-arm-aot.Microsoft.NETCore.UniversalWindowsPlatform": "6.2.9"
|
|
197
236
|
}
|
|
198
237
|
},
|
|
238
|
+
"Microsoft.Web.WebView2": {
|
|
239
|
+
"type": "Transitive",
|
|
240
|
+
"resolved": "1.0.1264.42",
|
|
241
|
+
"contentHash": "7OBUTkzQ5VI/3gb0ufi5U4zjuCowAJwQg2li0zXXzqkM+S1kmOlivTy1R4jAW+gY5Vyg510M+qMAESCQUjrfgA=="
|
|
242
|
+
},
|
|
199
243
|
"runtime.win10-arm-aot.Microsoft.NETCore.UniversalWindowsPlatform": {
|
|
200
244
|
"type": "Transitive",
|
|
201
245
|
"resolved": "6.2.9",
|
|
@@ -216,6 +260,11 @@
|
|
|
216
260
|
"runtime.win10-arm64-aot.Microsoft.NETCore.UniversalWindowsPlatform": "6.2.9"
|
|
217
261
|
}
|
|
218
262
|
},
|
|
263
|
+
"Microsoft.Web.WebView2": {
|
|
264
|
+
"type": "Transitive",
|
|
265
|
+
"resolved": "1.0.1264.42",
|
|
266
|
+
"contentHash": "7OBUTkzQ5VI/3gb0ufi5U4zjuCowAJwQg2li0zXXzqkM+S1kmOlivTy1R4jAW+gY5Vyg510M+qMAESCQUjrfgA=="
|
|
267
|
+
},
|
|
219
268
|
"runtime.win10-arm64-aot.Microsoft.NETCore.UniversalWindowsPlatform": {
|
|
220
269
|
"type": "Transitive",
|
|
221
270
|
"resolved": "6.2.9",
|
|
@@ -236,6 +285,11 @@
|
|
|
236
285
|
"runtime.win10-x64.Microsoft.NETCore.UniversalWindowsPlatform": "6.2.9"
|
|
237
286
|
}
|
|
238
287
|
},
|
|
288
|
+
"Microsoft.Web.WebView2": {
|
|
289
|
+
"type": "Transitive",
|
|
290
|
+
"resolved": "1.0.1264.42",
|
|
291
|
+
"contentHash": "7OBUTkzQ5VI/3gb0ufi5U4zjuCowAJwQg2li0zXXzqkM+S1kmOlivTy1R4jAW+gY5Vyg510M+qMAESCQUjrfgA=="
|
|
292
|
+
},
|
|
239
293
|
"runtime.win10-x64.Microsoft.NETCore.UniversalWindowsPlatform": {
|
|
240
294
|
"type": "Transitive",
|
|
241
295
|
"resolved": "6.2.9",
|
|
@@ -256,6 +310,11 @@
|
|
|
256
310
|
"runtime.win10-x64-aot.Microsoft.NETCore.UniversalWindowsPlatform": "6.2.9"
|
|
257
311
|
}
|
|
258
312
|
},
|
|
313
|
+
"Microsoft.Web.WebView2": {
|
|
314
|
+
"type": "Transitive",
|
|
315
|
+
"resolved": "1.0.1264.42",
|
|
316
|
+
"contentHash": "7OBUTkzQ5VI/3gb0ufi5U4zjuCowAJwQg2li0zXXzqkM+S1kmOlivTy1R4jAW+gY5Vyg510M+qMAESCQUjrfgA=="
|
|
317
|
+
},
|
|
259
318
|
"runtime.win10-x64-aot.Microsoft.NETCore.UniversalWindowsPlatform": {
|
|
260
319
|
"type": "Transitive",
|
|
261
320
|
"resolved": "6.2.9",
|
|
@@ -276,6 +335,11 @@
|
|
|
276
335
|
"runtime.win10-x86.Microsoft.NETCore.UniversalWindowsPlatform": "6.2.9"
|
|
277
336
|
}
|
|
278
337
|
},
|
|
338
|
+
"Microsoft.Web.WebView2": {
|
|
339
|
+
"type": "Transitive",
|
|
340
|
+
"resolved": "1.0.1264.42",
|
|
341
|
+
"contentHash": "7OBUTkzQ5VI/3gb0ufi5U4zjuCowAJwQg2li0zXXzqkM+S1kmOlivTy1R4jAW+gY5Vyg510M+qMAESCQUjrfgA=="
|
|
342
|
+
},
|
|
279
343
|
"runtime.win10-x86.Microsoft.NETCore.UniversalWindowsPlatform": {
|
|
280
344
|
"type": "Transitive",
|
|
281
345
|
"resolved": "6.2.9",
|
|
@@ -296,6 +360,11 @@
|
|
|
296
360
|
"runtime.win10-x86-aot.Microsoft.NETCore.UniversalWindowsPlatform": "6.2.9"
|
|
297
361
|
}
|
|
298
362
|
},
|
|
363
|
+
"Microsoft.Web.WebView2": {
|
|
364
|
+
"type": "Transitive",
|
|
365
|
+
"resolved": "1.0.1264.42",
|
|
366
|
+
"contentHash": "7OBUTkzQ5VI/3gb0ufi5U4zjuCowAJwQg2li0zXXzqkM+S1kmOlivTy1R4jAW+gY5Vyg510M+qMAESCQUjrfgA=="
|
|
367
|
+
},
|
|
299
368
|
"runtime.win10-x86-aot.Microsoft.NETCore.UniversalWindowsPlatform": {
|
|
300
369
|
"type": "Transitive",
|
|
301
370
|
"resolved": "6.2.9",
|
|
@@ -10,11 +10,11 @@
|
|
|
10
10
|
-->
|
|
11
11
|
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
|
12
12
|
<PropertyGroup>
|
|
13
|
-
<ReactNativeWindowsVersion>0.72.
|
|
13
|
+
<ReactNativeWindowsVersion>0.72.4</ReactNativeWindowsVersion>
|
|
14
14
|
<ReactNativeWindowsMajor>0</ReactNativeWindowsMajor>
|
|
15
15
|
<ReactNativeWindowsMinor>72</ReactNativeWindowsMinor>
|
|
16
|
-
<ReactNativeWindowsPatch>
|
|
16
|
+
<ReactNativeWindowsPatch>4</ReactNativeWindowsPatch>
|
|
17
17
|
<ReactNativeWindowsCanary>false</ReactNativeWindowsCanary>
|
|
18
|
-
<ReactNativeWindowsCommitId>
|
|
18
|
+
<ReactNativeWindowsCommitId>2f12d588d6c668fa5b6de64232454d5fc31e5a82</ReactNativeWindowsCommitId>
|
|
19
19
|
</PropertyGroup>
|
|
20
20
|
</Project>
|
|
@@ -237,6 +237,8 @@ std::map<string, dynamic> HttpModule::getConstants() {
|
|
|
237
237
|
|
|
238
238
|
// clang-format off
|
|
239
239
|
std::vector<facebook::xplat::module::CxxModule::Method> HttpModule::getMethods() {
|
|
240
|
+
// See CxxNativeModule::lazyInit()
|
|
241
|
+
SetUpHttpResource(m_resource, getInstance(), m_inspectableProperties);
|
|
240
242
|
|
|
241
243
|
return
|
|
242
244
|
{
|
|
@@ -249,12 +251,6 @@ std::vector<facebook::xplat::module::CxxModule::Method> HttpModule::getMethods()
|
|
|
249
251
|
return;
|
|
250
252
|
}
|
|
251
253
|
|
|
252
|
-
auto resource = holder->Module->m_resource;
|
|
253
|
-
if (!holder->Module->m_isResourceSetup)
|
|
254
|
-
{
|
|
255
|
-
SetUpHttpResource(resource, holder->Module->getInstance(), holder->Module->m_inspectableProperties);
|
|
256
|
-
holder->Module->m_isResourceSetup = true;
|
|
257
|
-
}
|
|
258
254
|
holder->Module->m_requestId++;
|
|
259
255
|
|
|
260
256
|
auto params = facebook::xplat::jsArgAsObject(args, 0);
|
|
@@ -263,7 +259,7 @@ std::vector<facebook::xplat::module::CxxModule::Method> HttpModule::getMethods()
|
|
|
263
259
|
headers.emplace(header.first.getString(), header.second.getString());
|
|
264
260
|
}
|
|
265
261
|
|
|
266
|
-
|
|
262
|
+
holder->Module->m_resource->SendRequest(
|
|
267
263
|
params["method"].asString(),
|
|
268
264
|
params["url"].asString(),
|
|
269
265
|
holder->Module->m_requestId,
|
|
@@ -289,14 +285,7 @@ std::vector<facebook::xplat::module::CxxModule::Method> HttpModule::getMethods()
|
|
|
289
285
|
return;
|
|
290
286
|
}
|
|
291
287
|
|
|
292
|
-
|
|
293
|
-
if (!holder->Module->m_isResourceSetup)
|
|
294
|
-
{
|
|
295
|
-
SetUpHttpResource(resource, holder->Module->getInstance(), holder->Module->m_inspectableProperties);
|
|
296
|
-
holder->Module->m_isResourceSetup = true;
|
|
297
|
-
}
|
|
298
|
-
|
|
299
|
-
resource->AbortRequest(facebook::xplat::jsArgAsInt(args, 0));
|
|
288
|
+
holder->Module->m_resource->AbortRequest(facebook::xplat::jsArgAsInt(args, 0));
|
|
300
289
|
}
|
|
301
290
|
},
|
|
302
291
|
{
|
|
@@ -309,14 +298,7 @@ std::vector<facebook::xplat::module::CxxModule::Method> HttpModule::getMethods()
|
|
|
309
298
|
return;
|
|
310
299
|
}
|
|
311
300
|
|
|
312
|
-
|
|
313
|
-
if (!holder->Module->m_isResourceSetup)
|
|
314
|
-
{
|
|
315
|
-
SetUpHttpResource(resource, holder->Module->getInstance(), holder->Module->m_inspectableProperties);
|
|
316
|
-
holder->Module->m_isResourceSetup = true;
|
|
317
|
-
}
|
|
318
|
-
|
|
319
|
-
resource->ClearCookies();
|
|
301
|
+
holder->Module->m_resource->ClearCookies();
|
|
320
302
|
}
|
|
321
303
|
}
|
|
322
304
|
};
|
|
@@ -331,6 +313,11 @@ std::vector<facebook::xplat::module::CxxModule::Method> HttpModule::getMethods()
|
|
|
331
313
|
return s_moduleName;
|
|
332
314
|
}
|
|
333
315
|
|
|
316
|
+
/*extern*/ std::unique_ptr<facebook::xplat::module::CxxModule> CreateHttpModule(
|
|
317
|
+
IInspectable const &inspectableProperties) noexcept {
|
|
318
|
+
return std::make_unique<HttpModule>(inspectableProperties);
|
|
319
|
+
}
|
|
320
|
+
|
|
334
321
|
/*extern*/ const wchar_t *GetHttpTurboModuleName() noexcept {
|
|
335
322
|
return s_moduleNameW;
|
|
336
323
|
}
|
|
@@ -84,7 +84,6 @@ class HttpModule : public facebook::xplat::module::CxxModule {
|
|
|
84
84
|
|
|
85
85
|
std::shared_ptr<Networking::IHttpResource> m_resource;
|
|
86
86
|
std::shared_ptr<ModuleHolder> m_holder;
|
|
87
|
-
bool m_isResourceSetup{false};
|
|
88
87
|
int64_t m_requestId{0};
|
|
89
88
|
|
|
90
89
|
// Property bag high level reference.
|
|
@@ -145,8 +145,13 @@ void DefaultBlobResource::AddNetworkingHandler() noexcept /*override*/ {
|
|
|
145
145
|
httpHandler->AddRequestBodyHandler(m_requestBodyHandler);
|
|
146
146
|
httpHandler->AddResponseHandler(m_responseHandler);
|
|
147
147
|
}
|
|
148
|
+
} else {
|
|
149
|
+
// #11439 - The absence of HttpModule.Proxy may be caused by a module initialization race condition.
|
|
150
|
+
// Best-effort approach to set up the request/response handlers by exposing this interface to dependents
|
|
151
|
+
// (i.e. IHttpResource).
|
|
152
|
+
auto propId = msrn::ReactPropertyId<msrn::ReactNonAbiValue<weak_ptr<IBlobResource>>>{L"Blob.Resource"};
|
|
153
|
+
m_propertyBag.Set(propId, weak_ptr<IBlobResource>(shared_from_this()));
|
|
148
154
|
}
|
|
149
|
-
// TODO: else emit error?
|
|
150
155
|
}
|
|
151
156
|
|
|
152
157
|
void DefaultBlobResource::AddWebSocketHandler(int64_t id) noexcept /*override*/ {
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
#include "WinRTHttpResource.h"
|
|
7
7
|
|
|
8
8
|
#include <CppRuntimeOptions.h>
|
|
9
|
+
#include <Networking/IBlobResource.h>
|
|
9
10
|
#include <ReactPropertyBag.h>
|
|
10
11
|
#include <Utils/CppWinrtLessExceptions.h>
|
|
11
12
|
#include <Utils/WinRTConversions.h>
|
|
@@ -672,6 +673,14 @@ void WinRTHttpResource::AddResponseHandler(shared_ptr<IResponseHandler> response
|
|
|
672
673
|
auto propBag = ReactPropertyBag{inspectableProperties.try_as<IReactPropertyBag>()};
|
|
673
674
|
auto moduleProxy = weak_ptr<IHttpModuleProxy>{result};
|
|
674
675
|
propBag.Set(propId, std::move(moduleProxy));
|
|
676
|
+
|
|
677
|
+
// #11439 - Best-effort attempt to set up the HTTP handler after an initial call to addNetworkingHandler failed.
|
|
678
|
+
auto blobRcPropId = ReactPropertyId<ReactNonAbiValue<weak_ptr<Networking::IBlobResource>>>{L"Blob.Resource"};
|
|
679
|
+
if (auto prop = propBag.Get(blobRcPropId)) {
|
|
680
|
+
if (auto blobRc = prop.Value().lock()) {
|
|
681
|
+
blobRc->AddNetworkingHandler();
|
|
682
|
+
}
|
|
683
|
+
}
|
|
675
684
|
}
|
|
676
685
|
|
|
677
686
|
return result;
|
package/Shared/OInstance.cpp
CHANGED
|
@@ -26,7 +26,6 @@
|
|
|
26
26
|
#include <cxxreact/ModuleRegistry.h>
|
|
27
27
|
|
|
28
28
|
#include <Modules/ExceptionsManagerModule.h>
|
|
29
|
-
#include <Modules/HttpModule.h>
|
|
30
29
|
#include <Modules/PlatformConstantsModule.h>
|
|
31
30
|
#include <Modules/SourceCodeModule.h>
|
|
32
31
|
#include <Modules/StatusBarManagerModule.h>
|
|
@@ -68,15 +67,6 @@ using namespace Microsoft::JSI;
|
|
|
68
67
|
using std::make_shared;
|
|
69
68
|
using winrt::Microsoft::ReactNative::ReactPropertyBagHelper;
|
|
70
69
|
|
|
71
|
-
namespace Microsoft::React {
|
|
72
|
-
|
|
73
|
-
/*extern*/ std::unique_ptr<facebook::xplat::module::CxxModule> CreateHttpModule(
|
|
74
|
-
winrt::Windows::Foundation::IInspectable const &inspectableProperties) noexcept {
|
|
75
|
-
return std::make_unique<HttpModule>(inspectableProperties);
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
} // namespace Microsoft::React
|
|
79
|
-
|
|
80
70
|
namespace facebook {
|
|
81
71
|
namespace react {
|
|
82
72
|
|
|
@@ -543,6 +533,10 @@ std::vector<std::unique_ptr<NativeModule>> InstanceImpl::GetDefaultNativeModules
|
|
|
543
533
|
std::vector<std::unique_ptr<NativeModule>> modules;
|
|
544
534
|
auto transitionalProps{ReactPropertyBagHelper::CreatePropertyBag()};
|
|
545
535
|
|
|
536
|
+
// These modules are instantiated separately in MSRN (Universal Windows).
|
|
537
|
+
// When there are module name collisions, the last one registered is used.
|
|
538
|
+
// If this code is enabled, we will have unused module instances.
|
|
539
|
+
// Also, MSRN has a different property bag mechanism incompatible with this method's transitionalProps variable.
|
|
546
540
|
#if (defined(_MSC_VER) && !defined(WINRT))
|
|
547
541
|
modules.push_back(std::make_unique<CxxNativeModule>(
|
|
548
542
|
m_innerInstance,
|
|
@@ -551,7 +545,6 @@ std::vector<std::unique_ptr<NativeModule>> InstanceImpl::GetDefaultNativeModules
|
|
|
551
545
|
return Microsoft::React::CreateHttpModule(transitionalProps);
|
|
552
546
|
},
|
|
553
547
|
nativeQueue));
|
|
554
|
-
#endif
|
|
555
548
|
|
|
556
549
|
modules.push_back(std::make_unique<CxxNativeModule>(
|
|
557
550
|
m_innerInstance,
|
|
@@ -561,11 +554,18 @@ std::vector<std::unique_ptr<NativeModule>> InstanceImpl::GetDefaultNativeModules
|
|
|
561
554
|
},
|
|
562
555
|
nativeQueue));
|
|
563
556
|
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
557
|
+
modules.push_back(std::make_unique<CxxNativeModule>(
|
|
558
|
+
m_innerInstance,
|
|
559
|
+
Microsoft::React::GetBlobModuleName(),
|
|
560
|
+
[transitionalProps]() { return Microsoft::React::CreateBlobModule(transitionalProps); },
|
|
561
|
+
nativeQueue));
|
|
562
|
+
|
|
563
|
+
modules.push_back(std::make_unique<CxxNativeModule>(
|
|
564
|
+
m_innerInstance,
|
|
565
|
+
Microsoft::React::GetFileReaderModuleName(),
|
|
566
|
+
[transitionalProps]() { return Microsoft::React::CreateFileReaderModule(transitionalProps); },
|
|
567
|
+
nativeQueue));
|
|
568
|
+
|
|
569
569
|
modules.push_back(std::make_unique<CxxNativeModule>(
|
|
570
570
|
m_innerInstance,
|
|
571
571
|
"Timing",
|
|
@@ -620,26 +620,6 @@ std::vector<std::unique_ptr<NativeModule>> InstanceImpl::GetDefaultNativeModules
|
|
|
620
620
|
[]() { return std::make_unique<StatusBarManagerModule>(); },
|
|
621
621
|
nativeQueue));
|
|
622
622
|
|
|
623
|
-
// These modules are instantiated separately in MSRN (Universal Windows).
|
|
624
|
-
// When there are module name colisions, the last one registered is used.
|
|
625
|
-
// If this code is enabled, we will have unused module instances.
|
|
626
|
-
// Also, MSRN has a different property bag mechanism incompatible with this method's transitionalProps variable.
|
|
627
|
-
#if (defined(_MSC_VER) && !defined(WINRT))
|
|
628
|
-
if (Microsoft::React::GetRuntimeOptionBool("Blob.EnableModule")) {
|
|
629
|
-
modules.push_back(std::make_unique<CxxNativeModule>(
|
|
630
|
-
m_innerInstance,
|
|
631
|
-
Microsoft::React::GetBlobModuleName(),
|
|
632
|
-
[transitionalProps]() { return Microsoft::React::CreateBlobModule(transitionalProps); },
|
|
633
|
-
nativeQueue));
|
|
634
|
-
|
|
635
|
-
modules.push_back(std::make_unique<CxxNativeModule>(
|
|
636
|
-
m_innerInstance,
|
|
637
|
-
Microsoft::React::GetFileReaderModuleName(),
|
|
638
|
-
[transitionalProps]() { return Microsoft::React::CreateFileReaderModule(transitionalProps); },
|
|
639
|
-
nativeQueue));
|
|
640
|
-
}
|
|
641
|
-
#endif
|
|
642
|
-
|
|
643
623
|
return modules;
|
|
644
624
|
}
|
|
645
625
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-native-windows",
|
|
3
|
-
"version": "0.72.
|
|
3
|
+
"version": "0.72.4",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
"@react-native-community/cli": "11.3.5",
|
|
27
27
|
"@react-native-community/cli-platform-android": "11.3.5",
|
|
28
28
|
"@react-native-community/cli-platform-ios": "11.3.5",
|
|
29
|
-
"@react-native-windows/cli": "0.72.
|
|
29
|
+
"@react-native-windows/cli": "0.72.1",
|
|
30
30
|
"@react-native/assets": "1.0.0",
|
|
31
31
|
"@react-native/assets-registry": "^0.72.0",
|
|
32
32
|
"@react-native/codegen": "^0.72.6",
|
|
@@ -63,7 +63,7 @@
|
|
|
63
63
|
"yargs": "^17.6.2"
|
|
64
64
|
},
|
|
65
65
|
"devDependencies": {
|
|
66
|
-
"@react-native-windows/codegen": "0.72.
|
|
66
|
+
"@react-native-windows/codegen": "0.72.1",
|
|
67
67
|
"@rnw-scripts/babel-react-native-config": "0.0.0",
|
|
68
68
|
"@rnw-scripts/eslint-config": "1.1.15",
|
|
69
69
|
"@rnw-scripts/jest-out-of-tree-snapshot-resolver": "^1.1.1",
|