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.
Files changed (331) hide show
  1. package/README.md +83 -93
  2. package/android/.gradle/6.8/executionHistory/executionHistory.bin +0 -0
  3. package/android/.gradle/6.8/executionHistory/executionHistory.lock +0 -0
  4. package/android/.gradle/6.8/fileHashes/fileHashes.bin +0 -0
  5. package/android/.gradle/6.8/fileHashes/fileHashes.lock +0 -0
  6. package/android/.gradle/7.1.1/dependencies-accessors/dependencies-accessors.lock +0 -0
  7. package/android/.gradle/7.1.1/executionHistory/executionHistory.lock +0 -0
  8. package/android/.gradle/7.1.1/fileHashes/fileHashes.lock +0 -0
  9. package/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
  10. package/android/.gradle/buildOutputCleanup/cache.properties +1 -1
  11. package/android/.gradle/buildOutputCleanup/outputFiles.bin +0 -0
  12. package/android/.gradle/checksums/checksums.lock +0 -0
  13. package/android/.gradle/checksums/md5-checksums.bin +0 -0
  14. package/android/.gradle/checksums/sha1-checksums.bin +0 -0
  15. package/android/.idea/jarRepositories.xml +3 -8
  16. package/android/.idea/libraries/Gradle__androidx_annotation_annotation_1_1_0.xml +13 -0
  17. package/android/.idea/libraries/Gradle__androidx_appcompat_appcompat_1_0_2_aar.xml +4 -4
  18. package/android/.idea/libraries/Gradle__androidx_arch_core_core_runtime_2_0_0_aar.xml +3 -3
  19. package/android/.idea/libraries/Gradle__androidx_asynclayoutinflater_asynclayoutinflater_1_0_0_aar.xml +3 -3
  20. package/android/.idea/libraries/Gradle__androidx_autofill_autofill_1_1_0_aar.xml +16 -0
  21. package/android/.idea/libraries/Gradle__androidx_coordinatorlayout_coordinatorlayout_1_0_0_aar.xml +4 -4
  22. package/android/.idea/libraries/Gradle__androidx_core_core_1_1_0_aar.xml +16 -0
  23. package/android/.idea/libraries/Gradle__androidx_cursoradapter_cursoradapter_1_0_0_aar.xml +3 -3
  24. package/android/.idea/libraries/Gradle__androidx_customview_customview_1_0_0_aar.xml +3 -3
  25. package/android/.idea/libraries/Gradle__androidx_documentfile_documentfile_1_0_0_aar.xml +3 -3
  26. package/android/.idea/libraries/Gradle__androidx_drawerlayout_drawerlayout_1_0_0_aar.xml +4 -4
  27. package/android/.idea/libraries/Gradle__androidx_fragment_fragment_1_0_0_aar.xml +4 -4
  28. package/android/.idea/libraries/Gradle__androidx_interpolator_interpolator_1_0_0_aar.xml +3 -3
  29. package/android/.idea/libraries/Gradle__androidx_legacy_legacy_support_core_ui_1_0_0_aar.xml +3 -3
  30. package/android/.idea/libraries/Gradle__androidx_legacy_legacy_support_core_utils_1_0_0_aar.xml +3 -3
  31. package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_livedata_2_0_0_aar.xml +3 -3
  32. package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_livedata_core_2_0_0_aar.xml +3 -3
  33. package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_runtime_2_0_0_aar.xml +3 -3
  34. package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_viewmodel_2_0_0_aar.xml +3 -3
  35. package/android/.idea/libraries/Gradle__androidx_loader_loader_1_0_0_aar.xml +3 -3
  36. package/android/.idea/libraries/Gradle__androidx_localbroadcastmanager_localbroadcastmanager_1_0_0_aar.xml +3 -3
  37. package/android/.idea/libraries/Gradle__androidx_print_print_1_0_0_aar.xml +4 -4
  38. package/android/.idea/libraries/Gradle__androidx_slidingpanelayout_slidingpanelayout_1_0_0_aar.xml +3 -3
  39. package/android/.idea/libraries/Gradle__androidx_swiperefreshlayout_swiperefreshlayout_1_0_0_aar.xml +4 -4
  40. package/android/.idea/libraries/Gradle__androidx_vectordrawable_vectordrawable_1_0_1_aar.xml +3 -3
  41. package/android/.idea/libraries/Gradle__androidx_vectordrawable_vectordrawable_animated_1_0_0_aar.xml +3 -3
  42. package/android/.idea/libraries/Gradle__androidx_versionedparcelable_versionedparcelable_1_1_0_aar.xml +13 -0
  43. package/android/.idea/libraries/Gradle__androidx_viewpager_viewpager_1_0_0_aar.xml +3 -3
  44. package/android/.idea/libraries/Gradle__androidx_webkit_webkit_1_4_0_aar.xml +16 -0
  45. package/android/.idea/libraries/Gradle__com_facebook_fbjni_fbjni_java_only_0_2_2.xml +13 -0
  46. package/android/.idea/libraries/Gradle__com_facebook_fresco_drawee_2_5_0_aar.xml +15 -0
  47. 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
  48. package/android/.idea/libraries/Gradle__com_facebook_fresco_fresco_2_5_0_aar.xml +18 -0
  49. package/android/.idea/libraries/Gradle__com_facebook_fresco_imagepipeline_2_5_0_aar.xml +18 -0
  50. package/android/.idea/libraries/Gradle__com_facebook_fresco_imagepipeline_base_2_5_0_aar.xml +18 -0
  51. package/android/.idea/libraries/Gradle__com_facebook_fresco_imagepipeline_native_2_5_0_aar.xml +15 -0
  52. package/android/.idea/libraries/Gradle__com_facebook_fresco_imagepipeline_okhttp3_2_5_0_aar.xml +15 -0
  53. package/android/.idea/libraries/Gradle__com_facebook_fresco_memory_type_ashmem_2_5_0_aar.xml +15 -0
  54. package/android/.idea/libraries/Gradle__com_facebook_fresco_memory_type_java_2_5_0_aar.xml +15 -0
  55. package/android/.idea/libraries/Gradle__com_facebook_fresco_memory_type_native_2_5_0_aar.xml +15 -0
  56. package/android/.idea/libraries/Gradle__com_facebook_fresco_nativeimagefilters_2_5_0_aar.xml +15 -0
  57. package/android/.idea/libraries/Gradle__com_facebook_fresco_nativeimagetranscoder_2_5_0_aar.xml +15 -0
  58. package/android/.idea/libraries/Gradle__com_facebook_fresco_ui_common_2_5_0_aar.xml +15 -0
  59. 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
  60. package/android/.idea/libraries/Gradle__com_facebook_react_react_native_0_66_4_aar.xml +14 -0
  61. package/android/.idea/libraries/Gradle__com_facebook_soloader_annotation_0_10_1.xml +13 -0
  62. package/android/.idea/libraries/Gradle__com_facebook_soloader_nativeloader_0_10_1.xml +13 -0
  63. package/android/.idea/libraries/Gradle__com_facebook_soloader_soloader_0_10_1_aar.xml +15 -0
  64. package/android/.idea/libraries/Gradle__com_facebook_yoga_proguard_annotations_1_19_0.xml +13 -0
  65. package/android/.idea/libraries/Gradle__com_squareup_okhttp3_okhttp_4_9_1.xml +13 -0
  66. package/android/.idea/libraries/Gradle__com_squareup_okhttp3_okhttp_urlconnection_4_9_1.xml +13 -0
  67. package/android/.idea/libraries/Gradle__com_squareup_okio_okio_2_9_0.xml +13 -0
  68. package/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_annotations_jvm_1_3_72.xml +13 -0
  69. package/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_1_4_10.xml +13 -0
  70. package/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_common_1_4_10.xml +13 -0
  71. package/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_jdk7_1_4_10.xml +13 -0
  72. package/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_jdk8_1_4_10.xml +13 -0
  73. package/android/.idea/modules/android.iml +42 -33
  74. package/android/build/.transforms/{d5207f219c4292752e7af446f7cc2789.bin → cef19407ab645b1b4c01cb89efaec997/results.bin} +0 -0
  75. package/android/build/.transforms/cef19407ab645b1b4c01cb89efaec997/transformed/classes/classes.dex +0 -0
  76. package/android/build/intermediates/aapt_friendly_merged_manifests/debug/aapt/AndroidManifest.xml +3 -84
  77. package/android/build/intermediates/aapt_friendly_merged_manifests/debug/aapt/output-metadata.json +4 -2
  78. package/android/build/intermediates/aar_metadata/debug/aar-metadata.properties +2 -0
  79. package/android/build/intermediates/compile_library_classes_jar/debug/classes.jar +0 -0
  80. package/android/build/intermediates/compile_r_class_jar/debug/R.jar +0 -0
  81. package/android/build/intermediates/compile_symbol_list/debug/R.txt +72 -8
  82. package/android/build/intermediates/compiled_local_resources/debug/out/xml_file_provider_paths.xml.flat +0 -0
  83. package/android/build/intermediates/incremental/mergeDebugJniLibFolders/merger.xml +1 -1
  84. package/android/build/intermediates/incremental/mergeDebugShaders/merger.xml +1 -1
  85. package/android/build/intermediates/incremental/packageDebugAssets/merger.xml +1 -1
  86. package/android/build/intermediates/incremental/packageDebugResources/compile-file-map.properties +2 -2
  87. package/android/build/intermediates/incremental/packageDebugResources/merger.xml +1 -1
  88. package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/BPCWebChromeClient.class +0 -0
  89. package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/BPCWebView$1.class +0 -0
  90. package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/BPCWebView$BPCWebViewBridge.class +0 -0
  91. package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/BPCWebView$ProgressChangedFilter.class +0 -0
  92. package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/BPCWebView.class +0 -0
  93. package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/BPCWebViewClient.class +0 -0
  94. package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/BPCWebViewManager$1.class +0 -0
  95. package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/BPCWebViewManager$2.class +0 -0
  96. package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/BPCWebViewManager$3.class +0 -0
  97. package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/BPCWebViewManager$4.class +0 -0
  98. package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/BPCWebViewManager.class +0 -0
  99. package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/BPCWebViewModule.class +0 -0
  100. package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/BasicAuthCredential.class +0 -0
  101. package/android/build/intermediates/library_java_res/debug/res.jar +0 -0
  102. package/android/build/intermediates/manifest_merge_blame_file/debug/manifest-merger-blame-debug-report.txt +30 -200
  103. package/android/build/intermediates/merged_manifest/debug/AndroidManifest.xml +21 -0
  104. package/android/build/intermediates/packaged_manifests/debug/output-metadata.json +5 -3
  105. package/android/build/intermediates/runtime_library_classes_jar/debug/classes.jar +0 -0
  106. package/android/build/intermediates/symbol_list_with_package_name/debug/package-aware-r.txt +66 -8
  107. package/android/build/kotlin/compileDebugKotlin/build-history.bin +0 -0
  108. package/android/build/kotlin/compileDebugKotlin/caches-jvm/inputs/source-to-output.tab +0 -0
  109. package/android/build/kotlin/compileDebugKotlin/caches-jvm/inputs/source-to-output.tab.keystream +0 -0
  110. package/android/build/kotlin/compileDebugKotlin/caches-jvm/inputs/source-to-output.tab.keystream.len +0 -0
  111. package/android/build/kotlin/compileDebugKotlin/caches-jvm/inputs/source-to-output.tab.len +0 -0
  112. package/android/build/kotlin/compileDebugKotlin/caches-jvm/inputs/source-to-output.tab.values.at +0 -0
  113. package/android/build/kotlin/compileDebugKotlin/caches-jvm/inputs/source-to-output.tab_i +0 -0
  114. package/android/build/kotlin/compileDebugKotlin/caches-jvm/inputs/source-to-output.tab_i.len +0 -0
  115. package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/class-attributes.tab +0 -0
  116. package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/class-attributes.tab.keystream +0 -0
  117. package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/class-attributes.tab.keystream.len +0 -0
  118. package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/class-attributes.tab.len +0 -0
  119. package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/class-attributes.tab.values.at +0 -0
  120. package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/class-attributes.tab_i +0 -0
  121. package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/class-attributes.tab_i.len +0 -0
  122. package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab +0 -0
  123. package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream +0 -0
  124. package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream.len +0 -0
  125. package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.len +0 -0
  126. package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.values.at +0 -0
  127. package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i +0 -0
  128. package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i.len +0 -0
  129. package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/constants.tab +0 -0
  130. package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/constants.tab.keystream +0 -0
  131. package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/constants.tab.keystream.len +0 -0
  132. package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/constants.tab.len +0 -0
  133. package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/constants.tab.values.at +0 -0
  134. package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/constants.tab_i +0 -0
  135. package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/constants.tab_i.len +0 -0
  136. package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab +0 -0
  137. package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream +0 -0
  138. package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream.len +0 -0
  139. package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab.len +0 -0
  140. package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab.values.at +0 -0
  141. package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i +0 -0
  142. package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i.len +0 -0
  143. package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/proto.tab +0 -0
  144. package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/proto.tab.keystream +0 -0
  145. package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/proto.tab.keystream.len +0 -0
  146. package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/proto.tab.len +0 -0
  147. package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/proto.tab.values.at +0 -0
  148. package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/proto.tab_i +0 -0
  149. package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/proto.tab_i.len +0 -0
  150. package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/source-to-classes.tab +0 -0
  151. package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream +0 -0
  152. package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream.len +0 -0
  153. package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/source-to-classes.tab.len +0 -0
  154. package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/source-to-classes.tab.values.at +0 -0
  155. package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/source-to-classes.tab_i +0 -0
  156. package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/source-to-classes.tab_i.len +0 -0
  157. package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/subtypes.tab +0 -0
  158. package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/subtypes.tab.keystream +0 -0
  159. package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/subtypes.tab.keystream.len +0 -0
  160. package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/subtypes.tab.len +0 -0
  161. package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/subtypes.tab.values.at +0 -0
  162. package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/{java-sources-proto-map.tab_i → subtypes.tab_i} +0 -0
  163. package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/subtypes.tab_i.len +0 -0
  164. package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/supertypes.tab +0 -0
  165. package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/supertypes.tab.keystream +0 -0
  166. package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/supertypes.tab.keystream.len +0 -0
  167. package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/supertypes.tab.len +0 -0
  168. package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/supertypes.tab.values.at +0 -0
  169. package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/supertypes.tab_i +0 -0
  170. package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/supertypes.tab_i.len +0 -0
  171. package/android/build/kotlin/compileDebugKotlin/caches-jvm/lookups/counters.tab +2 -0
  172. package/android/build/kotlin/compileDebugKotlin/caches-jvm/lookups/file-to-id.tab +0 -0
  173. package/android/build/kotlin/compileDebugKotlin/caches-jvm/lookups/file-to-id.tab.keystream +0 -0
  174. package/android/build/kotlin/compileDebugKotlin/caches-jvm/lookups/file-to-id.tab.keystream.len +0 -0
  175. package/android/build/kotlin/compileDebugKotlin/caches-jvm/lookups/file-to-id.tab.len +0 -0
  176. package/android/build/kotlin/compileDebugKotlin/caches-jvm/lookups/file-to-id.tab.values.at +0 -0
  177. package/android/build/kotlin/compileDebugKotlin/caches-jvm/lookups/file-to-id.tab_i +0 -0
  178. package/android/build/kotlin/compileDebugKotlin/caches-jvm/lookups/file-to-id.tab_i.len +0 -0
  179. package/android/build/kotlin/compileDebugKotlin/caches-jvm/lookups/id-to-file.tab +0 -0
  180. package/android/build/kotlin/compileDebugKotlin/caches-jvm/{jvm/kotlin/java-sources-proto-map.tab → lookups/id-to-file.tab.keystream} +0 -0
  181. package/android/build/kotlin/compileDebugKotlin/caches-jvm/lookups/id-to-file.tab.keystream.len +0 -0
  182. package/android/build/kotlin/compileDebugKotlin/caches-jvm/lookups/id-to-file.tab.len +0 -0
  183. package/android/build/kotlin/compileDebugKotlin/caches-jvm/lookups/id-to-file.tab.values.at +0 -0
  184. package/android/build/kotlin/compileDebugKotlin/caches-jvm/lookups/id-to-file.tab_i +0 -0
  185. package/android/build/kotlin/compileDebugKotlin/caches-jvm/lookups/id-to-file.tab_i.len +0 -0
  186. package/android/build/kotlin/compileDebugKotlin/caches-jvm/lookups/lookups.tab +0 -0
  187. package/android/build/kotlin/compileDebugKotlin/caches-jvm/lookups/lookups.tab.keystream +0 -0
  188. package/android/build/kotlin/compileDebugKotlin/caches-jvm/lookups/lookups.tab.keystream.len +0 -0
  189. package/android/build/kotlin/compileDebugKotlin/caches-jvm/lookups/lookups.tab.len +0 -0
  190. package/android/build/kotlin/compileDebugKotlin/caches-jvm/lookups/lookups.tab.values.at +0 -0
  191. package/android/build/kotlin/compileDebugKotlin/caches-jvm/lookups/lookups.tab_i +0 -0
  192. package/android/build/kotlin/compileDebugKotlin/caches-jvm/lookups/lookups.tab_i.len +0 -0
  193. package/android/build/kotlin/compileDebugKotlin/last-build.bin +0 -0
  194. package/android/build/outputs/logs/manifest-merger-debug-report.txt +27 -217
  195. package/android/build/tmp/compileDebugJavaWithJavac/previous-compilation-data.bin +0 -0
  196. package/android/build/tmp/kotlin-classes/debug/META-INF/react-native-webview_debug.kotlin_module +0 -0
  197. package/android/build/tmp/kotlin-classes/debug/kr/co/bootpay/webview/BPCWebViewPackage.class +0 -0
  198. package/android/build/tmp/kotlin-classes/debug/kr/co/bootpay/webview/events/TopHttpErrorEvent$Companion.class +0 -0
  199. package/android/build/tmp/kotlin-classes/debug/kr/co/bootpay/webview/events/TopHttpErrorEvent.class +0 -0
  200. package/android/build/tmp/kotlin-classes/debug/kr/co/bootpay/webview/events/TopLoadingErrorEvent$Companion.class +0 -0
  201. package/android/build/tmp/kotlin-classes/debug/kr/co/bootpay/webview/events/TopLoadingErrorEvent.class +0 -0
  202. package/android/build/tmp/kotlin-classes/debug/kr/co/bootpay/webview/events/TopLoadingFinishEvent$Companion.class +0 -0
  203. package/android/build/tmp/kotlin-classes/debug/kr/co/bootpay/webview/events/TopLoadingFinishEvent.class +0 -0
  204. package/android/build/tmp/kotlin-classes/debug/kr/co/bootpay/webview/events/TopLoadingProgressEvent$Companion.class +0 -0
  205. package/android/build/tmp/kotlin-classes/debug/kr/co/bootpay/webview/events/TopLoadingProgressEvent.class +0 -0
  206. package/android/build/tmp/kotlin-classes/debug/kr/co/bootpay/webview/events/TopLoadingStartEvent$Companion.class +0 -0
  207. package/android/build/tmp/kotlin-classes/debug/kr/co/bootpay/webview/events/TopLoadingStartEvent.class +0 -0
  208. package/android/build/tmp/kotlin-classes/debug/kr/co/bootpay/webview/events/TopMessageEvent$Companion.class +0 -0
  209. package/android/build/tmp/kotlin-classes/debug/kr/co/bootpay/webview/events/TopMessageEvent.class +0 -0
  210. package/android/build/tmp/kotlin-classes/debug/kr/co/bootpay/webview/events/TopRenderProcessGoneEvent$Companion.class +0 -0
  211. package/android/build/tmp/kotlin-classes/debug/kr/co/bootpay/webview/events/TopRenderProcessGoneEvent.class +0 -0
  212. package/android/build/tmp/kotlin-classes/debug/kr/co/bootpay/webview/events/TopShouldStartLoadWithRequestEvent$Companion.class +0 -0
  213. package/android/build/tmp/kotlin-classes/debug/kr/co/bootpay/webview/events/TopShouldStartLoadWithRequestEvent.class +0 -0
  214. package/android/build.gradle +4 -6
  215. package/android/gradle.properties +6 -5
  216. package/android/local.properties +1 -1
  217. package/android/src/main/AndroidManifest.xml +0 -75
  218. package/android/src/main/java/kr/co/bootpay/webview/BPCWebChromeClient.java +2 -120
  219. package/android/src/main/java/kr/co/bootpay/webview/BPCWebView.java +26 -11
  220. package/android/src/main/java/kr/co/bootpay/webview/BPCWebViewClient.java +134 -103
  221. package/android/src/main/java/kr/co/bootpay/webview/BPCWebViewManager.java +95 -49
  222. package/android/src/main/java/kr/co/bootpay/webview/BasicAuthCredential.java +12 -0
  223. package/apple/BPCWebView.h +19 -0
  224. package/apple/BPCWebView.m +363 -161
  225. package/apple/BPCWebViewManager.h +2 -0
  226. package/apple/BPCWebViewManager.m +25 -1
  227. package/index.d.ts +5 -5
  228. package/ios/.DS_Store +0 -0
  229. package/ios/RNCWebView.xcodeproj/project.pbxproj +18 -18
  230. package/ios/RNCWebView.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
  231. package/ios/RNCWebView.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  232. package/ios/RNCWebView.xcodeproj/project.xcworkspace/xcuserdata/bootpay.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  233. package/ios/RNCWebView.xcodeproj/xcshareddata/xcschemes/RNCWebView.xcscheme +68 -0
  234. package/ios/RNCWebView.xcodeproj/xcuserdata/bootpay.xcuserdatad/xcschemes/xcschememanagement.plist +22 -0
  235. package/lib/WebView.android.d.ts +3 -0
  236. package/lib/WebView.android.d.ts.map +1 -1
  237. package/lib/WebView.android.js +22 -11
  238. package/lib/WebView.d.ts +2 -2
  239. package/lib/WebView.d.ts.map +1 -1
  240. package/lib/WebView.ios.d.ts +1 -0
  241. package/lib/WebView.ios.d.ts.map +1 -1
  242. package/lib/WebView.ios.js +23 -14
  243. package/lib/WebView.js +4 -4
  244. package/lib/WebView.macos.d.ts.map +1 -1
  245. package/lib/WebView.macos.js +21 -13
  246. package/lib/WebView.windows.d.ts +4 -2
  247. package/lib/WebView.windows.d.ts.map +1 -1
  248. package/lib/WebView.windows.js +22 -14
  249. package/lib/WebViewNativeComponent.android.d.ts +4 -0
  250. package/lib/WebViewNativeComponent.android.d.ts.map +1 -0
  251. package/lib/WebViewNativeComponent.android.js +3 -0
  252. package/lib/WebViewNativeComponent.ios.d.ts +4 -0
  253. package/lib/WebViewNativeComponent.ios.d.ts.map +1 -0
  254. package/lib/WebViewNativeComponent.ios.js +3 -0
  255. package/lib/WebViewNativeComponent.macos.d.ts +4 -0
  256. package/lib/WebViewNativeComponent.macos.d.ts.map +1 -0
  257. package/lib/WebViewNativeComponent.macos.js +3 -0
  258. package/lib/WebViewNativeComponent.windows.d.ts +4 -0
  259. package/lib/WebViewNativeComponent.windows.d.ts.map +1 -0
  260. package/lib/WebViewNativeComponent.windows.js +3 -0
  261. package/lib/WebViewShared.d.ts +1 -0
  262. package/lib/WebViewShared.d.ts.map +1 -1
  263. package/lib/WebViewShared.js +14 -12
  264. package/lib/WebViewTypes.d.ts +113 -2
  265. package/lib/WebViewTypes.d.ts.map +1 -1
  266. package/lib/WebViewTypes.js +3 -1
  267. package/lib/index.d.ts +4 -0
  268. package/lib/index.d.ts.map +1 -0
  269. package/lib/index.js +3 -0
  270. package/package.json +31 -32
  271. package/react-native-webview-bootpay.podspec +1 -3
  272. package/react-native.config.js +47 -61
  273. package/windows/ExperimentalFeatures.props +12 -0
  274. package/windows/ReactNativeWebView/ReactNativeWebView.vcxproj +37 -20
  275. package/windows/ReactNativeWebView/ReactPackageProvider.cpp +5 -1
  276. package/windows/ReactNativeWebView/ReactWebView.cpp +2 -6
  277. package/windows/ReactNativeWebView/ReactWebView.h +3 -2
  278. package/windows/ReactNativeWebView/ReactWebView.idl +13 -1
  279. package/windows/ReactNativeWebView/ReactWebView2.cpp +119 -0
  280. package/windows/ReactNativeWebView/ReactWebView2.h +43 -0
  281. package/windows/ReactNativeWebView/ReactWebView2Manager.cpp +147 -0
  282. package/windows/ReactNativeWebView/ReactWebView2Manager.h +54 -0
  283. package/windows/ReactNativeWebView/ReactWebViewManager.cpp +36 -31
  284. package/windows/{WebViewBridgeComponent → ReactNativeWebView}/WebBridge.cpp +1 -1
  285. package/windows/{WebViewBridgeComponent → ReactNativeWebView}/WebBridge.h +2 -2
  286. package/windows/{WebViewBridgeComponent → ReactNativeWebView}/WebBridge.idl +1 -1
  287. package/windows/ReactNativeWebView/packages.config +2 -0
  288. package/windows/ReactNativeWebView/pch.h +6 -0
  289. package/windows/ReactNativeWebView.sln +81 -119
  290. package/android/.gradle/7.0-rc-1/dependencies-accessors/dependencies-accessors.lock +0 -0
  291. package/android/.gradle/7.0-rc-1/dependencies-accessors/gc.properties +0 -0
  292. package/android/.gradle/7.0-rc-1/executionHistory/executionHistory.lock +0 -0
  293. package/android/.gradle/7.0-rc-1/fileChanges/last-build.bin +0 -0
  294. package/android/.gradle/7.0-rc-1/fileHashes/fileHashes.lock +0 -0
  295. package/android/.gradle/7.0-rc-1/gc.properties +0 -0
  296. package/android/.idea/libraries/Gradle__androidx_annotation_annotation_1_0_0.xml +0 -13
  297. package/android/.idea/libraries/Gradle__androidx_core_core_1_0_1_aar.xml +0 -16
  298. package/android/.idea/libraries/Gradle__androidx_versionedparcelable_versionedparcelable_1_0_0_aar.xml +0 -13
  299. package/android/.idea/libraries/Gradle__com_facebook_fbjni_fbjni_java_only_0_0_3.xml +0 -13
  300. package/android/.idea/libraries/Gradle__com_facebook_fresco_drawee_2_0_0_aar.xml +0 -15
  301. package/android/.idea/libraries/Gradle__com_facebook_fresco_fresco_2_0_0_aar.xml +0 -18
  302. package/android/.idea/libraries/Gradle__com_facebook_fresco_imagepipeline_2_0_0_aar.xml +0 -18
  303. package/android/.idea/libraries/Gradle__com_facebook_fresco_imagepipeline_base_2_0_0_aar.xml +0 -18
  304. package/android/.idea/libraries/Gradle__com_facebook_fresco_imagepipeline_okhttp3_2_0_0_aar.xml +0 -15
  305. package/android/.idea/libraries/Gradle__com_facebook_fresco_nativeimagefilters_2_0_0_aar.xml +0 -15
  306. package/android/.idea/libraries/Gradle__com_facebook_fresco_nativeimagetranscoder_2_0_0_aar.xml +0 -15
  307. package/android/.idea/libraries/Gradle__com_facebook_react_react_native_0_62_2_aar.xml +0 -18
  308. package/android/.idea/libraries/Gradle__com_facebook_soloader_annotation_0_8_0_aar.xml +0 -15
  309. package/android/.idea/libraries/Gradle__com_facebook_soloader_nativeloader_0_8_0.xml +0 -13
  310. package/android/.idea/libraries/Gradle__com_facebook_soloader_soloader_0_8_0_aar.xml +0 -15
  311. package/android/.idea/libraries/Gradle__com_facebook_yoga_proguard_annotations_1_14_1.xml +0 -13
  312. package/android/.idea/libraries/Gradle__com_squareup_okhttp3_okhttp_3_12_1.xml +0 -13
  313. package/android/.idea/libraries/Gradle__com_squareup_okhttp3_okhttp_urlconnection_3_12_1.xml +0 -13
  314. package/android/.idea/libraries/Gradle__com_squareup_okio_okio_1_15_0.xml +0 -13
  315. package/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_1_3_50.xml +0 -13
  316. package/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_common_1_3_50.xml +0 -13
  317. package/android/.project +0 -34
  318. package/android/.settings/org.eclipse.buildship.core.prefs +0 -13
  319. package/android/build/.transforms/d5207f219c4292752e7af446f7cc2789/classes/classes.dex +0 -0
  320. package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/BPCWebChromeClient$1.class +0 -0
  321. package/android/build/intermediates/library_manifest/debug/AndroidManifest.xml +0 -102
  322. package/android/build/tmp/compileDebugJavaWithJavac/source-classes-mapping.txt +0 -29
  323. package/android/build/tmp/kotlin-classes/debug/META-INF/rnWebView_debug.kotlin_module +0 -0
  324. package/windows/WebViewBridgeComponent/PropertySheet.props +0 -16
  325. package/windows/WebViewBridgeComponent/WebViewBridgeComponent.def +0 -3
  326. package/windows/WebViewBridgeComponent/WebViewBridgeComponent.vcxproj +0 -160
  327. package/windows/WebViewBridgeComponent/WebViewBridgeComponent.vcxproj.filters +0 -33
  328. package/windows/WebViewBridgeComponent/packages.config +0 -4
  329. package/windows/WebViewBridgeComponent/pch.cpp +0 -1
  330. package/windows/WebViewBridgeComponent/pch.h +0 -4
  331. package/windows/WebViewBridgeComponent/readme.txt +0 -23
