@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
@@ -1,278 +0,0 @@
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 "RNCWebViewManager.h"
9
-
10
- #import <React/RCTUIManager.h>
11
- #import <React/RCTDefines.h>
12
- #import "RNCWebView.h"
13
-
14
- @interface RNCWebViewManager () <RNCWebViewDelegate>
15
- @end
16
-
17
- @implementation RCTConvert (WKWebView)
18
- #if defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 130000 /* iOS 13 */
19
- RCT_ENUM_CONVERTER(WKContentMode, (@{
20
- @"recommended": @(WKContentModeRecommended),
21
- @"mobile": @(WKContentModeMobile),
22
- @"desktop": @(WKContentModeDesktop),
23
- }), WKContentModeRecommended, integerValue)
24
- #endif
25
-
26
- #if defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 150000 /* iOS 15 */
27
- RCT_ENUM_CONVERTER(RNCWebViewPermissionGrantType, (@{
28
- @"grantIfSameHostElsePrompt": @(RNCWebViewPermissionGrantType_GrantIfSameHost_ElsePrompt),
29
- @"grantIfSameHostElseDeny": @(RNCWebViewPermissionGrantType_GrantIfSameHost_ElseDeny),
30
- @"deny": @(RNCWebViewPermissionGrantType_Deny),
31
- @"grant": @(RNCWebViewPermissionGrantType_Grant),
32
- @"prompt": @(RNCWebViewPermissionGrantType_Prompt),
33
- }), RNCWebViewPermissionGrantType_Prompt, integerValue)
34
- #endif
35
- @end
36
-
37
- @implementation RNCWebViewManager
38
- {
39
- NSConditionLock *_shouldStartLoadLock;
40
- BOOL _shouldStartLoad;
41
- }
42
-
43
- RCT_EXPORT_MODULE()
44
-
45
- #if !TARGET_OS_OSX
46
- - (UIView *)view
47
- #else
48
- - (RCTUIView *)view
49
- #endif // !TARGET_OS_OSX
50
- {
51
- RNCWebView *webView = [RNCWebView new];
52
- webView.delegate = self;
53
- return webView;
54
- }
55
-
56
- RCT_EXPORT_VIEW_PROPERTY(source, NSDictionary)
57
- RCT_EXPORT_VIEW_PROPERTY(onLoadingStart, RCTDirectEventBlock)
58
- RCT_EXPORT_VIEW_PROPERTY(onLoadingFinish, RCTDirectEventBlock)
59
- RCT_EXPORT_VIEW_PROPERTY(onLoadingError, RCTDirectEventBlock)
60
- RCT_EXPORT_VIEW_PROPERTY(onLoadingProgress, RCTDirectEventBlock)
61
- RCT_EXPORT_VIEW_PROPERTY(onShouldStartLoadWithRequest, RCTDirectEventBlock)
62
- RCT_EXPORT_VIEW_PROPERTY(injectedJavaScript, NSString)
63
- RCT_EXPORT_VIEW_PROPERTY(injectedJavaScriptBeforeContentLoaded, NSString)
64
- RCT_EXPORT_VIEW_PROPERTY(javaScriptEnabled, BOOL)
65
- RCT_EXPORT_VIEW_PROPERTY(allowsInlineMediaPlayback, BOOL)
66
- RCT_EXPORT_VIEW_PROPERTY(mediaPlaybackRequiresUserAction, BOOL)
67
- #if WEBKIT_IOS_10_APIS_AVAILABLE
68
- RCT_EXPORT_VIEW_PROPERTY(dataDetectorTypes, WKDataDetectorTypes)
69
- #endif
70
- RCT_EXPORT_VIEW_PROPERTY(contentInset, UIEdgeInsets)
71
- RCT_EXPORT_VIEW_PROPERTY(automaticallyAdjustContentInsets, BOOL)
72
- RCT_EXPORT_VIEW_PROPERTY(autoManageStatusBarEnabled, BOOL)
73
- RCT_EXPORT_VIEW_PROPERTY(hideKeyboardAccessoryView, BOOL)
74
- RCT_EXPORT_VIEW_PROPERTY(allowsBackForwardNavigationGestures, BOOL)
75
- RCT_EXPORT_VIEW_PROPERTY(incognito, BOOL)
76
- RCT_EXPORT_VIEW_PROPERTY(pagingEnabled, BOOL)
77
- RCT_EXPORT_VIEW_PROPERTY(cacheEnabled, BOOL)
78
- RCT_EXPORT_VIEW_PROPERTY(allowsLinkPreview, BOOL)
79
- RCT_EXPORT_VIEW_PROPERTY(basicAuthCredential, NSDictionary)
80
-
81
- #if defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 110000 /* __IPHONE_11_0 */
82
- RCT_EXPORT_VIEW_PROPERTY(contentInsetAdjustmentBehavior, UIScrollViewContentInsetAdjustmentBehavior)
83
- #endif
84
- #if defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 130000 /* __IPHONE_13_0 */
85
- RCT_EXPORT_VIEW_PROPERTY(automaticallyAdjustsScrollIndicatorInsets, BOOL)
86
- #endif
87
-
88
- #if defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 130000 /* iOS 13 */
89
- RCT_EXPORT_VIEW_PROPERTY(contentMode, WKContentMode)
90
- #endif
91
-
92
- #if defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 140000 /* iOS 14 */
93
- RCT_EXPORT_VIEW_PROPERTY(limitsNavigationsToAppBoundDomains, BOOL)
94
- #endif
95
-
96
- #if defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 140500 /* iOS 14.5 */
97
- RCT_EXPORT_VIEW_PROPERTY(textInteractionEnabled, BOOL)
98
- #endif
99
-
100
- #if defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 150000 /* iOS 15 */
101
- RCT_EXPORT_VIEW_PROPERTY(mediaCapturePermissionGrantType, RNCWebViewPermissionGrantType)
102
- #endif
103
-
104
- /**
105
- * Expose methods to enable messaging the webview.
106
- */
107
- RCT_EXPORT_VIEW_PROPERTY(messagingEnabled, BOOL)
108
- RCT_EXPORT_VIEW_PROPERTY(onMessage, RCTDirectEventBlock)
109
- RCT_EXPORT_VIEW_PROPERTY(onScroll, RCTDirectEventBlock)
110
- RCT_EXPORT_VIEW_PROPERTY(enableApplePay, BOOL)
111
- RCT_EXPORT_VIEW_PROPERTY(menuItems, NSArray);
112
- RCT_EXPORT_VIEW_PROPERTY(onCustomMenuSelection, RCTDirectEventBlock)
113
-
114
- RCT_EXPORT_METHOD(postMessage:(nonnull NSNumber *)reactTag message:(NSString *)message)
115
- {
116
- [self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *uiManager, NSDictionary<NSNumber *, RNCWebView *> *viewRegistry) {
117
- RNCWebView *view = viewRegistry[reactTag];
118
- if (![view isKindOfClass:[RNCWebView class]]) {
119
- RCTLogError(@"Invalid view returned from registry, expecting RNCWebView, got: %@", view);
120
- } else {
121
- [view postMessage:message];
122
- }
123
- }];
124
- }
125
-
126
- RCT_CUSTOM_VIEW_PROPERTY(pullToRefreshEnabled, BOOL, RNCWebView) {
127
- view.pullToRefreshEnabled = json == nil ? false : [RCTConvert BOOL: json];
128
- }
129
-
130
- RCT_CUSTOM_VIEW_PROPERTY(bounces, BOOL, RNCWebView) {
131
- view.bounces = json == nil ? true : [RCTConvert BOOL: json];
132
- }
133
-
134
- RCT_CUSTOM_VIEW_PROPERTY(useSharedProcessPool, BOOL, RNCWebView) {
135
- view.useSharedProcessPool = json == nil ? true : [RCTConvert BOOL: json];
136
- }
137
-
138
- RCT_CUSTOM_VIEW_PROPERTY(userAgent, NSString, RNCWebView) {
139
- view.userAgent = [RCTConvert NSString: json];
140
- }
141
-
142
- RCT_CUSTOM_VIEW_PROPERTY(scrollEnabled, BOOL, RNCWebView) {
143
- view.scrollEnabled = json == nil ? true : [RCTConvert BOOL: json];
144
- }
145
-
146
- RCT_CUSTOM_VIEW_PROPERTY(sharedCookiesEnabled, BOOL, RNCWebView) {
147
- view.sharedCookiesEnabled = json == nil ? false : [RCTConvert BOOL: json];
148
- }
149
-
150
- #if !TARGET_OS_OSX
151
- RCT_CUSTOM_VIEW_PROPERTY(decelerationRate, CGFloat, RNCWebView) {
152
- view.decelerationRate = json == nil ? UIScrollViewDecelerationRateNormal : [RCTConvert CGFloat: json];
153
- }
154
- #endif // !TARGET_OS_OSX
155
-
156
- RCT_CUSTOM_VIEW_PROPERTY(directionalLockEnabled, BOOL, RNCWebView) {
157
- view.directionalLockEnabled = json == nil ? true : [RCTConvert BOOL: json];
158
- }
159
-
160
- RCT_CUSTOM_VIEW_PROPERTY(showsHorizontalScrollIndicator, BOOL, RNCWebView) {
161
- view.showsHorizontalScrollIndicator = json == nil ? true : [RCTConvert BOOL: json];
162
- }
163
-
164
- RCT_CUSTOM_VIEW_PROPERTY(showsVerticalScrollIndicator, BOOL, RNCWebView) {
165
- view.showsVerticalScrollIndicator = json == nil ? true : [RCTConvert BOOL: json];
166
- }
167
-
168
- RCT_CUSTOM_VIEW_PROPERTY(keyboardDisplayRequiresUserAction, BOOL, RNCWebView) {
169
- view.keyboardDisplayRequiresUserAction = json == nil ? true : [RCTConvert BOOL: json];
170
- }
171
-
172
- RCT_EXPORT_METHOD(injectJavaScript:(nonnull NSNumber *)reactTag script:(NSString *)script)
173
- {
174
- [self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *uiManager, NSDictionary<NSNumber *, RNCWebView *> *viewRegistry) {
175
- RNCWebView *view = viewRegistry[reactTag];
176
- if (![view isKindOfClass:[RNCWebView class]]) {
177
- RCTLogError(@"Invalid view returned from registry, expecting RNCWebView, got: %@", view);
178
- } else {
179
- [view injectJavaScript:script];
180
- }
181
- }];
182
- }
183
-
184
- RCT_EXPORT_METHOD(goBack:(nonnull NSNumber *)reactTag)
185
- {
186
- [self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *uiManager, NSDictionary<NSNumber *, RNCWebView *> *viewRegistry) {
187
- RNCWebView *view = viewRegistry[reactTag];
188
- if (![view isKindOfClass:[RNCWebView class]]) {
189
- RCTLogError(@"Invalid view returned from registry, expecting RNCWebView, got: %@", view);
190
- } else {
191
- [view goBack];
192
- }
193
- }];
194
- }
195
-
196
- RCT_EXPORT_METHOD(goForward:(nonnull NSNumber *)reactTag)
197
- {
198
- [self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *uiManager, NSDictionary<NSNumber *, RNCWebView *> *viewRegistry) {
199
- RNCWebView *view = viewRegistry[reactTag];
200
- if (![view isKindOfClass:[RNCWebView class]]) {
201
- RCTLogError(@"Invalid view returned from registry, expecting RNCWebView, got: %@", view);
202
- } else {
203
- [view goForward];
204
- }
205
- }];
206
- }
207
-
208
- RCT_EXPORT_METHOD(reload:(nonnull NSNumber *)reactTag)
209
- {
210
- [self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *uiManager, NSDictionary<NSNumber *, RNCWebView *> *viewRegistry) {
211
- RNCWebView *view = viewRegistry[reactTag];
212
- if (![view isKindOfClass:[RNCWebView class]]) {
213
- RCTLogError(@"Invalid view returned from registry, expecting RNCWebView, got: %@", view);
214
- } else {
215
- [view reload];
216
- }
217
- }];
218
- }
219
-
220
- RCT_EXPORT_METHOD(stopLoading:(nonnull NSNumber *)reactTag)
221
- {
222
- [self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *uiManager, NSDictionary<NSNumber *, RNCWebView *> *viewRegistry) {
223
- RNCWebView *view = viewRegistry[reactTag];
224
- if (![view isKindOfClass:[RNCWebView class]]) {
225
- RCTLogError(@"Invalid view returned from registry, expecting RNCWebView, got: %@", view);
226
- } else {
227
- [view stopLoading];
228
- }
229
- }];
230
- }
231
-
232
- RCT_EXPORT_METHOD(requestFocus:(nonnull NSNumber *)reactTag)
233
- {
234
- [self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *uiManager, NSDictionary<NSNumber *, RNCWebView *> *viewRegistry) {
235
- RNCWebView *view = viewRegistry[reactTag];
236
- if (![view isKindOfClass:[RNCWebView class]]) {
237
- RCTLogError(@"Invalid view returned from registry, expecting RNCWebView, got: %@", view);
238
- } else {
239
- [view requestFocus];
240
- }
241
- }];
242
- }
243
-
244
- #pragma mark - Exported synchronous methods
245
-
246
- - (BOOL) webView:(RNCWebView *)webView
247
- shouldStartLoadForRequest:(NSMutableDictionary<NSString *, id> *)request
248
- withCallback:(RCTDirectEventBlock)callback
249
- {
250
- _shouldStartLoadLock = [[NSConditionLock alloc] initWithCondition:arc4random()];
251
- _shouldStartLoad = YES;
252
- request[@"lockIdentifier"] = @(_shouldStartLoadLock.condition);
253
- callback(request);
254
-
255
- // Block the main thread for a maximum of 250ms until the JS thread returns
256
- if ([_shouldStartLoadLock lockWhenCondition:0 beforeDate:[NSDate dateWithTimeIntervalSinceNow:.25]]) {
257
- BOOL returnValue = _shouldStartLoad;
258
- [_shouldStartLoadLock unlock];
259
- _shouldStartLoadLock = nil;
260
- return returnValue;
261
- } else {
262
- RCTLogWarn(@"Did not receive response to shouldStartLoad in time, defaulting to YES");
263
- return YES;
264
- }
265
- }
266
-
267
- RCT_EXPORT_METHOD(startLoadWithResult:(BOOL)result lockIdentifier:(NSInteger)lockIdentifier)
268
- {
269
- if ([_shouldStartLoadLock tryLockWhenCondition:lockIdentifier]) {
270
- _shouldStartLoad = result;
271
- [_shouldStartLoadLock unlockWithCondition:0];
272
- } else {
273
- RCTLogWarn(@"startLoadWithResult invoked with invalid lockIdentifier: "
274
- "got %lld, expected %lld", (long long)lockIdentifier, (long long)_shouldStartLoadLock.condition);
275
- }
276
- }
277
-
278
- @end
@@ -1,4 +0,0 @@
1
- import type { NativeWebViewAndroid } from "./WebViewTypes";
2
- declare const RNCWebView: typeof NativeWebViewAndroid;
3
- export default RNCWebView;
4
- //# sourceMappingURL=WebViewNativeComponent.android.d.ts.map
@@ -1,3 +0,0 @@
1
- import { requireNativeComponent } from "react-native";
2
- const RNCWebView = requireNativeComponent('RNCWebView');
3
- export default RNCWebView;
@@ -1,4 +0,0 @@
1
- import type { NativeWebViewIOS } from "./WebViewTypes";
2
- declare const RNCWebView: typeof NativeWebViewIOS;
3
- export default RNCWebView;
4
- //# sourceMappingURL=WebViewNativeComponent.ios.d.ts.map
@@ -1,3 +0,0 @@
1
- import { requireNativeComponent } from "react-native";
2
- const RNCWebView = requireNativeComponent('RNCWebView');
3
- export default RNCWebView;