@exodus/react-native-webview 11.26.1-exodus.9 → 13.16.0-exodus.0

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 (94) hide show
  1. package/README.md +36 -63
  2. package/android/build.gradle +83 -110
  3. package/android/gradle.properties +3 -4
  4. package/android/src/main/AndroidManifest.xml +12 -0
  5. package/android/src/main/AndroidManifestNew.xml +26 -0
  6. package/android/src/main/java/com/reactnativecommunity/webview/RNCBasicAuthCredential.java +11 -0
  7. package/android/src/main/java/com/reactnativecommunity/webview/RNCWebChromeClient.java +407 -0
  8. package/android/src/main/java/com/reactnativecommunity/webview/RNCWebView.java +468 -0
  9. package/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewClient.java +330 -0
  10. package/android/src/main/java/com/reactnativecommunity/webview/{WebViewConfig.java → RNCWebViewConfig.java} +3 -4
  11. package/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewFileProvider.java +1 -1
  12. package/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewManagerImpl.kt +746 -0
  13. package/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewMessagingModule.kt +9 -0
  14. package/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewModuleImpl.java +554 -0
  15. package/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewPackage.java +57 -12
  16. package/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewWrapper.kt +39 -0
  17. package/android/src/main/java/com/reactnativecommunity/webview/events/SubResourceErrorEvent.kt +25 -0
  18. package/android/src/main/java/com/reactnativecommunity/webview/events/TopCustomMenuSelectionEvent.kt +24 -0
  19. package/android/src/main/java/com/reactnativecommunity/webview/events/TopHttpErrorEvent.kt +25 -0
  20. package/android/src/main/java/com/reactnativecommunity/webview/events/TopNewWindowEvent.kt +25 -0
  21. package/android/src/main/java/com/reactnativecommunity/webview/events/TopRenderProcessGoneEvent.kt +25 -0
  22. package/android/src/newarch/com/reactnativecommunity/webview/RNCWebViewManager.java +570 -0
  23. package/android/src/newarch/com/reactnativecommunity/webview/RNCWebViewModule.java +57 -0
  24. package/android/src/oldarch/com/reactnativecommunity/webview/RNCWebViewManager.java +341 -0
  25. package/android/src/oldarch/com/reactnativecommunity/webview/RNCWebViewModule.java +59 -0
  26. package/apple/RCTConvert+WKDataDetectorTypes.h +11 -0
  27. package/apple/RCTConvert+WKDataDetectorTypes.m +27 -0
  28. package/apple/RNCWebView.h +26 -100
  29. package/apple/RNCWebView.mm +555 -0
  30. package/apple/RNCWebViewDecisionManager.h +20 -0
  31. package/apple/RNCWebViewDecisionManager.m +47 -0
  32. package/apple/RNCWebViewImpl.h +164 -0
  33. package/apple/{RNCWebView.m → RNCWebViewImpl.m} +803 -226
  34. package/apple/RNCWebViewManager.h +4 -8
  35. package/apple/RNCWebViewManager.mm +221 -0
  36. package/apple/RNCWebViewModule.h +23 -0
  37. package/apple/RNCWebViewModule.mm +34 -0
  38. package/index.d.ts +2 -3
  39. package/lib/NativeRNCWebViewModule.d.ts +8 -0
  40. package/lib/NativeRNCWebViewModule.js +1 -0
  41. package/lib/RNCWebViewNativeComponent.d.ts +245 -0
  42. package/lib/RNCWebViewNativeComponent.js +1 -0
  43. package/lib/WebView.android.d.ts +0 -1
  44. package/lib/WebView.android.js +1 -135
  45. package/lib/WebView.d.ts +2 -3
  46. package/lib/WebView.ios.d.ts +0 -1
  47. package/lib/WebView.ios.js +1 -114
  48. package/lib/WebView.js +1 -11
  49. package/lib/WebView.macos.d.ts +6 -0
  50. package/lib/WebView.macos.js +1 -0
  51. package/lib/WebView.styles.d.ts +37 -11
  52. package/lib/WebView.styles.js +1 -33
  53. package/lib/WebView.windows.d.ts +17 -0
  54. package/lib/WebView.windows.js +1 -0
  55. package/lib/WebViewNativeComponent.macos.d.ts +3 -0
  56. package/lib/WebViewNativeComponent.macos.js +1 -0
  57. package/lib/WebViewNativeComponent.windows.d.ts +3 -0
  58. package/lib/WebViewNativeComponent.windows.js +1 -0
  59. package/lib/WebViewShared.d.ts +30 -9
  60. package/lib/WebViewShared.js +1 -174
  61. package/lib/WebViewTypes.d.ts +514 -98
  62. package/lib/WebViewTypes.js +1 -6
  63. package/lib/index.d.ts +0 -1
  64. package/lib/index.js +1 -3
  65. package/lib/validation.d.ts +3 -0
  66. package/lib/validation.js +1 -0
  67. package/package.json +57 -33
  68. package/react-native-webview.podspec +32 -5
  69. package/react-native.config.js +22 -18
  70. package/src/NativeRNCWebViewModule.ts +13 -0
  71. package/src/RNCWebViewNativeComponent.ts +348 -0
  72. package/src/WebView.android.tsx +345 -0
  73. package/src/WebView.ios.tsx +341 -0
  74. package/src/WebView.macos.tsx +252 -0
  75. package/src/WebView.styles.ts +41 -0
  76. package/src/WebView.tsx +25 -0
  77. package/src/WebView.windows.tsx +217 -0
  78. package/src/WebViewNativeComponent.macos.ts +7 -0
  79. package/src/WebViewNativeComponent.windows.ts +8 -0
  80. package/src/WebViewShared.tsx +476 -0
  81. package/src/WebViewTypes.ts +1402 -0
  82. package/src/__tests__/WebViewShared-test.js +323 -0
  83. package/src/__tests__/__snapshots__/WebViewShared-test.js.snap +8 -0
  84. package/src/__tests__/validation-test.js +38 -0
  85. package/src/index.ts +4 -0
  86. package/src/validation.ts +20 -0
  87. package/android/.editorconfig +0 -6
  88. package/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewManager.java +0 -1408
  89. package/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewModule.java +0 -506
  90. package/apple/RNCWebViewManager.m +0 -278
  91. package/lib/WebViewNativeComponent.android.d.ts +0 -4
  92. package/lib/WebViewNativeComponent.android.js +0 -3
  93. package/lib/WebViewNativeComponent.ios.d.ts +0 -4
  94. package/lib/WebViewNativeComponent.ios.js +0 -3
