Skip to content

Commit b456799

Browse files
committed
[flutter_inappwebview] Fix crash on webview dispose
If WebView releases the ecore_evas used per instance in Dispose(), the EGL display shared with the flutter-tizen renderer is turned off, causing a crash on the next frame. Share a single Ecore_Evas across all WebViews and never release it.
1 parent 8dfca03 commit b456799

4 files changed

Lines changed: 13 additions & 9 deletions

File tree

packages/flutter_inappwebview/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
## 0.1.1
2+
3+
- Fix a crash when a webview is disposed.
4+
15
## 0.1.0
26

37
- Initial release of `flutter_inappwebview_tizen`.

packages/flutter_inappwebview/README.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,7 @@ Add the internet privilege to the app manifest:
2626
```yaml
2727
dependencies:
2828
flutter_inappwebview: ^6.1.5
29-
flutter_inappwebview_tizen:
30-
path: ../flutter_inappwebview_tizen
29+
flutter_inappwebview_tizen: ^0.1.1
3130
```
3231
3332
```dart

packages/flutter_inappwebview/pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ name: flutter_inappwebview_tizen
22
description: Tizen implementation of the flutter_inappwebview plugin.
33
homepage: https://github.com/flutter-tizen/plugins
44
repository: https://github.com/flutter-tizen/plugins/tree/master/packages/flutter_inappwebview
5-
version: 0.1.0
5+
version: 0.1.1
66

77
environment:
88
sdk: ">=3.8.0 <4.0.0"

packages/flutter_inappwebview/tizen/src/webview.cc

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -367,10 +367,8 @@ void WebView::Dispose() {
367367
evas_object_del(webview_instance_);
368368
webview_instance_ = nullptr;
369369
}
370-
if (ecore_evas_) {
371-
ecore_evas_free(ecore_evas_);
372-
ecore_evas_ = nullptr;
373-
}
370+
371+
ecore_evas_ = nullptr;
374372

375373
// ewk_shutdown();
376374
}
@@ -541,15 +539,18 @@ bool WebView::InitWebView() {
541539
// temporarily comment out ewk_init() and ewk_shutdown(). It can be reverted
542540
// depending on updates to chromium-efl.
543541
// ewk_init();
544-
ecore_evas_ = ecore_evas_new("wayland_egl", 0, 0, 1, 1, 0);
542+
static Ecore_Evas* shared_ecore_evas = nullptr;
543+
if (!shared_ecore_evas) {
544+
shared_ecore_evas = ecore_evas_new("wayland_egl", 0, 0, 1, 1, 0);
545+
}
546+
ecore_evas_ = shared_ecore_evas;
545547
if (!ecore_evas_) {
546548
LOG_ERROR("Failed to create Ecore_Evas for the WebView.");
547549
return false;
548550
}
549551

550552
webview_instance_ = ewk_view_add(ecore_evas_get(ecore_evas_));
551553
if (!webview_instance_) {
552-
ecore_evas_free(ecore_evas_);
553554
ecore_evas_ = nullptr;
554555
return false;
555556
}

0 commit comments

Comments
 (0)