@javascriptcommon/react-native-webview 13.12.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (120) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +82 -0
  3. package/android/build.gradle +110 -0
  4. package/android/gradle.properties +5 -0
  5. package/android/src/main/AndroidManifest.xml +15 -0
  6. package/android/src/main/AndroidManifestNew.xml +13 -0
  7. package/android/src/main/java/com/reactnativecommunity/webview/RNCBasicAuthCredential.java +11 -0
  8. package/android/src/main/java/com/reactnativecommunity/webview/RNCWebChromeClient.java +372 -0
  9. package/android/src/main/java/com/reactnativecommunity/webview/RNCWebView.java +450 -0
  10. package/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewClient.java +328 -0
  11. package/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewConfig.java +11 -0
  12. package/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewFileProvider.java +14 -0
  13. package/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewManagerImpl.kt +720 -0
  14. package/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewMessagingModule.kt +19 -0
  15. package/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewModuleImpl.java +554 -0
  16. package/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewPackage.java +56 -0
  17. package/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewWrapper.kt +39 -0
  18. package/android/src/main/java/com/reactnativecommunity/webview/URLUtil.java +179 -0
  19. package/android/src/main/java/com/reactnativecommunity/webview/events/TopCustomMenuSelectionEvent.kt +24 -0
  20. package/android/src/main/java/com/reactnativecommunity/webview/events/TopHttpErrorEvent.kt +25 -0
  21. package/android/src/main/java/com/reactnativecommunity/webview/events/TopLoadingErrorEvent.kt +25 -0
  22. package/android/src/main/java/com/reactnativecommunity/webview/events/TopLoadingFinishEvent.kt +24 -0
  23. package/android/src/main/java/com/reactnativecommunity/webview/events/TopLoadingProgressEvent.kt +24 -0
  24. package/android/src/main/java/com/reactnativecommunity/webview/events/TopLoadingStartEvent.kt +25 -0
  25. package/android/src/main/java/com/reactnativecommunity/webview/events/TopMessageEvent.kt +24 -0
  26. package/android/src/main/java/com/reactnativecommunity/webview/events/TopNewWindowEvent.kt +25 -0
  27. package/android/src/main/java/com/reactnativecommunity/webview/events/TopRenderProcessGoneEvent.kt +26 -0
  28. package/android/src/main/java/com/reactnativecommunity/webview/events/TopShouldStartLoadWithRequestEvent.kt +29 -0
  29. package/android/src/main/res/xml/file_provider_paths.xml +6 -0
  30. package/android/src/newarch/com/reactnativecommunity/webview/RNCWebViewManager.java +553 -0
  31. package/android/src/newarch/com/reactnativecommunity/webview/RNCWebViewModule.java +63 -0
  32. package/android/src/oldarch/com/reactnativecommunity/webview/RNCWebViewManager.java +328 -0
  33. package/android/src/oldarch/com/reactnativecommunity/webview/RNCWebViewModule.java +59 -0
  34. package/apple/RCTConvert+WKDataDetectorTypes.h +11 -0
  35. package/apple/RCTConvert+WKDataDetectorTypes.m +27 -0
  36. package/apple/RNCWKProcessPoolManager.h +15 -0
  37. package/apple/RNCWKProcessPoolManager.m +36 -0
  38. package/apple/RNCWebView.h +35 -0
  39. package/apple/RNCWebView.mm +546 -0
  40. package/apple/RNCWebViewDecisionManager.h +20 -0
  41. package/apple/RNCWebViewDecisionManager.m +47 -0
  42. package/apple/RNCWebViewImpl.h +161 -0
  43. package/apple/RNCWebViewImpl.m +1979 -0
  44. package/apple/RNCWebViewManager.h +9 -0
  45. package/apple/RNCWebViewManager.mm +215 -0
  46. package/apple/RNCWebViewModule.h +23 -0
  47. package/apple/RNCWebViewModule.mm +34 -0
  48. package/index.d.ts +65 -0
  49. package/index.js +4 -0
  50. package/ios/RNCWebView.xcodeproj/project.pbxproj +273 -0
  51. package/lib/NativeRNCWebViewModule.d.ts +10 -0
  52. package/lib/NativeRNCWebViewModule.js +1 -0
  53. package/lib/RNCWebViewNativeComponent.d.ts +242 -0
  54. package/lib/RNCWebViewNativeComponent.js +1 -0
  55. package/lib/WebView.android.d.ts +6 -0
  56. package/lib/WebView.android.js +1 -0
  57. package/lib/WebView.d.ts +6 -0
  58. package/lib/WebView.ios.d.ts +6 -0
  59. package/lib/WebView.ios.js +1 -0
  60. package/lib/WebView.js +1 -0
  61. package/lib/WebView.macos.d.ts +6 -0
  62. package/lib/WebView.macos.js +1 -0
  63. package/lib/WebView.styles.d.ts +38 -0
  64. package/lib/WebView.styles.js +1 -0
  65. package/lib/WebView.windows.d.ts +17 -0
  66. package/lib/WebView.windows.js +1 -0
  67. package/lib/WebViewNativeComponent.macos.d.ts +3 -0
  68. package/lib/WebViewNativeComponent.macos.js +1 -0
  69. package/lib/WebViewNativeComponent.windows.d.ts +3 -0
  70. package/lib/WebViewNativeComponent.windows.js +1 -0
  71. package/lib/WebViewShared.d.ts +38 -0
  72. package/lib/WebViewShared.js +1 -0
  73. package/lib/WebViewTypes.d.ts +1093 -0
  74. package/lib/WebViewTypes.js +1 -0
  75. package/lib/index.d.ts +3 -0
  76. package/lib/index.js +1 -0
  77. package/macos/RNCWebView.xcodeproj/project.pbxproj +363 -0
  78. package/package.json +101 -0
  79. package/react-native-webview.podspec +46 -0
  80. package/react-native.config.js +44 -0
  81. package/src/NativeRNCWebViewModule.ts +15 -0
  82. package/src/RNCWebViewNativeComponent.ts +342 -0
  83. package/src/WebView.android.tsx +317 -0
  84. package/src/WebView.ios.tsx +299 -0
  85. package/src/WebView.macos.tsx +245 -0
  86. package/src/WebView.styles.ts +41 -0
  87. package/src/WebView.tsx +25 -0
  88. package/src/WebView.windows.tsx +210 -0
  89. package/src/WebViewNativeComponent.macos.ts +7 -0
  90. package/src/WebViewNativeComponent.windows.ts +8 -0
  91. package/src/WebViewShared.tsx +283 -0
  92. package/src/WebViewTypes.ts +1332 -0
  93. package/src/__tests__/WebViewShared-test.js +323 -0
  94. package/src/__tests__/__snapshots__/WebViewShared-test.js.snap +8 -0
  95. package/src/index.ts +4 -0
  96. package/windows/ExperimentalFeatures.props +11 -0
  97. package/windows/ReactNativeWebView/PropertySheet.props +16 -0
  98. package/windows/ReactNativeWebView/ReactNativeWebView.def +3 -0
  99. package/windows/ReactNativeWebView/ReactNativeWebView.filters +33 -0
  100. package/windows/ReactNativeWebView/ReactNativeWebView.vcxproj +189 -0
  101. package/windows/ReactNativeWebView/ReactPackageProvider.cpp +26 -0
  102. package/windows/ReactNativeWebView/ReactPackageProvider.h +20 -0
  103. package/windows/ReactNativeWebView/ReactPackageProvider.idl +7 -0
  104. package/windows/ReactNativeWebView/ReactWebView.cpp +242 -0
  105. package/windows/ReactNativeWebView/ReactWebView.h +56 -0
  106. package/windows/ReactNativeWebView/ReactWebView.idl +31 -0
  107. package/windows/ReactNativeWebView/ReactWebView2.cpp +473 -0
  108. package/windows/ReactNativeWebView/ReactWebView2.h +91 -0
  109. package/windows/ReactNativeWebView/ReactWebView2Manager.cpp +205 -0
  110. package/windows/ReactNativeWebView/ReactWebView2Manager.h +57 -0
  111. package/windows/ReactNativeWebView/ReactWebViewHelpers.cpp +70 -0
  112. package/windows/ReactNativeWebView/ReactWebViewHelpers.h +16 -0
  113. package/windows/ReactNativeWebView/ReactWebViewManager.cpp +224 -0
  114. package/windows/ReactNativeWebView/ReactWebViewManager.h +58 -0
  115. package/windows/ReactNativeWebView/WebBridge.cpp +19 -0
  116. package/windows/ReactNativeWebView/WebBridge.h +24 -0
  117. package/windows/ReactNativeWebView/WebBridge.idl +11 -0
  118. package/windows/ReactNativeWebView/pch.cpp +1 -0
  119. package/windows/ReactNativeWebView/pch.h +37 -0
  120. package/windows/ReactNativeWebView.sln +185 -0