@@ -0,0 +1,57 @@
1
+ package com.reactnativecommunity.webview;
2
+
3
+ import android.app.DownloadManager;
4
+ import android.net.Uri;
5
+ import android.webkit.ValueCallback;
6
+
7
+ import androidx.annotation.NonNull;
8
+
9
+ import com.facebook.react.bridge.Promise;
10
+ import com.facebook.react.bridge.ReactApplicationContext;
11
+ import com.facebook.react.module.annotations.ReactModule;
12
+
13
+ @ReactModule(name = RNCWebViewModuleImpl.NAME)
14
+ public class RNCWebViewModule extends NativeRNCWebViewModuleSpec {
15
+ final private RNCWebViewModuleImpl mRNCWebViewModuleImpl;
16
+
17
+ public RNCWebViewModule(ReactApplicationContext reactContext) {
18
+ super(reactContext);
19
+ mRNCWebViewModuleImpl = new RNCWebViewModuleImpl(reactContext);
20
+ }
21
+
22
+ @Override
23
+ public void isFileUploadSupported(final Promise promise) {
24
+ promise.resolve(mRNCWebViewModuleImpl.isFileUploadSupported());
25
+ }
26
+
27
+ @Override
28
+ public void shouldStartLoadWithLockIdentifier(boolean shouldStart, double lockIdentifier) {
29
+ mRNCWebViewModuleImpl.shouldStartLoadWithLockIdentifier(shouldStart, lockIdentifier);
30
+ }
31
+
32
+ public void startPhotoPickerIntent(ValueCallback<Uri> filePathCallback, String acceptType) {
33
+ mRNCWebViewModuleImpl.startPhotoPickerIntent(acceptType, filePathCallback);
34
+ }
35
+
36
+ public boolean startPhotoPickerIntent(final ValueCallback<Uri[]> callback, final String[] acceptTypes, final boolean allowMultiple, final boolean isCaptureEnabled) {
37
+ return mRNCWebViewModuleImpl.startPhotoPickerIntent(acceptTypes, allowMultiple, callback, isCaptureEnabled);
38
+ }
39
+
40
+ public void setDownloadRequest(DownloadManager.Request request) {
41
+ mRNCWebViewModuleImpl.setDownloadRequest(request);
42
+ }
43
+
44
+ public void downloadFile(String downloadingMessage) {
45
+ mRNCWebViewModuleImpl.downloadFile(downloadingMessage);
46
+ }
47
+
48
+ public boolean grantFileDownloaderPermissions(String downloadingMessage, String lackPermissionToDownloadMessage) {
49
+ return mRNCWebViewModuleImpl.grantFileDownloaderPermissions(downloadingMessage, lackPermissionToDownloadMessage);
50
+ }
51
+
52
+ @NonNull
53
+ @Override
54
+ public String getName() {
55
+ return RNCWebViewModuleImpl.NAME;
56
+ }
57
+ }
@@ -0,0 +1,341 @@
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.SubResourceErrorEvent;
15
+ import com.reactnativecommunity.webview.events.TopHttpErrorEvent;
16
+ import com.reactnativecommunity.webview.events.TopLoadingErrorEvent;
17
+ import com.reactnativecommunity.webview.events.TopLoadingFinishEvent;
18
+ import com.reactnativecommunity.webview.events.TopLoadingProgressEvent;
19
+ import com.reactnativecommunity.webview.events.TopLoadingStartEvent;
20
+ import com.reactnativecommunity.webview.events.TopMessageEvent;
21
+ import com.reactnativecommunity.webview.events.TopOpenWindowEvent;
22
+ import com.reactnativecommunity.webview.events.TopRenderProcessGoneEvent;
23
+ import com.reactnativecommunity.webview.events.TopShouldStartLoadWithRequestEvent;
24
+
25
+ import java.util.Map;
26
+
27
+ public class RNCWebViewManager extends ViewGroupManager<RNCWebViewWrapper> {
28
+
29
+ private final RNCWebViewManagerImpl mRNCWebViewManagerImpl;
30
+
31
+ public RNCWebViewManager() {
32
+ mRNCWebViewManagerImpl = new RNCWebViewManagerImpl();
33
+ }
34
+
35
+ @Override
36
+ public String getName() {
37
+ return RNCWebViewManagerImpl.NAME;
38
+ }
39
+
40
+ @Override
41
+ public RNCWebViewWrapper createViewInstance(ThemedReactContext context) {
42
+ return mRNCWebViewManagerImpl.createViewInstance(context);
43
+ }
44
+
45
+ public RNCWebViewWrapper createViewInstance(ThemedReactContext context, RNCWebView view) {
46
+ return mRNCWebViewManagerImpl.createViewInstance(context, view);
47
+ }
48
+
49
+ @ReactProp(name = "allowFileAccess")
50
+ public void setAllowFileAccess(RNCWebViewWrapper view, boolean value) {
51
+ mRNCWebViewManagerImpl.setAllowFileAccess(view, value);
52
+ }
53
+
54
+ @ReactProp(name = "allowFileAccessFromFileURLs")
55
+ public void setAllowFileAccessFromFileURLs(RNCWebViewWrapper view, boolean value) {
56
+ mRNCWebViewManagerImpl.setAllowFileAccessFromFileURLs(view, value);
57
+
58
+ }
59
+
60
+ @ReactProp(name = "allowUniversalAccessFromFileURLs")
61
+ public void setAllowUniversalAccessFromFileURLs(RNCWebViewWrapper view, boolean value) {
62
+ mRNCWebViewManagerImpl.setAllowUniversalAccessFromFileURLs(view, value);
63
+ }
64
+
65
+ @ReactProp(name = "allowsFullscreenVideo")
66
+ public void setAllowsFullscreenVideo(RNCWebViewWrapper view, boolean value) {
67
+ mRNCWebViewManagerImpl.setAllowsFullscreenVideo(view, value);
68
+ }
69
+
70
+ @ReactProp(name = "allowsProtectedMedia")
71
+ public void setAllowsProtectedMedia(RNCWebViewWrapper view, boolean value) {
72
+ mRNCWebViewManagerImpl.setAllowsProtectedMedia(view, value);
73
+ }
74
+
75
+ @ReactProp(name = "androidLayerType")
76
+ public void setAndroidLayerType(RNCWebViewWrapper view, @Nullable String value) {
77
+ mRNCWebViewManagerImpl.setAndroidLayerType(view, value);
78
+ }
79
+
80
+ @ReactProp(name = "applicationNameForUserAgent")
81
+ public void setApplicationNameForUserAgent(RNCWebViewWrapper view, @Nullable String value) {
82
+ mRNCWebViewManagerImpl.setApplicationNameForUserAgent(view, value);
83
+ }
84
+
85
+ @ReactProp(name = "basicAuthCredential")
86
+ public void setBasicAuthCredential(RNCWebViewWrapper view, @Nullable ReadableMap value) {
87
+ mRNCWebViewManagerImpl.setBasicAuthCredential(view, value);
88
+ }
89
+
90
+ @ReactProp(name = "cacheEnabled")
91
+ public void setCacheEnabled(RNCWebViewWrapper view, boolean value) {
92
+ mRNCWebViewManagerImpl.setCacheEnabled(view, value);
93
+ }
94
+
95
+ @ReactProp(name = "cacheMode")
96
+ public void setCacheMode(RNCWebViewWrapper view, @Nullable String value) {
97
+ mRNCWebViewManagerImpl.setCacheMode(view, value);
98
+ }
99
+
100
+ @ReactProp(name = "domStorageEnabled")
101
+ public void setDomStorageEnabled(RNCWebViewWrapper view, boolean value) {
102
+ mRNCWebViewManagerImpl.setDomStorageEnabled(view, value);
103
+ }
104
+
105
+ @ReactProp(name = "downloadingMessage")
106
+ public void setDownloadingMessage(RNCWebViewWrapper view, @Nullable String value) {
107
+ mRNCWebViewManagerImpl.setDownloadingMessage(value);
108
+ }
109
+
110
+ @ReactProp(name = "forceDarkOn")
111
+ public void setForceDarkOn(RNCWebViewWrapper view, boolean value) {
112
+ mRNCWebViewManagerImpl.setForceDarkOn(view, value);
113
+ }
114
+
115
+ @ReactProp(name = "geolocationEnabled")
116
+ public void setGeolocationEnabled(RNCWebViewWrapper view, boolean value) {
117
+ mRNCWebViewManagerImpl.setGeolocationEnabled(view, value);
118
+ }
119
+
120
+ @ReactProp(name = "hasOnScroll")
121
+ public void setHasOnScroll(RNCWebViewWrapper view, boolean hasScrollEvent) {
122
+ mRNCWebViewManagerImpl.setHasOnScroll(view, hasScrollEvent);
123
+ }
124
+
125
+ @ReactProp(name = "incognito")
126
+ public void setIncognito(RNCWebViewWrapper view, boolean value) {
127
+ mRNCWebViewManagerImpl.setIncognito(view, value);
128
+ }
129
+
130
+ @ReactProp(name = "injectedJavaScript")
131
+ public void setInjectedJavaScript(RNCWebViewWrapper view, @Nullable String value) {
132
+ mRNCWebViewManagerImpl.setInjectedJavaScript(view, value);
133
+ }
134
+
135
+ @ReactProp(name = "injectedJavaScriptBeforeContentLoaded")
136
+ public void setInjectedJavaScriptBeforeContentLoaded(RNCWebViewWrapper view, @Nullable String value) {
137
+ mRNCWebViewManagerImpl.setInjectedJavaScriptBeforeContentLoaded(view, value);
138
+ }
139
+
140
+ @ReactProp(name = "injectedJavaScriptForMainFrameOnly")
141
+ public void setInjectedJavaScriptForMainFrameOnly(RNCWebViewWrapper view, boolean value) {
142
+ mRNCWebViewManagerImpl.setInjectedJavaScriptForMainFrameOnly(view, value);
143
+
144
+ }
145
+
146
+ @ReactProp(name = "injectedJavaScriptBeforeContentLoadedForMainFrameOnly")
147
+ public void setInjectedJavaScriptBeforeContentLoadedForMainFrameOnly(RNCWebViewWrapper view, boolean value) {
148
+ mRNCWebViewManagerImpl.setInjectedJavaScriptBeforeContentLoadedForMainFrameOnly(view, value);
149
+
150
+ }
151
+
152
+ @ReactProp(name = "injectedJavaScriptObject")
153
+ public void setInjectedJavaScriptObject(RNCWebViewWrapper view, @Nullable String value) {
154
+ mRNCWebViewManagerImpl.setInjectedJavaScriptObject(view, value);
155
+ }
156
+
157
+ @ReactProp(name = "javaScriptCanOpenWindowsAutomatically")
158
+ public void setJavaScriptCanOpenWindowsAutomatically(RNCWebViewWrapper view, boolean value) {
159
+ mRNCWebViewManagerImpl.setJavaScriptCanOpenWindowsAutomatically(view, value);
160
+ }
161
+
162
+ @ReactProp(name = "javaScriptEnabled")
163
+ public void setJavaScriptEnabled(RNCWebViewWrapper view, boolean enabled) {
164
+ mRNCWebViewManagerImpl.setJavaScriptEnabled(view, enabled);
165
+ }
166
+
167
+ @ReactProp(name = "lackPermissionToDownloadMessage")
168
+ public void setLackPermissionToDownloadMessage(RNCWebViewWrapper view, @Nullable String value) {
169
+ mRNCWebViewManagerImpl.setLackPermissionToDownloadMessage(value);
170
+ }
171
+
172
+ @ReactProp(name = "hasOnOpenWindowEvent")
173
+ public void setHasOnOpenWindowEvent(RNCWebViewWrapper view, boolean hasEvent) {
174
+ mRNCWebViewManagerImpl.setHasOnOpenWindowEvent(view, hasEvent);
175
+ }
176
+
177
+ @ReactProp(name = "mediaPlaybackRequiresUserAction")
178
+ public void setMediaPlaybackRequiresUserAction(RNCWebViewWrapper view, boolean value) {
179
+ mRNCWebViewManagerImpl.setMediaPlaybackRequiresUserAction(view, value);
180
+ }
181
+
182
+ @ReactProp(name = "messagingEnabled")
183
+ public void setMessagingEnabled(RNCWebViewWrapper view, boolean value) {
184
+ mRNCWebViewManagerImpl.setMessagingEnabled(view, value);
185
+ }
186
+
187
+ @ReactProp(name = "menuItems")
188
+ public void setMenuCustomItems(RNCWebViewWrapper view, @Nullable ReadableArray items) {
189
+ mRNCWebViewManagerImpl.setMenuCustomItems(view, items);
190
+ }
191
+
192
+ @ReactProp(name = "messagingModuleName")
193
+ public void setMessagingModuleName(RNCWebViewWrapper view, @Nullable String value) {
194
+ mRNCWebViewManagerImpl.setMessagingModuleName(view, value);
195
+ }
196
+
197
+ @ReactProp(name = "minimumFontSize")
198
+ public void setMinimumFontSize(RNCWebViewWrapper view, int value) {
199
+ mRNCWebViewManagerImpl.setMinimumFontSize(view, value);
200
+ }
201
+
202
+ @ReactProp(name = "mixedContentMode")
203
+ public void setMixedContentMode(RNCWebViewWrapper view, @Nullable String value) {
204
+ mRNCWebViewManagerImpl.setMixedContentMode(view, value);
205
+ }
206
+
207
+ @ReactProp(name = "nestedScrollEnabled")
208
+ public void setNestedScrollEnabled(RNCWebViewWrapper view, boolean value) {
209
+ mRNCWebViewManagerImpl.setNestedScrollEnabled(view, value);
210
+ }
211
+
212
+ @ReactProp(name = "overScrollMode")
213
+ public void setOverScrollMode(RNCWebViewWrapper view, @Nullable String value) {
214
+ mRNCWebViewManagerImpl.setOverScrollMode(view, value);
215
+ }
216
+
217
+ @ReactProp(name = "saveFormDataDisabled")
218
+ public void setSaveFormDataDisabled(RNCWebViewWrapper view, boolean value) {
219
+ mRNCWebViewManagerImpl.setSaveFormDataDisabled(view, value);
220
+ }
221
+
222
+ @ReactProp(name = "scalesPageToFit")
223
+ public void setScalesPageToFit(RNCWebViewWrapper view, boolean value) {
224
+ mRNCWebViewManagerImpl.setScalesPageToFit(view, value);
225
+ }
226
+
227
+ @ReactProp(name = "setBuiltInZoomControls")
228
+ public void setSetBuiltInZoomControls(RNCWebViewWrapper view, boolean value) {
229
+ mRNCWebViewManagerImpl.setSetBuiltInZoomControls(view, value);
230
+ }
231
+
232
+ @ReactProp(name = "setDisplayZoomControls")
233
+ public void setSetDisplayZoomControls(RNCWebViewWrapper view, boolean value) {
234
+ mRNCWebViewManagerImpl.setSetDisplayZoomControls(view, value);
235
+ }
236
+
237
+ @ReactProp(name = "setSupportMultipleWindows")
238
+ public void setSetSupportMultipleWindows(RNCWebViewWrapper view, boolean value) {
239
+ mRNCWebViewManagerImpl.setSetSupportMultipleWindows(view, value);
240
+ }
241
+
242
+ @ReactProp(name = "showsHorizontalScrollIndicator")
243
+ public void setShowsHorizontalScrollIndicator(RNCWebViewWrapper view, boolean value) {
244
+ mRNCWebViewManagerImpl.setShowsHorizontalScrollIndicator(view, value);
245
+ }
246
+
247
+ @ReactProp(name = "showsVerticalScrollIndicator")
248
+ public void setShowsVerticalScrollIndicator(RNCWebViewWrapper view, boolean value) {
249
+ mRNCWebViewManagerImpl.setShowsVerticalScrollIndicator(view, value);
250
+ }
251
+
252
+ @ReactProp(name = "source")
253
+ public void setSource(RNCWebViewWrapper view, @Nullable ReadableMap value) {
254
+ mRNCWebViewManagerImpl.setSource(view, value);
255
+ }
256
+
257
+ @ReactProp(name = "textZoom")
258
+ public void setTextZoom(RNCWebViewWrapper view, int value) {
259
+ mRNCWebViewManagerImpl.setTextZoom(view, value);
260
+ }
261
+
262
+ @ReactProp(name = "thirdPartyCookiesEnabled")
263
+ public void setThirdPartyCookiesEnabled(RNCWebViewWrapper view, boolean value) {
264
+ mRNCWebViewManagerImpl.setThirdPartyCookiesEnabled(view, value);
265
+ }
266
+
267
+ @ReactProp(name = "webviewDebuggingEnabled")
268
+ public void setWebviewDebuggingEnabled(RNCWebViewWrapper view, boolean value) {
269
+ mRNCWebViewManagerImpl.setWebviewDebuggingEnabled(view, value);
270
+ }
271
+
272
+ @ReactProp(name = "userAgent")
273
+ public void setUserAgent(RNCWebViewWrapper view, @Nullable String value) {
274
+ mRNCWebViewManagerImpl.setUserAgent(view, value);
275
+ }
276
+
277
+ @ReactProp(name = "paymentRequestEnabled")
278
+ public void setPaymentRequestEnabled(RNCWebViewWrapper view, boolean value) {
279
+ mRNCWebViewManagerImpl.setPaymentRequestEnabled(view, value);
280
+ }
281
+
282
+ // Exodus: Camera permission origin whitelist
283
+ @ReactProp(name = "cameraPermissionOriginWhitelist")
284
+ public void setCameraPermissionOriginWhitelist(RNCWebViewWrapper view, @Nullable ReadableArray value) {
285
+ mRNCWebViewManagerImpl.setCameraPermissionOriginWhitelist(view, value);
286
+ }
287
+
288
+ @Override
289
+ protected void addEventEmitters(@NonNull ThemedReactContext reactContext, RNCWebViewWrapper viewWrapper) {
290
+ // Do not register default touch emitter and let WebView implementation handle touches
291
+ viewWrapper.getWebView().setWebViewClient(new RNCWebViewClient());
292
+ }
293
+
294
+ @Override
295
+ public Map<String, Object> getExportedCustomDirectEventTypeConstants() {
296
+ Map<String, Object> export = super.getExportedCustomDirectEventTypeConstants();
297
+ if (export == null) {
298
+ export = MapBuilder.newHashMap();
299
+ }
300
+ // Default events but adding them here explicitly for clarity
301
+ export.put(TopLoadingStartEvent.EVENT_NAME, MapBuilder.of("registrationName", "onLoadingStart"));
302
+ export.put(TopLoadingFinishEvent.EVENT_NAME, MapBuilder.of("registrationName", "onLoadingFinish"));
303
+ export.put(TopLoadingErrorEvent.EVENT_NAME, MapBuilder.of("registrationName", "onLoadingError"));
304
+ export.put(SubResourceErrorEvent.EVENT_NAME, MapBuilder.of("registrationName", "onLoadingSubResourceError"));
305
+ export.put(TopMessageEvent.EVENT_NAME, MapBuilder.of("registrationName", "onMessage"));
306
+ // !Default events but adding them here explicitly for clarity
307
+
308
+ export.put(TopLoadingProgressEvent.EVENT_NAME, MapBuilder.of("registrationName", "onLoadingProgress"));
309
+ export.put(TopShouldStartLoadWithRequestEvent.EVENT_NAME, MapBuilder.of("registrationName", "onShouldStartLoadWithRequest"));
310
+ export.put(ScrollEventType.getJSEventName(ScrollEventType.SCROLL), MapBuilder.of("registrationName", "onScroll"));
311
+ export.put(TopHttpErrorEvent.EVENT_NAME, MapBuilder.of("registrationName", "onHttpError"));
312
+ export.put(TopRenderProcessGoneEvent.EVENT_NAME, MapBuilder.of("registrationName", "onRenderProcessGone"));
313
+ export.put(TopCustomMenuSelectionEvent.EVENT_NAME, MapBuilder.of("registrationName", "onCustomMenuSelection"));
314
+ export.put(TopOpenWindowEvent.EVENT_NAME, MapBuilder.of("registrationName", "onOpenWindow"));
315
+ return export;
316
+ }
317
+
318
+ @Override
319
+ public @Nullable
320
+ Map<String, Integer> getCommandsMap() {
321
+ return mRNCWebViewManagerImpl.getCommandsMap();
322
+ }
323
+
324
+ @Override
325
+ public void receiveCommand(@NonNull RNCWebViewWrapper reactWebView, String commandId, @Nullable ReadableArray args) {
326
+ mRNCWebViewManagerImpl.receiveCommand(reactWebView, commandId, args);
327
+ super.receiveCommand(reactWebView, commandId, args);
328
+ }
329
+
330
+ @Override
331
+ protected void onAfterUpdateTransaction(@NonNull RNCWebViewWrapper view) {
332
+ super.onAfterUpdateTransaction(view);
333
+ mRNCWebViewManagerImpl.onAfterUpdateTransaction(view);
334
+ }
335
+
336
+ @Override
337
+ public void onDropViewInstance(@NonNull RNCWebViewWrapper view) {
338
+ mRNCWebViewManagerImpl.onDropViewInstance(view);
339
+ super.onDropViewInstance(view);
340
+ }
341
+ }
@@ -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
@@ -1,109 +1,35 @@
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
- */
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>
7
6
 
