react-native-webview-bootpay 11.6.511 → 11.18.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.
- package/README.md +83 -93
- package/android/.gradle/6.8/executionHistory/executionHistory.bin +0 -0
- package/android/.gradle/6.8/executionHistory/executionHistory.lock +0 -0
- package/android/.gradle/6.8/fileHashes/fileHashes.bin +0 -0
- package/android/.gradle/6.8/fileHashes/fileHashes.lock +0 -0
- package/android/.gradle/7.1.1/dependencies-accessors/dependencies-accessors.lock +0 -0
- package/android/.gradle/7.1.1/executionHistory/executionHistory.lock +0 -0
- package/android/.gradle/7.1.1/fileHashes/fileHashes.lock +0 -0
- package/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
- package/android/.gradle/buildOutputCleanup/cache.properties +1 -1
- package/android/.gradle/buildOutputCleanup/outputFiles.bin +0 -0
- package/android/.gradle/checksums/checksums.lock +0 -0
- package/android/.gradle/checksums/md5-checksums.bin +0 -0
- package/android/.gradle/checksums/sha1-checksums.bin +0 -0
- package/android/.idea/jarRepositories.xml +3 -8
- package/android/.idea/libraries/Gradle__androidx_annotation_annotation_1_1_0.xml +13 -0
- package/android/.idea/libraries/Gradle__androidx_appcompat_appcompat_1_0_2_aar.xml +4 -4
- package/android/.idea/libraries/Gradle__androidx_arch_core_core_runtime_2_0_0_aar.xml +3 -3
- package/android/.idea/libraries/Gradle__androidx_asynclayoutinflater_asynclayoutinflater_1_0_0_aar.xml +3 -3
- package/android/.idea/libraries/Gradle__androidx_autofill_autofill_1_1_0_aar.xml +16 -0
- package/android/.idea/libraries/Gradle__androidx_coordinatorlayout_coordinatorlayout_1_0_0_aar.xml +4 -4
- package/android/.idea/libraries/Gradle__androidx_core_core_1_1_0_aar.xml +16 -0
- package/android/.idea/libraries/Gradle__androidx_cursoradapter_cursoradapter_1_0_0_aar.xml +3 -3
- package/android/.idea/libraries/Gradle__androidx_customview_customview_1_0_0_aar.xml +3 -3
- package/android/.idea/libraries/Gradle__androidx_documentfile_documentfile_1_0_0_aar.xml +3 -3
- package/android/.idea/libraries/Gradle__androidx_drawerlayout_drawerlayout_1_0_0_aar.xml +4 -4
- package/android/.idea/libraries/Gradle__androidx_fragment_fragment_1_0_0_aar.xml +4 -4
- package/android/.idea/libraries/Gradle__androidx_interpolator_interpolator_1_0_0_aar.xml +3 -3
- package/android/.idea/libraries/Gradle__androidx_legacy_legacy_support_core_ui_1_0_0_aar.xml +3 -3
- package/android/.idea/libraries/Gradle__androidx_legacy_legacy_support_core_utils_1_0_0_aar.xml +3 -3
- package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_livedata_2_0_0_aar.xml +3 -3
- package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_livedata_core_2_0_0_aar.xml +3 -3
- package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_runtime_2_0_0_aar.xml +3 -3
- package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_viewmodel_2_0_0_aar.xml +3 -3
- package/android/.idea/libraries/Gradle__androidx_loader_loader_1_0_0_aar.xml +3 -3
- package/android/.idea/libraries/Gradle__androidx_localbroadcastmanager_localbroadcastmanager_1_0_0_aar.xml +3 -3
- package/android/.idea/libraries/Gradle__androidx_print_print_1_0_0_aar.xml +4 -4
- package/android/.idea/libraries/Gradle__androidx_slidingpanelayout_slidingpanelayout_1_0_0_aar.xml +3 -3
- package/android/.idea/libraries/Gradle__androidx_swiperefreshlayout_swiperefreshlayout_1_0_0_aar.xml +4 -4
- package/android/.idea/libraries/Gradle__androidx_vectordrawable_vectordrawable_1_0_1_aar.xml +3 -3
- package/android/.idea/libraries/Gradle__androidx_vectordrawable_vectordrawable_animated_1_0_0_aar.xml +3 -3
- package/android/.idea/libraries/Gradle__androidx_versionedparcelable_versionedparcelable_1_1_0_aar.xml +13 -0
- package/android/.idea/libraries/Gradle__androidx_viewpager_viewpager_1_0_0_aar.xml +3 -3
- package/android/.idea/libraries/Gradle__androidx_webkit_webkit_1_4_0_aar.xml +16 -0
- package/android/.idea/libraries/Gradle__com_facebook_fbjni_fbjni_java_only_0_2_2.xml +13 -0
- package/android/.idea/libraries/Gradle__com_facebook_fresco_drawee_2_5_0_aar.xml +15 -0
- package/android/.idea/libraries/{Gradle__com_facebook_fresco_fbcore_2_0_0_aar.xml → Gradle__com_facebook_fresco_fbcore_2_5_0_aar.xml} +7 -7
- package/android/.idea/libraries/Gradle__com_facebook_fresco_fresco_2_5_0_aar.xml +18 -0
- package/android/.idea/libraries/Gradle__com_facebook_fresco_imagepipeline_2_5_0_aar.xml +18 -0
- package/android/.idea/libraries/Gradle__com_facebook_fresco_imagepipeline_base_2_5_0_aar.xml +18 -0
- package/android/.idea/libraries/Gradle__com_facebook_fresco_imagepipeline_native_2_5_0_aar.xml +15 -0
- package/android/.idea/libraries/Gradle__com_facebook_fresco_imagepipeline_okhttp3_2_5_0_aar.xml +15 -0
- package/android/.idea/libraries/Gradle__com_facebook_fresco_memory_type_ashmem_2_5_0_aar.xml +15 -0
- package/android/.idea/libraries/Gradle__com_facebook_fresco_memory_type_java_2_5_0_aar.xml +15 -0
- package/android/.idea/libraries/Gradle__com_facebook_fresco_memory_type_native_2_5_0_aar.xml +15 -0
- package/android/.idea/libraries/Gradle__com_facebook_fresco_nativeimagefilters_2_5_0_aar.xml +15 -0
- package/android/.idea/libraries/Gradle__com_facebook_fresco_nativeimagetranscoder_2_5_0_aar.xml +15 -0
- package/android/.idea/libraries/Gradle__com_facebook_fresco_ui_common_2_5_0_aar.xml +15 -0
- package/android/.idea/libraries/{Gradle__com_facebook_infer_annotation_infer_annotation_0_11_2.xml → Gradle__com_facebook_infer_annotation_infer_annotation_0_18_0.xml} +4 -4
- package/android/.idea/libraries/Gradle__com_facebook_react_react_native_0_66_4_aar.xml +14 -0
- package/android/.idea/libraries/Gradle__com_facebook_soloader_annotation_0_10_1.xml +13 -0
- package/android/.idea/libraries/Gradle__com_facebook_soloader_nativeloader_0_10_1.xml +13 -0
- package/android/.idea/libraries/Gradle__com_facebook_soloader_soloader_0_10_1_aar.xml +15 -0
- package/android/.idea/libraries/Gradle__com_facebook_yoga_proguard_annotations_1_19_0.xml +13 -0
- package/android/.idea/libraries/Gradle__com_squareup_okhttp3_okhttp_4_9_1.xml +13 -0
- package/android/.idea/libraries/Gradle__com_squareup_okhttp3_okhttp_urlconnection_4_9_1.xml +13 -0
- package/android/.idea/libraries/Gradle__com_squareup_okio_okio_2_9_0.xml +13 -0
- package/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_annotations_jvm_1_3_72.xml +13 -0
- package/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_1_4_10.xml +13 -0
- package/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_common_1_4_10.xml +13 -0
- package/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_jdk7_1_4_10.xml +13 -0
- package/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_jdk8_1_4_10.xml +13 -0
- package/android/.idea/modules/android.iml +42 -33
- package/android/build/.transforms/{d5207f219c4292752e7af446f7cc2789.bin → cef19407ab645b1b4c01cb89efaec997/results.bin} +0 -0
- package/android/build/.transforms/cef19407ab645b1b4c01cb89efaec997/transformed/classes/classes.dex +0 -0
- package/android/build/intermediates/aapt_friendly_merged_manifests/debug/aapt/AndroidManifest.xml +3 -84
- package/android/build/intermediates/aapt_friendly_merged_manifests/debug/aapt/output-metadata.json +4 -2
- package/android/build/intermediates/aar_metadata/debug/aar-metadata.properties +2 -0
- package/android/build/intermediates/compile_library_classes_jar/debug/classes.jar +0 -0
- package/android/build/intermediates/compile_r_class_jar/debug/R.jar +0 -0
- package/android/build/intermediates/compile_symbol_list/debug/R.txt +72 -8
- package/android/build/intermediates/compiled_local_resources/debug/out/xml_file_provider_paths.xml.flat +0 -0
- package/android/build/intermediates/incremental/mergeDebugJniLibFolders/merger.xml +1 -1
- package/android/build/intermediates/incremental/mergeDebugShaders/merger.xml +1 -1
- package/android/build/intermediates/incremental/packageDebugAssets/merger.xml +1 -1
- package/android/build/intermediates/incremental/packageDebugResources/compile-file-map.properties +2 -2
- package/android/build/intermediates/incremental/packageDebugResources/merger.xml +1 -1
- package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/BPCWebChromeClient.class +0 -0
- package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/BPCWebView$1.class +0 -0
- package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/BPCWebView$BPCWebViewBridge.class +0 -0
- package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/BPCWebView$ProgressChangedFilter.class +0 -0
- package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/BPCWebView.class +0 -0
- package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/BPCWebViewClient.class +0 -0
- package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/BPCWebViewManager$1.class +0 -0
- package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/BPCWebViewManager$2.class +0 -0
- package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/BPCWebViewManager$3.class +0 -0
- package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/BPCWebViewManager$4.class +0 -0
- package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/BPCWebViewManager.class +0 -0
- package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/BPCWebViewModule.class +0 -0
- package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/BasicAuthCredential.class +0 -0
- package/android/build/intermediates/library_java_res/debug/res.jar +0 -0
- package/android/build/intermediates/manifest_merge_blame_file/debug/manifest-merger-blame-debug-report.txt +30 -200
- package/android/build/intermediates/merged_manifest/debug/AndroidManifest.xml +21 -0
- package/android/build/intermediates/packaged_manifests/debug/output-metadata.json +5 -3
- package/android/build/intermediates/runtime_library_classes_jar/debug/classes.jar +0 -0
- package/android/build/intermediates/symbol_list_with_package_name/debug/package-aware-r.txt +66 -8
- package/android/build/kotlin/compileDebugKotlin/build-history.bin +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/inputs/source-to-output.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/inputs/source-to-output.tab.keystream +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/inputs/source-to-output.tab.keystream.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/inputs/source-to-output.tab.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/inputs/source-to-output.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/inputs/source-to-output.tab_i +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/inputs/source-to-output.tab_i.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/class-attributes.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/class-attributes.tab.keystream +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/class-attributes.tab.keystream.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/class-attributes.tab.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/class-attributes.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/class-attributes.tab_i +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/class-attributes.tab_i.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/constants.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/constants.tab.keystream +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/constants.tab.keystream.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/constants.tab.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/constants.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/constants.tab_i +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/constants.tab_i.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/proto.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/proto.tab.keystream +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/proto.tab.keystream.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/proto.tab.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/proto.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/proto.tab_i +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/proto.tab_i.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/source-to-classes.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/source-to-classes.tab.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/source-to-classes.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/source-to-classes.tab_i +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/source-to-classes.tab_i.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/subtypes.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/subtypes.tab.keystream +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/subtypes.tab.keystream.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/subtypes.tab.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/subtypes.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/{java-sources-proto-map.tab_i → subtypes.tab_i} +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/subtypes.tab_i.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/supertypes.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/supertypes.tab.keystream +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/supertypes.tab.keystream.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/supertypes.tab.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/supertypes.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/supertypes.tab_i +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/supertypes.tab_i.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/lookups/counters.tab +2 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/lookups/file-to-id.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/lookups/file-to-id.tab.keystream +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/lookups/file-to-id.tab.keystream.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/lookups/file-to-id.tab.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/lookups/file-to-id.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/lookups/file-to-id.tab_i +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/lookups/file-to-id.tab_i.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/lookups/id-to-file.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/{jvm/kotlin/java-sources-proto-map.tab → lookups/id-to-file.tab.keystream} +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/lookups/id-to-file.tab.keystream.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/lookups/id-to-file.tab.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/lookups/id-to-file.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/lookups/id-to-file.tab_i +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/lookups/id-to-file.tab_i.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/lookups/lookups.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/lookups/lookups.tab.keystream +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/lookups/lookups.tab.keystream.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/lookups/lookups.tab.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/lookups/lookups.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/lookups/lookups.tab_i +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/lookups/lookups.tab_i.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/last-build.bin +0 -0
- package/android/build/outputs/logs/manifest-merger-debug-report.txt +27 -217
- package/android/build/tmp/compileDebugJavaWithJavac/previous-compilation-data.bin +0 -0
- package/android/build/tmp/kotlin-classes/debug/META-INF/react-native-webview_debug.kotlin_module +0 -0
- package/android/build/tmp/kotlin-classes/debug/kr/co/bootpay/webview/BPCWebViewPackage.class +0 -0
- package/android/build/tmp/kotlin-classes/debug/kr/co/bootpay/webview/events/TopHttpErrorEvent$Companion.class +0 -0
- package/android/build/tmp/kotlin-classes/debug/kr/co/bootpay/webview/events/TopHttpErrorEvent.class +0 -0
- package/android/build/tmp/kotlin-classes/debug/kr/co/bootpay/webview/events/TopLoadingErrorEvent$Companion.class +0 -0
- package/android/build/tmp/kotlin-classes/debug/kr/co/bootpay/webview/events/TopLoadingErrorEvent.class +0 -0
- package/android/build/tmp/kotlin-classes/debug/kr/co/bootpay/webview/events/TopLoadingFinishEvent$Companion.class +0 -0
- package/android/build/tmp/kotlin-classes/debug/kr/co/bootpay/webview/events/TopLoadingFinishEvent.class +0 -0
- package/android/build/tmp/kotlin-classes/debug/kr/co/bootpay/webview/events/TopLoadingProgressEvent$Companion.class +0 -0
- package/android/build/tmp/kotlin-classes/debug/kr/co/bootpay/webview/events/TopLoadingProgressEvent.class +0 -0
- package/android/build/tmp/kotlin-classes/debug/kr/co/bootpay/webview/events/TopLoadingStartEvent$Companion.class +0 -0
- package/android/build/tmp/kotlin-classes/debug/kr/co/bootpay/webview/events/TopLoadingStartEvent.class +0 -0
- package/android/build/tmp/kotlin-classes/debug/kr/co/bootpay/webview/events/TopMessageEvent$Companion.class +0 -0
- package/android/build/tmp/kotlin-classes/debug/kr/co/bootpay/webview/events/TopMessageEvent.class +0 -0
- package/android/build/tmp/kotlin-classes/debug/kr/co/bootpay/webview/events/TopRenderProcessGoneEvent$Companion.class +0 -0
- package/android/build/tmp/kotlin-classes/debug/kr/co/bootpay/webview/events/TopRenderProcessGoneEvent.class +0 -0
- package/android/build/tmp/kotlin-classes/debug/kr/co/bootpay/webview/events/TopShouldStartLoadWithRequestEvent$Companion.class +0 -0
- package/android/build/tmp/kotlin-classes/debug/kr/co/bootpay/webview/events/TopShouldStartLoadWithRequestEvent.class +0 -0
- package/android/build.gradle +4 -6
- package/android/gradle.properties +6 -5
- package/android/local.properties +1 -1
- package/android/src/main/AndroidManifest.xml +0 -75
- package/android/src/main/java/kr/co/bootpay/webview/BPCWebChromeClient.java +2 -120
- package/android/src/main/java/kr/co/bootpay/webview/BPCWebView.java +26 -11
- package/android/src/main/java/kr/co/bootpay/webview/BPCWebViewClient.java +134 -103
- package/android/src/main/java/kr/co/bootpay/webview/BPCWebViewManager.java +95 -49
- package/android/src/main/java/kr/co/bootpay/webview/BasicAuthCredential.java +12 -0
- package/apple/BPCWebView.h +19 -0
- package/apple/BPCWebView.m +363 -161
- package/apple/BPCWebViewManager.h +2 -0
- package/apple/BPCWebViewManager.m +25 -1
- package/index.d.ts +5 -5
- package/ios/.DS_Store +0 -0
- package/ios/RNCWebView.xcodeproj/project.pbxproj +18 -18
- package/ios/RNCWebView.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
- package/ios/RNCWebView.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
- package/ios/RNCWebView.xcodeproj/project.xcworkspace/xcuserdata/bootpay.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- package/ios/RNCWebView.xcodeproj/xcshareddata/xcschemes/RNCWebView.xcscheme +68 -0
- package/ios/RNCWebView.xcodeproj/xcuserdata/bootpay.xcuserdatad/xcschemes/xcschememanagement.plist +22 -0
- package/lib/WebView.android.d.ts +3 -0
- package/lib/WebView.android.d.ts.map +1 -1
- package/lib/WebView.android.js +22 -11
- package/lib/WebView.d.ts +2 -2
- package/lib/WebView.d.ts.map +1 -1
- package/lib/WebView.ios.d.ts +1 -0
- package/lib/WebView.ios.d.ts.map +1 -1
- package/lib/WebView.ios.js +23 -14
- package/lib/WebView.js +4 -4
- package/lib/WebView.macos.d.ts.map +1 -1
- package/lib/WebView.macos.js +21 -13
- package/lib/WebView.windows.d.ts +4 -2
- package/lib/WebView.windows.d.ts.map +1 -1
- package/lib/WebView.windows.js +22 -14
- package/lib/WebViewNativeComponent.android.d.ts +4 -0
- package/lib/WebViewNativeComponent.android.d.ts.map +1 -0
- package/lib/WebViewNativeComponent.android.js +3 -0
- package/lib/WebViewNativeComponent.ios.d.ts +4 -0
- package/lib/WebViewNativeComponent.ios.d.ts.map +1 -0
- package/lib/WebViewNativeComponent.ios.js +3 -0
- package/lib/WebViewNativeComponent.macos.d.ts +4 -0
- package/lib/WebViewNativeComponent.macos.d.ts.map +1 -0
- package/lib/WebViewNativeComponent.macos.js +3 -0
- package/lib/WebViewNativeComponent.windows.d.ts +4 -0
- package/lib/WebViewNativeComponent.windows.d.ts.map +1 -0
- package/lib/WebViewNativeComponent.windows.js +3 -0
- package/lib/WebViewShared.d.ts +1 -0
- package/lib/WebViewShared.d.ts.map +1 -1
- package/lib/WebViewShared.js +14 -12
- package/lib/WebViewTypes.d.ts +113 -2
- package/lib/WebViewTypes.d.ts.map +1 -1
- package/lib/WebViewTypes.js +3 -1
- package/lib/index.d.ts +4 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +3 -0
- package/package.json +31 -32
- package/react-native-webview-bootpay.podspec +1 -3
- package/react-native.config.js +47 -61
- package/windows/ExperimentalFeatures.props +12 -0
- package/windows/ReactNativeWebView/ReactNativeWebView.vcxproj +37 -20
- package/windows/ReactNativeWebView/ReactPackageProvider.cpp +5 -1
- package/windows/ReactNativeWebView/ReactWebView.cpp +2 -6
- package/windows/ReactNativeWebView/ReactWebView.h +3 -2
- package/windows/ReactNativeWebView/ReactWebView.idl +13 -1
- package/windows/ReactNativeWebView/ReactWebView2.cpp +119 -0
- package/windows/ReactNativeWebView/ReactWebView2.h +43 -0
- package/windows/ReactNativeWebView/ReactWebView2Manager.cpp +147 -0
- package/windows/ReactNativeWebView/ReactWebView2Manager.h +54 -0
- package/windows/ReactNativeWebView/ReactWebViewManager.cpp +36 -31
- package/windows/{WebViewBridgeComponent → ReactNativeWebView}/WebBridge.cpp +1 -1
- package/windows/{WebViewBridgeComponent → ReactNativeWebView}/WebBridge.h +2 -2
- package/windows/{WebViewBridgeComponent → ReactNativeWebView}/WebBridge.idl +1 -1
- package/windows/ReactNativeWebView/packages.config +2 -0
- package/windows/ReactNativeWebView/pch.h +6 -0
- package/windows/ReactNativeWebView.sln +81 -119
- package/android/.gradle/7.0-rc-1/dependencies-accessors/dependencies-accessors.lock +0 -0
- package/android/.gradle/7.0-rc-1/dependencies-accessors/gc.properties +0 -0
- package/android/.gradle/7.0-rc-1/executionHistory/executionHistory.lock +0 -0
- package/android/.gradle/7.0-rc-1/fileChanges/last-build.bin +0 -0
- package/android/.gradle/7.0-rc-1/fileHashes/fileHashes.lock +0 -0
- package/android/.gradle/7.0-rc-1/gc.properties +0 -0
- package/android/.idea/libraries/Gradle__androidx_annotation_annotation_1_0_0.xml +0 -13
- package/android/.idea/libraries/Gradle__androidx_core_core_1_0_1_aar.xml +0 -16
- package/android/.idea/libraries/Gradle__androidx_versionedparcelable_versionedparcelable_1_0_0_aar.xml +0 -13
- package/android/.idea/libraries/Gradle__com_facebook_fbjni_fbjni_java_only_0_0_3.xml +0 -13
- package/android/.idea/libraries/Gradle__com_facebook_fresco_drawee_2_0_0_aar.xml +0 -15
- package/android/.idea/libraries/Gradle__com_facebook_fresco_fresco_2_0_0_aar.xml +0 -18
- package/android/.idea/libraries/Gradle__com_facebook_fresco_imagepipeline_2_0_0_aar.xml +0 -18
- package/android/.idea/libraries/Gradle__com_facebook_fresco_imagepipeline_base_2_0_0_aar.xml +0 -18
- package/android/.idea/libraries/Gradle__com_facebook_fresco_imagepipeline_okhttp3_2_0_0_aar.xml +0 -15
- package/android/.idea/libraries/Gradle__com_facebook_fresco_nativeimagefilters_2_0_0_aar.xml +0 -15
- package/android/.idea/libraries/Gradle__com_facebook_fresco_nativeimagetranscoder_2_0_0_aar.xml +0 -15
- package/android/.idea/libraries/Gradle__com_facebook_react_react_native_0_62_2_aar.xml +0 -18
- package/android/.idea/libraries/Gradle__com_facebook_soloader_annotation_0_8_0_aar.xml +0 -15
- package/android/.idea/libraries/Gradle__com_facebook_soloader_nativeloader_0_8_0.xml +0 -13
- package/android/.idea/libraries/Gradle__com_facebook_soloader_soloader_0_8_0_aar.xml +0 -15
- package/android/.idea/libraries/Gradle__com_facebook_yoga_proguard_annotations_1_14_1.xml +0 -13
- package/android/.idea/libraries/Gradle__com_squareup_okhttp3_okhttp_3_12_1.xml +0 -13
- package/android/.idea/libraries/Gradle__com_squareup_okhttp3_okhttp_urlconnection_3_12_1.xml +0 -13
- package/android/.idea/libraries/Gradle__com_squareup_okio_okio_1_15_0.xml +0 -13
- package/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_1_3_50.xml +0 -13
- package/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_common_1_3_50.xml +0 -13
- package/android/.project +0 -34
- package/android/.settings/org.eclipse.buildship.core.prefs +0 -13
- package/android/build/.transforms/d5207f219c4292752e7af446f7cc2789/classes/classes.dex +0 -0
- package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/BPCWebChromeClient$1.class +0 -0
- package/android/build/intermediates/library_manifest/debug/AndroidManifest.xml +0 -102
- package/android/build/tmp/compileDebugJavaWithJavac/source-classes-mapping.txt +0 -29
- package/android/build/tmp/kotlin-classes/debug/META-INF/rnWebView_debug.kotlin_module +0 -0
- package/windows/WebViewBridgeComponent/PropertySheet.props +0 -16
- package/windows/WebViewBridgeComponent/WebViewBridgeComponent.def +0 -3
- package/windows/WebViewBridgeComponent/WebViewBridgeComponent.vcxproj +0 -160
- package/windows/WebViewBridgeComponent/WebViewBridgeComponent.vcxproj.filters +0 -33
- package/windows/WebViewBridgeComponent/packages.config +0 -4
- package/windows/WebViewBridgeComponent/pch.cpp +0 -1
- package/windows/WebViewBridgeComponent/pch.h +0 -4
- package/windows/WebViewBridgeComponent/readme.txt +0 -23
package/apple/BPCWebView.m
CHANGED
|
@@ -23,6 +23,8 @@ static NSString *const MessageHandlerName = @"BootpayRNWebView";
|
|
|
23
23
|
static NSURLCredential* clientAuthenticationCredential;
|
|
24
24
|
static NSDictionary* customCertificatesForHost;
|
|
25
25
|
|
|
26
|
+
NSString *const CUSTOM_SELECTOR = @"_CUSTOM_SELECTOR_";
|
|
27
|
+
|
|
26
28
|
#if !TARGET_OS_OSX
|
|
27
29
|
// runtime trick to remove WKWebView keyboard default toolbar
|
|
28
30
|
// see: http://stackoverflow.com/questions/19033292/ios-7-uiwebview-keyboard-issue/19042279#19042279
|
|
@@ -51,9 +53,9 @@ static NSDictionary* customCertificatesForHost;
|
|
|
51
53
|
@end
|
|
52
54
|
@implementation BPCWKWebView
|
|
53
55
|
- (void)scrollWheel:(NSEvent *)theEvent {
|
|
54
|
-
BPCWebView *
|
|
55
|
-
RCTAssert([
|
|
56
|
-
if (![
|
|
56
|
+
BPCWebView *BPCWebView = (BPCWebView *)[self superview];
|
|
57
|
+
RCTAssert([BPCWebView isKindOfClass:[BPCWebView class]], @"superview must be an BPCWebView");
|
|
58
|
+
if (![BPCWebView scrollEnabled]) {
|
|
57
59
|
[[self nextResponder] scrollWheel:theEvent];
|
|
58
60
|
return;
|
|
59
61
|
}
|
|
@@ -147,6 +149,9 @@ static NSDictionary* customCertificatesForHost;
|
|
|
147
149
|
_savedAutomaticallyAdjustsScrollIndicatorInsets = NO;
|
|
148
150
|
#endif
|
|
149
151
|
_enableApplePay = NO;
|
|
152
|
+
#if defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 150000 /* iOS 15 */
|
|
153
|
+
_mediaCapturePermissionGrantType = BPCWebViewPermissionGrantType_Prompt;
|
|
154
|
+
#endif
|
|
150
155
|
}
|
|
151
156
|
|
|
152
157
|
#if !TARGET_OS_OSX
|
|
@@ -188,45 +193,126 @@ static NSDictionary* customCertificatesForHost;
|
|
|
188
193
|
return self;
|
|
189
194
|
}
|
|
190
195
|
|
|
196
|
+
#if !TARGET_OS_OSX
|
|
197
|
+
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
|
|
198
|
+
// Only allow long press gesture
|
|
199
|
+
if ([otherGestureRecognizer isKindOfClass:[UILongPressGestureRecognizer class]]) {
|
|
200
|
+
return YES;
|
|
201
|
+
}else{
|
|
202
|
+
return NO;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
// Listener for long presses
|
|
207
|
+
- (void)startLongPress:(UILongPressGestureRecognizer *)pressSender
|
|
208
|
+
{
|
|
209
|
+
// When a long press ends, bring up our custom UIMenu
|
|
210
|
+
if(pressSender.state == UIGestureRecognizerStateEnded) {
|
|
211
|
+
if (!self.menuItems || self.menuItems.count == 0) {
|
|
212
|
+
return;
|
|
213
|
+
}
|
|
214
|
+
UIMenuController *menuController = [UIMenuController sharedMenuController];
|
|
215
|
+
NSMutableArray *menuControllerItems = [NSMutableArray arrayWithCapacity:self.menuItems.count];
|
|
216
|
+
|
|
217
|
+
for(NSDictionary *menuItem in self.menuItems) {
|
|
218
|
+
NSString *menuItemLabel = [RCTConvert NSString:menuItem[@"label"]];
|
|
219
|
+
NSString *menuItemKey = [RCTConvert NSString:menuItem[@"key"]];
|
|
220
|
+
NSString *sel = [NSString stringWithFormat:@"%@%@", CUSTOM_SELECTOR, menuItemKey];
|
|
221
|
+
UIMenuItem *item = [[UIMenuItem alloc] initWithTitle: menuItemLabel
|
|
222
|
+
action: NSSelectorFromString(sel)];
|
|
223
|
+
|
|
224
|
+
[menuControllerItems addObject: item];
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
menuController.menuItems = menuControllerItems;
|
|
228
|
+
[menuController setMenuVisible:YES animated:YES];
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
#endif // !TARGET_OS_OSX
|
|
233
|
+
|
|
191
234
|
- (void)dealloc
|
|
192
235
|
{
|
|
193
236
|
[[NSNotificationCenter defaultCenter] removeObserver:self];
|
|
194
237
|
}
|
|
195
238
|
|
|
196
|
-
|
|
197
|
-
* See https://stackoverflow.com/questions/25713069/why-is-wkwebview-not-opening-links-with-target-blank/25853806#25853806 for details.
|
|
198
|
-
*/
|
|
199
|
-
- (WKWebView *)webView:(WKWebView *)webView createWebViewWithConfiguration:(WKWebViewConfiguration *)configuration forNavigationAction:(WKNavigationAction *)navigationAction windowFeatures:(WKWindowFeatures *)windowFeatures
|
|
239
|
+
- (void)tappedMenuItem:(NSString *)eventType
|
|
200
240
|
{
|
|
201
|
-
|
|
202
|
-
|
|
241
|
+
// Get the selected text
|
|
242
|
+
// NOTE: selecting text in an iframe or shadow DOM will not work
|
|
243
|
+
[self.webView evaluateJavaScript: @"window.getSelection().toString()" completionHandler: ^(id result, NSError *error) {
|
|
244
|
+
if (error != nil) {
|
|
245
|
+
RCTLogWarn(@"%@", [NSString stringWithFormat:@"Error evaluating injectedJavaScript: This is possibly due to an unsupported return type. Try adding true to the end of your injectedJavaScript string. %@", error]);
|
|
246
|
+
} else {
|
|
247
|
+
if (self.onCustomMenuSelection) {
|
|
248
|
+
NSPredicate *filter = [NSPredicate predicateWithFormat:@"key contains[c] %@ ",eventType];
|
|
249
|
+
NSArray *filteredMenuItems = [self.menuItems filteredArrayUsingPredicate:filter];
|
|
250
|
+
NSDictionary *selectedMenuItem = filteredMenuItems[0];
|
|
251
|
+
NSString *label = [RCTConvert NSString:selectedMenuItem[@"label"]];
|
|
252
|
+
self.onCustomMenuSelection(@{
|
|
253
|
+
@"key": eventType,
|
|
254
|
+
@"label": label,
|
|
255
|
+
@"selectedText": result
|
|
256
|
+
});
|
|
257
|
+
} else {
|
|
258
|
+
RCTLogWarn(@"Error evaluating onCustomMenuSelection: You must implement an `onCustomMenuSelection` callback when using custom menu items");
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
}];
|
|
262
|
+
}
|
|
203
263
|
|
|
204
|
-
|
|
205
|
-
|
|
264
|
+
// Overwrite method that interprets which action to call upon UIMenu Selection
|
|
265
|
+
// https://developer.apple.com/documentation/objectivec/nsobject/1571960-methodsignatureforselector
|
|
266
|
+
- (NSMethodSignature *)methodSignatureForSelector:(SEL)sel
|
|
267
|
+
{
|
|
268
|
+
NSMethodSignature *existingSelector = [super methodSignatureForSelector:sel];
|
|
269
|
+
if (existingSelector) {
|
|
270
|
+
return existingSelector;
|
|
271
|
+
}
|
|
272
|
+
return [super methodSignatureForSelector:@selector(tappedMenuItem:)];
|
|
273
|
+
}
|
|
206
274
|
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
275
|
+
// Needed to forward messages to other objects
|
|
276
|
+
// https://developer.apple.com/documentation/objectivec/nsobject/1571955-forwardinvocation
|
|
277
|
+
- (void)forwardInvocation:(NSInvocation *)invocation
|
|
278
|
+
{
|
|
279
|
+
NSString *sel = NSStringFromSelector([invocation selector]);
|
|
280
|
+
NSRange match = [sel rangeOfString:CUSTOM_SELECTOR];
|
|
281
|
+
if (match.location == 0) {
|
|
282
|
+
[self tappedMenuItem:[sel substringFromIndex:17]];
|
|
212
283
|
} else {
|
|
284
|
+
[super forwardInvocation:invocation];
|
|
285
|
+
}
|
|
286
|
+
}
|
|
213
287
|
|
|
214
|
-
|
|
288
|
+
// Allows the instance to respond to UIMenuController Actions
|
|
289
|
+
- (BOOL)canBecomeFirstResponder
|
|
290
|
+
{
|
|
291
|
+
return YES;
|
|
292
|
+
}
|
|
215
293
|
|
|
216
|
-
|
|
294
|
+
// Control which items show up on the UIMenuController
|
|
295
|
+
- (BOOL)canPerformAction:(SEL)action withSender:(id)sender
|
|
296
|
+
{
|
|
297
|
+
NSString *sel = NSStringFromSelector(action);
|
|
298
|
+
// Do any of them have our custom keys?
|
|
299
|
+
NSRange match = [sel rangeOfString:CUSTOM_SELECTOR];
|
|
217
300
|
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
return popupView;
|
|
224
|
-
}
|
|
301
|
+
if (match.location == 0) {
|
|
302
|
+
return YES;
|
|
303
|
+
}
|
|
304
|
+
return NO;
|
|
225
305
|
}
|
|
226
306
|
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
307
|
+
/**
|
|
308
|
+
* See https://stackoverflow.com/questions/25713069/why-is-wkwebview-not-opening-links-with-target-blank/25853806#25853806 for details.
|
|
309
|
+
*/
|
|
310
|
+
- (WKWebView *)webView:(WKWebView *)webView createWebViewWithConfiguration:(WKWebViewConfiguration *)configuration forNavigationAction:(WKNavigationAction *)navigationAction windowFeatures:(WKWindowFeatures *)windowFeatures
|
|
311
|
+
{
|
|
312
|
+
if (!navigationAction.targetFrame.isMainFrame) {
|
|
313
|
+
[webView loadRequest:navigationAction.request];
|
|
314
|
+
}
|
|
315
|
+
return nil;
|
|
230
316
|
}
|
|
231
317
|
|
|
232
318
|
- (WKWebViewConfiguration *)setUpWkWebViewConfig
|
|
@@ -249,6 +335,14 @@ static NSDictionary* customCertificatesForHost;
|
|
|
249
335
|
[prefs setValue:@TRUE forKey:@"javaScriptCanOpenWindowsAutomatically"];
|
|
250
336
|
_prefsUsed = YES;
|
|
251
337
|
}
|
|
338
|
+
#if defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 140500 /* iOS 14.5 */
|
|
339
|
+
if (@available(iOS 14.5, *)) {
|
|
340
|
+
if (!_textInteractionEnabled) {
|
|
341
|
+
[prefs setValue:@FALSE forKey:@"textInteractionEnabled"];
|
|
342
|
+
_prefsUsed = YES;
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
#endif
|
|
252
346
|
if (_prefsUsed) {
|
|
253
347
|
wkWebViewConfig.preferences = prefs;
|
|
254
348
|
}
|
|
@@ -336,9 +430,7 @@ static NSDictionary* customCertificatesForHost;
|
|
|
336
430
|
[_webView addObserver:self forKeyPath:@"estimatedProgress" options:NSKeyValueObservingOptionOld | NSKeyValueObservingOptionNew context:nil];
|
|
337
431
|
_webView.allowsBackForwardNavigationGestures = _allowsBackForwardNavigationGestures;
|
|
338
432
|
|
|
339
|
-
|
|
340
|
-
_webView.customUserAgent = _userAgent;
|
|
341
|
-
}
|
|
433
|
+
_webView.customUserAgent = _userAgent;
|
|
342
434
|
#if defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 110000 /* __IPHONE_11_0 */
|
|
343
435
|
if ([_webView.scrollView respondsToSelector:@selector(setContentInsetAdjustmentBehavior:)]) {
|
|
344
436
|
_webView.scrollView.contentInsetAdjustmentBehavior = _savedContentInsetAdjustmentBehavior;
|
|
@@ -355,6 +447,18 @@ static NSDictionary* customCertificatesForHost;
|
|
|
355
447
|
[self setKeyboardDisplayRequiresUserAction: _savedKeyboardDisplayRequiresUserAction];
|
|
356
448
|
[self visitSource];
|
|
357
449
|
}
|
|
450
|
+
#if !TARGET_OS_OSX
|
|
451
|
+
// Allow this object to recognize gestures
|
|
452
|
+
if (self.menuItems != nil) {
|
|
453
|
+
UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(startLongPress:)];
|
|
454
|
+
longPress.delegate = self;
|
|
455
|
+
|
|
456
|
+
longPress.minimumPressDuration = 0.4f;
|
|
457
|
+
longPress.numberOfTouchesRequired = 1;
|
|
458
|
+
longPress.cancelsTouchesInView = YES;
|
|
459
|
+
[self addGestureRecognizer:longPress];
|
|
460
|
+
}
|
|
461
|
+
#endif // !TARGET_OS_OSX
|
|
358
462
|
}
|
|
359
463
|
|
|
360
464
|
// Update webview property when the component prop changes.
|
|
@@ -579,38 +683,39 @@ static NSDictionary* customCertificatesForHost;
|
|
|
579
683
|
}
|
|
580
684
|
[_webView loadHTMLString:html baseURL:baseURL];
|
|
581
685
|
return;
|
|
582
|
-
}
|
|
583
|
-
//Add cookie for subsequent resource requests sent by page itself, if cookie was set in headers on WebView
|
|
584
|
-
NSString *headerCookie = [RCTConvert NSString:_source[@"headers"][@"cookie"]];
|
|
686
|
+
}
|
|
687
|
+
// Add cookie for subsequent resource requests sent by page itself, if cookie was set in headers on WebView
|
|
688
|
+
NSString *headerCookie = [RCTConvert NSString:_source[@"headers"][@"cookie"]];
|
|
585
689
|
if(headerCookie) {
|
|
586
690
|
NSDictionary *headers = [NSDictionary dictionaryWithObjectsAndKeys:headerCookie,@"Set-Cookie",nil];
|
|
587
691
|
NSURL *urlString = [NSURL URLWithString:_source[@"uri"]];
|
|
588
692
|
NSArray *httpCookies = [NSHTTPCookie cookiesWithResponseHeaderFields:headers forURL:urlString];
|
|
589
|
-
|
|
590
|
-
[_webView.configuration.websiteDataStore.httpCookieStore setCookie:httpCookie completionHandler:nil];
|
|
591
|
-
}
|
|
693
|
+
[self writeCookiesToWebView:httpCookies completion:nil];
|
|
592
694
|
}
|
|
593
695
|
|
|
594
696
|
NSURLRequest *request = [self requestForSource:_source];
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
697
|
+
|
|
698
|
+
[self syncCookiesToWebView:^{
|
|
699
|
+
// Because of the way React works, as pages redirect, we actually end up
|
|
700
|
+
// passing the redirect urls back here, so we ignore them if trying to load
|
|
701
|
+
// the same url. We'll expose a call to 'reload' to allow a user to load
|
|
702
|
+
// the existing page.
|
|
703
|
+
if ([request.URL isEqual:_webView.URL]) {
|
|
704
|
+
return;
|
|
705
|
+
}
|
|
706
|
+
if (!request.URL) {
|
|
707
|
+
// Clear the webview
|
|
708
|
+
[_webView loadHTMLString:@"" baseURL:nil];
|
|
709
|
+
return;
|
|
710
|
+
}
|
|
711
|
+
if (request.URL.host) {
|
|
712
|
+
[_webView loadRequest:request];
|
|
713
|
+
}
|
|
714
|
+
else {
|
|
715
|
+
NSURL* readAccessUrl = _allowingReadAccessToURL ? [RCTConvert NSURL:_allowingReadAccessToURL] : request.URL;
|
|
716
|
+
[_webView loadFileURL:request.URL allowingReadAccessToURL:readAccessUrl];
|
|
717
|
+
}
|
|
718
|
+
}];
|
|
614
719
|
}
|
|
615
720
|
|
|
616
721
|
#if !TARGET_OS_OSX
|
|
@@ -702,7 +807,7 @@ static NSDictionary* customCertificatesForHost;
|
|
|
702
807
|
|
|
703
808
|
if(subview == nil) return;
|
|
704
809
|
|
|
705
|
-
NSString* name = [NSString stringWithFormat:@"%@
|
|
810
|
+
NSString* name = [NSString stringWithFormat:@"%@_SwizzleHelperWK", subview.class.superclass];
|
|
706
811
|
Class newClass = NSClassFromString(name);
|
|
707
812
|
|
|
708
813
|
if(newClass == nil)
|
|
@@ -726,6 +831,12 @@ static NSDictionary* customCertificatesForHost;
|
|
|
726
831
|
}
|
|
727
832
|
#endif // !TARGET_OS_OSX
|
|
728
833
|
|
|
834
|
+
- (void)setUserAgent:(NSString*)userAgent
|
|
835
|
+
{
|
|
836
|
+
_userAgent = userAgent;
|
|
837
|
+
_webView.customUserAgent = userAgent;
|
|
838
|
+
}
|
|
839
|
+
|
|
729
840
|
- (void)setScrollEnabled:(BOOL)scrollEnabled
|
|
730
841
|
{
|
|
731
842
|
_scrollEnabled = scrollEnabled;
|
|
@@ -861,6 +972,15 @@ static NSDictionary* customCertificatesForHost;
|
|
|
861
972
|
}
|
|
862
973
|
}
|
|
863
974
|
}
|
|
975
|
+
if ([[challenge protectionSpace] authenticationMethod] == NSURLAuthenticationMethodHTTPBasic) {
|
|
976
|
+
NSString *username = [_basicAuthCredential valueForKey:@"username"];
|
|
977
|
+
NSString *password = [_basicAuthCredential valueForKey:@"password"];
|
|
978
|
+
if (username && password) {
|
|
979
|
+
NSURLCredential *credential = [NSURLCredential credentialWithUser:username password:password persistence:NSURLCredentialPersistenceNone];
|
|
980
|
+
completionHandler(NSURLSessionAuthChallengeUseCredential, credential);
|
|
981
|
+
return;
|
|
982
|
+
}
|
|
983
|
+
}
|
|
864
984
|
completionHandler(NSURLSessionAuthChallengePerformDefaultHandling, nil);
|
|
865
985
|
}
|
|
866
986
|
|
|
@@ -955,6 +1075,32 @@ static NSDictionary* customCertificatesForHost;
|
|
|
955
1075
|
#endif // !TARGET_OS_OSX
|
|
956
1076
|
}
|
|
957
1077
|
|
|
1078
|
+
#if defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 150000 /* iOS 15 */
|
|
1079
|
+
/**
|
|
1080
|
+
* Media capture permissions (prevent multiple prompts)
|
|
1081
|
+
*/
|
|
1082
|
+
- (void) webView:(WKWebView *)webView
|
|
1083
|
+
requestMediaCapturePermissionForOrigin:(WKSecurityOrigin *)origin
|
|
1084
|
+
initiatedByFrame:(WKFrameInfo *)frame
|
|
1085
|
+
type:(WKMediaCaptureType)type
|
|
1086
|
+
decisionHandler:(void (^)(WKPermissionDecision decision))decisionHandler {
|
|
1087
|
+
if (_mediaCapturePermissionGrantType == BPCWebViewPermissionGrantType_GrantIfSameHost_ElsePrompt || _mediaCapturePermissionGrantType == BPCWebViewPermissionGrantType_GrantIfSameHost_ElseDeny) {
|
|
1088
|
+
if ([origin.host isEqualToString:webView.URL.host]) {
|
|
1089
|
+
decisionHandler(WKPermissionDecisionGrant);
|
|
1090
|
+
} else {
|
|
1091
|
+
WKPermissionDecision decision = _mediaCapturePermissionGrantType == BPCWebViewPermissionGrantType_GrantIfSameHost_ElsePrompt ? WKPermissionDecisionPrompt : WKPermissionDecisionDeny;
|
|
1092
|
+
decisionHandler(decision);
|
|
1093
|
+
}
|
|
1094
|
+
} else if (_mediaCapturePermissionGrantType == BPCWebViewPermissionGrantType_Deny) {
|
|
1095
|
+
decisionHandler(WKPermissionDecisionDeny);
|
|
1096
|
+
} else if (_mediaCapturePermissionGrantType == BPCWebViewPermissionGrantType_Grant) {
|
|
1097
|
+
decisionHandler(WKPermissionDecisionGrant);
|
|
1098
|
+
} else {
|
|
1099
|
+
decisionHandler(WKPermissionDecisionPrompt);
|
|
1100
|
+
}
|
|
1101
|
+
}
|
|
1102
|
+
#endif
|
|
1103
|
+
|
|
958
1104
|
#if !TARGET_OS_OSX
|
|
959
1105
|
/**
|
|
960
1106
|
* topViewController
|
|
@@ -972,141 +1118,164 @@ static NSDictionary* customCertificatesForHost;
|
|
|
972
1118
|
- (void) webView:(WKWebView *)webView
|
|
973
1119
|
decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction
|
|
974
1120
|
decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler
|
|
975
|
-
{
|
|
976
|
-
|
|
977
|
-
|
|
1121
|
+
{
|
|
1122
|
+
|
|
1123
|
+
NSString *url = navigationAction.request.URL.absoluteString;
|
|
1124
|
+
|
|
1125
|
+
if([self isItunesURL:url]) {
|
|
1126
|
+
[self startAppToApp:[NSURL URLWithString:url]];
|
|
978
1127
|
decisionHandler(WKNavigationActionPolicyCancel);
|
|
979
|
-
} else if(![
|
|
980
|
-
[self startAppToApp:
|
|
1128
|
+
} else if(![url hasPrefix:@"http"]) {
|
|
1129
|
+
[self startAppToApp:[NSURL URLWithString:url]];
|
|
981
1130
|
decisionHandler(WKNavigationActionPolicyCancel);
|
|
982
|
-
} else {
|
|
1131
|
+
} else {
|
|
983
1132
|
[self navigationOriginRN:webView decidePolicyForNavigationAction:navigationAction decisionHandler:decisionHandler];
|
|
984
1133
|
}
|
|
985
1134
|
}
|
|
986
1135
|
|
|
987
1136
|
|
|
988
|
-
- (
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
|
|
1137
|
+
- (void) startAppToApp:(NSURL*) url {
|
|
1138
|
+
UIApplication *application = [UIApplication sharedApplication];
|
|
1139
|
+
|
|
1140
|
+
// if (@available(iOS 10.0, *)) {
|
|
1141
|
+
// [application openURL:url options:@{} completionHandler:nil];
|
|
1142
|
+
// } else {
|
|
1143
|
+
// [application openURL:url];
|
|
1144
|
+
// }
|
|
1145
|
+
|
|
1146
|
+
if (@available(iOS 10.0, *)) {
|
|
1147
|
+
[application openURL:url options:@{} completionHandler: ^(BOOL success) {
|
|
1148
|
+
if(success == false) {
|
|
1149
|
+
[self startItunesToInstall:url];
|
|
1150
|
+
}
|
|
1151
|
+
}];
|
|
1152
|
+
} else {
|
|
1153
|
+
[application openURL:url];
|
|
1154
|
+
}
|
|
992
1155
|
}
|
|
993
1156
|
|
|
994
|
-
|
|
995
|
-
|
|
996
|
-
NSString *
|
|
997
|
-
|
|
1157
|
+
|
|
1158
|
+
- (void) startItunesToInstall:(NSURL*) url {
|
|
1159
|
+
NSString *sUrl = url.absoluteString;
|
|
1160
|
+
NSString *itunesUrl = @"";
|
|
1161
|
+
|
|
1162
|
+
if([sUrl hasPrefix: @"kfc-bankpay"]) {
|
|
998
1163
|
itunesUrl = @"https://apps.apple.com/kr/app/%EB%B1%85%ED%81%AC%ED%8E%98%EC%9D%B4-%EA%B8%88%EC%9C%B5%EA%B8%B0%EA%B4%80-%EA%B3%B5%EB%8F%99-%EA%B3%84%EC%A2%8C%EC%9D%B4%EC%B2%B4-%EA%B2%B0%EC%A0%9C-%EC%A0%9C%EB%A1%9C%ED%8E%98%EC%9D%B4/id398456030";
|
|
999
|
-
} else if([
|
|
1000
|
-
itunesUrl = @"https://apps.apple.com/kr/app/isp
|
|
1001
|
-
} else if([
|
|
1164
|
+
} else if([sUrl hasPrefix: @"ispmobile"]) {
|
|
1165
|
+
itunesUrl = @"https://apps.apple.com/kr/app/isp/id369125087";
|
|
1166
|
+
} else if([sUrl hasPrefix: @"hdcardappcardansimclick"] || [sUrl hasPrefix: @"smhyundaiansimclick"]) {
|
|
1002
1167
|
itunesUrl = @"https://apps.apple.com/kr/app/%ED%98%84%EB%8C%80%EC%B9%B4%EB%93%9C/id702653088";
|
|
1003
|
-
}
|
|
1168
|
+
} else if([sUrl hasPrefix: @"shinhan-sr-ansimclick"] || [sUrl hasPrefix: @"smshinhanansimclick"]) {
|
|
1004
1169
|
itunesUrl = @"https://apps.apple.com/kr/app/%EC%8B%A0%ED%95%9C%ED%8E%98%EC%9D%B4%ED%8C%90/id572462317";
|
|
1005
|
-
} else if([
|
|
1170
|
+
} else if([sUrl hasPrefix: @"kb-acp"]) {
|
|
1006
1171
|
itunesUrl = @"https://apps.apple.com/kr/app/kb-pay/id695436326";
|
|
1007
|
-
} else if([
|
|
1172
|
+
} else if([sUrl hasPrefix: @"liivbank"]) {
|
|
1173
|
+
itunesUrl = @"https://apps.apple.com/kr/app/%EB%A6%AC%EB%B8%8C/id1126232922";
|
|
1174
|
+
} else if([sUrl hasPrefix: @"mpocket.online.ansimclick"] || [sUrl hasPrefix: @"ansimclickscard"] || [sUrl hasPrefix: @"ansimclickipcollect"] || [sUrl hasPrefix: @"samsungpay"] || [sUrl hasPrefix: @"scardcertiapp"]) {
|
|
1008
1175
|
itunesUrl = @"https://apps.apple.com/kr/app/%EC%82%BC%EC%84%B1%EC%B9%B4%EB%93%9C/id535125356";
|
|
1009
|
-
} else if([
|
|
1010
|
-
itunesUrl = @"https://apps.apple.com/us/app/%EB%A1%AF%EB%8D%B0%EC%B9%B4%EB%93%9C-%EC%95%B1%EC%B9%B4%EB%93%9C/id688047200";
|
|
1011
|
-
} else if([url hasPrefix:@"lotteappcard"]) {
|
|
1176
|
+
} else if([sUrl hasPrefix: @"lottesmartpay"]) {
|
|
1012
1177
|
itunesUrl = @"https://apps.apple.com/us/app/%EB%A1%AF%EB%8D%B0%EC%B9%B4%EB%93%9C-%EC%95%B1%EC%B9%B4%EB%93%9C/id688047200";
|
|
1013
|
-
} else if([
|
|
1014
|
-
itunesUrl = @"https://apps.apple.com/kr/app/%
|
|
1015
|
-
} else if([
|
|
1178
|
+
} else if([sUrl hasPrefix: @"lotteappcard"]) {
|
|
1179
|
+
itunesUrl = @"https://apps.apple.com/kr/app/%EB%94%94%EC%A7%80%EB%A1%9C%EC%B9%B4-%EB%A1%AF%EB%8D%B0%EC%B9%B4%EB%93%9C/id688047200";
|
|
1180
|
+
} else if([sUrl hasPrefix: @"newsmartpib"]) {
|
|
1181
|
+
itunesUrl = @"https://apps.apple.com/kr/app/%EC%9A%B0%EB%A6%AC-won-%EB%B1%85%ED%82%B9/id1470181651";
|
|
1182
|
+
} else if([sUrl hasPrefix: @"com.wooricard.wcard"]) {
|
|
1183
|
+
itunesUrl = @"https://apps.apple.com/kr/app/%EC%9A%B0%EB%A6%ACwon%EC%B9%B4%EB%93%9C/id1499598869";
|
|
1184
|
+
} else if([sUrl hasPrefix: @"citispay"] || [sUrl hasPrefix: @"citicardappkr"] || [sUrl hasPrefix: @"citimobileapp"]) {
|
|
1185
|
+
itunesUrl = @"https://apps.apple.com/kr/app/%EC%94%A8%ED%8B%B0%EB%AA%A8%EB%B0%94%EC%9D%BC/id1179759666";
|
|
1186
|
+
} else if([sUrl hasPrefix: @"shinsegaeeasypayment"]) {
|
|
1187
|
+
itunesUrl = @"https://apps.apple.com/kr/app/ssgpay/id666237916";
|
|
1188
|
+
} else if([sUrl hasPrefix: @"cloudpay"]) {
|
|
1189
|
+
itunesUrl = @"https://apps.apple.com/kr/app/%ED%95%98%EB%82%98%EC%B9%B4%EB%93%9C-%EC%9B%90%ED%81%90%ED%8E%98%EC%9D%B4/id847268987";
|
|
1190
|
+
} else if([sUrl hasPrefix: @"hanawalletmembers"]) {
|
|
1191
|
+
itunesUrl = @"https://apps.apple.com/kr/app/n-wallet/id492190784";
|
|
1192
|
+
} else if([sUrl hasPrefix: @"nhappvardansimclick"]) {
|
|
1016
1193
|
itunesUrl = @"https://apps.apple.com/kr/app/%EC%98%AC%EC%9B%90%ED%8E%98%EC%9D%B4-nh%EC%95%B1%EC%B9%B4%EB%93%9C/id1177889176";
|
|
1017
|
-
} else if([
|
|
1194
|
+
} else if([sUrl hasPrefix: @"nhallonepayansimclick"] || [sUrl hasPrefix: @"nhappcardansimclick"] || [sUrl hasPrefix: @"nhallonepayansimclick"] || [sUrl hasPrefix: @"nonghyupcardansimclick"]) {
|
|
1018
1195
|
itunesUrl = @"https://apps.apple.com/kr/app/%EC%98%AC%EC%9B%90%ED%8E%98%EC%9D%B4-nh%EC%95%B1%EC%B9%B4%EB%93%9C/id1177889176";
|
|
1019
|
-
} else if([
|
|
1020
|
-
itunesUrl = @"https://apps.apple.com/kr/app
|
|
1021
|
-
} else if([
|
|
1022
|
-
itunesUrl = @"https://apps.apple.com/kr/app/
|
|
1023
|
-
} else if([
|
|
1196
|
+
} else if([sUrl hasPrefix: @"payco"]) {
|
|
1197
|
+
itunesUrl = @"https://apps.apple.com/kr/app/payco/id924292102";
|
|
1198
|
+
} else if([sUrl hasPrefix: @"lpayapp"] || [sUrl hasPrefix: @"lmslpay"]) {
|
|
1199
|
+
itunesUrl = @"https://apps.apple.com/kr/app/l-point-with-l-pay/id473250588";
|
|
1200
|
+
} else if([sUrl hasPrefix: @"naversearchapp"]) {
|
|
1024
1201
|
itunesUrl = @"https://apps.apple.com/kr/app/%EB%84%A4%EC%9D%B4%EB%B2%84-naver/id393499958";
|
|
1202
|
+
} else if([sUrl hasPrefix: @"tauthlink"]) {
|
|
1203
|
+
itunesUrl = @"https://apps.apple.com/kr/app/pass-by-skt/id1141258007";
|
|
1204
|
+
} else if([sUrl hasPrefix: @"uplusauth"] || [sUrl hasPrefix: @"upluscorporation"] ) {
|
|
1205
|
+
itunesUrl = @"https://apps.apple.com/kr/app/pass-by-u/id1147394645";
|
|
1206
|
+
} else if([sUrl hasPrefix: @"ktauthexternalcall"]) {
|
|
1207
|
+
itunesUrl = @"https://apps.apple.com/kr/app/pass-by-kt/id1134371550";
|
|
1208
|
+
} else if([sUrl hasPrefix: @"supertoss"]) {
|
|
1209
|
+
itunesUrl = @"https://apps.apple.com/kr/app/%ED%86%A0%EC%8A%A4/id839333328";
|
|
1210
|
+
} else if([sUrl hasPrefix: @"kakaotalk"]) {
|
|
1211
|
+
itunesUrl = @"https://apps.apple.com/kr/app/kakaotalk/id362057947";
|
|
1212
|
+
} else if([sUrl hasPrefix: @"chaipayment"]) {
|
|
1213
|
+
itunesUrl = @"https://apps.apple.com/kr/app/%EC%B0%A8%EC%9D%B4/id1459979272";
|
|
1025
1214
|
}
|
|
1026
|
-
|
|
1027
|
-
|
|
1028
|
-
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
- (void) startAppToApp:(NSURL*)url {
|
|
1033
|
-
UIApplication *application = [UIApplication sharedApplication];
|
|
1034
|
-
if (@available(iOS 10.0, *)) {
|
|
1035
|
-
[application openURL:url options:@{} completionHandler:nil];
|
|
1036
|
-
} else {
|
|
1037
|
-
[application openURL:url];
|
|
1038
|
-
}
|
|
1039
|
-
}
|
|
1040
|
-
|
|
1041
|
-
- (void) openAppURL:(WKNavigationAction *)navigationAction {
|
|
1042
|
-
if (@available(iOS 10.0, *)) {
|
|
1043
|
-
[[UIApplication sharedApplication] openURL:navigationAction.request.URL options:@{} completionHandler:^(BOOL success) {}];
|
|
1044
|
-
} else {
|
|
1045
|
-
[[UIApplication sharedApplication] openURL:navigationAction.request.URL];
|
|
1215
|
+
|
|
1216
|
+
if(itunesUrl.length > 0) {
|
|
1217
|
+
NSURL *appstore = [NSURL URLWithString: itunesUrl];
|
|
1218
|
+
[self startAppToApp: appstore];
|
|
1046
1219
|
}
|
|
1047
1220
|
}
|
|
1048
1221
|
|
|
1049
|
-
- (
|
|
1050
|
-
|
|
1051
|
-
|
|
1052
|
-
} else {
|
|
1053
|
-
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:url]];
|
|
1054
|
-
}
|
|
1222
|
+
- (BOOL) isItunesURL:(NSString*) urlString {
|
|
1223
|
+
NSRange match = [urlString rangeOfString: @"itunes.apple.com"];
|
|
1224
|
+
return match.location != NSNotFound;
|
|
1055
1225
|
}
|
|
1056
1226
|
|
|
1057
|
-
|
|
1058
1227
|
- (void) navigationOriginRN:(WKWebView *)webView
|
|
1059
1228
|
decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction
|
|
1060
1229
|
decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler
|
|
1061
1230
|
{
|
|
1062
|
-
|
|
1063
|
-
|
|
1064
|
-
|
|
1065
|
-
|
|
1066
|
-
|
|
1067
|
-
|
|
1068
|
-
|
|
1069
|
-
|
|
1070
|
-
|
|
1071
|
-
|
|
1072
|
-
|
|
1073
|
-
|
|
1074
|
-
|
|
1075
|
-
|
|
1076
|
-
|
|
1077
|
-
|
|
1078
|
-
|
|
1231
|
+
static NSDictionary<NSNumber *, NSString *> *navigationTypes;
|
|
1232
|
+
static dispatch_once_t onceToken;
|
|
1233
|
+
|
|
1234
|
+
dispatch_once(&onceToken, ^{
|
|
1235
|
+
navigationTypes = @{
|
|
1236
|
+
@(WKNavigationTypeLinkActivated): @"click",
|
|
1237
|
+
@(WKNavigationTypeFormSubmitted): @"formsubmit",
|
|
1238
|
+
@(WKNavigationTypeBackForward): @"backforward",
|
|
1239
|
+
@(WKNavigationTypeReload): @"reload",
|
|
1240
|
+
@(WKNavigationTypeFormResubmitted): @"formresubmit",
|
|
1241
|
+
@(WKNavigationTypeOther): @"other",
|
|
1242
|
+
};
|
|
1243
|
+
});
|
|
1244
|
+
|
|
1245
|
+
WKNavigationType navigationType = navigationAction.navigationType;
|
|
1246
|
+
NSURLRequest *request = navigationAction.request;
|
|
1247
|
+
BOOL isTopFrame = [request.URL isEqual:request.mainDocumentURL];
|
|
1248
|
+
|
|
1249
|
+
if (_onShouldStartLoadWithRequest) {
|
|
1250
|
+
NSMutableDictionary<NSString *, id> *event = [self baseEvent];
|
|
1251
|
+
[event addEntriesFromDictionary: @{
|
|
1252
|
+
@"url": (request.URL).absoluteString,
|
|
1253
|
+
@"mainDocumentURL": (request.mainDocumentURL).absoluteString,
|
|
1254
|
+
@"navigationType": navigationTypes[@(navigationType)],
|
|
1255
|
+
@"isTopFrame": @(isTopFrame)
|
|
1256
|
+
}];
|
|
1257
|
+
if (![self.delegate webView:self
|
|
1258
|
+
shouldStartLoadForRequest:event
|
|
1259
|
+
withCallback:_onShouldStartLoadWithRequest]) {
|
|
1260
|
+
decisionHandler(WKNavigationActionPolicyCancel);
|
|
1261
|
+
return;
|
|
1262
|
+
}
|
|
1263
|
+
}
|
|
1079
1264
|
|
|
1080
|
-
|
|
1265
|
+
if (_onLoadingStart) {
|
|
1266
|
+
// We have this check to filter out iframe requests and whatnot
|
|
1267
|
+
if (isTopFrame) {
|
|
1081
1268
|
NSMutableDictionary<NSString *, id> *event = [self baseEvent];
|
|
1082
1269
|
[event addEntriesFromDictionary: @{
|
|
1083
1270
|
@"url": (request.URL).absoluteString,
|
|
1084
|
-
@"
|
|
1085
|
-
@"navigationType": navigationTypes[@(navigationType)],
|
|
1086
|
-
@"isTopFrame": @(isTopFrame)
|
|
1271
|
+
@"navigationType": navigationTypes[@(navigationType)]
|
|
1087
1272
|
}];
|
|
1088
|
-
|
|
1089
|
-
shouldStartLoadForRequest:event
|
|
1090
|
-
withCallback:_onShouldStartLoadWithRequest]) {
|
|
1091
|
-
decisionHandler(WKNavigationActionPolicyCancel);
|
|
1092
|
-
return;
|
|
1093
|
-
}
|
|
1094
|
-
}
|
|
1095
|
-
|
|
1096
|
-
if (_onLoadingStart) {
|
|
1097
|
-
// We have this check to filter out iframe requests and whatnot
|
|
1098
|
-
if (isTopFrame) {
|
|
1099
|
-
NSMutableDictionary<NSString *, id> *event = [self baseEvent];
|
|
1100
|
-
[event addEntriesFromDictionary: @{
|
|
1101
|
-
@"url": (request.URL).absoluteString,
|
|
1102
|
-
@"navigationType": navigationTypes[@(navigationType)]
|
|
1103
|
-
}];
|
|
1104
|
-
_onLoadingStart(event);
|
|
1105
|
-
}
|
|
1273
|
+
_onLoadingStart(event);
|
|
1106
1274
|
}
|
|
1275
|
+
}
|
|
1107
1276
|
|
|
1108
|
-
|
|
1109
|
-
|
|
1277
|
+
// Allow all navigation by default
|
|
1278
|
+
decisionHandler(WKNavigationActionPolicyAllow);
|
|
1110
1279
|
}
|
|
1111
1280
|
|
|
1112
1281
|
/**
|
|
@@ -1259,6 +1428,15 @@ static NSDictionary* customCertificatesForHost;
|
|
|
1259
1428
|
- (void)webView:(WKWebView *)webView
|
|
1260
1429
|
didFinishNavigation:(WKNavigation *)navigation
|
|
1261
1430
|
{
|
|
1431
|
+
if(_sharedCookiesEnabled && @available(iOS 11.0, *)) {
|
|
1432
|
+
// Write all cookies from WKWebView back to sharedHTTPCookieStorage
|
|
1433
|
+
[webView.configuration.websiteDataStore.httpCookieStore getAllCookies:^(NSArray* cookies) {
|
|
1434
|
+
for (NSHTTPCookie *cookie in cookies) {
|
|
1435
|
+
[[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookie];
|
|
1436
|
+
}
|
|
1437
|
+
}];
|
|
1438
|
+
}
|
|
1439
|
+
|
|
1262
1440
|
if (_ignoreSilentHardwareSwitch) {
|
|
1263
1441
|
[self forceIgnoreSilentHardwareSwitch:true];
|
|
1264
1442
|
}
|
|
@@ -1292,7 +1470,6 @@ static NSDictionary* customCertificatesForHost;
|
|
|
1292
1470
|
*/
|
|
1293
1471
|
NSURLRequest *request = [self requestForSource:self.source];
|
|
1294
1472
|
|
|
1295
|
-
|
|
1296
1473
|
if (request.URL && !_webView.URL.absoluteString.length) {
|
|
1297
1474
|
[_webView loadRequest:request];
|
|
1298
1475
|
} else {
|
|
@@ -1405,6 +1582,33 @@ static NSDictionary* customCertificatesForHost;
|
|
|
1405
1582
|
}
|
|
1406
1583
|
}
|
|
1407
1584
|
|
|
1585
|
+
- (void)writeCookiesToWebView:(NSArray<NSHTTPCookie *>*)cookies completion:(void (^)(void))completion {
|
|
1586
|
+
// The required cookie APIs only became available on iOS 11
|
|
1587
|
+
if(_sharedCookiesEnabled && @available(iOS 11.0, *)) {
|
|
1588
|
+
dispatch_async(dispatch_get_main_queue(), ^{
|
|
1589
|
+
dispatch_group_t group = dispatch_group_create();
|
|
1590
|
+
for (NSHTTPCookie *cookie in cookies) {
|
|
1591
|
+
dispatch_group_enter(group);
|
|
1592
|
+
[_webView.configuration.websiteDataStore.httpCookieStore setCookie:cookie completionHandler:^{
|
|
1593
|
+
dispatch_group_leave(group);
|
|
1594
|
+
}];
|
|
1595
|
+
}
|
|
1596
|
+
dispatch_group_notify(group, dispatch_get_main_queue(), ^{
|
|
1597
|
+
if (completion) {
|
|
1598
|
+
completion();
|
|
1599
|
+
}
|
|
1600
|
+
});
|
|
1601
|
+
});
|
|
1602
|
+
} else if (completion) {
|
|
1603
|
+
completion();
|
|
1604
|
+
}
|
|
1605
|
+
}
|
|
1606
|
+
|
|
1607
|
+
- (void)syncCookiesToWebView:(void (^)(void))completion {
|
|
1608
|
+
NSArray<NSHTTPCookie *> *cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies];
|
|
1609
|
+
[self writeCookiesToWebView:cookies completion:completion];
|
|
1610
|
+
}
|
|
1611
|
+
|
|
1408
1612
|
- (void)resetupScripts:(WKWebViewConfiguration *)wkWebViewConfig {
|
|
1409
1613
|
[wkWebViewConfig.userContentController removeAllUserScripts];
|
|
1410
1614
|
[wkWebViewConfig.userContentController removeScriptMessageHandlerForName:MessageHandlerName];
|
|
@@ -1449,9 +1653,7 @@ static NSDictionary* customCertificatesForHost;
|
|
|
1449
1653
|
if(!_incognito && !_cacheEnabled) {
|
|
1450
1654
|
wkWebViewConfig.websiteDataStore = [WKWebsiteDataStore nonPersistentDataStore];
|
|
1451
1655
|
}
|
|
1452
|
-
|
|
1453
|
-
[wkWebViewConfig.websiteDataStore.httpCookieStore setCookie:cookie completionHandler:nil];
|
|
1454
|
-
}
|
|
1656
|
+
[self syncCookiesToWebView:nil];
|
|
1455
1657
|
} else {
|
|
1456
1658
|
NSMutableString *script = [NSMutableString string];
|
|
1457
1659
|
|