@@ -0,0 +1,328 @@
1
+ package com.reactnativecommunity.webview;
2
+
3
+ import androidx.annotation.NonNull;
4
+ import androidx.annotation.Nullable;
5
+
6
+ import com.facebook.react.bridge.ReadableArray;
7
+ import com.facebook.react.bridge.ReadableMap;
8
+ import com.facebook.react.common.MapBuilder;
9
+ import com.facebook.react.uimanager.ThemedReactContext;
10
+ import com.facebook.react.uimanager.ViewGroupManager;
11
+ import com.facebook.react.uimanager.annotations.ReactProp;
12
+ import com.facebook.react.views.scroll.ScrollEventType;
13
+ import com.reactnativecommunity.webview.events.TopCustomMenuSelectionEvent;
14
+ import com.reactnativecommunity.webview.events.TopHttpErrorEvent;
15
+ import com.reactnativecommunity.webview.events.TopLoadingErrorEvent;
16
+ import com.reactnativecommunity.webview.events.TopLoadingFinishEvent;
17
+ import com.reactnativecommunity.webview.events.TopLoadingProgressEvent;
18
+ import com.reactnativecommunity.webview.events.TopLoadingStartEvent;
19
+ import com.reactnativecommunity.webview.events.TopMessageEvent;
20
+ import com.reactnativecommunity.webview.events.TopOpenWindowEvent;
21
+ import com.reactnativecommunity.webview.events.TopRenderProcessGoneEvent;
22
+ import com.reactnativecommunity.webview.events.TopShouldStartLoadWithRequestEvent;
23
+
24
+ import java.util.Map;
25
+
26
+ public class RNCWebViewManager extends ViewGroupManager<RNCWebViewWrapper> {
27
+
28
+ private final RNCWebViewManagerImpl mRNCWebViewManagerImpl;
29
+
30
+ public RNCWebViewManager() {
31
+ mRNCWebViewManagerImpl = new RNCWebViewManagerImpl();
32
+ }
33
+
34
+ @Override
35
+ public String getName() {
36
+ return RNCWebViewManagerImpl.NAME;
37
+ }
38
+
39
+ @Override
40
+ public RNCWebViewWrapper createViewInstance(ThemedReactContext context) {
41
+ return mRNCWebViewManagerImpl.createViewInstance(context);
42
+ }
43
+
44
+ public RNCWebViewWrapper createViewInstance(ThemedReactContext context, RNCWebView view) {
45
+ return mRNCWebViewManagerImpl.createViewInstance(context, view);
46
+ }
47
+
48
+ @ReactProp(name = "allowFileAccess")
49
+ public void setAllowFileAccess(RNCWebViewWrapper view, boolean value) {
50
+ mRNCWebViewManagerImpl.setAllowFileAccess(view, value);
51
+ }
52
+
53
+ @ReactProp(name = "allowFileAccessFromFileURLs")
54
+ public void setAllowFileAccessFromFileURLs(RNCWebViewWrapper view, boolean value) {
55
+ mRNCWebViewManagerImpl.setAllowFileAccessFromFileURLs(view, value);
56
+
57
+ }
58
+
59
+ @ReactProp(name = "allowUniversalAccessFromFileURLs")
60
+ public void setAllowUniversalAccessFromFileURLs(RNCWebViewWrapper view, boolean value) {
61
+ mRNCWebViewManagerImpl.setAllowUniversalAccessFromFileURLs(view, value);
62
+ }
63
+
64
+ @ReactProp(name = "allowsFullscreenVideo")
65
+ public void setAllowsFullscreenVideo(RNCWebViewWrapper view, boolean value) {
66
+ mRNCWebViewManagerImpl.setAllowsFullscreenVideo(view, value);
67
+ }
68
+
69
+ @ReactProp(name = "allowsProtectedMedia")
70
+ public void setAllowsProtectedMedia(RNCWebViewWrapper view, boolean value) {
71
+ mRNCWebViewManagerImpl.setAllowsProtectedMedia(view, value);
72
+ }
73
+
74
+ @ReactProp(name = "androidLayerType")
75
+ public void setAndroidLayerType(RNCWebViewWrapper view, @Nullable String value) {
76
+ mRNCWebViewManagerImpl.setAndroidLayerType(view, value);
77
+ }
78
+
79
+ @ReactProp(name = "applicationNameForUserAgent")
80
+ public void setApplicationNameForUserAgent(RNCWebViewWrapper view, @Nullable String value) {
81
+ mRNCWebViewManagerImpl.setApplicationNameForUserAgent(view, value);
82
+ }
83
+
84
+ @ReactProp(name = "basicAuthCredential")
85
+ public void setBasicAuthCredential(RNCWebViewWrapper view, @Nullable ReadableMap value) {
86
+ mRNCWebViewManagerImpl.setBasicAuthCredential(view, value);
87
+ }
88
+
89
+ @ReactProp(name = "cacheEnabled")
90
+ public void setCacheEnabled(RNCWebViewWrapper view, boolean value) {
91
+ mRNCWebViewManagerImpl.setCacheEnabled(view, value);
92
+ }
93
+
94
+ @ReactProp(name = "cacheMode")
95
+ public void setCacheMode(RNCWebViewWrapper view, @Nullable String value) {
96
+ mRNCWebViewManagerImpl.setCacheMode(view, value);
97
+ }
98
+
99
+ @ReactProp(name = "domStorageEnabled")
100
+ public void setDomStorageEnabled(RNCWebViewWrapper view, boolean value) {
101
+ mRNCWebViewManagerImpl.setDomStorageEnabled(view, value);
102
+ }
103
+
104
+ @ReactProp(name = "downloadingMessage")
105
+ public void setDownloadingMessage(RNCWebViewWrapper view, @Nullable String value) {
106
+ mRNCWebViewManagerImpl.setDownloadingMessage(value);
107
+ }
108
+
109
+ @ReactProp(name = "forceDarkOn")
110
+ public void setForceDarkOn(RNCWebViewWrapper view, boolean value) {
111
+ mRNCWebViewManagerImpl.setForceDarkOn(view, value);
112
+ }
113
+
114
+ @ReactProp(name = "geolocationEnabled")
115
+ public void setGeolocationEnabled(RNCWebViewWrapper view, boolean value) {
116
+ mRNCWebViewManagerImpl.setGeolocationEnabled(view, value);
117
+ }
118
+
119
+ @ReactProp(name = "hasOnScroll")
120
+ public void setHasOnScroll(RNCWebViewWrapper view, boolean hasScrollEvent) {
121
+ mRNCWebViewManagerImpl.setHasOnScroll(view, hasScrollEvent);
122
+ }
123
+
124
+ @ReactProp(name = "incognito")
125
+ public void setIncognito(RNCWebViewWrapper view, boolean value) {
126
+ mRNCWebViewManagerImpl.setIncognito(view, value);
127
+ }
128
+
129
+ @ReactProp(name = "injectedJavaScript")
130
+ public void setInjectedJavaScript(RNCWebViewWrapper view, @Nullable String value) {
131
+ mRNCWebViewManagerImpl.setInjectedJavaScript(view, value);
132
+ }
133
+
134
+ @ReactProp(name = "injectedJavaScriptBeforeContentLoaded")
135
+ public void setInjectedJavaScriptBeforeContentLoaded(RNCWebViewWrapper view, @Nullable String value) {
136
+ mRNCWebViewManagerImpl.setInjectedJavaScriptBeforeContentLoaded(view, value);
137
+ }
138
+
139
+ @ReactProp(name = "injectedJavaScriptForMainFrameOnly")
140
+ public void setInjectedJavaScriptForMainFrameOnly(RNCWebViewWrapper view, boolean value) {
141
+ mRNCWebViewManagerImpl.setInjectedJavaScriptForMainFrameOnly(view, value);
142
+
143
+ }
144
+
145
+ @ReactProp(name = "injectedJavaScriptBeforeContentLoadedForMainFrameOnly")
146
+ public void setInjectedJavaScriptBeforeContentLoadedForMainFrameOnly(RNCWebViewWrapper view, boolean value) {
147
+ mRNCWebViewManagerImpl.setInjectedJavaScriptBeforeContentLoadedForMainFrameOnly(view, value);
148
+
149
+ }
150
+
151
+ @ReactProp(name = "injectedJavaScriptObject")
152
+ public void setInjectedJavaScriptObject(RNCWebViewWrapper view, @Nullable String value) {
153
+ mRNCWebViewManagerImpl.setInjectedJavaScriptObject(view, value);
154
+ }
155
+
156
+ @ReactProp(name = "javaScriptCanOpenWindowsAutomatically")
157
+ public void setJavaScriptCanOpenWindowsAutomatically(RNCWebViewWrapper view, boolean value) {
158
+ mRNCWebViewManagerImpl.setJavaScriptCanOpenWindowsAutomatically(view, value);
159
+ }
160
+
161
+ @ReactProp(name = "javaScriptEnabled")
162
+ public void setJavaScriptEnabled(RNCWebViewWrapper view, boolean enabled) {
163
+ mRNCWebViewManagerImpl.setJavaScriptEnabled(view, enabled);
164
+ }
165
+
166
+ @ReactProp(name = "lackPermissionToDownloadMessage")
167
+ public void setLackPermissionToDownloadMessage(RNCWebViewWrapper view, @Nullable String value) {
168
+ mRNCWebViewManagerImpl.setLackPermissionToDownloadMessage(value);
169
+ }
170
+
171
+ @ReactProp(name = "hasOnOpenWindowEvent")
172
+ public void setHasOnOpenWindowEvent(RNCWebViewWrapper view, boolean hasEvent) {
173
+ mRNCWebViewManagerImpl.setHasOnOpenWindowEvent(view, hasEvent);
174
+ }
175
+
176
+ @ReactProp(name = "mediaPlaybackRequiresUserAction")
177
+ public void setMediaPlaybackRequiresUserAction(RNCWebViewWrapper view, boolean value) {
178
+ mRNCWebViewManagerImpl.setMediaPlaybackRequiresUserAction(view, value);
179
+ }
180
+
181
+ @ReactProp(name = "messagingEnabled")
182
+ public void setMessagingEnabled(RNCWebViewWrapper view, boolean value) {
183
+ mRNCWebViewManagerImpl.setMessagingEnabled(view, value);
184
+ }
185
+
186
+ @ReactProp(name = "menuItems")
187
+ public void setMenuCustomItems(RNCWebViewWrapper view, @Nullable ReadableArray items) {
188
+ mRNCWebViewManagerImpl.setMenuCustomItems(view, items);
189
+ }
190
+
191
+ @ReactProp(name = "messagingModuleName")
192
+ public void setMessagingModuleName(RNCWebViewWrapper view, @Nullable String value) {
193
+ mRNCWebViewManagerImpl.setMessagingModuleName(view, value);
194
+ }
195
+
196
+ @ReactProp(name = "minimumFontSize")
197
+ public void setMinimumFontSize(RNCWebViewWrapper view, int value) {
198
+ mRNCWebViewManagerImpl.setMinimumFontSize(view, value);
199
+ }
200
+
201
+ @ReactProp(name = "mixedContentMode")
202
+ public void setMixedContentMode(RNCWebViewWrapper view, @Nullable String value) {
203
+ mRNCWebViewManagerImpl.setMixedContentMode(view, value);
204
+ }
205
+
206
+ @ReactProp(name = "nestedScrollEnabled")
207
+ public void setNestedScrollEnabled(RNCWebViewWrapper view, boolean value) {
208
+ mRNCWebViewManagerImpl.setNestedScrollEnabled(view, value);
209
+ }
210
+
211
+ @ReactProp(name = "overScrollMode")
212
+ public void setOverScrollMode(RNCWebViewWrapper view, @Nullable String value) {
213
+ mRNCWebViewManagerImpl.setOverScrollMode(view, value);
214
+ }
215
+
216
+ @ReactProp(name = "saveFormDataDisabled")
217
+ public void setSaveFormDataDisabled(RNCWebViewWrapper view, boolean value) {
218
+ mRNCWebViewManagerImpl.setSaveFormDataDisabled(view, value);
219
+ }
220
+
221
+ @ReactProp(name = "scalesPageToFit")
222
+ public void setScalesPageToFit(RNCWebViewWrapper view, boolean value) {
223
+ mRNCWebViewManagerImpl.setScalesPageToFit(view, value);
224
+ }
225
+
226
+ @ReactProp(name = "setBuiltInZoomControls")
227
+ public void setSetBuiltInZoomControls(RNCWebViewWrapper view, boolean value) {
228
+ mRNCWebViewManagerImpl.setSetBuiltInZoomControls(view, value);
229
+ }
230
+
231
+ @ReactProp(name = "setDisplayZoomControls")
232
+ public void setSetDisplayZoomControls(RNCWebViewWrapper view, boolean value) {
233
+ mRNCWebViewManagerImpl.setSetDisplayZoomControls(view, value);
234
+ }
235
+
236
+ @ReactProp(name = "setSupportMultipleWindows")
237
+ public void setSetSupportMultipleWindows(RNCWebViewWrapper view, boolean value) {
238
+ mRNCWebViewManagerImpl.setSetSupportMultipleWindows(view, value);
239
+ }
240
+
241
+ @ReactProp(name = "showsHorizontalScrollIndicator")
242
+ public void setShowsHorizontalScrollIndicator(RNCWebViewWrapper view, boolean value) {
243
+ mRNCWebViewManagerImpl.setShowsHorizontalScrollIndicator(view, value);
244
+ }
245
+
246
+ @ReactProp(name = "showsVerticalScrollIndicator")
247
+ public void setShowsVerticalScrollIndicator(RNCWebViewWrapper view, boolean value) {
248
+ mRNCWebViewManagerImpl.setShowsVerticalScrollIndicator(view, value);
249
+ }
250
+
251
+ @ReactProp(name = "source")
252
+ public void setSource(RNCWebViewWrapper view, @Nullable ReadableMap value) {
253
+ mRNCWebViewManagerImpl.setSource(view, value);
254
+ }
255
+
256
+ @ReactProp(name = "textZoom")
257
+ public void setTextZoom(RNCWebViewWrapper view, int value) {
258
+ mRNCWebViewManagerImpl.setTextZoom(view, value);
259
+ }
260
+
261
+ @ReactProp(name = "thirdPartyCookiesEnabled")
262
+ public void setThirdPartyCookiesEnabled(RNCWebViewWrapper view, boolean value) {
263
+ mRNCWebViewManagerImpl.setThirdPartyCookiesEnabled(view, value);
264
+ }
265
+
266
+ @ReactProp(name = "webviewDebuggingEnabled")
267
+ public void setWebviewDebuggingEnabled(RNCWebViewWrapper view, boolean value) {
268
+ mRNCWebViewManagerImpl.setWebviewDebuggingEnabled(view, value);
269
+ }
270
+
271
+ @ReactProp(name = "userAgent")
272
+ public void setUserAgent(RNCWebViewWrapper view, @Nullable String value) {
273
+ mRNCWebViewManagerImpl.setUserAgent(view, value);
274
+ }
275
+
276
+ @Override
277
+ protected void addEventEmitters(@NonNull ThemedReactContext reactContext, RNCWebViewWrapper viewWrapper) {
278
+ // Do not register default touch emitter and let WebView implementation handle touches
279
+ viewWrapper.getWebView().setWebViewClient(new RNCWebViewClient());
280
+ }
281
+
282
+ @Override
283
+ public Map<String, Object> getExportedCustomDirectEventTypeConstants() {
284
+ Map<String, Object> export = super.getExportedCustomDirectEventTypeConstants();
285
+ if (export == null) {
286
+ export = MapBuilder.newHashMap();
287
+ }
288
+ // Default events but adding them here explicitly for clarity
289
+ export.put(TopLoadingStartEvent.EVENT_NAME, MapBuilder.of("registrationName", "onLoadingStart"));
290
+ export.put(TopLoadingFinishEvent.EVENT_NAME, MapBuilder.of("registrationName", "onLoadingFinish"));
291
+ export.put(TopLoadingErrorEvent.EVENT_NAME, MapBuilder.of("registrationName", "onLoadingError"));
292
+ export.put(TopMessageEvent.EVENT_NAME, MapBuilder.of("registrationName", "onMessage"));
293
+ // !Default events but adding them here explicitly for clarity
294
+
295
+ export.put(TopLoadingProgressEvent.EVENT_NAME, MapBuilder.of("registrationName", "onLoadingProgress"));
296
+ export.put(TopShouldStartLoadWithRequestEvent.EVENT_NAME, MapBuilder.of("registrationName", "onShouldStartLoadWithRequest"));
297
+ export.put(ScrollEventType.getJSEventName(ScrollEventType.SCROLL), MapBuilder.of("registrationName", "onScroll"));
298
+ export.put(TopHttpErrorEvent.EVENT_NAME, MapBuilder.of("registrationName", "onHttpError"));
299
+ export.put(TopRenderProcessGoneEvent.EVENT_NAME, MapBuilder.of("registrationName", "onRenderProcessGone"));
300
+ export.put(TopCustomMenuSelectionEvent.EVENT_NAME, MapBuilder.of("registrationName", "onCustomMenuSelection"));
301
+ export.put(TopOpenWindowEvent.EVENT_NAME, MapBuilder.of("registrationName", "onOpenWindow"));
302
+ return export;
303
+ }
304
+
305
+ @Override
306
+ public @Nullable
307
+ Map<String, Integer> getCommandsMap() {
308
+ return mRNCWebViewManagerImpl.getCommandsMap();
309
+ }
310
+
311
+ @Override
312
+ public void receiveCommand(@NonNull RNCWebViewWrapper reactWebView, String commandId, @Nullable ReadableArray args) {
313
+ mRNCWebViewManagerImpl.receiveCommand(reactWebView, commandId, args);
314
+ super.receiveCommand(reactWebView, commandId, args);
315
+ }
316
+
317
+ @Override
318
+ protected void onAfterUpdateTransaction(@NonNull RNCWebViewWrapper view) {
319
+ super.onAfterUpdateTransaction(view);
320
+ mRNCWebViewManagerImpl.onAfterUpdateTransaction(view);
321
+ }
322
+
323
+ @Override
324
+ public void onDropViewInstance(@NonNull RNCWebViewWrapper view) {
325
+ mRNCWebViewManagerImpl.onDropViewInstance(view);
326
+ super.onDropViewInstance(view);
327
+ }
328
+ }
@@ -0,0 +1,59 @@
1
+ package com.reactnativecommunity.webview;
2
+
3
+ import android.app.DownloadManager;
4
+ import android.net.Uri;
5
+
6
+ import androidx.annotation.NonNull;
7
+ import android.webkit.ValueCallback;
8
+
9
+ import com.facebook.react.bridge.Promise;
10
+ import com.facebook.react.bridge.ReactApplicationContext;
11
+ import com.facebook.react.bridge.ReactContextBaseJavaModule;
12
+ import com.facebook.react.bridge.ReactMethod;
13
+ import com.facebook.react.module.annotations.ReactModule;
14
+
15
+ @ReactModule(name = RNCWebViewModuleImpl.NAME)
16
+ public class RNCWebViewModule extends ReactContextBaseJavaModule {
17
+ final private RNCWebViewModuleImpl mRNCWebViewModuleImpl;
18
+
19
+ public RNCWebViewModule(ReactApplicationContext reactContext) {
20
+ super(reactContext);
21
+ mRNCWebViewModuleImpl = new RNCWebViewModuleImpl(reactContext);
22
+ }
23
+
24
+ @ReactMethod
25
+ public void isFileUploadSupported(final Promise promise) {
26
+ promise.resolve(mRNCWebViewModuleImpl.isFileUploadSupported());
27
+ }
28
+
29
+ @ReactMethod
30
+ public void shouldStartLoadWithLockIdentifier(boolean shouldStart, double lockIdentifier) {
31
+ mRNCWebViewModuleImpl.shouldStartLoadWithLockIdentifier(shouldStart, lockIdentifier);
32
+ }
33
+
34
+ public void startPhotoPickerIntent(ValueCallback<Uri> filePathCallback, String acceptType) {
35
+ mRNCWebViewModuleImpl.startPhotoPickerIntent(acceptType, filePathCallback);
36
+ }
37
+
38
+ public boolean startPhotoPickerIntent(final ValueCallback<Uri[]> callback, final String[] acceptTypes, final boolean allowMultiple, final boolean isCaptureEnabled) {
39
+ return mRNCWebViewModuleImpl.startPhotoPickerIntent(acceptTypes, allowMultiple, callback, isCaptureEnabled);
40
+ }
41
+
42
+ public void setDownloadRequest(DownloadManager.Request request) {
43
+ mRNCWebViewModuleImpl.setDownloadRequest(request);
44
+ }
45
+
46
+ public void downloadFile(String downloadingMessage) {
47
+ mRNCWebViewModuleImpl.downloadFile(downloadingMessage);
48
+ }
49
+
50
+ public boolean grantFileDownloaderPermissions(String downloadingMessage, String lackPermissionToDownloadMessage) {
51
+ return mRNCWebViewModuleImpl.grantFileDownloaderPermissions(downloadingMessage, lackPermissionToDownloadMessage);
52
+ }
53
+
54
+ @NonNull
55
+ @Override
56
+ public String getName() {
57
+ return RNCWebViewModuleImpl.NAME;
58
+ }
59
+ }
@@ -0,0 +1,11 @@
1
+ #import <WebKit/WebKit.h>
2
+
3
+ #import <React/RCTConvert.h>
4
+
5
+ #if TARGET_OS_IPHONE
6
+ @interface RCTConvert (WKDataDetectorTypes)
7
+
8
+ + (WKDataDetectorTypes)WKDataDetectorTypes:(id)json;
9
+
10
+ @end
11
+ #endif // TARGET_OS_IPHONE
@@ -0,0 +1,27 @@
1
+ #import <WebKit/WebKit.h>
2
+
3
+ #import <React/RCTConvert.h>
4
+
5
+ #if TARGET_OS_IPHONE
6
+
7
+ @implementation RCTConvert (WKDataDetectorTypes)
8
+
9
+ RCT_MULTI_ENUM_CONVERTER(
10
+ WKDataDetectorTypes,
11
+ (@{
12
+ @"none" : @(WKDataDetectorTypeNone),
13
+ @"phoneNumber" : @(WKDataDetectorTypePhoneNumber),
14
+ @"link" : @(WKDataDetectorTypeLink),
15
+ @"address" : @(WKDataDetectorTypeAddress),
16
+ @"calendarEvent" : @(WKDataDetectorTypeCalendarEvent),
17
+ @"trackingNumber" : @(WKDataDetectorTypeTrackingNumber),
18
+ @"flightNumber" : @(WKDataDetectorTypeFlightNumber),
19
+ @"lookupSuggestion" : @(WKDataDetectorTypeLookupSuggestion),
20
+ @"all" : @(WKDataDetectorTypeAll),
21
+ }),
22
+ WKDataDetectorTypeNone,
23
+ unsignedLongLongValue)
24
+
25
+ @end
26
+
27
+ #endif // TARGET_OS_IPHONE
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Copyright (c) 2015-present, Facebook, Inc.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ #import <WebKit/WebKit.h>
9
+
10
+ @interface RNCWKProcessPoolManager : NSObject
11
+
12
+ + (instancetype) sharedManager;
13
+ - (WKProcessPool *)sharedProcessPool;
14
+
15
+ @end
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Copyright (c) 2015-present, Facebook, Inc.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ #import <Foundation/Foundation.h>
9
+ #import "RNCWKProcessPoolManager.h"
10
+
11
+ @interface RNCWKProcessPoolManager() {
12
+ WKProcessPool *_sharedProcessPool;
13
+ }
14
+ @end
15
+
16
+ @implementation RNCWKProcessPoolManager
17
+
18
+ + (id) sharedManager {
19
+ static RNCWKProcessPoolManager *_sharedManager = nil;
20
+ @synchronized(self) {
21
+ if(_sharedManager == nil) {
22
+ _sharedManager = [[super alloc] init];
23
+ }
24
+ return _sharedManager;
25
+ }
26
+ }
27
+
28
+ - (WKProcessPool *)sharedProcessPool {
29
+ if (!_sharedProcessPool) {
30
+ _sharedProcessPool = [[WKProcessPool alloc] init];
31
+ }
32
+ return _sharedProcessPool;
33
+ }
34
+
35
+ @end
36
+
@@ -0,0 +1,35 @@
1
+ // This guard prevent this file to be compiled in the old architecture.
2
+ #ifdef RCT_NEW_ARCH_ENABLED
3
+ #import <React/RCTViewComponentView.h>
4
+ #import <React/RCTConversions.h>
5
+ #import <WebKit/WKDataDetectorTypes.h>
6
+
7
+ #if !TARGET_OS_OSX
8
+ #import <UIKit/UIKit.h>
9
+ #else
10
+ #import <React/RCTUIKit.h>
11
+ #endif // !TARGET_OS_OSX
12
+
13
+ #import <react/renderer/components/RNCWebViewSpec/Props.h>
14
+
15
+ #ifndef NativeComponentExampleComponentView_h
16
+ #define NativeComponentExampleComponentView_h
17
+
18
+ NS_ASSUME_NONNULL_BEGIN
19
+
20
+ @interface RNCWebView : RCTViewComponentView
21
+ @end
22
+
23
+ namespace facebook {
24
+ namespace react {
25
+ bool operator==(const RNCWebViewMenuItemsStruct& a, const RNCWebViewMenuItemsStruct& b)
26
+ {
27
+ return b.key == a.key && b.label == a.label;
28
+ }
29
+ }
30
+ }
31
+
32
+ NS_ASSUME_NONNULL_END
33
+
34
+ #endif /* NativeComponentExampleComponentView_h */
35
+ #endif /* RCT_NEW_ARCH_ENABLED */