react-native-windows 0.70.17 → 0.70.19

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.
@@ -10,11 +10,11 @@
10
10
  -->
11
11
  <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
12
12
  <PropertyGroup>
13
- <ReactNativeWindowsVersion>0.70.17</ReactNativeWindowsVersion>
13
+ <ReactNativeWindowsVersion>0.70.19</ReactNativeWindowsVersion>
14
14
  <ReactNativeWindowsMajor>0</ReactNativeWindowsMajor>
15
15
  <ReactNativeWindowsMinor>70</ReactNativeWindowsMinor>
16
- <ReactNativeWindowsPatch>17</ReactNativeWindowsPatch>
16
+ <ReactNativeWindowsPatch>19</ReactNativeWindowsPatch>
17
17
  <ReactNativeWindowsCanary>false</ReactNativeWindowsCanary>
18
- <ReactNativeWindowsCommitId>68b84329ffbe2e097d7385d7bc38386979b7003d</ReactNativeWindowsCommitId>
18
+ <ReactNativeWindowsCommitId>c17217ec1dae6533fdc9c1b229d8308a1f61d792</ReactNativeWindowsCommitId>
19
19
  </PropertyGroup>
20
20
  </Project>
@@ -18,7 +18,7 @@
18
18
  <EnableDevServerHBCBundles Condition="'$(EnableDevServerHBCBundles)' == ''">false</EnableDevServerHBCBundles>
19
19
 
20
20
  <UseV8 Condition="'$(UseV8)' == ''">false</UseV8>
21
- <V8Version Condition="'$(V8Version)' == ''">0.70.1</V8Version>
21
+ <V8Version Condition="'$(V8Version)' == ''">0.70.3</V8Version>
22
22
  <V8PackageName>ReactNative.V8Jsi.Windows</V8PackageName>
23
23
  <V8PackageName Condition="'$(V8AppPlatform)' != 'win32'">$(V8PackageName).UWP</V8PackageName>
24
24
  </PropertyGroup>
@@ -11,57 +11,75 @@ using std::unique_ptr;
11
11
 
