@@ -27,6 +27,7 @@ import {
27
27
} from './WebViewTypes' ;
28
28
29
29
import styles from './WebView.styles' ;
30
+ import validateProps from './validation'
30
31
31
32
const { getWebViewDefaultUserAgent } = NativeModules . RNCWebViewUtils ;
32
33
@@ -58,39 +59,41 @@ const setSupportMultipleWindows = true;
58
59
const mixedContentMode = 'never'
59
60
const hardMinimumChromeVersion = '100.0' // TODO: determinime a good lower bound
60
61
61
- const WebViewComponent = forwardRef < { } , AndroidWebViewProps > ( ( {
62
- overScrollMode = 'always' ,
63
- javaScriptEnabled = true ,
64
- thirdPartyCookiesEnabled = true ,
65
- scalesPageToFit = true ,
66
- saveFormDataDisabled = false ,
67
- cacheEnabled = true ,
68
- androidHardwareAccelerationDisabled = false ,
69
- androidLayerType = "none" ,
70
- originWhitelist = defaultOriginWhitelist ,
71
- deeplinkWhitelist = defaultDeeplinkWhitelist ,
72
- setBuiltInZoomControls = true ,
73
- setDisplayZoomControls = false ,
74
- nestedScrollEnabled = false ,
75
- startInLoadingState,
76
- onLoadStart,
77
- onError,
78
- onLoad,
79
- onLoadEnd,
80
- onMessage : onMessageProp ,
81
- onOpenWindow : onOpenWindowProp ,
82
- renderLoading,
83
- renderError,
84
- style,
85
- containerStyle,
86
- source,
87
- onShouldStartLoadWithRequest : onShouldStartLoadWithRequestProp ,
88
- validateMeta,
89
- validateData,
90
- minimumChromeVersion,
91
- unsupportedVersionComponent : UnsupportedVersionComponent ,
92
- ...otherProps
93
- } , ref ) => {
62
+ const WebViewComponent = forwardRef < { } , AndroidWebViewProps > ( ( props , ref ) => {
63
+ const {
64
+ overScrollMode = 'always' ,
65
+ javaScriptEnabled = true ,
66
+ thirdPartyCookiesEnabled = true ,
67
+ scalesPageToFit = true ,
68
+ saveFormDataDisabled = false ,
69
+ cacheEnabled = true ,
70
+ androidHardwareAccelerationDisabled = false ,
71
+ androidLayerType = "none" ,
72
+ originWhitelist = defaultOriginWhitelist ,
73
+ deeplinkWhitelist = defaultDeeplinkWhitelist ,
74
+ setBuiltInZoomControls = true ,
75
+ setDisplayZoomControls = false ,
76
+ nestedScrollEnabled = false ,
77
+ startInLoadingState,
78
+ onLoadStart,
79
+ onError,
80
+ onLoad,
81
+ onLoadEnd,
82
+ onMessage : onMessageProp ,
83
+ onOpenWindow : onOpenWindowProp ,
84
+ renderLoading,
85
+ renderError,
86
+ style,
87
+ containerStyle,
88
+ source,
89
+ onShouldStartLoadWithRequest : onShouldStartLoadWithRequestProp ,
90
+ validateMeta,
91
+ validateData,
92
+ minimumChromeVersion,
93
+ unsupportedVersionComponent : UnsupportedVersionComponent ,
94
+ ...otherProps
95
+ } = validateProps ( props )
96
+
94
97
const messagingModuleName = useRef < string > ( `WebViewMessageHandler${ uniqueRef += 1 } ` ) . current ;
95
98
const webViewRef = useRef < NativeWebViewAndroid | null > ( null ) ;
96
99
@@ -197,10 +200,7 @@ const WebViewComponent = forwardRef<{}, AndroidWebViewProps>(({
197
200
}
198
201
}
199
202
200
- if ( typeof source === "object" && 'uri' in source && ! passesWhitelist ( source . uri ) ) {
201
- // eslint-disable-next-line
202
- source = { uri : "about:blank" } ;
203
- }
203
+ const safeSource = ( typeof source === "object" && 'uri' in source && ! passesWhitelist ( source . uri ) ) ? { uri : 'about:blank' } : source ;
204
204
205
205
const NativeWebView = RNCWebView ;
206
206
@@ -220,7 +220,7 @@ const WebViewComponent = forwardRef<{}, AndroidWebViewProps>(({
220
220
221
221
ref = { webViewRef }
222
222
// TODO: find a better way to type this.
223
- source = { source }
223
+ source = { safeSource }
224
224
style = { webViewStyles }
225
225
overScrollMode = { overScrollMode }
226
226
javaScriptEnabled = { javaScriptEnabled }
0 commit comments