8
- #import <React/RCTView.h>
9
- #import <React/RCTDefines.h>
10
- #import <WebKit/WebKit.h>
11
-
12
- typedef enum RNCWebViewPermissionGrantType : NSUInteger {
13
- RNCWebViewPermissionGrantType_GrantIfSameHost_ElsePrompt,
14
- RNCWebViewPermissionGrantType_GrantIfSameHost_ElseDeny,
15
- RNCWebViewPermissionGrantType_Deny,
16
- RNCWebViewPermissionGrantType_Grant,
17
- RNCWebViewPermissionGrantType_Prompt
18
- } RNCWebViewPermissionGrantType;
19
-
20
- @class RNCWebView;
21
-
22
- @protocol RNCWebViewDelegate <NSObject>
23
-
24
- - (BOOL)webView:(RNCWebView *_Nonnull)webView
25
- shouldStartLoadForRequest:(NSMutableDictionary<NSString *, id> *_Nonnull)request
26
- withCallback:(RCTDirectEventBlock _Nonnull)callback;
27
-
28
- @end
7
+ #if !TARGET_OS_OSX
8
+ #import <UIKit/UIKit.h>
9
+ #else
10
+ #import <React/RCTUIKit.h>
11
+ #endif // !TARGET_OS_OSX
29
12
 