12
12
  namespace Microsoft::JSI {
13
13
 
14
- struct NapiTask {
15
- NapiTask(
16
- napi_env env,
17
- napi_ext_task_callback taskCallback,
18
- void *taskData,
19
- napi_finalize finalizeCallback,
20
- void *finalizeHint) noexcept
21
- : m_env{env},
22
- m_taskCallback{taskCallback},
23
- m_taskData{taskData},
24
- m_finalizeCallback{finalizeCallback},
25
- m_finalizeHint{finalizeHint} {}
26
-
27
- NapiTask(const NapiTask &) = delete;
28
- NapiTask &operator=(const NapiTask &) = delete;
14
+ class NapiTask {
15
+ public:
16
+ NapiTask(void *task, v8_task_run_cb onTaskRun, v8_task_release_cb onTaskRelease)
17
+ : task_(task), onTaskRun_(onTaskRun), onTaskRelease_(onTaskRelease) {}
18
+
19
+ NapiTask(NapiTask &&other)
20
+ : task_(std::exchange(other.task_, nullptr)),
21
+ onTaskRun_(std::exchange(other.onTaskRun_, nullptr)),
22
+ onTaskRelease_(std::exchange(other.onTaskRelease_, nullptr)) {}
23
+
24
+ NapiTask &operator=(NapiTask &&other) {
25
+ if (this != &other) {
26
+ NapiTask taskToDelete(std::move(*this));
27
+ task_ = std::exchange(other.task_, nullptr);
28
+ onTaskRun_ = std::exchange(other.onTaskRun_, nullptr);
29
+ onTaskRelease_ = std::exchange(other.onTaskRelease_, nullptr);
30
+ }
31
+ return *this;
32
+ }
33
+
34
+ NapiTask(const NapiTask &other) = delete;
35
+ NapiTask &operator=(const NapiTask &other) = delete;
29
36
 
30
37
  ~NapiTask() {
31
- if (m_finalizeCallback) {
32
- m_finalizeCallback(m_env, m_taskData, m_finalizeHint);
38
+ if (task_ != nullptr) {
39
+ onTaskRelease_(task_);
33
40
  }
34
41
  }
35
42
 
36
- void operator()() noexcept {
37
- m_taskCallback(m_env, m_taskData);
43
+ void Run() const {
44
+ if (task_ != nullptr) {
45
+ onTaskRun_(task_);
46
+ }
38
47
  }
39
48
 
40
49
  private:
41
- napi_env m_env;
42
- napi_ext_task_callback m_taskCallback;
43
- void *m_taskData;
44
- napi_finalize m_finalizeCallback;
45
- void *m_finalizeHint;
50
+ void *task_;
51
+ v8_task_run_cb onTaskRun_;
52
+ v8_task_release_cb onTaskRelease_;
46
53
  };
47
54
 
48
- // See napi_ext_schedule_task_callback definition.
49
- /*static*/ void NapiJsiV8RuntimeHolder::ScheduleTaskCallback(
50
- napi_env env,
51
- napi_ext_task_callback taskCallback,
52
- void *taskData,
53
- uint32_t /*delayInMsec*/,
54
- napi_finalize finalizeCallback,
55
- void *finalizeHint) {
56
- NapiJsiV8RuntimeHolder *holder;
57
- auto result = napi_get_instance_data(env, (void **)&holder);
58
- if (result != napi_status::napi_ok) {
59
- std::terminate();
55
+ class NapiTaskRunner {
56
+ public:
57
+ NapiTaskRunner(std::shared_ptr<facebook::react::MessageQueueThread> jsQueue) : m_jsQueue(std::move(jsQueue)) {}
58
+
59
+ static v8_task_runner_t Create(std::shared_ptr<facebook::react::MessageQueueThread> jsQueue) {
60
+ NapiTaskRunner *taskRunner = new NapiTaskRunner(std::move(jsQueue));
61
+ return v8_create_task_runner(reinterpret_cast<void *>(taskRunner), &PostTask, &Release);
60
62
  }
61
63
 
62
- auto task = std::make_shared<NapiTask>(env, taskCallback, taskData, finalizeCallback, finalizeHint);
63
- holder->m_jsQueue->runOnQueue([task = std::move(task)]() { task->operator()(); });
64
- }
64
+ private:
65
+ static void __cdecl PostTask(
66
+ void *taskRunner,
67
+ void *task,
68
+ v8_task_run_cb onTaskRun,
69
+ v8_task_release_cb onTaskRelease) {
70
+ auto napiTask = std::make_shared<NapiTask>(task, onTaskRun, onTaskRelease);
71
+ reinterpret_cast<NapiTaskRunner *>(taskRunner)->m_jsQueue->runOnQueue([napiTask = std::move(napiTask)] {
72
+ napiTask->Run();
73
+ });
74
+ }
75
+
76
+ static void __cdecl Release(void *taskRunner) {
77
+ delete reinterpret_cast<NapiTaskRunner *>(taskRunner);
78
+ }
79
+
80
+ private:
81
+ std::shared_ptr<facebook::react::MessageQueueThread> m_jsQueue;
82
+ };
65
83
 
66
84
  NapiJsiV8RuntimeHolder::NapiJsiV8RuntimeHolder(
67
85
  shared_ptr<DevSettings> devSettings,
@@ -85,7 +103,7 @@ void NapiJsiV8RuntimeHolder::InitRuntime() noexcept {
85
103
  settings.flags.enable_inspector = m_useDirectDebugger;
86
104
  settings.flags.wait_for_debugger = m_debuggerBreakOnNextLine;
87
105
  // TODO: args.debuggerRuntimeName = debuggerRuntimeName_;
88
- settings.foreground_scheduler = &NapiJsiV8RuntimeHolder::ScheduleTaskCallback;
106
+ settings.foreground_task_runner = NapiTaskRunner::Create(m_jsQueue);
89
107
 
90
108
  napi_ext_script_cache scriptCache = InitScriptCache(std::move(m_preparedScriptStore));
91
109
  settings.script_cache = &scriptCache;
@@ -24,14 +24,6 @@ class NapiJsiV8RuntimeHolder : public Microsoft::JSI::RuntimeHolderLazyInit {
24
24
  std::unique_ptr<facebook::jsi::PreparedScriptStore> &&preparedScriptStore) noexcept;
25
25
 
26
26
  private:
27
- static void __cdecl ScheduleTaskCallback(
28
- napi_env env,
29
- napi_ext_task_callback taskCb,
30
- void *taskData,
31
- uint32_t delayMs,
32
- napi_finalize finalizeCb,
33
- void *finalizeHint);
34
-
35
27
  void InitRuntime() noexcept;
36
28
  napi_ext_script_cache InitScriptCache(
37
29
  std::unique_ptr<facebook::jsi::PreparedScriptStore> &&preparedScriptStore) noexcept;
@@ -5,6 +5,7 @@
5
5
 
6
6
  #include <functional>
7
7
  #include <map>
8
+ #include <memory>
8
9
  #include <string>
9
10
  #include <vector>
10
11
 
@@ -37,22 +37,26 @@ namespace Microsoft::React::Networking {
37
37
 
38
38
  #pragma region OriginPolicyHttpFilter
39
39
 
40
- #pragma region ConstWcharComparer
40
+ #pragma region CaseInsensitiveComparer
41
41
 
42
- bool OriginPolicyHttpFilter::ConstWcharComparer::operator()(const wchar_t *a, const wchar_t *b) const {
42
+ bool OriginPolicyHttpFilter::CaseInsensitiveComparer::operator()(const wchar_t *a, const wchar_t *b) const {
43
43
  return _wcsicmp(a, b) < 0;
44
44
  }
45
45
 
46
- #pragma endregion ConstWcharComparer
46
+ bool OriginPolicyHttpFilter::CaseInsensitiveComparer::operator()(const wstring &a, const wstring &b) const {
47
+ return _wcsicmp(a.c_str(), b.c_str()) < 0;
48
+ }
49
+
50
+ #pragma endregion CaseInsensitiveComparer
47
51
 
48
52
  // https://fetch.spec.whatwg.org/#forbidden-method
49
- /*static*/ set<const wchar_t *, OriginPolicyHttpFilter::ConstWcharComparer> OriginPolicyHttpFilter::s_forbiddenMethods =
50
- {L"CONNECT", L"TRACE", L"TRACK"};
53
+ /*static*/ set<const wchar_t *, OriginPolicyHttpFilter::CaseInsensitiveComparer>
54
+ OriginPolicyHttpFilter::s_forbiddenMethods = {L"CONNECT", L"TRACE", L"TRACK"};
51
55
 
52
- /*static*/ set<const wchar_t *, OriginPolicyHttpFilter::ConstWcharComparer>
56
+ /*static*/ set<const wchar_t *, OriginPolicyHttpFilter::CaseInsensitiveComparer>
53
57
  OriginPolicyHttpFilter::s_simpleCorsMethods = {L"GET", L"HEAD", L"POST"};
54
58
 
55
- /*static*/ set<const wchar_t *, OriginPolicyHttpFilter::ConstWcharComparer>
59
+ /*static*/ set<const wchar_t *, OriginPolicyHttpFilter::CaseInsensitiveComparer>
56
60
  OriginPolicyHttpFilter::s_simpleCorsRequestHeaderNames = {
57
61
  L"Accept",
58
62
  L"Accept-Language",
@@ -64,11 +68,11 @@ bool OriginPolicyHttpFilter::ConstWcharComparer::operator()(const wchar_t *a, co
64
68
  L"Viewport-Width",
65
69
  L"Width"};
66
70
 
67
- /*static*/ set<const wchar_t *, OriginPolicyHttpFilter::ConstWcharComparer>
71
+ /*static*/ set<const wchar_t *, OriginPolicyHttpFilter::CaseInsensitiveComparer>
68
72
  OriginPolicyHttpFilter::s_simpleCorsResponseHeaderNames =
69
73
  {L"Cache-Control", L"Content-Language", L"Content-Type", L"Expires", L"Last-Modified", L"Pragma"};
70
74
 
71
- /*static*/ set<const wchar_t *, OriginPolicyHttpFilter::ConstWcharComparer>
75
+ /*static*/ set<const wchar_t *, OriginPolicyHttpFilter::CaseInsensitiveComparer>
72
76
  OriginPolicyHttpFilter::s_simpleCorsContentTypeValues = {
73
77
  L"application/x-www-form-urlencoded",
74
78
  L"multipart/form-data",
@@ -76,7 +80,7 @@ bool OriginPolicyHttpFilter::ConstWcharComparer::operator()(const wchar_t *a, co
76
80
 
77
81
  // https://fetch.spec.whatwg.org/#forbidden-header-name
78
82
  // Chromium still bans "User-Agent" due to https://crbug.com/571722
79
- /*static*/ set<const wchar_t *, OriginPolicyHttpFilter::ConstWcharComparer>
83
+ /*static*/ set<const wchar_t *, OriginPolicyHttpFilter::CaseInsensitiveComparer>
80
84
  OriginPolicyHttpFilter::s_corsForbiddenRequestHeaderNames = {
81
85
  L"Accept-Charset",
82
86
  L"Accept-Encoding",
@@ -99,13 +103,13 @@ bool OriginPolicyHttpFilter::ConstWcharComparer::operator()(const wchar_t *a, co
99
103
  L"Upgrade",
100
104
  L"Via"};
101
105
 
102
- /*static*/ set<const wchar_t *, OriginPolicyHttpFilter::ConstWcharComparer>
106
+ /*static*/ set<const wchar_t *, OriginPolicyHttpFilter::CaseInsensitiveComparer>
103
107
  OriginPolicyHttpFilter::s_cookieSettingResponseHeaders = {
104
108
  L"Set-Cookie",
105
109
  L"Set-Cookie2", // Deprecated by the spec, but probably still used
106
110
  };
107
111
 
108
- /*static*/ set<const wchar_t *, OriginPolicyHttpFilter::ConstWcharComparer>
112
+ /*static*/ set<const wchar_t *, OriginPolicyHttpFilter::CaseInsensitiveComparer>
109
113
  OriginPolicyHttpFilter::s_corsForbiddenRequestHeaderNamePrefixes = {L"Proxy-", L"Sec-"};
110
114
 
111
115
  /*static*/ Uri OriginPolicyHttpFilter::s_origin{nullptr};
@@ -293,7 +297,7 @@ bool OriginPolicyHttpFilter::ConstWcharComparer::operator()(const wchar_t *a, co
293
297
  }
294
298
 
295
299
  /*static*/ OriginPolicyHttpFilter::AccessControlValues OriginPolicyHttpFilter::ExtractAccessControlValues(
296
- winrt::Windows::Foundation::Collections::IMap<hstring, hstring> const &headers) {
300
+ IMap<hstring, hstring> const &headers) {
297
301
  using std::wregex;
298
302
  using std::wsregex_token_iterator;
299
303
 
@@ -22,19 +22,20 @@ class OriginPolicyHttpFilter
22
22
  : public winrt::
23
23
  implements<OriginPolicyHttpFilter, winrt::Windows::Web::Http::Filters::IHttpFilter, IRedirectEventSource> {
24
24
  public:
25
- struct ConstWcharComparer {
25
+ struct CaseInsensitiveComparer {
26
26
  bool operator()(const wchar_t *, const wchar_t *) const;
27
+ bool operator()(const std::wstring &, const std::wstring &) const;
27
28
  };
28
29
 
29
30
  private:
30
- static std::set<const wchar_t *, ConstWcharComparer> s_forbiddenMethods;
31
- static std::set<const wchar_t *, ConstWcharComparer> s_simpleCorsMethods;
32
- static std::set<const wchar_t *, ConstWcharComparer> s_simpleCorsRequestHeaderNames;
33
- static std::set<const wchar_t *, ConstWcharComparer> s_simpleCorsResponseHeaderNames;
34
- static std::set<const wchar_t *, ConstWcharComparer> s_simpleCorsContentTypeValues;
35
- static std::set<const wchar_t *, ConstWcharComparer> s_corsForbiddenRequestHeaderNames;
36
- static std::set<const wchar_t *, ConstWcharComparer> s_corsForbiddenRequestHeaderNamePrefixes;
37
- static std::set<const wchar_t *, ConstWcharComparer> s_cookieSettingResponseHeaders;
31
+ static std::set<const wchar_t *, CaseInsensitiveComparer> s_forbiddenMethods;
32
+ static std::set<const wchar_t *, CaseInsensitiveComparer> s_simpleCorsMethods;
33
+ static std::set<const wchar_t *, CaseInsensitiveComparer> s_simpleCorsRequestHeaderNames;
34
+ static std::set<const wchar_t *, CaseInsensitiveComparer> s_simpleCorsResponseHeaderNames;
35
+ static std::set<const wchar_t *, CaseInsensitiveComparer> s_simpleCorsContentTypeValues;
36
+ static std::set<const wchar_t *, CaseInsensitiveComparer> s_corsForbiddenRequestHeaderNames;
37
+ static std::set<const wchar_t *, CaseInsensitiveComparer> s_corsForbiddenRequestHeaderNamePrefixes;
38
+ static std::set<const wchar_t *, CaseInsensitiveComparer> s_cookieSettingResponseHeaders;
38
39
 
39
40
  // NOTE: Assumes static origin through owning client/resource/module/(React) instance's lifetime.
40
41
  static winrt::Windows::Foundation::Uri s_origin;
@@ -42,9 +43,9 @@ class OriginPolicyHttpFilter
42
43
  struct AccessControlValues {
43
44
  winrt::hstring AllowedOrigin;
44
45
  winrt::hstring AllowedCredentials;
45
- std::set<std::wstring> AllowedHeaders;
46
+ std::set<std::wstring, CaseInsensitiveComparer> AllowedHeaders;
46
47
  std::set<std::wstring> AllowedMethods;
47
- std::set<std::wstring> ExposedHeaders;
48
+ std::set<std::wstring, CaseInsensitiveComparer> ExposedHeaders;
48
49
  size_t MaxAge;
49
50
  };
50
51
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-windows",
3
- "version": "0.70.17",
3
+ "version": "0.70.19",
4
4
  "license": "MIT",
5
5
  "repository": {
6
6
  "type": "git",