diff --git a/.all-contributorsrc b/.all-contributorsrc
new file mode 100644
index 00000000..60880795
--- /dev/null
+++ b/.all-contributorsrc
@@ -0,0 +1,538 @@
+{
+ "projectName": "flutter_inappwebview",
+ "projectOwner": "pichillilorenzo",
+ "repoType": "github",
+ "repoHost": "https://github.com",
+ "files": [
+ "README.md"
+ ],
+ "imageSize": 100,
+ "commit": true,
+ "commitConvention": "none",
+ "contributors": [
+ {
+ "login": "AlexV525",
+ "name": "Alex Li",
+ "avatar_url": "https://avatars.githubusercontent.com/u/15884415?v=4",
+ "profile": "https://blog.alexv525.com/",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "crazecoder",
+ "name": "1/2",
+ "avatar_url": "https://avatars.githubusercontent.com/u/18387906?v=4",
+ "profile": "https://github.com/crazecoder",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "cbodin",
+ "name": "Christofer Bodin",
+ "avatar_url": "https://avatars.githubusercontent.com/u/220255?v=4",
+ "profile": "https://github.com/cbodin",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "matthewlloyd",
+ "name": "Matthew Lloyd",
+ "avatar_url": "https://avatars.githubusercontent.com/u/2041996?v=4",
+ "profile": "https://github.com/matthewlloyd",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "carloserazo47",
+ "name": "C E",
+ "avatar_url": "https://avatars.githubusercontent.com/u/83635384?v=4",
+ "profile": "https://github.com/carloserazo47",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "robsonmeemo",
+ "name": "Robson Araujo",
+ "avatar_url": "https://avatars.githubusercontent.com/u/47990393?v=4",
+ "profile": "https://github.com/robsonmeemo",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "ryanhz",
+ "name": "Ryan",
+ "avatar_url": "https://avatars.githubusercontent.com/u/1142612?v=4",
+ "profile": "https://github.com/ryanhz",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "CodeEagle",
+ "name": "CodeEagle",
+ "avatar_url": "https://avatars.githubusercontent.com/u/2311352?v=4",
+ "profile": "https://codeeagle.github.io/",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "tneotia",
+ "name": "Tanay Neotia",
+ "avatar_url": "https://avatars.githubusercontent.com/u/50850142?v=4",
+ "profile": "https://github.com/tneotia",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "panndoraBoo",
+ "name": "Jamie Joost",
+ "avatar_url": "https://avatars.githubusercontent.com/u/8928207?v=4",
+ "profile": "https://github.com/panndoraBoo",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "deandreamatias",
+ "name": "Matias de Andrea",
+ "avatar_url": "https://avatars.githubusercontent.com/u/21011641?v=4",
+ "profile": "https://deandreamatias.com/",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "YouCii",
+ "name": "YouCii",
+ "avatar_url": "https://avatars.githubusercontent.com/u/17899073?v=4",
+ "profile": "https://blog.csdn.net/j550341130",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "cutzmf",
+ "name": "Salnikov Sergey",
+ "avatar_url": "https://avatars.githubusercontent.com/u/1662033?v=4",
+ "profile": "https://github.com/cutzmf",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "a00012025",
+ "name": "Po-Jui Chen",
+ "avatar_url": "https://avatars.githubusercontent.com/u/12824216?v=4",
+ "profile": "https://github.com/a00012025",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "Manuito83",
+ "name": "Manuito",
+ "avatar_url": "https://avatars.githubusercontent.com/u/4816367?v=4",
+ "profile": "https://github.com/Manuito83",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "setcy",
+ "name": "setcy",
+ "avatar_url": "https://avatars.githubusercontent.com/u/86180691?v=4",
+ "profile": "https://github.com/setcy",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "EArminjon2",
+ "name": "EArminjon",
+ "avatar_url": "https://avatars.githubusercontent.com/u/92172436?v=4",
+ "profile": "https://github.com/EArminjon2",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "ashank96",
+ "name": "Ashank Bharati",
+ "avatar_url": "https://avatars.githubusercontent.com/u/22197948?v=4",
+ "profile": "https://www.linkedin.com/in/ashank-bharati-497989127/",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "chownation",
+ "name": "Michael Chow",
+ "avatar_url": "https://avatars.githubusercontent.com/u/1755207?v=4",
+ "profile": "https://dart.art/",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "RodXander",
+ "name": "Osvaldo Saez",
+ "avatar_url": "https://avatars.githubusercontent.com/u/23609784?v=4",
+ "profile": "https://github.com/RodXander",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "rsydor",
+ "name": "rsydor",
+ "avatar_url": "https://avatars.githubusercontent.com/u/79581663?v=4",
+ "profile": "https://github.com/rsydor",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "hoanglm4",
+ "name": "Le Minh Hoang",
+ "avatar_url": "https://avatars.githubusercontent.com/u/7067757?v=4",
+ "profile": "https://github.com/hoanglm4",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "Miiha",
+ "name": "Michael Kao",
+ "avatar_url": "https://avatars.githubusercontent.com/u/3897167?v=4",
+ "profile": "https://github.com/Miiha",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "cloudygeek",
+ "name": "cloudygeek",
+ "avatar_url": "https://avatars.githubusercontent.com/u/6059542?v=4",
+ "profile": "https://github.com/cloudygeek",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "chreck",
+ "name": "Christoph Eck",
+ "avatar_url": "https://avatars.githubusercontent.com/u/8030398?v=4",
+ "profile": "https://github.com/chreck",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "Ser1ous",
+ "name": "Ser1ous",
+ "avatar_url": "https://avatars.githubusercontent.com/u/4497968?v=4",
+ "profile": "https://github.com/Ser1ous",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "ItsCalebJones",
+ "name": "Caleb Jones",
+ "avatar_url": "https://avatars.githubusercontent.com/u/4519230?v=4",
+ "profile": "https://spacelaunchnow.me/",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "savy-91",
+ "name": "Saverio Murgia",
+ "avatar_url": "https://avatars.githubusercontent.com/u/6215122?v=4",
+ "profile": "https://sungazer.io/",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "tranductam2802",
+ "name": "Trần Đức Tâm",
+ "avatar_url": "https://avatars.githubusercontent.com/u/4957579?v=4",
+ "profile": "https://github.com/tranductam2802",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "pcqpcq",
+ "name": "Joker",
+ "avatar_url": "https://avatars.githubusercontent.com/u/1411571?v=4",
+ "profile": "https://pcqpcq.me/",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "ycv005",
+ "name": "Yash Chandra Verma",
+ "avatar_url": "https://avatars.githubusercontent.com/u/26734819?v=4",
+ "profile": "https://www.linkedin.com/in/ycv005/",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "arneke",
+ "name": "Arne Kepp",
+ "avatar_url": "https://avatars.githubusercontent.com/u/425235?v=4",
+ "profile": "https://github.com/arneke",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "omralcrt",
+ "name": "Ömral Cörüt",
+ "avatar_url": "https://avatars.githubusercontent.com/u/12418327?v=4",
+ "profile": "https://omralcrt.github.io/",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "albatrosify",
+ "name": "LrdHelmchen",
+ "avatar_url": "https://avatars.githubusercontent.com/u/64252708?v=4",
+ "profile": "https://github.com/albatrosify",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "gunantosteven",
+ "name": "Steven Gunanto",
+ "avatar_url": "https://avatars.githubusercontent.com/u/8141036?v=4",
+ "profile": "https://ungapps.com/",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "DRSchlaubi",
+ "name": "Michael Rittmeister",
+ "avatar_url": "https://avatars.githubusercontent.com/u/16060205?v=4",
+ "profile": "https://schlau.bi/",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "AAkira",
+ "name": "Akira Aratani",
+ "avatar_url": "https://avatars.githubusercontent.com/u/3386962?v=4",
+ "profile": "https://aakira.app/",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "Doflatango",
+ "name": "Doflatango",
+ "avatar_url": "https://avatars.githubusercontent.com/u/3091033?v=4",
+ "profile": "https://github.com/Doflatango",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "Eddayy",
+ "name": "Edmund Tay",
+ "avatar_url": "https://avatars.githubusercontent.com/u/17043852?v=4",
+ "profile": "https://github.com/Eddayy",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "andreidiaconu",
+ "name": "Andrei Diaconu",
+ "avatar_url": "https://avatars.githubusercontent.com/u/1402046?v=4",
+ "profile": "https://andreidiaconu.com/",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "plateaukao",
+ "name": "Daniel Kao",
+ "avatar_url": "https://avatars.githubusercontent.com/u/4084738?v=4",
+ "profile": "https://github.com/plateaukao",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "xtyxtyx",
+ "name": "xuty",
+ "avatar_url": "https://avatars.githubusercontent.com/u/15033141?v=4",
+ "profile": "https://github.com/xtyxtyx",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "wwwdata",
+ "name": "Ben Bieker",
+ "avatar_url": "https://avatars.githubusercontent.com/u/818880?v=4",
+ "profile": "https://bieker.ninja/",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "phamnhuvu-dev",
+ "name": "Phạm Như Vũ",
+ "avatar_url": "https://avatars.githubusercontent.com/u/22906656?v=4",
+ "profile": "https://github.com/phamnhuvu-dev",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "SebastienBtr",
+ "name": "SebastienBtr",
+ "avatar_url": "https://avatars.githubusercontent.com/u/18089010?v=4",
+ "profile": "https://github.com/SebastienBtr",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "fattiger00",
+ "name": "NeZha",
+ "avatar_url": "https://avatars.githubusercontent.com/u/38494401?v=4",
+ "profile": "https://github.com/fattiger00",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "klydra",
+ "name": "Jan Klinge",
+ "avatar_url": "https://avatars.githubusercontent.com/u/40038209?v=4",
+ "profile": "https://github.com/klydra",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "PauloDurrerMelo",
+ "name": "PauloDurrerMelo",
+ "avatar_url": "https://avatars.githubusercontent.com/u/29310557?v=4",
+ "profile": "https://github.com/PauloDurrerMelo",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "benmeemo",
+ "name": "benmeemo",
+ "avatar_url": "https://avatars.githubusercontent.com/u/47991706?v=4",
+ "profile": "https://github.com/benmeemo",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "cinos1",
+ "name": "cinos",
+ "avatar_url": "https://avatars.githubusercontent.com/u/19343437?v=4",
+ "profile": "https://github.com/cinos1",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "juicycleff",
+ "name": "Rex Raphael",
+ "avatar_url": "https://avatars.githubusercontent.com/u/11243590?v=4",
+ "profile": "https://xraph.com/",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "Sense545",
+ "name": "Jan Henrik Høiland",
+ "avatar_url": "https://avatars.githubusercontent.com/u/769406?v=4",
+ "profile": "https://github.com/Sense545",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "igtm",
+ "name": "Iguchi Tomokatsu",
+ "avatar_url": "https://avatars.githubusercontent.com/u/6331737?v=4",
+ "profile": "https://github.com/igtm",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "ueman",
+ "name": "Jonas Uekötter",
+ "avatar_url": "https://avatars.githubusercontent.com/u/1270149?v=4",
+ "profile": "https://uekoetter.dev/",
+ "contributions": [
+ "doc"
+ ]
+ },
+ {
+ "login": "emakar",
+ "name": "emakar",
+ "avatar_url": "https://avatars.githubusercontent.com/u/7767193?v=4",
+ "profile": "https://github.com/emakar",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "liasica",
+ "name": "liasica",
+ "avatar_url": "https://avatars.githubusercontent.com/u/671431?v=4",
+ "profile": "https://weibo.com/magicrolan",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "addie9000",
+ "name": "Eiichiro Adachi",
+ "avatar_url": "https://avatars.githubusercontent.com/u/2036910?v=4",
+ "profile": "https://github.com/addie9000",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "kamilpowalowski",
+ "name": "Kamil Powałowski",
+ "avatar_url": "https://avatars.githubusercontent.com/u/83073?v=4",
+ "profile": "https://github.com/kamilpowalowski",
+ "contributions": [
+ "code"
+ ]
+ }
+ ],
+ "contributorsPerLine": 7,
+ "linkToUsage": false
+}
diff --git a/CHANGELOG.md b/CHANGELOG.md
index b53591d1..45d36035 100755
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,36 @@
+## 5.4.5
+
+- Added Android direct camera capture feature
+- Fixed missing `PullToRefreshController.isRefreshing` iOS implementation
+- Fixed Android `PullToRefreshController.setEnabled` at runtime
+- Fixed iOS `findNext`
+- Fixed Android `RendererPriorityPolicy.waivedWhenNotVisible` type 'Null' is not a subtype of type 'bool'
+- Fixed iOS 14.0 crash when calling `callAsyncJavaScript` method
+- Merged "Android fix leaking MethodChannel through anonymous class" [#1201](https://github.com/pichillilorenzo/flutter_inappwebview/pull/1201) (thanks to [emakar](https://github.com/emakar))
+- Merged "Fix RangeError: Maximum call stack size exceeded" [#1208](https://github.com/pichillilorenzo/flutter_inappwebview/pull/1208) (thanks to [liasica](https://github.com/liasica))
+
+## 5.4.4+3
+
+- Removed Android unsafe trust manager
+
+## 5.4.4+2
+
+- Fixed LICENSE
+
+## 5.4.4+1
+
+- Fixed README
+
+## 5.4.4
+
+- Added support for Android 33
+- Fixed possible null pointer exception in Android `ChromeCustomTabsActivity.java`
+
+## 5.4.3+8
+
+- Merged "Xcode 14 build error: Stored properties cannot be marked potentially unavailable with '@available'" [#1238](https://github.com/pichillilorenzo/flutter_inappwebview/pull/1238) (thanks to [CodeEagle](https://github.com/CodeEagle))
+- Fixed example for iOS
+
## 5.4.3+7
- Fixed possible Android java.lang.NullPointerException in "InAppBrowserActivity.onCreateOptionsMenu" about "webView.getTitle()"
diff --git a/LICENSE b/LICENSE
index d6493fe1..4dada16d 100755
--- a/LICENSE
+++ b/LICENSE
@@ -175,7 +175,18 @@
END OF TERMS AND CONDITIONS
- Copyright 2018-2020 Lorenzo Pichilli
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright 2022 Lorenzo Pichilli
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/README.md b/README.md
index 3b0f4b04..d8d33849 100755
--- a/README.md
+++ b/README.md
@@ -1,22 +1,28 @@
+
+
# Flutter InAppWebView Plugin [![Share on Twitter](https://img.shields.io/twitter/url/http/shields.io.svg?style=social)](https://twitter.com/intent/tweet?text=Flutter%20InAppBrowser%20plugin!&url=https://github.com/pichillilorenzo/flutter_inappwebview&hashtags=flutter,flutterio,dart,dartlang,webview) [![Share on Facebook](https://img.shields.io/badge/share-facebook-blue.svg?longCache=true&style=flat&colorB=%234267b2)](https://www.facebook.com/sharer/sharer.php?u=https%3A//github.com/pichillilorenzo/flutter_inappwebview)
-[![Pub](https://img.shields.io/pub/v/flutter_inappwebview.svg)](https://pub.dartlang.org/packages/flutter_inappwebview)
-[![pub points](https://badges.bar/flutter_inappwebview/pub%20points)](https://pub.dev/packages/flutter_inappwebview/score)
-[![popularity](https://badges.bar/flutter_inappwebview/popularity)](https://pub.dev/packages/flutter_inappwebview/score)
-[![likes](https://badges.bar/flutter_inappwebview/likes)](https://pub.dev/packages/flutter_inappwebview/score)
+![InAppWebView-logo](https://user-images.githubusercontent.com/5956938/195422744-bdcfed16-73f0-4bc9-94ab-ecf10771a1c4.png)
+
+
+[![All Contributors](https://img.shields.io/badge/all_contributors-58-orange.svg?style=flat-square)](#contributors-)
+
+
+[![Pub](https://img.shields.io/pub/v/flutter_inappwebview?include_prereleases)](https://pub.dartlang.org/packages/flutter_inappwebview)
+[![Pub Points](https://img.shields.io/pub/points/flutter_inappwebview)](https://pub.dev/packages/flutter_inappwebview/score)
+[![Pub Popularity](https://img.shields.io/pub/popularity/flutter_inappwebview)](https://pub.dev/packages/flutter_inappwebview/score)
+[![Pub Likes](https://img.shields.io/pub/likes/flutter_inappwebview)](https://pub.dev/packages/flutter_inappwebview/score)
[![Awesome Flutter](https://img.shields.io/badge/Awesome-Flutter-blue.svg?longCache=true&style=flat-square)](https://stackoverflow.com/questions/tagged/flutter-inappwebview)
[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](/LICENSE)
[![Donate to this project](https://img.shields.io/badge/support-donate-yellow.svg)](https://inappwebview.dev/donate/)
-[![GitHub contributors](https://img.shields.io/github/contributors/pichillilorenzo/flutter_inappwebview)](https://github.com/pichillilorenzo/flutter_inappwebview/graphs/contributors)
[![GitHub forks](https://img.shields.io/github/forks/pichillilorenzo/flutter_inappwebview?style=social)](https://github.com/pichillilorenzo/flutter_inappwebview)
[![GitHub stars](https://img.shields.io/github/stars/pichillilorenzo/flutter_inappwebview?style=social)](https://github.com/pichillilorenzo/flutter_inappwebview)
-
-![InAppWebView-logo](https://user-images.githubusercontent.com/5956938/110180687-8751f480-7e0a-11eb-89cc-d62f85c148cb.png)
-
A Flutter plugin that allows you to add an inline webview, to use an headless webview, and to open an in-app browser window.
+
+
## Articles/Resources
- [Official documentation: inappwebview.dev/docs](https://inappwebview.dev/docs/)
@@ -59,4 +65,99 @@ Add `flutter_inappwebview` as a [dependency in your pubspec.yaml file](https://f
## Support
-Did you find this plugin useful? Please consider to [make a donation](https://inappwebview.dev/donate/) to help improve it!
\ No newline at end of file
+Did you find this plugin useful? Please consider to [make a donation](https://inappwebview.dev/donate/) to help improve it!
+
+## Contributors ✨
+
+Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):
+
+
+
+
+
+
+
+
+
+
+
+This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!
diff --git a/android/build.gradle b/android/build.gradle
index a6642d58..f6bfa929 100755
--- a/android/build.gradle
+++ b/android/build.gradle
@@ -22,7 +22,7 @@ rootProject.allprojects {
apply plugin: 'com.android.library'
android {
- compileSdkVersion 31
+ compileSdkVersion 33
defaultConfig {
minSdkVersion 17
@@ -45,9 +45,9 @@ android {
}
}
dependencies {
- implementation 'androidx.webkit:webkit:1.4.0'
+ implementation 'androidx.webkit:webkit:1.5.0'
implementation 'androidx.browser:browser:1.4.0'
- implementation 'androidx.appcompat:appcompat:1.4.1'
+ implementation 'androidx.appcompat:appcompat:1.5.1'
implementation 'com.squareup.okhttp3:okhttp:3.14.9'
implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'
}
diff --git a/android/src/main/java/com/pichillilorenzo/flutter_inappwebview/ServiceWorkerManager.java b/android/src/main/java/com/pichillilorenzo/flutter_inappwebview/ServiceWorkerManager.java
index ac2a654f..b9ff2958 100755
--- a/android/src/main/java/com/pichillilorenzo/flutter_inappwebview/ServiceWorkerManager.java
+++ b/android/src/main/java/com/pichillilorenzo/flutter_inappwebview/ServiceWorkerManager.java
@@ -168,13 +168,7 @@ public class ServiceWorkerManager implements MethodChannel.MethodCallHandler {
}
private ServiceWorkerClientCompat dummyServiceWorkerClientCompat() {
- return new ServiceWorkerClientCompat() {
- @Nullable
- @Override
- public WebResourceResponse shouldInterceptRequest(@NonNull WebResourceRequest request) {
- return null;
- }
- };
+ return DummyServiceWorkerClientCompat.INSTANCE;
}
public void dispose() {
@@ -185,4 +179,14 @@ public class ServiceWorkerManager implements MethodChannel.MethodCallHandler {
}
plugin = null;
}
+
+ private static final class DummyServiceWorkerClientCompat extends ServiceWorkerClientCompat {
+ static final ServiceWorkerClientCompat INSTANCE = new DummyServiceWorkerClientCompat();
+
+ @Nullable
+ @Override
+ public WebResourceResponse shouldInterceptRequest(@NonNull WebResourceRequest request) {
+ return null;
+ }
+ }
}
diff --git a/android/src/main/java/com/pichillilorenzo/flutter_inappwebview/Util.java b/android/src/main/java/com/pichillilorenzo/flutter_inappwebview/Util.java
old mode 100755
new mode 100644
index 485297a1..d0618c05
--- a/android/src/main/java/com/pichillilorenzo/flutter_inappwebview/Util.java
+++ b/android/src/main/java/com/pichillilorenzo/flutter_inappwebview/Util.java
@@ -20,6 +20,8 @@ import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.FileInputStream;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
import java.net.Inet6Address;
import java.net.InetAddress;
import java.net.UnknownHostException;
@@ -30,7 +32,6 @@ import java.security.cert.Certificate;
import java.security.cert.CertificateException;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
-import java.util.ArrayList;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.List;
@@ -38,7 +39,6 @@ import java.util.Map;
import java.util.Objects;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
-import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.net.ssl.HostnameVerifier;
@@ -184,50 +184,12 @@ public class Util {
}
}
- public static OkHttpClient getUnsafeOkHttpClient() {
- try {
- // Create a trust manager that does not validate certificate chains
- final TrustManager[] trustAllCerts = new TrustManager[] {
- new X509TrustManager() {
- @Override
- public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException {
- }
-
- @Override
- public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException {
- }
-
- @Override
- public java.security.cert.X509Certificate[] getAcceptedIssuers() {
- return new java.security.cert.X509Certificate[]{};
- }
- }
- };
-
- // Install the all-trusting trust manager
- final SSLContext sslContext = SSLContext.getInstance("SSL");
- sslContext.init(null, trustAllCerts, new java.security.SecureRandom());
- // Create an ssl socket factory with our all-trusting manager
- final SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();
-
- OkHttpClient.Builder builder = new OkHttpClient.Builder();
- builder.sslSocketFactory(sslSocketFactory, (X509TrustManager)trustAllCerts[0]);
- builder.hostnameVerifier(new HostnameVerifier() {
- @Override
- public boolean verify(String hostname, SSLSession session) {
- return true;
- }
- });
-
- OkHttpClient okHttpClient = builder
- .connectTimeout(15, TimeUnit.SECONDS)
- .writeTimeout(15, TimeUnit.SECONDS)
- .readTimeout(15, TimeUnit.SECONDS)
- .build();
- return okHttpClient;
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
+ public static OkHttpClient getBasicOkHttpClient() {
+ return new OkHttpClient.Builder()
+ .connectTimeout(15, TimeUnit.SECONDS)
+ .writeTimeout(15, TimeUnit.SECONDS)
+ .readTimeout(15, TimeUnit.SECONDS)
+ .build();
}
/**
@@ -328,4 +290,21 @@ public class Util {
public static Object getOrDefault(Map map, String key, Object defaultValue) {
return map.containsKey(key) ? map.get(key) : defaultValue;
}
+
+ @Nullable
+ public static Object invokeMethodIfExists(final O o, final String methodName, Object... args) {
+ Method[] methods = o.getClass().getMethods();
+ for (Method method : methods) {
+ if (method.getName().equals(methodName)) {
+ try {
+ return method.invoke(o, args);
+ } catch (IllegalAccessException e) {
+ return null;
+ } catch (InvocationTargetException e) {
+ return null;
+ }
+ }
+ }
+ return null;
+ }
}
diff --git a/android/src/main/java/com/pichillilorenzo/flutter_inappwebview/chrome_custom_tabs/ActionBroadcastReceiver.java b/android/src/main/java/com/pichillilorenzo/flutter_inappwebview/chrome_custom_tabs/ActionBroadcastReceiver.java
index 1d3bb700..4e215e83 100644
--- a/android/src/main/java/com/pichillilorenzo/flutter_inappwebview/chrome_custom_tabs/ActionBroadcastReceiver.java
+++ b/android/src/main/java/com/pichillilorenzo/flutter_inappwebview/chrome_custom_tabs/ActionBroadcastReceiver.java
@@ -27,14 +27,16 @@ public class ActionBroadcastReceiver extends BroadcastReceiver {
String title = b.getString(KEY_URL_TITLE);
String managerId = b.getString(CHROME_MANAGER_ID);
- ChromeSafariBrowserManager manager = (ChromeSafariBrowserManager) ChromeSafariBrowserManager.shared.get(managerId);
-
- MethodChannel channel = new MethodChannel(manager.plugin.messenger, "com.pichillilorenzo/flutter_chromesafaribrowser_" + viewId);
- Map obj = new HashMap<>();
- obj.put("url", url);
- obj.put("title", title);
- obj.put("id", id);
- channel.invokeMethod("onChromeSafariBrowserItemActionPerform", obj);
+ if (managerId != null) {
+ ChromeSafariBrowserManager manager = (ChromeSafariBrowserManager) ChromeSafariBrowserManager.shared.get(managerId);
+ if (manager == null || manager.plugin == null|| manager.plugin.messenger == null) return;
+ MethodChannel channel = new MethodChannel(manager.plugin.messenger, "com.pichillilorenzo/flutter_chromesafaribrowser_" + viewId);
+ Map obj = new HashMap<>();
+ obj.put("url", url);
+ obj.put("title", title);
+ obj.put("id", id);
+ channel.invokeMethod("onChromeSafariBrowserItemActionPerform", obj);
+ }
}
}
}
diff --git a/android/src/main/java/com/pichillilorenzo/flutter_inappwebview/chrome_custom_tabs/ChromeCustomTabsActivity.java b/android/src/main/java/com/pichillilorenzo/flutter_inappwebview/chrome_custom_tabs/ChromeCustomTabsActivity.java
index 5533ddc9..7be959bf 100755
--- a/android/src/main/java/com/pichillilorenzo/flutter_inappwebview/chrome_custom_tabs/ChromeCustomTabsActivity.java
+++ b/android/src/main/java/com/pichillilorenzo/flutter_inappwebview/chrome_custom_tabs/ChromeCustomTabsActivity.java
@@ -190,8 +190,10 @@ public class ChromeCustomTabsActivity extends Activity implements MethodChannel.
builder.setInstantAppsEnabled(options.instantAppsEnabled);
for (CustomTabsMenuItem menuItem : menuItems) {
- builder.addMenuItem(menuItem.getLabel(),
- createPendingIntent(menuItem.getId()));
+ PendingIntent pendingIntent = createPendingIntent(menuItem.getId());
+ if (pendingIntent != null) {
+ builder.addMenuItem(menuItem.getLabel(), pendingIntent);
+ }
}
if (actionButton != null) {
@@ -201,9 +203,12 @@ public class ChromeCustomTabsActivity extends Activity implements MethodChannel.
Bitmap bmp = BitmapFactory.decodeByteArray(
data, 0, data.length, bitmapOptions
);
- builder.setActionButton(bmp, actionButton.getDescription(),
- createPendingIntent(actionButton.getId()),
- actionButton.isShouldTint());
+ PendingIntent pendingIntent = createPendingIntent(actionButton.getId());
+ if (pendingIntent != null) {
+ builder.setActionButton(bmp, actionButton.getDescription(),
+ pendingIntent,
+ actionButton.isShouldTint());
+ }
}
}
@@ -237,7 +242,9 @@ public class ChromeCustomTabsActivity extends Activity implements MethodChannel.
}
}
+ @Nullable
private PendingIntent createPendingIntent(int actionSourceId) {
+ if (manager == null) return null;
Intent actionIntent = new Intent(this, ActionBroadcastReceiver.class);
Bundle extras = new Bundle();
@@ -256,11 +263,15 @@ public class ChromeCustomTabsActivity extends Activity implements MethodChannel.
}
public void dispose() {
+ onStop();
+ onDestroy();
channel.setMethodCallHandler(null);
manager = null;
}
public void close() {
+ onStop();
+ onDestroy();
customTabsSession = null;
finish();
Map obj = new HashMap<>();
diff --git a/android/src/main/java/com/pichillilorenzo/flutter_inappwebview/chrome_custom_tabs/CustomTabsHelper.java b/android/src/main/java/com/pichillilorenzo/flutter_inappwebview/chrome_custom_tabs/CustomTabsHelper.java
index c3f0198d..f49e3470 100755
--- a/android/src/main/java/com/pichillilorenzo/flutter_inappwebview/chrome_custom_tabs/CustomTabsHelper.java
+++ b/android/src/main/java/com/pichillilorenzo/flutter_inappwebview/chrome_custom_tabs/CustomTabsHelper.java
@@ -6,6 +6,7 @@ import android.content.IntentFilter;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.net.Uri;
+import android.os.Build;
import android.text.TextUtils;
import android.util.Log;
@@ -52,6 +53,7 @@ public class CustomTabsHelper {
PackageManager pm = context.getPackageManager();
// Get default VIEW intent handler.
Intent activityIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.example.com"));
+ activityIntent.addCategory(Intent.CATEGORY_BROWSABLE);
ResolveInfo defaultViewHandlerInfo = pm.resolveActivity(activityIntent, 0);
String defaultViewHandlerPackageName = null;
if (defaultViewHandlerInfo != null) {
@@ -59,7 +61,11 @@ public class CustomTabsHelper {
}
// Get all apps that can handle VIEW intents.
- List resolvedActivityList = pm.queryIntentActivities(activityIntent, 0);
+ int flags = 0;
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+ flags |= PackageManager.MATCH_ALL;
+ }
+ List resolvedActivityList = pm.queryIntentActivities(activityIntent, flags);
List packagesSupportingCustomTabs = new ArrayList<>();
for (ResolveInfo info : resolvedActivityList) {
Intent serviceIntent = new Intent();
diff --git a/android/src/main/java/com/pichillilorenzo/flutter_inappwebview/content_blocker/ContentBlockerHandler.java b/android/src/main/java/com/pichillilorenzo/flutter_inappwebview/content_blocker/ContentBlockerHandler.java
index 3b9e279b..78cdfcbb 100755
--- a/android/src/main/java/com/pichillilorenzo/flutter_inappwebview/content_blocker/ContentBlockerHandler.java
+++ b/android/src/main/java/com/pichillilorenzo/flutter_inappwebview/content_blocker/ContentBlockerHandler.java
@@ -2,7 +2,6 @@ package com.pichillilorenzo.flutter_inappwebview.content_blocker;
import android.os.Build;
import android.os.Handler;
-import android.os.Looper;
import android.util.Log;
import android.webkit.WebResourceResponse;
@@ -21,6 +20,8 @@ import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.CountDownLatch;
import java.util.regex.Matcher;
+import javax.net.ssl.SSLHandshakeException;
+
import okhttp3.Request;
import okhttp3.Response;
@@ -181,7 +182,7 @@ public class ContentBlockerHandler {
Response response = null;
try {
- response = Util.getUnsafeOkHttpClient().newCall(mRequest).execute();
+ response = Util.getBasicOkHttpClient().newCall(mRequest).execute();
byte[] dataBytes = response.body().bytes();
InputStream dataStream = new ByteArrayInputStream(dataBytes);
@@ -198,12 +199,14 @@ public class ContentBlockerHandler {
return new WebResourceResponse(contentType, encoding, dataStream);
} catch (Exception e) {
- e.printStackTrace();
if (response != null) {
response.body().close();
response.close();
}
- Log.e(LOG_TAG, e.getMessage());
+ if (!(e instanceof SSLHandshakeException)) {
+ e.printStackTrace();
+ Log.e(LOG_TAG, e.getMessage());
+ }
}
}
break;
@@ -231,7 +234,7 @@ public class ContentBlockerHandler {
Request mRequest = new Request.Builder().url(url).head().build();
Response response = null;
try {
- response = Util.getUnsafeOkHttpClient().newCall(mRequest).execute();
+ response = Util.getBasicOkHttpClient().newCall(mRequest).execute();
if (response.header("content-type") != null) {
String[] contentTypeSplitted = response.header("content-type").split(";");
@@ -251,8 +254,10 @@ public class ContentBlockerHandler {
response.body().close();
response.close();
}
- e.printStackTrace();
- Log.e(LOG_TAG, e.getMessage());
+ if (!(e instanceof SSLHandshakeException)) {
+ e.printStackTrace();
+ Log.e(LOG_TAG, e.getMessage());
+ }
}
}
return responseResourceType;
diff --git a/android/src/main/java/com/pichillilorenzo/flutter_inappwebview/in_app_webview/InAppWebView.java b/android/src/main/java/com/pichillilorenzo/flutter_inappwebview/in_app_webview/InAppWebView.java
index a1951e6b..f061381c 100755
--- a/android/src/main/java/com/pichillilorenzo/flutter_inappwebview/in_app_webview/InAppWebView.java
+++ b/android/src/main/java/com/pichillilorenzo/flutter_inappwebview/in_app_webview/InAppWebView.java
@@ -276,8 +276,11 @@ final public class InAppWebView extends InputAwareWebView implements InAppWebVie
settings.setAllowFileAccessFromFileURLs(options.allowFileAccessFromFileURLs);
settings.setAllowUniversalAccessFromFileURLs(options.allowUniversalAccessFromFileURLs);
setCacheEnabled(options.cacheEnabled);
- if (options.appCachePath != null && !options.appCachePath.isEmpty() && options.cacheEnabled)
- settings.setAppCachePath(options.appCachePath);
+ if (options.appCachePath != null && !options.appCachePath.isEmpty() && options.cacheEnabled) {
+ // removed from Android API 33+ (https://developer.android.com/sdk/api_diff/33/changes)
+ // settings.setAppCachePath(options.appCachePath);
+ Util.invokeMethodIfExists(settings, "setAppCachePath", options.appCachePath);
+ }
settings.setBlockNetworkImage(options.blockNetworkImage);
settings.setBlockNetworkLoads(options.blockNetworkLoads);
if (options.cacheMode != null)
@@ -357,10 +360,6 @@ final public class InAppWebView extends InputAwareWebView implements InAppWebVie
setRendererPriorityPolicy(
(int) options.rendererPriorityPolicy.get("rendererRequestedPriority"),
(boolean) options.rendererPriorityPolicy.get("waivedWhenNotVisible"));
- } else if ((options.rendererPriorityPolicy == null || (options.rendererPriorityPolicy != null && options.rendererPriorityPolicy.isEmpty())) &&
- Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
- options.rendererPriorityPolicy.put("rendererRequestedPriority", getRendererRequestedPriority());
- options.rendererPriorityPolicy.put("waivedWhenNotVisible", getRendererPriorityWaivedWhenNotVisible());
}
contentBlockerHandler.getRuleList().clear();
@@ -491,7 +490,11 @@ final public class InAppWebView extends InputAwareWebView implements InAppWebVie
// Disable caching
settings.setCacheMode(WebSettings.LOAD_NO_CACHE);
- settings.setAppCacheEnabled(false);
+
+ // removed from Android API 33+ (https://developer.android.com/sdk/api_diff/33/changes)
+ // settings.setAppCacheEnabled(false);
+ Util.invokeMethodIfExists(settings, "setAppCacheEnabled", false);
+
clearHistory();
clearCache(true);
@@ -501,7 +504,11 @@ final public class InAppWebView extends InputAwareWebView implements InAppWebVie
settings.setSaveFormData(false);
} else {
settings.setCacheMode(WebSettings.LOAD_DEFAULT);
- settings.setAppCacheEnabled(true);
+
+ // removed from Android API 33+ (https://developer.android.com/sdk/api_diff/33/changes)
+ // settings.setAppCacheEnabled(true);
+ Util.invokeMethodIfExists(settings, "setAppCacheEnabled", true);
+
settings.setSavePassword(true);
settings.setSaveFormData(true);
}
@@ -512,13 +519,22 @@ final public class InAppWebView extends InputAwareWebView implements InAppWebVie
if (enabled) {
Context ctx = getContext();
if (ctx != null) {
- settings.setAppCachePath(ctx.getCacheDir().getAbsolutePath());
+ // removed from Android API 33+ (https://developer.android.com/sdk/api_diff/33/changes)
+ // settings.setAppCachePath(ctx.getCacheDir().getAbsolutePath());
+ Util.invokeMethodIfExists(settings, "setAppCachePath", ctx.getCacheDir().getAbsolutePath());
+
settings.setCacheMode(WebSettings.LOAD_DEFAULT);
- settings.setAppCacheEnabled(true);
+
+ // removed from Android API 33+ (https://developer.android.com/sdk/api_diff/33/changes)
+ // settings.setAppCacheEnabled(true);
+ Util.invokeMethodIfExists(settings, "setAppCacheEnabled", true);
}
} else {
settings.setCacheMode(WebSettings.LOAD_NO_CACHE);
- settings.setAppCacheEnabled(false);
+
+ // removed from Android API 33+ (https://developer.android.com/sdk/api_diff/33/changes)
+ // settings.setAppCacheEnabled(false);
+ Util.invokeMethodIfExists(settings, "setAppCacheEnabled", false);
}
}
@@ -763,8 +779,11 @@ final public class InAppWebView extends InputAwareWebView implements InAppWebVie
if (newOptionsMap.get("cacheEnabled") != null && options.cacheEnabled != newOptions.cacheEnabled)
setCacheEnabled(newOptions.cacheEnabled);
- if (newOptionsMap.get("appCachePath") != null && (options.appCachePath == null || !options.appCachePath.equals(newOptions.appCachePath)))
- settings.setAppCachePath(newOptions.appCachePath);
+ if (newOptionsMap.get("appCachePath") != null && (options.appCachePath == null || !options.appCachePath.equals(newOptions.appCachePath))) {
+ // removed from Android API 33+ (https://developer.android.com/sdk/api_diff/33/changes)
+ // settings.setAppCachePath(newOptions.appCachePath);
+ Util.invokeMethodIfExists(settings, "setAppCachePath", newOptions.appCachePath);
+ }
if (newOptionsMap.get("blockNetworkImage") != null && options.blockNetworkImage != newOptions.blockNetworkImage)
settings.setBlockNetworkImage(newOptions.blockNetworkImage);
@@ -916,9 +935,9 @@ final public class InAppWebView extends InputAwareWebView implements InAppWebVie
if (newOptionsMap.get("networkAvailable") != null && options.networkAvailable != newOptions.networkAvailable)
setNetworkAvailable(newOptions.networkAvailable);
- if (newOptionsMap.get("rendererPriorityPolicy") != null &&
+ if (newOptionsMap.get("rendererPriorityPolicy") != null && (options.rendererPriorityPolicy == null ||
(options.rendererPriorityPolicy.get("rendererRequestedPriority") != newOptions.rendererPriorityPolicy.get("rendererRequestedPriority") ||
- options.rendererPriorityPolicy.get("waivedWhenNotVisible") != newOptions.rendererPriorityPolicy.get("waivedWhenNotVisible")) &&
+ options.rendererPriorityPolicy.get("waivedWhenNotVisible") != newOptions.rendererPriorityPolicy.get("waivedWhenNotVisible"))) &&
Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
setRendererPriorityPolicy(
(int) newOptions.rendererPriorityPolicy.get("rendererRequestedPriority"),
diff --git a/android/src/main/java/com/pichillilorenzo/flutter_inappwebview/in_app_webview/InAppWebViewChromeClient.java b/android/src/main/java/com/pichillilorenzo/flutter_inappwebview/in_app_webview/InAppWebViewChromeClient.java
index 0cb92643..67f3eef9 100755
--- a/android/src/main/java/com/pichillilorenzo/flutter_inappwebview/in_app_webview/InAppWebViewChromeClient.java
+++ b/android/src/main/java/com/pichillilorenzo/flutter_inappwebview/in_app_webview/InAppWebViewChromeClient.java
@@ -780,15 +780,15 @@ public class InAppWebViewChromeClient extends WebChromeClient implements PluginR
}
protected void openFileChooser(ValueCallback filePathCallback, String acceptType) {
- startPhotoPickerIntent(filePathCallback, acceptType);
+ startPickerIntent(filePathCallback, acceptType, null);
}
protected void openFileChooser(ValueCallback filePathCallback) {
- startPhotoPickerIntent(filePathCallback, "");
+ startPickerIntent(filePathCallback, "", null);
}
protected void openFileChooser(ValueCallback filePathCallback, String acceptType, String capture) {
- startPhotoPickerIntent(filePathCallback, acceptType);
+ startPickerIntent(filePathCallback, acceptType, capture);
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
@@ -796,8 +796,8 @@ public class InAppWebViewChromeClient extends WebChromeClient implements PluginR
public boolean onShowFileChooser(WebView webView, ValueCallback filePathCallback, FileChooserParams fileChooserParams) {
String[] acceptTypes = fileChooserParams.getAcceptTypes();
boolean allowMultiple = fileChooserParams.getMode() == WebChromeClient.FileChooserParams.MODE_OPEN_MULTIPLE;
- Intent intent = fileChooserParams.createIntent();
- return startPhotoPickerIntent(filePathCallback, intent, acceptTypes, allowMultiple);
+ boolean captureEnabled = fileChooserParams.isCaptureEnabled();
+ return startPickerIntent(filePathCallback, acceptTypes, allowMultiple, captureEnabled);
}
@Override
@@ -898,58 +898,89 @@ public class InAppWebViewChromeClient extends WebChromeClient implements PluginR
return null;
}
- public void startPhotoPickerIntent(ValueCallback filePathCallback, String acceptType) {
+ public void startPickerIntent(ValueCallback filePathCallback, String acceptType, @Nullable String capture) {
InAppWebViewFlutterPlugin.filePathCallbackLegacy = filePathCallback;
- Intent fileChooserIntent = getFileChooserIntent(acceptType);
- Intent chooserIntent = Intent.createChooser(fileChooserIntent, "");
+ boolean images = acceptsImages(acceptType);
+ boolean video = acceptsVideo(acceptType);
- ArrayList extraIntents = new ArrayList<>();
- if (acceptsImages(acceptType)) {
- extraIntents.add(getPhotoIntent());
+ Intent pickerIntent = null;
+
+ if (capture != null) {
+ if (!needsCameraPermission()) {
+ if (images) {
+ pickerIntent = getPhotoIntent();
+ }
+ else if (video) {
+ pickerIntent = getVideoIntent();
+ }
+ }
}
- if (acceptsVideo(acceptType)) {
- extraIntents.add(getVideoIntent());
+ if (pickerIntent == null) {
+ Intent fileChooserIntent = getFileChooserIntent(acceptType);
+ pickerIntent = Intent.createChooser(fileChooserIntent, "");
+
+ ArrayList extraIntents = new ArrayList<>();
+ if (!needsCameraPermission()) {
+ if (images) {
+ extraIntents.add(getPhotoIntent());
+ }
+ if (video) {
+ extraIntents.add(getVideoIntent());
+ }
+ }
+ pickerIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, extraIntents.toArray(new Parcelable[]{}));
}
- chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, extraIntents.toArray(new Parcelable[]{}));
Activity activity = getActivity();
- if (activity == null) {
- return;
- }
- if (chooserIntent.resolveActivity(activity.getPackageManager()) != null) {
- activity.startActivityForResult(chooserIntent, PICKER_LEGACY);
+ if (activity != null && pickerIntent.resolveActivity(activity.getPackageManager()) != null) {
+ activity.startActivityForResult(pickerIntent, PICKER_LEGACY);
} else {
Log.d(LOG_TAG, "there is no Activity to handle this Intent");
}
}
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
- public boolean startPhotoPickerIntent(final ValueCallback callback, final Intent intent, final String[] acceptTypes, final boolean allowMultiple) {
+ public boolean startPickerIntent(final ValueCallback callback, final String[] acceptTypes,
+ final boolean allowMultiple, final boolean captureEnabled) {
InAppWebViewFlutterPlugin.filePathCallback = callback;
- ArrayList extraIntents = new ArrayList<>();
- if (!needsCameraPermission()) {
- if (acceptsImages(acceptTypes)) {
- extraIntents.add(getPhotoIntent());
- }
- if (acceptsVideo(acceptTypes)) {
- extraIntents.add(getVideoIntent());
+ boolean images = acceptsImages(acceptTypes);
+ boolean video = acceptsVideo(acceptTypes);
+
+ Intent pickerIntent = null;
+
+ if (captureEnabled) {
+ if (!needsCameraPermission()) {
+ if (images) {
+ pickerIntent = getPhotoIntent();
+ }
+ else if (video) {
+ pickerIntent = getVideoIntent();
+ }
}
}
+ if (pickerIntent == null) {
+ ArrayList extraIntents = new ArrayList<>();
+ if (!needsCameraPermission()) {
+ if (images) {
+ extraIntents.add(getPhotoIntent());
+ }
+ if (video) {
+ extraIntents.add(getVideoIntent());
+ }
+ }
- Intent fileSelectionIntent = getFileChooserIntent(acceptTypes, allowMultiple);
+ Intent fileSelectionIntent = getFileChooserIntent(acceptTypes, allowMultiple);
- Intent chooserIntent = new Intent(Intent.ACTION_CHOOSER);
- chooserIntent.putExtra(Intent.EXTRA_INTENT, fileSelectionIntent);
- chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, extraIntents.toArray(new Parcelable[]{}));
+ pickerIntent = new Intent(Intent.ACTION_CHOOSER);
+ pickerIntent.putExtra(Intent.EXTRA_INTENT, fileSelectionIntent);
+ pickerIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, extraIntents.toArray(new Parcelable[]{}));
+ }
Activity activity = getActivity();
- if (activity == null) {
- return true;
- }
- if (chooserIntent.resolveActivity(activity.getPackageManager()) != null) {
- activity.startActivityForResult(chooserIntent, PICKER);
+ if (activity != null && pickerIntent.resolveActivity(activity.getPackageManager()) != null) {
+ activity.startActivityForResult(pickerIntent, PICKER);
} else {
Log.d(LOG_TAG, "there is no Activity to handle this Intent");
}
diff --git a/android/src/main/java/com/pichillilorenzo/flutter_inappwebview/in_app_webview/InAppWebViewClient.java b/android/src/main/java/com/pichillilorenzo/flutter_inappwebview/in_app_webview/InAppWebViewClient.java
index 68d0e0b0..59aadaac 100755
--- a/android/src/main/java/com/pichillilorenzo/flutter_inappwebview/in_app_webview/InAppWebViewClient.java
+++ b/android/src/main/java/com/pichillilorenzo/flutter_inappwebview/in_app_webview/InAppWebViewClient.java
@@ -328,32 +328,22 @@ public class InAppWebViewClient extends WebViewClient {
@Override
public void onReceivedHttpAuthRequest(final WebView view, final HttpAuthHandler handler, final String host, final String realm) {
-
- URI uri;
- try {
- uri = new URI(view.getUrl());
- } catch (URISyntaxException e) {
- e.printStackTrace();
-
- credentialsProposed = null;
- previousAuthRequestFailureCount = 0;
-
- handler.cancel();
- return;
+ final String url = view.getUrl();
+ String protocol = "https";
+ int port = 0;
+
+ if (url != null) {
+ try {
+ URI uri = new URI(url);
+ protocol = uri.getScheme();
+ port = uri.getPort();
+ } catch (URISyntaxException e) {
+ e.printStackTrace();
+ }
}
- final String protocol = uri.getScheme();
- final int port = uri.getPort();
-
previousAuthRequestFailureCount++;
- Map obj = new HashMap<>();
- obj.put("host", host);
- obj.put("protocol", protocol);
- obj.put("realm", realm);
- obj.put("port", port);
- obj.put("previousFailureCount", previousAuthRequestFailureCount);
-
if (credentialsProposed == null)
credentialsProposed = CredentialDatabase.getInstance(view.getContext()).getHttpAuthCredentials(host, protocol, realm, port);
@@ -365,6 +355,8 @@ public class InAppWebViewClient extends WebViewClient {
URLProtectionSpace protectionSpace = new URLProtectionSpace(host, protocol, realm, port, view.getCertificate(), null);
HttpAuthenticationChallenge challenge = new HttpAuthenticationChallenge(protectionSpace, previousAuthRequestFailureCount, credentialProposed);
+ final String finalProtocol = protocol;
+ final int finalPort = port;
channel.invokeMethod("onReceivedHttpAuthRequest", challenge.toMap(), new MethodChannel.Result() {
@Override
public void success(Object response) {
@@ -378,7 +370,7 @@ public class InAppWebViewClient extends WebViewClient {
String password = (String) responseMap.get("password");
Boolean permanentPersistence = (Boolean) responseMap.get("permanentPersistence");
if (permanentPersistence != null && permanentPersistence) {
- CredentialDatabase.getInstance(view.getContext()).setHttpAuthCredential(host, protocol, realm, port, username, password);
+ CredentialDatabase.getInstance(view.getContext()).setHttpAuthCredential(host, finalProtocol, realm, finalPort, username, password);
}
handler.proceed(username, password);
return;
@@ -419,20 +411,21 @@ public class InAppWebViewClient extends WebViewClient {
@Override
public void onReceivedSslError(final WebView view, final SslErrorHandler handler, final SslError sslError) {
- URI uri;
+ final String url = sslError.getUrl();
+ String host = "";
+ String protocol = "https";
+ final String realm = null;
+ int port = 0;
+
try {
- uri = new URI(sslError.getUrl());
+ URI uri = new URI(url);
+ host = uri.getHost();
+ protocol = uri.getScheme();
+ port = uri.getPort();
} catch (URISyntaxException e) {
e.printStackTrace();
- handler.cancel();
- return;
}
- final String host = uri.getHost();
- final String protocol = uri.getScheme();
- final String realm = null;
- final int port = uri.getPort();
-
URLProtectionSpace protectionSpace = new URLProtectionSpace(host, protocol, realm, port, sslError.getCertificate(), sslError);
ServerTrustChallenge challenge = new ServerTrustChallenge(protectionSpace);
@@ -473,23 +466,21 @@ public class InAppWebViewClient extends WebViewClient {
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
@Override
public void onReceivedClientCertRequest(final WebView view, final ClientCertRequest request) {
-
- InAppWebView webView = (InAppWebView) view;
-
- URI uri;
- try {
- uri = new URI(view.getUrl());
- } catch (URISyntaxException e) {
- e.printStackTrace();
- request.cancel();
- return;
- }
-
+ final String url = view.getUrl();
final String host = request.getHost();
- final String protocol = uri.getScheme();
+ String protocol = "https";
final String realm = null;
final int port = request.getPort();
+ if (url != null) {
+ try {
+ URI uri = new URI(url);
+ protocol = uri.getScheme();
+ } catch (URISyntaxException e) {
+ e.printStackTrace();
+ }
+ }
+
URLProtectionSpace protectionSpace = new URLProtectionSpace(host, protocol, realm, port, view.getCertificate(), null);
ClientCertChallenge challenge = new ClientCertChallenge(protectionSpace, request.getPrincipals(), request.getKeyTypes());
diff --git a/android/src/main/java/com/pichillilorenzo/flutter_inappwebview/in_app_webview/InAppWebViewOptions.java b/android/src/main/java/com/pichillilorenzo/flutter_inappwebview/in_app_webview/InAppWebViewOptions.java
index 21917383..1418af9b 100755
--- a/android/src/main/java/com/pichillilorenzo/flutter_inappwebview/in_app_webview/InAppWebViewOptions.java
+++ b/android/src/main/java/com/pichillilorenzo/flutter_inappwebview/in_app_webview/InAppWebViewOptions.java
@@ -95,7 +95,8 @@ public class InAppWebViewOptions implements Options {
public Integer scrollBarDefaultDelayBeforeFade = null;
public Boolean scrollbarFadingEnabled = true;
public Integer scrollBarFadeDuration = null;
- public Map rendererPriorityPolicy = new HashMap<>();
+ @Nullable
+ public Map rendererPriorityPolicy = null;
public Boolean useShouldInterceptRequest = false;
public Boolean useOnRenderProcessGone = false;
public Boolean disableDefaultErrorPage = false;
diff --git a/android/src/main/java/com/pichillilorenzo/flutter_inappwebview/plugin_scripts_js/JavaScriptBridgeJS.java b/android/src/main/java/com/pichillilorenzo/flutter_inappwebview/plugin_scripts_js/JavaScriptBridgeJS.java
index 565a6120..8187edc1 100644
--- a/android/src/main/java/com/pichillilorenzo/flutter_inappwebview/plugin_scripts_js/JavaScriptBridgeJS.java
+++ b/android/src/main/java/com/pichillilorenzo/flutter_inappwebview/plugin_scripts_js/JavaScriptBridgeJS.java
@@ -147,7 +147,8 @@ public class JavaScriptBridgeJS {
" });" +
" }," +
" arrayBufferToString: function(arrayBuffer) {" +
- " return String.fromCharCode.apply(String, arrayBuffer);" +
+ " var uint8Array = new Uint8Array(arrayBuffer);" +
+ " return uint8Array.reduce(function(acc, i) { return acc += String.fromCharCode.apply(null, [i]); }, '');" +
" }," +
" isBodyFormData: function(bodyString) {" +
" return bodyString.indexOf('------WebKitFormBoundary') >= 0;" +
diff --git a/android/src/main/java/com/pichillilorenzo/flutter_inappwebview/pull_to_refresh/PullToRefreshLayout.java b/android/src/main/java/com/pichillilorenzo/flutter_inappwebview/pull_to_refresh/PullToRefreshLayout.java
index 0d009a4d..5db895b6 100644
--- a/android/src/main/java/com/pichillilorenzo/flutter_inappwebview/pull_to_refresh/PullToRefreshLayout.java
+++ b/android/src/main/java/com/pichillilorenzo/flutter_inappwebview/pull_to_refresh/PullToRefreshLayout.java
@@ -94,6 +94,7 @@ public class PullToRefreshLayout extends SwipeRefreshLayout implements MethodCha
case "setEnabled":
{
Boolean enabled = (Boolean) call.argument("enabled");
+ options.enabled = enabled; // used by InAppWebView.onOverScrolled
setEnabled(enabled);
}
result.success(true);
diff --git a/example/android/app/build.gradle b/example/android/app/build.gradle
index de44914a..4b28f2e2 100755
--- a/example/android/app/build.gradle
+++ b/example/android/app/build.gradle
@@ -30,7 +30,7 @@ android {
targetCompatibility 1.8
}
- compileSdkVersion 31
+ compileSdkVersion 33
lintOptions {
disable 'InvalidPackage'
@@ -40,7 +40,7 @@ android {
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
applicationId "com.pichillilorenzo.flutter_inappwebviewexample"
minSdkVersion 17
- targetSdkVersion 31
+ targetSdkVersion 33
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
@@ -64,6 +64,6 @@ dependencies {
testImplementation 'junit:junit:4.13'
androidTestImplementation 'androidx.test:runner:1.2.0'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
- implementation 'com.google.android.material:material:1.3.0'
+ implementation 'com.google.android.material:material:1.6.1'
implementation 'com.android.support:multidex:1.0.3'
}
diff --git a/example/integration_test/webview_flutter_test.dart b/example/integration_test/webview_flutter_test.dart
index 9b62063f..e73e1397 100644
--- a/example/integration_test/webview_flutter_test.dart
+++ b/example/integration_test/webview_flutter_test.dart
@@ -5495,7 +5495,7 @@ setTimeout(function() {
child: InAppWebView(
key: GlobalKey(),
initialUrlRequest:
- URLRequest(url: Uri.parse('https://mdn.github.io/sw-test/')),
+ URLRequest(url: Uri.parse('https://mdn.github.io/dom-examples/service-worker/simple-service-worker/')),
),
),
);
@@ -5524,7 +5524,7 @@ setTimeout(function() {
child: InAppWebView(
key: GlobalKey(),
initialUrlRequest:
- URLRequest(url: Uri.parse('https://mdn.github.io/sw-test/')),
+ URLRequest(url: Uri.parse('https://mdn.github.io/dom-examples/service-worker/simple-service-worker/')),
onLoadStop: (controller, url) {
pageLoaded.complete(url!.toString());
},
@@ -5533,7 +5533,7 @@ setTimeout(function() {
);
final String url = await pageLoaded.future;
- expect(url, "https://mdn.github.io/sw-test/");
+ expect(url, "https://mdn.github.io/dom-examples/service-worker/simple-service-worker/");
}, skip: !Platform.isAndroid);
});
diff --git a/example/ios/Flutter/AppFrameworkInfo.plist b/example/ios/Flutter/AppFrameworkInfo.plist
index 8d4492f9..9625e105 100755
--- a/example/ios/Flutter/AppFrameworkInfo.plist
+++ b/example/ios/Flutter/AppFrameworkInfo.plist
@@ -21,6 +21,6 @@
CFBundleVersion
1.0
MinimumOSVersion
- 9.0
+ 11.0
diff --git a/example/ios/Flutter/Flutter.podspec b/example/ios/Flutter/Flutter.podspec
index 663d5b29..8ce43943 100644
--- a/example/ios/Flutter/Flutter.podspec
+++ b/example/ios/Flutter/Flutter.podspec
@@ -6,12 +6,12 @@
Pod::Spec.new do |s|
s.name = 'Flutter'
s.version = '1.0.0'
- s.summary = 'High-performance, high-fidelity mobile apps.'
- s.homepage = 'https://flutter.io'
- s.license = { :type => 'MIT' }
+ s.summary = 'A UI toolkit for beautiful and fast apps.'
+ s.homepage = 'https://flutter.dev'
+ s.license = { :type => 'BSD' }
s.author = { 'Flutter Dev Team' => 'flutter-dev@googlegroups.com' }
s.source = { :git => 'https://github.com/flutter/engine', :tag => s.version.to_s }
- s.ios.deployment_target = '9.0'
+ s.ios.deployment_target = '11.0'
# Framework linking is handled by Flutter tooling, not CocoaPods.
# Add a placeholder to satisfy `s.dependency 'Flutter'` plugin podspecs.
s.vendored_frameworks = 'path/to/nothing'
diff --git a/example/ios/Flutter/flutter_export_environment.sh b/example/ios/Flutter/flutter_export_environment.sh
index de544d92..fdf299a5 100755
--- a/example/ios/Flutter/flutter_export_environment.sh
+++ b/example/ios/Flutter/flutter_export_environment.sh
@@ -3,11 +3,11 @@
export "FLUTTER_ROOT=/Users/lorenzopichilli/fvm/versions/2.10.4"
export "FLUTTER_APPLICATION_PATH=/Users/lorenzopichilli/flutter_inappwebview_v5/example"
export "COCOAPODS_PARALLEL_CODE_SIGN=true"
-export "FLUTTER_TARGET=integration_test/webview_flutter_test.dart"
+export "FLUTTER_TARGET=/Users/lorenzopichilli/flutter_inappwebview_v5/example/lib/main.dart"
export "FLUTTER_BUILD_DIR=build"
export "FLUTTER_BUILD_NAME=1.0.0"
export "FLUTTER_BUILD_NUMBER=1"
-export "DART_DEFINES=RkxVVFRFUl9XRUJfQVVUT19ERVRFQ1Q9dHJ1ZQ=="
+export "DART_DEFINES=Zmx1dHRlci5pbnNwZWN0b3Iuc3RydWN0dXJlZEVycm9ycz10cnVl,RkxVVFRFUl9XRUJfQVVUT19ERVRFQ1Q9dHJ1ZQ=="
export "DART_OBFUSCATION=false"
export "TRACK_WIDGET_CREATION=true"
export "TREE_SHAKE_ICONS=false"
diff --git a/example/ios/Podfile b/example/ios/Podfile
index 1e8c3c90..88359b22 100644
--- a/example/ios/Podfile
+++ b/example/ios/Podfile
@@ -1,5 +1,5 @@
# Uncomment this line to define a global platform for your project
-# platform :ios, '9.0'
+# platform :ios, '11.0'
# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
ENV['COCOAPODS_DISABLE_STATS'] = 'true'
diff --git a/example/ios/Runner.xcodeproj/project.pbxproj b/example/ios/Runner.xcodeproj/project.pbxproj
index da4b6637..95663621 100644
--- a/example/ios/Runner.xcodeproj/project.pbxproj
+++ b/example/ios/Runner.xcodeproj/project.pbxproj
@@ -375,7 +375,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 9.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 11.0;
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
@@ -427,7 +427,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 9.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 11.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
diff --git a/example/ios/Runner/Info.plist b/example/ios/Runner/Info.plist
index d78c9615..d13650c0 100755
--- a/example/ios/Runner/Info.plist
+++ b/example/ios/Runner/Info.plist
@@ -2,6 +2,8 @@
+ CADisableMinimumFrameDurationOnPhone
+
CFBundleDevelopmentRegion
en
CFBundleExecutable
diff --git a/example/lib/in_app_webiew_example.screen.dart b/example/lib/in_app_webiew_example.screen.dart
index b656d6fe..a42b9b45 100755
--- a/example/lib/in_app_webiew_example.screen.dart
+++ b/example/lib/in_app_webiew_example.screen.dart
@@ -151,10 +151,10 @@ class _InAppWebViewExampleScreenState extends State {
"javascript",
"about"
].contains(uri.scheme)) {
- if (await canLaunch(url)) {
+ if (await canLaunchUrl(uri)) {
// Launch the App
- await launch(
- url,
+ await launchUrl(
+ uri,
);
// and cancel the request
return NavigationActionPolicy.CANCEL;
diff --git a/example/pubspec.yaml b/example/pubspec.yaml
index 7789db22..9ddc5ce6 100755
--- a/example/pubspec.yaml
+++ b/example/pubspec.yaml
@@ -24,7 +24,7 @@ dependencies:
cupertino_icons: ^1.0.4
flutter_downloader: ^1.7.3
path_provider: ^2.0.9
- permission_handler: ^9.2.0
+ permission_handler: ^10.0.2
url_launcher: ^6.0.20
# connectivity: ^0.4.5+6
flutter_inappwebview:
diff --git a/example/test_assets/certificate.pfx b/example/test_assets/certificate.pfx
index 3225678f..6e362107 100755
Binary files a/example/test_assets/certificate.pfx and b/example/test_assets/certificate.pfx differ
diff --git a/ios/Classes/InAppWebViewMethodHandler.swift b/ios/Classes/InAppWebViewMethodHandler.swift
index fe45528d..a908a9a0 100644
--- a/ios/Classes/InAppWebViewMethodHandler.swift
+++ b/ios/Classes/InAppWebViewMethodHandler.swift
@@ -417,7 +417,7 @@ public class InAppWebViewMethodHandler: FlutterMethodCallDelegate {
break
case "callAsyncJavaScript":
if let webView = webView, #available(iOS 10.3, *) {
- if #available(iOS 14.0, *) {
+ if #available(iOS 14.3, *) { // on iOS 14.0, for some reason, it crashes
let functionBody = arguments!["functionBody"] as! String
let functionArguments = arguments!["arguments"] as! [String:Any]
var contentWorld = WKContentWorld.page
diff --git a/ios/Classes/PluginScriptsJS/FindTextHighlightJS.swift b/ios/Classes/PluginScriptsJS/FindTextHighlightJS.swift
index ac93adf0..a61a05b7 100644
--- a/ios/Classes/PluginScriptsJS/FindTextHighlightJS.swift
+++ b/ios/Classes/PluginScriptsJS/FindTextHighlightJS.swift
@@ -42,7 +42,7 @@ window.\(JAVASCRIPT_BRIDGE_NAME)._findAllAsyncForElement = function(element, key
span.setAttribute(
"id",
- "WKWEBVIEW_SEARCH_WORD_" + \(FIND_TEXT_HIGHLIGHT_SEARCH_RESULT_COUNT_JS_SOURCE)
+ "\(JAVASCRIPT_BRIDGE_NAME)_SEARCH_WORD_" + \(FIND_TEXT_HIGHLIGHT_SEARCH_RESULT_COUNT_JS_SOURCE)
);
span.setAttribute("class", "\(JAVASCRIPT_BRIDGE_NAME)_Highlight");
var backgroundColor = \(FIND_TEXT_HIGHLIGHT_SEARCH_RESULT_COUNT_JS_SOURCE) == 0 ? "#FF9732" : "#FFFF00";
diff --git a/ios/Classes/PluginScriptsJS/JavaScriptBridgeJS.swift b/ios/Classes/PluginScriptsJS/JavaScriptBridgeJS.swift
index 9aa6334d..cddca764 100644
--- a/ios/Classes/PluginScriptsJS/JavaScriptBridgeJS.swift
+++ b/ios/Classes/PluginScriptsJS/JavaScriptBridgeJS.swift
@@ -175,7 +175,8 @@ let UTIL_JS_SOURCE = """
});
},
arrayBufferToString: function(arrayBuffer) {
- return String.fromCharCode.apply(String, arrayBuffer);
+ var uint8Array = new Uint8Array(arrayBuffer);
+ return uint8Array.reduce(function(acc, i) { return acc += String.fromCharCode.apply(null, [i]); }, '');
},
isBodyFormData: function(bodyString) {
return bodyString.indexOf('------WebKitFormBoundary') >= 0;
diff --git a/ios/Classes/PullToRefresh/PullToRefreshControl.swift b/ios/Classes/PullToRefresh/PullToRefreshControl.swift
index 481bf8d9..2d55d3ea 100644
--- a/ios/Classes/PullToRefresh/PullToRefreshControl.swift
+++ b/ios/Classes/PullToRefresh/PullToRefreshControl.swift
@@ -70,6 +70,9 @@ public class PullToRefreshControl : UIRefreshControl, FlutterPlugin {
}
result(true)
break
+ case "isRefreshing":
+ result(isRefreshing)
+ break
case "setColor":
let color = arguments!["color"] as! String
tintColor = UIColor(hexString: color)
diff --git a/ios/Classes/Types/UserScript.swift b/ios/Classes/Types/UserScript.swift
index c843e2b8..e03b6de2 100644
--- a/ios/Classes/Types/UserScript.swift
+++ b/ios/Classes/Types/UserScript.swift
@@ -10,8 +10,19 @@ import WebKit
public class UserScript : WKUserScript {
var groupName: String?
+
+ private var contentWorldWrapper: Any?
@available(iOS 14.0, *)
- lazy var contentWorld: WKContentWorld = WKContentWorld.page
+ var contentWorld: WKContentWorld {
+ get {
+ if let value = contentWorldWrapper as? WKContentWorld {
+ return value
+ }
+ return .page
+ }
+ set { contentWorldWrapper = newValue }
+ }
+
public override init(source: String, injectionTime: WKUserScriptInjectionTime, forMainFrameOnly: Bool) {
super.init(source: source, injectionTime: injectionTime, forMainFrameOnly: forMainFrameOnly)
diff --git a/lib/src/in_app_webview/in_app_webview_controller.dart b/lib/src/in_app_webview/in_app_webview_controller.dart
index b2be39c4..ece08df9 100644
--- a/lib/src/in_app_webview/in_app_webview_controller.dart
+++ b/lib/src/in_app_webview/in_app_webview_controller.dart
@@ -2218,7 +2218,7 @@ class InAppWebViewController {
///This parameter doesn’t apply to changes you make to the underlying web content, such as the document’s DOM structure.
///Those changes remain visible to all scripts, regardless of which content world you specify.
///For more information about content worlds, see [ContentWorld].
- ///Available on iOS 14.0+.
+ ///Available on iOS 14.3+.
///
///**NOTE**: This method shouldn't be called in the [WebView.onWebViewCreated] or [WebView.onLoadStart] events,
///because, in these events, the [WebView] is not ready to handle it yet.
diff --git a/nodejs_server_test_auth_basic_and_ssl/ca-crt.srl b/nodejs_server_test_auth_basic_and_ssl/ca-crt.srl
index 06b1afb8..24cec440 100755
--- a/nodejs_server_test_auth_basic_and_ssl/ca-crt.srl
+++ b/nodejs_server_test_auth_basic_and_ssl/ca-crt.srl
@@ -1 +1 @@
-B83E5BFA72399E6B
+B83E5BFA72399E73
diff --git a/nodejs_server_test_auth_basic_and_ssl/certificate.pfx b/nodejs_server_test_auth_basic_and_ssl/certificate.pfx
index 3225678f..6e362107 100755
Binary files a/nodejs_server_test_auth_basic_and_ssl/certificate.pfx and b/nodejs_server_test_auth_basic_and_ssl/certificate.pfx differ
diff --git a/nodejs_server_test_auth_basic_and_ssl/client.js b/nodejs_server_test_auth_basic_and_ssl/client.js
new file mode 100644
index 00000000..2ac4d2fe
--- /dev/null
+++ b/nodejs_server_test_auth_basic_and_ssl/client.js
@@ -0,0 +1,20 @@
+var fs = require('fs');
+var https = require('https');
+var options = {
+ hostname: 'localhost',
+ port: 4433,
+ path: '/',
+ method: 'GET',
+ key: fs.readFileSync('client1-key.pem'),
+ cert: fs.readFileSync('client1-crt.pem'),
+ // pfx: fs.readFileSync('certificate.pfx'),
+ ca: fs.readFileSync('ca-crt.pem') };
+var req = https.request(options, function(res) {
+ res.on('data', function(data) {
+ process.stdout.write(data);
+ });
+});
+req.end();
+req.on('error', function(e) {
+ console.error(e);
+});
\ No newline at end of file
diff --git a/nodejs_server_test_auth_basic_and_ssl/client1-crt.pem b/nodejs_server_test_auth_basic_and_ssl/client1-crt.pem
old mode 100755
new mode 100644
index 3f32b538..6df405aa
--- a/nodejs_server_test_auth_basic_and_ssl/client1-crt.pem
+++ b/nodejs_server_test_auth_basic_and_ssl/client1-crt.pem
@@ -1,32 +1,32 @@
-----BEGIN CERTIFICATE-----
-MIIFijCCA3KgAwIBAgIJALg+W/pyOZ5qMA0GCSqGSIb3DQEBBQUAMIGBMQswCQYD
+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
-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
+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
-----END CERTIFICATE-----
diff --git a/nodejs_server_test_auth_basic_and_ssl/client2-crt.pem b/nodejs_server_test_auth_basic_and_ssl/client2-crt.pem
old mode 100755
new mode 100644
index 2eceb939..a97991f5
--- a/nodejs_server_test_auth_basic_and_ssl/client2-crt.pem
+++ b/nodejs_server_test_auth_basic_and_ssl/client2-crt.pem
@@ -1,32 +1,32 @@
-----BEGIN CERTIFICATE-----
-MIIFijCCA3KgAwIBAgIJALg+W/pyOZ5rMA0GCSqGSIb3DQEBBQUAMIGBMQswCQYD
+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
-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
+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
-----END CERTIFICATE-----
diff --git a/nodejs_server_test_auth_basic_and_ssl/index.js b/nodejs_server_test_auth_basic_and_ssl/index.js
index f6bcdb16..602c7244 100755
--- a/nodejs_server_test_auth_basic_and_ssl/index.js
+++ b/nodejs_server_test_auth_basic_and_ssl/index.js
@@ -1,5 +1,15 @@
// Example of the server https is taken from here: https://engineering.circle.com/https-authorized-certs-with-node-js-315e548354a2
+// Renew certificates:
+// - openssl x509 -req -extfile server.cnf -days 9999 -passin "pass:password" -in server-csr.pem -CA ca-crt.pem -CAkey ca-key.pem -CAcreateserial -out server-crt.pem
+// - openssl x509 -req -extfile client1.cnf -days 9999 -passin "pass:password" -in client1-csr.pem -CA ca-crt.pem -CAkey ca-key.pem -CAcreateserial -out client1-crt.pem
+// - openssl x509 -req -extfile client2.cnf -days 9999 -passin "pass:password" -in client2-csr.pem -CA ca-crt.pem -CAkey ca-key.pem -CAcreateserial -out client2-crt.pem
+// Verify certificates:
+// - openssl verify -CAfile ca-crt.pem server-crt.pem
+// - openssl verify -CAfile ca-crt.pem client1-crt.pem
+// - openssl verify -CAfile ca-crt.pem client2-crt.pem
// Conversion of client1-crt.pem to certificate.pfx: https://stackoverflow.com/a/38408666/4637638
+// - openssl pkcs12 -export -out certificate.pfx -inkey client1-key.pem -in client1-crt.pem -certfile ca-crt.pem
+// - Overwrite certificate.pfx to example/test_assets/certificate.pfx
const express = require('express')
const https = require('https')
const cors = require('cors')
diff --git a/nodejs_server_test_auth_basic_and_ssl/package-lock.json b/nodejs_server_test_auth_basic_and_ssl/package-lock.json
index d914c657..295ca7b9 100755
--- a/nodejs_server_test_auth_basic_and_ssl/package-lock.json
+++ b/nodejs_server_test_auth_basic_and_ssl/package-lock.json
@@ -42,26 +42,28 @@
}
},
"body-parser": {
- "version": "1.19.0",
- "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
- "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
+ "version": "1.20.0",
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz",
+ "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==",
"requires": {
- "bytes": "3.1.0",
+ "bytes": "3.1.2",
"content-type": "~1.0.4",
"debug": "2.6.9",
- "depd": "~1.1.2",
- "http-errors": "1.7.2",
+ "depd": "2.0.0",
+ "destroy": "1.2.0",
+ "http-errors": "2.0.0",
"iconv-lite": "0.4.24",
- "on-finished": "~2.3.0",
- "qs": "6.7.0",
- "raw-body": "2.4.0",
- "type-is": "~1.6.17"
+ "on-finished": "2.4.1",
+ "qs": "6.10.3",
+ "raw-body": "2.5.1",
+ "type-is": "~1.6.18",
+ "unpipe": "1.0.0"
}
},
"bytes": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
- "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg=="
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
+ "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg=="
},
"call-bind": {
"version": "1.0.2",
@@ -120,9 +122,9 @@
}
},
"depd": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
- "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
+ "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=="
},
"destroy": {
"version": "1.2.0",
@@ -350,15 +352,15 @@
"integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="
},
"http-errors": {
- "version": "1.7.2",
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
- "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
+ "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
"requires": {
- "depd": "~1.1.2",
- "inherits": "2.0.3",
- "setprototypeof": "1.1.1",
- "statuses": ">= 1.5.0 < 2",
- "toidentifier": "1.0.0"
+ "depd": "2.0.0",
+ "inherits": "2.0.4",
+ "setprototypeof": "1.2.0",
+ "statuses": "2.0.1",
+ "toidentifier": "1.0.1"
}
},
"https": {
@@ -375,9 +377,9 @@
}
},
"inherits": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
- "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
},
"ipaddr.js": {
"version": "1.9.1",
@@ -423,41 +425,41 @@
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
},
"multiparty": {
- "version": "4.2.2",
- "resolved": "https://registry.npmjs.org/multiparty/-/multiparty-4.2.2.tgz",
- "integrity": "sha512-NtZLjlvsjcoGrzojtwQwn/Tm90aWJ6XXtPppYF4WmOk/6ncdwMMKggFY2NlRRN9yiCEIVxpOfPWahVEG2HAG8Q==",
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/multiparty/-/multiparty-4.2.3.tgz",
+ "integrity": "sha512-Ak6EUJZuhGS8hJ3c2fY6UW5MbkGUPMBEGd13djUzoY/BHqV/gTuFWtC6IuVA7A2+v3yjBS6c4or50xhzTQZImQ==",
"requires": {
- "http-errors": "~1.8.0",
+ "http-errors": "~1.8.1",
"safe-buffer": "5.2.1",
"uid-safe": "2.1.5"
},
"dependencies": {
+ "depd": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
+ "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ=="
+ },
"http-errors": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.0.tgz",
- "integrity": "sha512-4I8r0C5JDhT5VkvI47QktDW75rNlGVsUf/8hzjCC/wkWI/jdTRmBb9aI7erSG82r1bjKY3F6k28WnsVxB1C73A==",
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz",
+ "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==",
"requires": {
"depd": "~1.1.2",
"inherits": "2.0.4",
"setprototypeof": "1.2.0",
"statuses": ">= 1.5.0 < 2",
- "toidentifier": "1.0.0"
+ "toidentifier": "1.0.1"
}
},
- "inherits": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
- },
"safe-buffer": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
"integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
},
- "setprototypeof": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
- "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
+ "statuses": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
+ "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA=="
}
}
},
@@ -477,9 +479,9 @@
"integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g=="
},
"on-finished": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
- "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
+ "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
"requires": {
"ee-first": "1.1.1"
}
@@ -504,14 +506,17 @@
}
},
"qs": {
- "version": "6.7.0",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
- "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ=="
+ "version": "6.10.3",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz",
+ "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==",
+ "requires": {
+ "side-channel": "^1.0.4"
+ }
},
"random-bytes": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz",
- "integrity": "sha1-T2ih3Arli9P7lYSMMDJNt11kNgs="
+ "integrity": "sha512-iv7LhNVO047HzYR3InF6pUcUsPQiHTM1Qal51DcGSuZFBil1aBBWG5eHPNek7bvILMaYJ/8RU1e8w1AMdHmLQQ=="
},
"range-parser": {
"version": "1.2.1",
@@ -519,12 +524,12 @@
"integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="
},
"raw-body": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
- "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz",
+ "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==",
"requires": {
- "bytes": "3.1.0",
- "http-errors": "1.7.2",
+ "bytes": "3.1.2",
+ "http-errors": "2.0.0",
"iconv-lite": "0.4.24",
"unpipe": "1.0.0"
}
@@ -623,9 +628,9 @@
}
},
"setprototypeof": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
- "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
+ "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
},
"side-channel": {
"version": "1.0.4",
@@ -638,14 +643,14 @@
}
},
"statuses": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
- "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
+ "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ=="
},
"toidentifier": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
- "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw=="
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
+ "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA=="
},
"type-is": {
"version": "1.6.18",
diff --git a/nodejs_server_test_auth_basic_and_ssl/package.json b/nodejs_server_test_auth_basic_and_ssl/package.json
index 6feac6cc..ef405936 100755
--- a/nodejs_server_test_auth_basic_and_ssl/package.json
+++ b/nodejs_server_test_auth_basic_and_ssl/package.json
@@ -10,10 +10,10 @@
"license": "ISC",
"dependencies": {
"basic-auth": "latest",
- "body-parser": "^1.19.0",
+ "body-parser": "^1.20.0",
"cors": "^2.8.5",
"express": "latest",
"https": "latest",
- "multiparty": "^4.2.2"
+ "multiparty": "^4.2.3"
}
}
diff --git a/nodejs_server_test_auth_basic_and_ssl/server-crt.pem b/nodejs_server_test_auth_basic_and_ssl/server-crt.pem
index b1f82664..4878b880 100755
--- a/nodejs_server_test_auth_basic_and_ssl/server-crt.pem
+++ b/nodejs_server_test_auth_basic_and_ssl/server-crt.pem
@@ -1,32 +1,32 @@
-----BEGIN CERTIFICATE-----
-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
+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
-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
+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
-----END CERTIFICATE-----
diff --git a/pubspec.yaml b/pubspec.yaml
old mode 100755
new mode 100644
index 32ce620c..22e7066d
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,7 +1,9 @@
name: flutter_inappwebview
description: A Flutter plugin that allows you to add an inline webview, to use an headless webview, and to open an in-app browser window.
-version: 5.4.3+7
-homepage: https://github.com/pichillilorenzo/flutter_inappwebview
+version: 5.4.5
+homepage: https://inappwebview.dev/
+repository: https://github.com/pichillilorenzo/flutter_inappwebview
+issue_tracker: https://github.com/pichillilorenzo/flutter_inappwebview/issues
environment:
sdk: ">=2.14.0 <3.0.0"
@@ -65,4 +67,4 @@ flutter:
false_secrets:
- /nodejs_server_test_auth_basic_and_ssl/*.pem
- - /nodejs_server_test_auth_basic_and_ssl/*.pfx
\ No newline at end of file
+ - /nodejs_server_test_auth_basic_and_ssl/*.pfx