30
- @interface RNCWeakScriptMessageDelegate : NSObject<WKScriptMessageHandler>
13
+ #import <react/renderer/components/RNCWebViewSpec/Props.h>
31
14
 
32
- @property (nonatomic, weak, nullable) id<WKScriptMessageHandler> scriptDelegate;
15
+ #ifndef NativeComponentExampleComponentView_h
16
+ #define NativeComponentExampleComponentView_h
33
17
 
34
- - (nullable instancetype)initWithDelegate:(id<WKScriptMessageHandler> _Nullable)scriptDelegate;
18
+ NS_ASSUME_NONNULL_BEGIN
35
19
 
20
+ @interface RNCWebView : RCTViewComponentView
36
21
  @end
37
22
 
38
- @interface RNCWebView : RCTView
23
+ namespace facebook {
24
+ namespace react {
25
+ inline bool operator==(const RNCWebViewMenuItemsStruct& a, const RNCWebViewMenuItemsStruct& b)
26
+ {
27
+ return b.key == a.key && b.label == a.label;
28
+ }
29
+ }
30
+ }
39
31
 
40
- @property (nonatomic, weak) id<RNCWebViewDelegate> _Nullable delegate;
41
- @property (nonatomic, copy) NSDictionary * _Nullable source;
42
- @property (nonatomic, assign) BOOL messagingEnabled;
43
- @property (nonatomic, copy) NSString * _Nullable injectedJavaScript;
44
- @property (nonatomic, copy) NSString * _Nullable injectedJavaScriptBeforeContentLoaded;
45
- @property (nonatomic, assign) BOOL scrollEnabled;
46
- @property (nonatomic, assign) BOOL sharedCookiesEnabled;
47
- @property (nonatomic, assign) BOOL autoManageStatusBarEnabled;
48
- @property (nonatomic, assign) BOOL pagingEnabled;
49
- @property (nonatomic, assign) CGFloat decelerationRate;
50
- @property (nonatomic, assign) BOOL allowsInlineMediaPlayback;
51
- @property (nonatomic, assign) BOOL bounces;
52
- @property (nonatomic, assign) BOOL mediaPlaybackRequiresUserAction;
53
- #if WEBKIT_IOS_10_APIS_AVAILABLE
54
- @property (nonatomic, assign) WKDataDetectorTypes dataDetectorTypes;
55
- #endif
56
- @property (nonatomic, assign) UIEdgeInsets contentInset;
57
- @property (nonatomic, assign) BOOL automaticallyAdjustContentInsets;
58
- @property (nonatomic, assign) BOOL keyboardDisplayRequiresUserAction;
59
- @property (nonatomic, assign) BOOL hideKeyboardAccessoryView;
60
- @property (nonatomic, assign) BOOL allowsBackForwardNavigationGestures;
61
- @property (nonatomic, assign) BOOL incognito;
62
- @property (nonatomic, assign) BOOL useSharedProcessPool;
63
- @property (nonatomic, copy) NSString * _Nullable userAgent;
64
- @property (nonatomic, assign) BOOL cacheEnabled;
65
- @property (nonatomic, assign) BOOL javaScriptEnabled;
66
- @property (nonatomic, assign) BOOL allowsLinkPreview;
67
- @property (nonatomic, assign) BOOL showsHorizontalScrollIndicator;
68
- @property (nonatomic, assign) BOOL showsVerticalScrollIndicator;
69
- @property (nonatomic, assign) BOOL directionalLockEnabled;
70
- @property (nonatomic, copy) NSDictionary * _Nullable basicAuthCredential;
71
- @property (nonatomic, assign) BOOL pullToRefreshEnabled;
72
- @property (nonatomic, assign) BOOL enableApplePay;
73
- @property (nonatomic, copy) NSArray<NSDictionary *> * _Nullable menuItems;
74
- @property (nonatomic, copy) RCTDirectEventBlock onCustomMenuSelection;
75
- #if !TARGET_OS_OSX
76
- @property (nonatomic, weak) UIRefreshControl * _Nullable refreshControl;
77
- #endif
32
+ NS_ASSUME_NONNULL_END
78
33
 