@@ -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 *bpcWebView = (BPCWebView *)[self superview];
55
- RCTAssert([bpcWebView isKindOfClass:[bpcWebView class]], @"superview must be an BPCWebView");
56
- if (![bpcWebView scrollEnabled]) {
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
- NSLog(@"------ popup url: %@", navigationAction.request.URL.absoluteString);
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
- if([navigationAction.request.URL.absoluteString rangeOfString:@"bootpay.co.kr"].location == NSNotFound) {
205
- NSLog(@"111");
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
- if (!navigationAction.targetFrame.isMainFrame) {
209
- [webView loadRequest:navigationAction.request];
210
- }
211
- return nil;
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
- NSLog(@"222");
288
+ // Allows the instance to respond to UIMenuController Actions
289
+ - (BOOL)canBecomeFirstResponder
290
+ {
291
+ return YES;
292
+ }
215
293
 
216
- WKWebView *popupView = [[WKWebView alloc] initWithFrame:webView.bounds configuration:configuration];
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
- popupView.autoresizingMask = (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight);
219
- popupView.navigationDelegate = self;
220
- popupView.UIDelegate = self;
221
- [webView addSubview:popupView];
222
-
223
- return popupView;
224
- }
301
+ if (match.location == 0) {
302
+ return YES;
303
+ }
304
+ return NO;
225
305
  }
