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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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} +802 -225
  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,25 @@
1
+ package com.reactnativecommunity.webview.events
2
+
3
+ import com.facebook.react.bridge.WritableMap
4
+ import com.facebook.react.uimanager.events.Event
5
+ import com.facebook.react.uimanager.events.RCTEventEmitter
6
+
7
+ /**
8
+ * Event emitted when there is an error in loading a subresource
9
+ */
10
+ class SubResourceErrorEvent(viewId: Int, private val mEventData: WritableMap) :
11
+ Event<SubResourceErrorEvent>(viewId) {
12
+ companion object {
13
+ const val EVENT_NAME = "topLoadingSubResourceError"
14
+ }
15
+
16
+ override fun getEventName(): String = EVENT_NAME
17
+
18
+ override fun canCoalesce(): Boolean = false
19
+
20
+ override fun getCoalescingKey(): Short = 0
21
+
22
+ override fun dispatch(rctEventEmitter: RCTEventEmitter) =
23
+ rctEventEmitter.receiveEvent(viewTag, eventName, mEventData)
24
+
25
+ }
@@ -0,0 +1,24 @@
1
+ package com.reactnativecommunity.webview.events
2
+
3
+ import com.facebook.react.bridge.WritableMap
4
+ import com.facebook.react.uimanager.events.Event
5
+ import com.facebook.react.uimanager.events.RCTEventEmitter
6
+
7
+ /**
8
+ * Event emitted when there is a loading progress event.
9
+ */
10
+ class TopCustomMenuSelectionEvent(viewId: Int, private val mEventData: WritableMap) :
11
+ Event<TopCustomMenuSelectionEvent>(viewId) {
12
+ companion object {
13
+ const val EVENT_NAME = "topCustomMenuSelection"
14
+ }
15
+
16
+ override fun getEventName(): String = EVENT_NAME
17
+
18
+ override fun canCoalesce(): Boolean = false
19
+
20
+ override fun getCoalescingKey(): Short = 0
21
+
22
+ override fun dispatch(rctEventEmitter: RCTEventEmitter) =
23
+ rctEventEmitter.receiveEvent(viewTag, eventName, mEventData)
24
+ }
@@ -0,0 +1,25 @@
1
+ package com.reactnativecommunity.webview.events
2
+
3
+ import com.facebook.react.bridge.WritableMap
4
+ import com.facebook.react.uimanager.events.Event
5
+ import com.facebook.react.uimanager.events.RCTEventEmitter
6
+
7
+ /**
8
+ * Event emitted when an HTTP error is received.
9
+ */
10
+ class TopHttpErrorEvent(viewId: Int, private val mEventData: WritableMap) :
11
+ Event<TopHttpErrorEvent>(viewId) {
12
+ companion object {
13
+ const val EVENT_NAME = "topHttpError"
14
+ }
15
+
16
+ override fun getEventName(): String = EVENT_NAME
17
+
18
+ override fun canCoalesce(): Boolean = false
19
+
20
+ override fun getCoalescingKey(): Short = 0
21
+
22
+ override fun dispatch(rctEventEmitter: RCTEventEmitter) =
23
+ rctEventEmitter.receiveEvent(viewTag, eventName, mEventData)
24
+
25
+ }
@@ -0,0 +1,25 @@
1
+ package com.reactnativecommunity.webview.events
2
+
3
+ import com.facebook.react.bridge.WritableMap
4
+ import com.facebook.react.uimanager.events.Event
5
+ import com.facebook.react.uimanager.events.RCTEventEmitter
6
+
7
+ /**
8
+ * Event emitted when the WebView opens a new Window (i.e: target=_blank)
9
+ */
10
+ class TopOpenWindowEvent(viewId: Int, private val mEventData: WritableMap) :
11
+ Event<TopOpenWindowEvent>(viewId) {
12
+ companion object {
13
+ const val EVENT_NAME = "topOpenWindow"
14
+ }
15
+
16
+ override fun getEventName(): String = EVENT_NAME
17
+
18
+ override fun canCoalesce(): Boolean = false
19
+
20
+ override fun getCoalescingKey(): Short = 0
21
+
22
+ override fun dispatch(rctEventEmitter: RCTEventEmitter) =
23
+ rctEventEmitter.receiveEvent(viewTag, eventName, mEventData)
24
+
25
+ }
@@ -0,0 +1,25 @@
1
+ package com.reactnativecommunity.webview.events
2
+
3
+ import com.facebook.react.bridge.WritableMap
4
+ import com.facebook.react.uimanager.events.Event
5
+ import com.facebook.react.uimanager.events.RCTEventEmitter
6
+
7
+ /**
8
+ * Event emitted when the render process is gone.
9
+ */
10
+ class TopRenderProcessGoneEvent(viewId: Int, private val mEventData: WritableMap) :
11
+ Event<TopRenderProcessGoneEvent>(viewId) {
12
+ companion object {
13
+ const val EVENT_NAME = "topRenderProcessGone"
14
+ }
15
+
16
+ override fun getEventName(): String = EVENT_NAME
17
+
18
+ override fun canCoalesce(): Boolean = false
19
+
20
+ override fun getCoalescingKey(): Short = 0
21
+
22
+ override fun dispatch(rctEventEmitter: RCTEventEmitter) =
23
+ rctEventEmitter.receiveEvent(viewTag, eventName, mEventData)
24
+
25
+ }
@@ -0,0 +1,570 @@
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.module.annotations.ReactModule;
10
+ import com.facebook.react.uimanager.ThemedReactContext;
11
+ import com.facebook.react.uimanager.ViewGroupManager;
12
+ import com.facebook.react.uimanager.ViewManagerDelegate;
13
+ import com.facebook.react.uimanager.annotations.ReactProp;
14
+ import com.facebook.react.viewmanagers.RNCWebViewManagerDelegate;
15
+ import com.facebook.react.viewmanagers.RNCWebViewManagerInterface;
16
+ import com.facebook.react.views.scroll.ScrollEventType;
17
+ import com.reactnativecommunity.webview.events.TopCustomMenuSelectionEvent;
18
+ import com.reactnativecommunity.webview.events.SubResourceErrorEvent;
19
+ import com.reactnativecommunity.webview.events.TopHttpErrorEvent;
20
+ import com.reactnativecommunity.webview.events.TopLoadingErrorEvent;
21
+ import com.reactnativecommunity.webview.events.TopLoadingFinishEvent;
22
+ import com.reactnativecommunity.webview.events.TopLoadingProgressEvent;
23
+ import com.reactnativecommunity.webview.events.TopLoadingStartEvent;
24
+ import com.reactnativecommunity.webview.events.TopMessageEvent;
25
+ import com.reactnativecommunity.webview.events.TopOpenWindowEvent;
26
+ import com.reactnativecommunity.webview.events.TopRenderProcessGoneEvent;
27
+ import com.reactnativecommunity.webview.events.TopShouldStartLoadWithRequestEvent;
28
+
29
+ import android.webkit.WebChromeClient;
30
+
31
+ import org.json.JSONException;
32
+ import org.json.JSONObject;
33
+
34
+ import java.util.Map;
35
+
36
+ @ReactModule(name = RNCWebViewManagerImpl.NAME)
37
+ public class RNCWebViewManager extends ViewGroupManager<RNCWebViewWrapper>
38
+ implements RNCWebViewManagerInterface<RNCWebViewWrapper> {
39
+
40
+ private final ViewManagerDelegate<RNCWebViewWrapper> mDelegate;
41
+ private final RNCWebViewManagerImpl mRNCWebViewManagerImpl;
42
+
43
+ public RNCWebViewManager() {
44
+ mDelegate = new RNCWebViewManagerDelegate<>(this);
45
+ mRNCWebViewManagerImpl = new RNCWebViewManagerImpl(true);
46
+ }
47
+
48
+ @Nullable
49
+ @Override
50
+ protected ViewManagerDelegate<RNCWebViewWrapper> getDelegate() {
51
+ return mDelegate;
52
+ }
53
+
54
+ @NonNull
55
+ @Override
56
+ public String getName() {
57
+ return RNCWebViewManagerImpl.NAME;
58
+ }
59
+
60
+ @NonNull
61
+ @Override
62
+ protected RNCWebViewWrapper createViewInstance(@NonNull ThemedReactContext context) {
63
+ return mRNCWebViewManagerImpl.createViewInstance(context);
64
+ }
65
+
66
+ @Override
67
+ @ReactProp(name = "allowFileAccess")
68
+ public void setAllowFileAccess(RNCWebViewWrapper view, boolean value) {
69
+ mRNCWebViewManagerImpl.setAllowFileAccess(view, value);
70
+ }
71
+
72
+ @Override
73
+ @ReactProp(name = "allowFileAccessFromFileURLs")
74
+ public void setAllowFileAccessFromFileURLs(RNCWebViewWrapper view, boolean value) {
75
+ mRNCWebViewManagerImpl.setAllowFileAccessFromFileURLs(view, value);
76
+
77
+ }
78
+
79
+ @Override
80
+ @ReactProp(name = "allowUniversalAccessFromFileURLs")
81
+ public void setAllowUniversalAccessFromFileURLs(RNCWebViewWrapper view, boolean value) {
82
+ mRNCWebViewManagerImpl.setAllowUniversalAccessFromFileURLs(view, value);
83
+ }
84
+
85
+ @Override
86
+ @ReactProp(name = "allowsFullscreenVideo")
87
+ public void setAllowsFullscreenVideo(RNCWebViewWrapper view, boolean value) {
88
+ mRNCWebViewManagerImpl.setAllowsFullscreenVideo(view, value);
89
+ }
90
+
91
+ @Override
92
+ @ReactProp(name = "allowsProtectedMedia")
93
+ public void setAllowsProtectedMedia(RNCWebViewWrapper view, boolean value) {
94
+ mRNCWebViewManagerImpl.setAllowsProtectedMedia(view, value);
95
+ }
96
+
97
+ @Override
98
+ @ReactProp(name = "androidLayerType")
99
+ public void setAndroidLayerType(RNCWebViewWrapper view, @Nullable String value) {
100
+ mRNCWebViewManagerImpl.setAndroidLayerType(view, value);
101
+ }
102
+
103
+ @Override
104
+ @ReactProp(name = "applicationNameForUserAgent")
105
+ public void setApplicationNameForUserAgent(RNCWebViewWrapper view, @Nullable String value) {
106
+ mRNCWebViewManagerImpl.setApplicationNameForUserAgent(view, value);
107
+ }
108
+
109
+ @Override
110
+ @ReactProp(name = "basicAuthCredential")
111
+ public void setBasicAuthCredential(RNCWebViewWrapper view, @Nullable ReadableMap value) {
112
+ mRNCWebViewManagerImpl.setBasicAuthCredential(view, value);
113
+ }
114
+
115
+ @Override
116
+ @ReactProp(name = "cacheEnabled")
117
+ public void setCacheEnabled(RNCWebViewWrapper view, boolean value) {
118
+ mRNCWebViewManagerImpl.setCacheEnabled(view, value);
119
+ }
120
+
121
+ @Override
122
+ @ReactProp(name = "cacheMode")
123
+ public void setCacheMode(RNCWebViewWrapper view, @Nullable String value) {
124
+ mRNCWebViewManagerImpl.setCacheMode(view, value);
125
+ }
126
+
127
+ @Override
128
+ @ReactProp(name = "domStorageEnabled")
129
+ public void setDomStorageEnabled(RNCWebViewWrapper view, boolean value) {
130
+ mRNCWebViewManagerImpl.setDomStorageEnabled(view, value);
131
+ }
132
+
133
+ @Override
134
+ @ReactProp(name = "downloadingMessage")
135
+ public void setDownloadingMessage(RNCWebViewWrapper view, @Nullable String value) {
136
+ mRNCWebViewManagerImpl.setDownloadingMessage(value);
137
+ }
138
+
139
+ @Override
140
+ @ReactProp(name = "forceDarkOn")
141
+ public void setForceDarkOn(RNCWebViewWrapper view, boolean value) {
142
+ mRNCWebViewManagerImpl.setForceDarkOn(view, value);
143
+ }
144
+
145
+ @Override
146
+ @ReactProp(name = "geolocationEnabled")
147
+ public void setGeolocationEnabled(RNCWebViewWrapper view, boolean value) {
148
+ mRNCWebViewManagerImpl.setGeolocationEnabled(view, value);
149
+ }
150
+
151
+ @Override
152
+ @ReactProp(name = "hasOnScroll")
153
+ public void setHasOnScroll(RNCWebViewWrapper view, boolean hasScrollEvent) {
154
+ mRNCWebViewManagerImpl.setHasOnScroll(view, hasScrollEvent);
155
+ }
156
+
157
+ @Override
158
+ @ReactProp(name = "incognito")
159
+ public void setIncognito(RNCWebViewWrapper view, boolean value) {
160
+ mRNCWebViewManagerImpl.setIncognito(view, value);
161
+ }
162
+
163
+ @Override
164
+ @ReactProp(name = "injectedJavaScript")
165
+ public void setInjectedJavaScript(RNCWebViewWrapper view, @Nullable String value) {
166
+ mRNCWebViewManagerImpl.setInjectedJavaScript(view, value);
167
+ }
168
+
169
+ @Override
170
+ @ReactProp(name = "injectedJavaScriptBeforeContentLoaded")
171
+ public void setInjectedJavaScriptBeforeContentLoaded(RNCWebViewWrapper view, @Nullable String value) {
172
+ mRNCWebViewManagerImpl.setInjectedJavaScriptBeforeContentLoaded(view, value);
173
+ }
174
+
175
+ @Override
176
+ @ReactProp(name = "injectedJavaScriptForMainFrameOnly")
177
+ public void setInjectedJavaScriptForMainFrameOnly(RNCWebViewWrapper view, boolean value) {
178
+ mRNCWebViewManagerImpl.setInjectedJavaScriptForMainFrameOnly(view, value);
179
+
180
+ }
181
+
182
+ @Override
183
+ @ReactProp(name = "injectedJavaScriptBeforeContentLoadedForMainFrameOnly")
184
+ public void setInjectedJavaScriptBeforeContentLoadedForMainFrameOnly(RNCWebViewWrapper view, boolean value) {
185
+ mRNCWebViewManagerImpl.setInjectedJavaScriptBeforeContentLoadedForMainFrameOnly(view, value);
186
+
187
+ }
188
+
189
+ @ReactProp(name = "injectedJavaScriptObject")
190
+ public void setInjectedJavaScriptObject(RNCWebViewWrapper view, @Nullable String value) {
191
+ mRNCWebViewManagerImpl.setInjectedJavaScriptObject(view, value);
192
+ }
193
+
194
+ @Override
195
+ @ReactProp(name = "javaScriptCanOpenWindowsAutomatically")
196
+ public void setJavaScriptCanOpenWindowsAutomatically(RNCWebViewWrapper view, boolean value) {
197
+ mRNCWebViewManagerImpl.setJavaScriptCanOpenWindowsAutomatically(view, value);
198
+ }
199
+
200
+ @ReactProp(name = "javaScriptEnabled")
201
+ public void setJavaScriptEnabled(RNCWebViewWrapper view, boolean enabled) {
202
+ mRNCWebViewManagerImpl.setJavaScriptEnabled(view, enabled);
203
+ }
204
+
205
+ @Override
206
+ @ReactProp(name = "lackPermissionToDownloadMessage")
207
+ public void setLackPermissionToDownloadMessage(RNCWebViewWrapper view, @Nullable String value) {
208
+ mRNCWebViewManagerImpl.setLackPermissionToDownloadMessage(value);
209
+ }
210
+
211
+ @Override
212
+ @ReactProp(name = "hasOnOpenWindowEvent")
213
+ public void setHasOnOpenWindowEvent(RNCWebViewWrapper view, boolean hasEvent) {
214
+ mRNCWebViewManagerImpl.setHasOnOpenWindowEvent(view, hasEvent);
215
+ }
216
+
217
+ @Override
218
+ @ReactProp(name = "mediaPlaybackRequiresUserAction")
219
+ public void setMediaPlaybackRequiresUserAction(RNCWebViewWrapper view, boolean value) {
220
+ mRNCWebViewManagerImpl.setMediaPlaybackRequiresUserAction(view, value);
221
+ }
222
+
223
+ @Override
224
+ @ReactProp(name = "menuItems")
225
+ public void setMenuItems(RNCWebViewWrapper view, @Nullable ReadableArray items) {
226
+ mRNCWebViewManagerImpl.setMenuCustomItems(view, items);
227
+ }
228
+
229
+ @Override
230
+ @ReactProp(name = "suppressMenuItems")
231
+ public void setSuppressMenuItems(RNCWebViewWrapper view, @Nullable ReadableArray items) {}
232
+
233
+ @Override
234
+ @ReactProp(name = "messagingEnabled")
235
+ public void setMessagingEnabled(RNCWebViewWrapper view, boolean value) {
236
+ mRNCWebViewManagerImpl.setMessagingEnabled(view, value);
237
+ }
238
+
239
+ @Override
240
+ @ReactProp(name = "messagingModuleName")
241
+ public void setMessagingModuleName(RNCWebViewWrapper view, @Nullable String value) {
242
+ mRNCWebViewManagerImpl.setMessagingModuleName(view, value);
243
+ }
244
+
245
+ @Override
246
+ @ReactProp(name = "minimumFontSize")
247
+ public void setMinimumFontSize(RNCWebViewWrapper view, int value) {
248
+ mRNCWebViewManagerImpl.setMinimumFontSize(view, value);
249
+ }
250
+
251
+ @Override
252
+ @ReactProp(name = "mixedContentMode")
253
+ public void setMixedContentMode(RNCWebViewWrapper view, @Nullable String value) {
254
+ mRNCWebViewManagerImpl.setMixedContentMode(view, value);
255
+ }
256
+
257
+ @Override
258
+ @ReactProp(name = "nestedScrollEnabled")
259
+ public void setNestedScrollEnabled(RNCWebViewWrapper view, boolean value) {
260
+ mRNCWebViewManagerImpl.setNestedScrollEnabled(view, value);
261
+ }
262
+
263
+ @Override
264
+ @ReactProp(name = "overScrollMode")
265
+ public void setOverScrollMode(RNCWebViewWrapper view, @Nullable String value) {
266
+ mRNCWebViewManagerImpl.setOverScrollMode(view, value);
267
+ }
268
+
269
+ @Override
270
+ @ReactProp(name = "saveFormDataDisabled")
271
+ public void setSaveFormDataDisabled(RNCWebViewWrapper view, boolean value) {
272
+ mRNCWebViewManagerImpl.setSaveFormDataDisabled(view, value);
273
+ }
274
+
275
+ @Override
276
+ @ReactProp(name = "scalesPageToFit")
277
+ public void setScalesPageToFit(RNCWebViewWrapper view, boolean value) {
278
+ mRNCWebViewManagerImpl.setScalesPageToFit(view, value);
279
+ }
280
+
281
+ @Override
282
+ @ReactProp(name = "setBuiltInZoomControls")
283
+ public void setSetBuiltInZoomControls(RNCWebViewWrapper view, boolean value) {
284
+ mRNCWebViewManagerImpl.setSetBuiltInZoomControls(view, value);
285
+ }
286
+
287
+ @Override
288
+ @ReactProp(name = "setDisplayZoomControls")
289
+ public void setSetDisplayZoomControls(RNCWebViewWrapper view, boolean value) {
290
+ mRNCWebViewManagerImpl.setSetDisplayZoomControls(view, value);
291
+ }
292
+
293
+ @Override
294
+ @ReactProp(name = "setSupportMultipleWindows")
295
+ public void setSetSupportMultipleWindows(RNCWebViewWrapper view, boolean value) {
296
+ mRNCWebViewManagerImpl.setSetSupportMultipleWindows(view, value);
297
+ }
298
+
299
+ @Override
300
+ @ReactProp(name = "showsHorizontalScrollIndicator")
301
+ public void setShowsHorizontalScrollIndicator(RNCWebViewWrapper view, boolean value) {
302
+ mRNCWebViewManagerImpl.setShowsHorizontalScrollIndicator(view, value);
303
+ }
304
+
305
+ @Override
306
+ @ReactProp(name = "showsVerticalScrollIndicator")
307
+ public void setShowsVerticalScrollIndicator(RNCWebViewWrapper view, boolean value) {
308
+ mRNCWebViewManagerImpl.setShowsVerticalScrollIndicator(view, value);
309
+ }
310
+
311
+ @Override
312
+ @ReactProp(name = "newSource")
313
+ public void setNewSource(RNCWebViewWrapper view, @Nullable ReadableMap value) {
314
+ mRNCWebViewManagerImpl.setSource(view, value);
315
+ }
316
+
317
+ @Override
318
+ @ReactProp(name = "textZoom")
319
+ public void setTextZoom(RNCWebViewWrapper view, int value) {
320
+ mRNCWebViewManagerImpl.setTextZoom(view, value);
321
+ }
322
+
323
+ @Override
324
+ @ReactProp(name = "thirdPartyCookiesEnabled")
325
+ public void setThirdPartyCookiesEnabled(RNCWebViewWrapper view, boolean value) {
326
+ mRNCWebViewManagerImpl.setThirdPartyCookiesEnabled(view, value);
327
+ }
328
+
329
+ @Override
330
+ @ReactProp(name = "webviewDebuggingEnabled")
331
+ public void setWebviewDebuggingEnabled(RNCWebViewWrapper view, boolean value) {
332
+ mRNCWebViewManagerImpl.setWebviewDebuggingEnabled(view, value);
333
+ }
334
+
335
+ @Override
336
+ @ReactProp(name = "paymentRequestEnabled")
337
+ public void setPaymentRequestEnabled(RNCWebViewWrapper view, boolean value) {
338
+ mRNCWebViewManagerImpl.setPaymentRequestEnabled(view, value);
339
+ }
340
+
341
+ // Exodus: Camera permission origin whitelist
342
+ @ReactProp(name = "cameraPermissionOriginWhitelist")
343
+ public void setCameraPermissionOriginWhitelist(RNCWebViewWrapper view, @Nullable ReadableArray value) {
344
+ mRNCWebViewManagerImpl.setCameraPermissionOriginWhitelist(view, value);
345
+ }
346
+
347
+ /* iOS PROPS - no implemented here */
348
+ @Override
349
+ public void setAllowingReadAccessToURL(RNCWebViewWrapper view, @Nullable String value) {}
350
+
351
+ @Override
352
+ public void setAllowsBackForwardNavigationGestures(RNCWebViewWrapper view, boolean value) {}
353
+
354
+ @Override
355
+ public void setAllowsInlineMediaPlayback(RNCWebViewWrapper view, boolean value) {}
356
+
357
+ @Override
358
+ public void setAllowsPictureInPictureMediaPlayback(RNCWebViewWrapper view, boolean value) {}
359
+
360
+ @Override
361
+ public void setAllowsAirPlayForMediaPlayback(RNCWebViewWrapper view, boolean value) {}
362
+
363
+ @Override
364
+ public void setAllowsLinkPreview(RNCWebViewWrapper view, boolean value) {}
365
+
366
+ @Override
367
+ public void setAutomaticallyAdjustContentInsets(RNCWebViewWrapper view, boolean value) {}
368
+
369
+ @Override
370
+ public void setAutoManageStatusBarEnabled(RNCWebViewWrapper view, boolean value) {}
371
+
372
+ @Override
373
+ public void setBounces(RNCWebViewWrapper view, boolean value) {}
374
+
375
+ @Override
376
+ public void setContentInset(RNCWebViewWrapper view, @Nullable ReadableMap value) {}
377
+
378
+ @Override
379
+ public void setContentInsetAdjustmentBehavior(RNCWebViewWrapper view, @Nullable String value) {}
380
+
381
+ @Override
382
+ public void setContentMode(RNCWebViewWrapper view, @Nullable String value) {}
383
+
384
+ @Override
385
+ public void setDataDetectorTypes(RNCWebViewWrapper view, @Nullable ReadableArray value) {}
386
+
387
+ @Override
388
+ public void setDecelerationRate(RNCWebViewWrapper view, double value) {}
389
+
390
+ @Override
391
+ public void setDirectionalLockEnabled(RNCWebViewWrapper view, boolean value) {}
392
+
393
+ @Override
394
+ public void setEnableApplePay(RNCWebViewWrapper view, boolean value) {}
395
+
396
+ @Override
397
+ public void setHideKeyboardAccessoryView(RNCWebViewWrapper view, boolean value) {}
398
+
399
+ @Override
400
+ public void setKeyboardDisplayRequiresUserAction(RNCWebViewWrapper view, boolean value) {}
401
+
402
+ @Override
403
+ public void setPagingEnabled(RNCWebViewWrapper view, boolean value) {}
404
+
405
+ @Override
406
+ public void setPullToRefreshEnabled(RNCWebViewWrapper view, boolean value) {}
407
+
408
+ @Override
409
+ public void setRefreshControlLightMode(RNCWebViewWrapper view, boolean value) {}
410
+
411
+ @Override
412
+ public void setIndicatorStyle(RNCWebViewWrapper view, @Nullable String value) {}
413
+
414
+ @Override
415
+ public void setScrollEnabled(RNCWebViewWrapper view, boolean value) {}
416
+
417
+ @Override
418
+ public void setSharedCookiesEnabled(RNCWebViewWrapper view, boolean value) {}
419
+
420
+ @Override
421
+ public void setUseSharedProcessPool(RNCWebViewWrapper view, boolean value) {}
422
+
423
+ @Override
424
+ public void setLimitsNavigationsToAppBoundDomains(RNCWebViewWrapper view, boolean value) {}
425
+
426
+ @Override
427
+ public void setTextInteractionEnabled(RNCWebViewWrapper view, boolean value) {}
428
+
429
+ @Override
430
+ public void setHasOnFileDownload(RNCWebViewWrapper view, boolean value) {}
431
+
432
+ @Override
433
+ public void setMediaCapturePermissionGrantType(RNCWebViewWrapper view, @Nullable String value) {}
434
+
435
+ @Override
436
+ public void setFraudulentWebsiteWarningEnabled(RNCWebViewWrapper view, boolean value) {}
437
+ /* !iOS PROPS - no implemented here */
438
+
439
+ @Override
440
+ @ReactProp(name = "userAgent")
441
+ public void setUserAgent(RNCWebViewWrapper view, @Nullable String value) {
442
+ mRNCWebViewManagerImpl.setUserAgent(view, value);
443
+ }
444
+
445
+ @Override
446
+ public void goBack(RNCWebViewWrapper view) {
447
+ view.getWebView().goBack();
448
+ }
449
+
450
+ @Override
451
+ public void goForward(RNCWebViewWrapper view) {
452
+ view.getWebView().goForward();
453
+ }
454
+
455
+ @Override
456
+ public void reload(RNCWebViewWrapper view) {
457
+ view.getWebView().reload();
458
+ }
459
+
460
+ @Override
461
+ public void stopLoading(RNCWebViewWrapper view) {
462
+ view.getWebView().stopLoading();
463
+ }
464
+
465
+ @Override
466
+ public void injectJavaScript(RNCWebViewWrapper view, String javascript) {
467
+ view.getWebView().evaluateJavascriptWithFallback(javascript);
468
+ }
469
+
470
+ @Override
471
+ public void requestFocus(RNCWebViewWrapper view) {
472
+ view.requestFocus();
473
+ }
474
+
475
+ @Override
476
+ public void postMessage(RNCWebViewWrapper view, String data) {
477
+ try {
478
+ JSONObject eventInitDict = new JSONObject();
479
+ eventInitDict.put("data", data);
480
+ view.getWebView().evaluateJavascriptWithFallback(
481
+ "(function () {" +
482
+ "var event;" +
483
+ "var data = " + eventInitDict.toString() + ";" +
484
+ "try {" +
485
+ "event = new MessageEvent('message', data);" +
486
+ "} catch (e) {" +
487
+ "event = document.createEvent('MessageEvent');" +
488
+ "event.initMessageEvent('message', true, true, data.data, data.origin, data.lastEventId, data.source);" +
489
+ "}" +
490
+ "document.dispatchEvent(event);" +
491
+ "})();"
492
+ );
493
+ } catch (JSONException e) {
494
+ throw new RuntimeException(e);
495
+ }
496
+ }
497
+
498
+ @Override
499
+ public void loadUrl(RNCWebViewWrapper view, String url) {
500
+ view.getWebView().loadUrl(url);
501
+ }
502
+
503
+ @Override
504
+ public void clearFormData(RNCWebViewWrapper view) {
505
+ view.getWebView().clearFormData();
506
+ }
507
+
508
+ @Override
509
+ public void clearCache(RNCWebViewWrapper view, boolean includeDiskFiles) {
510
+ view.getWebView().clearCache(includeDiskFiles);
511
+ }
512
+
513
+ @Override
514
+ public void clearHistory(RNCWebViewWrapper view) {
515
+ view.getWebView().clearHistory();
516
+ }
517
+
518
+ @Override
519
+ protected void addEventEmitters(@NonNull ThemedReactContext reactContext, RNCWebViewWrapper view) {
520
+ // Do not register default touch emitter and let WebView implementation handle touches
521
+ view.getWebView().setWebViewClient(new RNCWebViewClient());
522
+ }
523
+
524
+ @Override
525
+ public Map<String, Object> getExportedCustomDirectEventTypeConstants() {
526
+ Map<String, Object> export = super.getExportedCustomDirectEventTypeConstants();
527
+ if (export == null) {
528
+ export = MapBuilder.newHashMap();
529
+ }
530
+ // Default events but adding them here explicitly for clarity
531
+ export.put(TopLoadingStartEvent.EVENT_NAME, MapBuilder.of("registrationName", "onLoadingStart"));
532
+ export.put(TopLoadingFinishEvent.EVENT_NAME, MapBuilder.of("registrationName", "onLoadingFinish"));
533
+ export.put(TopLoadingErrorEvent.EVENT_NAME, MapBuilder.of("registrationName", "onLoadingError"));
534
+ export.put(SubResourceErrorEvent.EVENT_NAME, MapBuilder.of("registrationName", "onLoadingSubResourceError"));
535
+ export.put(TopMessageEvent.EVENT_NAME, MapBuilder.of("registrationName", "onMessage"));
536
+ // !Default events but adding them here explicitly for clarity
537
+
538
+ export.put(TopLoadingProgressEvent.EVENT_NAME, MapBuilder.of("registrationName", "onLoadingProgress"));
539
+ export.put(TopShouldStartLoadWithRequestEvent.EVENT_NAME, MapBuilder.of("registrationName", "onShouldStartLoadWithRequest"));
540
+ export.put(ScrollEventType.getJSEventName(ScrollEventType.SCROLL), MapBuilder.of("registrationName", "onScroll"));
541
+ export.put(TopHttpErrorEvent.EVENT_NAME, MapBuilder.of("registrationName", "onHttpError"));
542
+ export.put(TopRenderProcessGoneEvent.EVENT_NAME, MapBuilder.of("registrationName", "onRenderProcessGone"));
543
+ export.put(TopCustomMenuSelectionEvent.EVENT_NAME, MapBuilder.of("registrationName", "onCustomMenuSelection"));
544
+ export.put(TopOpenWindowEvent.EVENT_NAME, MapBuilder.of("registrationName", "onOpenWindow"));
545
+ return export;
546
+ }
547
+
548
+ @Override
549
+ public @Nullable
550
+ Map<String, Integer> getCommandsMap() {
551
+ return mRNCWebViewManagerImpl.getCommandsMap();
552
+ }
553
+
554
+ @Override
555
+ public void receiveCommand(@NonNull RNCWebViewWrapper reactWebView, String commandId, @Nullable ReadableArray args) {
556
+ super.receiveCommand(reactWebView, commandId, args);
557
+ }
558
+
559
+ @Override
560
+ protected void onAfterUpdateTransaction(@NonNull RNCWebViewWrapper view) {
561
+ super.onAfterUpdateTransaction(view);
562
+ mRNCWebViewManagerImpl.onAfterUpdateTransaction(view);
563
+ }
564
+
565
+ @Override
566
+ public void onDropViewInstance(@NonNull RNCWebViewWrapper view) {
567
+ mRNCWebViewManagerImpl.onDropViewInstance(view);
568
+ super.onDropViewInstance(view);
569
+ }
570
+ }