79
- #if defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 130000 /* iOS 13 */
80
- @property (nonatomic, assign) WKContentMode contentMode;
81
- #endif
82
-
83
- #if defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 140000 /* iOS 14 */
84
- @property (nonatomic, assign) BOOL limitsNavigationsToAppBoundDomains;
85
- #endif
86
-
87
- #if defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 140500 /* iOS 14.5 */
88
- @property (nonatomic, assign) BOOL textInteractionEnabled;
89
- #endif
90
-
91
- #if defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 150000 /* iOS 15 */
92
- @property (nonatomic, assign) RNCWebViewPermissionGrantType mediaCapturePermissionGrantType;
93
- #endif
94
-
95
- + (void)setClientAuthenticationCredential:(nullable NSURLCredential*)credential;
96
- + (void)setCustomCertificatesForHost:(nullable NSDictionary *)certificates;
97
- - (void)postMessage:(NSString *_Nullable)message;
98
- - (void)injectJavaScript:(NSString *_Nullable)script;
99
- - (void)goForward;
100
- - (void)goBack;
101
- - (void)reload;
102
- - (void)stopLoading;
103
- - (void)requestFocus;
104
- #if !TARGET_OS_OSX
105
- - (void)addPullToRefreshControl;
106
- - (void)pullToRefresh:(UIRefreshControl *_Nonnull)refreshControl;
107
- #endif
108
-
109
- @end
34
+ #endif /* NativeComponentExampleComponentView_h */
35
+ #endif /* RCT_NEW_ARCH_ENABLED */