226
306
 
227
-
228
- - (void)webViewDidClose:(WKWebView *)webView {
229
- [webView removeFromSuperview];
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
- if (_userAgent) {
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
- for (NSHTTPCookie *httpCookie in httpCookies) {
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
- // Because of the way React works, as pages redirect, we actually end up
596
- // passing the redirect urls back here, so we ignore them if trying to load
597
- // the same url. We'll expose a call to 'reload' to allow a user to load
598
- // the existing page.
599
- if ([request.URL isEqual:_webView.URL]) {
600
- return;
601
- }
602
- if (!request.URL) {
603
- // Clear the webview
604
- [_webView loadHTMLString:@"" baseURL:nil];
605
- return;
606
- }
607
- if (request.URL.host) {
608
- [_webView loadRequest:request];
609
- }
610
- else {
611
- NSURL* readAccessUrl = _allowingReadAccessToURL ? [RCTConvert NSURL:_allowingReadAccessToURL] : request.URL;
612
- [_webView loadFileURL:request.URL allowingReadAccessToURL:readAccessUrl];
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:@"%@_BPSwizzleHelperWK", subview.class.superclass];
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
- if([self isItunesURL:navigationAction.request.URL.absoluteString]) {
977
- [self startAppToApp:navigationAction.request.URL];
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(![navigationAction.request.URL.scheme isEqualToString:@"http"] && ![navigationAction.request.URL.scheme isEqualToString:@"https"] && ![navigationAction.request.URL.absoluteString isEqualToString:@"about:blank"]) {
980
- [self startAppToApp:navigationAction.request.URL];
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
- - (BOOL) isItunesURL:(NSString*) url {
989
- NSString *itunesRegexp = @"\\/\\/itunes\\.apple\\.com\\/";
990
- NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", itunesRegexp];
991
- return [predicate evaluateWithObject: url];
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
- - (void) goInstallApp:(WKNavigationAction *)navigationAction {
995
- NSString * url = navigationAction.request.URL.absoluteString;
996
- NSString * itunesUrl = @"";
997
- if([url hasPrefix:@"kftc-bankpay"]) {
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([url hasPrefix:@"ispmobile"]) {
1000
- itunesUrl = @"https://apps.apple.com/kr/app/isp-%ED%8E%98%EC%9D%B4%EB%B6%81/id369125087";
1001
- } else if([url hasPrefix:@"hdcardappcardansimclick"]) {
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
- } else if([url hasPrefix:@"shinhan-sr-ansimclick"]) {
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([url hasPrefix:@"kb-acp"]) {
1170
+ } else if([sUrl hasPrefix: @"kb-acp"]) {
1006
1171
  itunesUrl = @"https://apps.apple.com/kr/app/kb-pay/id695436326";
1007
- } else if([url hasPrefix:@"mpocket.online.ansimclick"]) {
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([url hasPrefix:@"lottesmartpay"]) {
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([url hasPrefix:@"cloudpay"]) {
1014
- itunesUrl = @"https://apps.apple.com/kr/app/%ED%95%98%EB%82%98%EC%9B%90%ED%81%90-%EC%B9%B4%EB%93%9C-%ED%95%98%EB%82%98%EC%B9%B4%EB%93%9C/id427543371";
1015
- } else if([url hasPrefix:@"nhappvardansimclick"]) {
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([url hasPrefix:@"nhallonepayansimclick"]) {
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([url hasPrefix:@"citispay"]) {
1020
- itunesUrl = @"https://apps.apple.com/kr/app/%EC%94%A8%ED%8B%B0%EB%AA%A8%EB%B0%94%EC%9D%BC/id1179759666";
1021
- } else if([url hasPrefix:@"payco"]) {
1022
- itunesUrl = @"https://apps.apple.com/kr/app/payco-%ED%8E%98%EC%9D%B4%EC%BD%94-%ED%98%9C%ED%83%9D%EA%B9%8C%EC%A7%80-%EB%98%91%EB%98%91%ED%95%9C-%EA%B0%84%ED%8E%B8%EA%B2%B0%EC%A0%9C/id924292102";
1023
- } else if([url hasPrefix:@"naversearchapp"]) {
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
- if([itunesUrl length] > 0) {
1027
- [self openAppURLString: itunesUrl];
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
- - (void) openAppURLString:(NSString *)url {
1050
- if (@available(iOS 10.0, *)) {
1051
- [[UIApplication sharedApplication] openURL:[NSURL URLWithString:url] options:@{} completionHandler:^(BOOL success) {}];
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
- static NSDictionary<NSNumber *, NSString *> *navigationTypes;
1063
- static dispatch_once_t onceToken;
1064
-
1065
- dispatch_once(&onceToken, ^{
1066
- navigationTypes = @{
1067
- @(WKNavigationTypeLinkActivated): @"click",
1068
- @(WKNavigationTypeFormSubmitted): @"formsubmit",
1069
- @(WKNavigationTypeBackForward): @"backforward",
1070
- @(WKNavigationTypeReload): @"reload",
1071
- @(WKNavigationTypeFormResubmitted): @"formresubmit",
1072
- @(WKNavigationTypeOther): @"other",
1073
- };
1074
- });
1075
-
1076
- WKNavigationType navigationType = navigationAction.navigationType;
1077
- NSURLRequest *request = navigationAction.request;
1078
- BOOL isTopFrame = [request.URL isEqual:request.mainDocumentURL];
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
- if (_onShouldStartLoadWithRequest) {
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
- @"mainDocumentURL": (request.mainDocumentURL).absoluteString,
1085
- @"navigationType": navigationTypes[@(navigationType)],
1086
- @"isTopFrame": @(isTopFrame)
1271
+ @"navigationType": navigationTypes[@(navigationType)]
1087
1272
  }];
1088
- if (![self.delegate webView:self
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
- // Allow all navigation by default
1109
- decisionHandler(WKNavigationActionPolicyAllow);
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
- for (NSHTTPCookie *cookie in [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies]) {
1453
- [wkWebViewConfig.websiteDataStore.httpCookieStore setCookie:cookie completionHandler:nil];
1454
- }
1656
+ [self syncCookiesToWebView:nil];
1455
1657
  } else {
1456
1658
  NSMutableString *script = [NSMutableString string];
1457
1659