From 84913b6ce33b982d903c610e60abab3c150b2df6 Mon Sep 17 00:00:00 2001 From: haanhvu Date: Tue, 7 Jan 2025 19:27:03 +0700 Subject: [PATCH 1/6] Chromium: Show error pages when errors happen Currently when errors happen when loading a website, Wolvic with Chromium backend just returns a blank page. This fix allows Wolvic with Chromium backend to return an error page customized to each error. Fix #1615 --- .../browser/api/impl/TabWebContentsDelegate.java | 2 +- .../browser/api/impl/TabWebContentsObserver.java | 3 ++- .../com/igalia/wolvic/browser/api/WSession.java | 9 +++++++++ .../com/igalia/wolvic/browser/engine/Session.java | 5 +++++ .../com/igalia/wolvic/utils/InternalPages.java | 13 ++++++++++++- app/src/main/res/raw/error_pages.html | 8 +------- 6 files changed, 30 insertions(+), 10 deletions(-) diff --git a/app/src/common/chromium/com/igalia/wolvic/browser/api/impl/TabWebContentsDelegate.java b/app/src/common/chromium/com/igalia/wolvic/browser/api/impl/TabWebContentsDelegate.java index 86be9a226d..754e1328e3 100644 --- a/app/src/common/chromium/com/igalia/wolvic/browser/api/impl/TabWebContentsDelegate.java +++ b/app/src/common/chromium/com/igalia/wolvic/browser/api/impl/TabWebContentsDelegate.java @@ -86,7 +86,7 @@ public void navigationStateChanged(int flags) { } } - @Override + //@Override public void onWebAppManifest(WebContents webContents, @NonNull String manifest) { @Nullable WSession.ContentDelegate delegate = mSession.getContentDelegate(); if (delegate == null) diff --git a/app/src/common/chromium/com/igalia/wolvic/browser/api/impl/TabWebContentsObserver.java b/app/src/common/chromium/com/igalia/wolvic/browser/api/impl/TabWebContentsObserver.java index ce77dc15af..e1d0e82ff6 100644 --- a/app/src/common/chromium/com/igalia/wolvic/browser/api/impl/TabWebContentsObserver.java +++ b/app/src/common/chromium/com/igalia/wolvic/browser/api/impl/TabWebContentsObserver.java @@ -116,7 +116,7 @@ public void didFailLoad(boolean isInPrimaryMainFrame, int errorCode, GURL failin WSession.NavigationDelegate navigationDelegate = mSession.getNavigationDelegate(); if (navigationDelegate != null) { - navigationDelegate.onLoadError(mSession, failingUrl.getSpec(), new WWebRequestError() { + byte[] errorData = navigationDelegate.onLoadErrorData(mSession, failingUrl.getSpec(), new WWebRequestError() { @Override public int code() { return errorCode; @@ -135,6 +135,7 @@ public X509Certificate certificate() { return null; } }); + mSession.loadData(errorData, "text/html"); } } diff --git a/app/src/common/shared/com/igalia/wolvic/browser/api/WSession.java b/app/src/common/shared/com/igalia/wolvic/browser/api/WSession.java index 021355b5b3..0f1e41016e 100644 --- a/app/src/common/shared/com/igalia/wolvic/browser/api/WSession.java +++ b/app/src/common/shared/com/igalia/wolvic/browser/api/WSession.java @@ -516,6 +516,15 @@ WResult onLoadError( @NonNull final WWebRequestError error) { return null; } + + @UiThread + default @Nullable + byte[] onLoadErrorData( + @NonNull final WSession session, + @Nullable final String uri, + @NonNull final WWebRequestError error) { + return null; + } } @Retention(RetentionPolicy.SOURCE) diff --git a/app/src/common/shared/com/igalia/wolvic/browser/engine/Session.java b/app/src/common/shared/com/igalia/wolvic/browser/engine/Session.java index 37a2f269d1..621e33d968 100644 --- a/app/src/common/shared/com/igalia/wolvic/browser/engine/Session.java +++ b/app/src/common/shared/com/igalia/wolvic/browser/engine/Session.java @@ -1244,6 +1244,11 @@ public WResult onLoadError(@NonNull WSession session, @Nullable String u return WResult.fromValue(InternalPages.createErrorPageDataURI(mContext, uri, error.code())); } + @Override + public byte[] onLoadErrorData(@NonNull WSession session, @Nullable String uri, @NonNull WWebRequestError error) { + return InternalPages.createErrorPageData(mContext, uri, error.code()); + } + // Progress Listener @Override diff --git a/app/src/common/shared/com/igalia/wolvic/utils/InternalPages.java b/app/src/common/shared/com/igalia/wolvic/utils/InternalPages.java index 77806548dd..597e97a506 100644 --- a/app/src/common/shared/com/igalia/wolvic/utils/InternalPages.java +++ b/app/src/common/shared/com/igalia/wolvic/utils/InternalPages.java @@ -14,6 +14,8 @@ import mozilla.components.browser.errorpages.ErrorType; +import org.chromium.net.NetError; + public class InternalPages { private static ErrorType fromSessionErrorToErrorType(int error) { @@ -21,6 +23,7 @@ private static ErrorType fromSessionErrorToErrorType(int error) { case WWebRequestError.ERROR_SECURITY_SSL: { return ErrorType.ERROR_SECURITY_SSL; } + case NetError.ERR_CERT_DATE_INVALID: case WWebRequestError.ERROR_SECURITY_BAD_CERT: { return ErrorType.ERROR_SECURITY_BAD_CERT; } @@ -117,11 +120,19 @@ public static PageResources create(int html, int css) { public static String createErrorPageDataURI(Context context, @Nullable String uri, int sessionError) { + + return "data:text/html;base64," + Base64.encodeToString(createErrorPageData(context, uri, sessionError), Base64.NO_WRAP); + } + + public static byte[] createErrorPageData(Context context, + @Nullable String uri, + int sessionError) { String html = readRawResourceString(context, R.raw.error_pages); String css = readRawResourceString(context, R.raw.error_style); boolean showSSLAdvanced; switch (sessionError) { + case NetError.ERR_CERT_DATE_INVALID: case WWebRequestError.ERROR_SECURITY_SSL: case WWebRequestError.ERROR_SECURITY_BAD_CERT: showSSLAdvanced = true; @@ -143,7 +154,7 @@ public static String createErrorPageDataURI(Context context, html = html.replace("%url%", uri); } - return "data:text/html;base64," + Base64.encodeToString(html.getBytes(), Base64.NO_WRAP); + return html.getBytes(); } public static byte[] createAboutPage(Context context, diff --git a/app/src/main/res/raw/error_pages.html b/app/src/main/res/raw/error_pages.html index 2205c19027..d278b873df 100644 --- a/app/src/main/res/raw/error_pages.html +++ b/app/src/main/res/raw/error_pages.html @@ -23,13 +23,7 @@ advancedVisible = !advancedVisible; } function acceptAndContinue(temporary) { - document.addCertException(temporary).then(() => { - location.reload(); - }, - err => { - console.error("Unexpected error: " + err) - } - ); + window.certificateErrorPageController.proceed(); } From 4a0365cab55b6df0e63224894240d6e2346593f9 Mon Sep 17 00:00:00 2001 From: haanhvu Date: Tue, 7 Jan 2025 22:11:22 +0700 Subject: [PATCH 2/6] Revert "Upgrade AGP to 8.7.2" This reverts commit dd638d2ba91ba5f5f4911492f780a850fc51d03e. --- versions.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/versions.gradle b/versions.gradle index 7d9f33a913..a2c1bd59f0 100644 --- a/versions.gradle +++ b/versions.gradle @@ -45,7 +45,7 @@ versions.atsl_runner = "1.5.2" versions.atsl_rules = "1.5.0" versions.atsl_junit = "1.1.5" versions.espresso = "3.5.1" -versions.android_gradle_plugin = '8.7.2' +versions.android_gradle_plugin = '8.7.1' versions.kotlin = "1.9.21" versions.kotlin_coroutines = "1.7.3" versions.snakeyaml = "2.0" From 4e19de0e0b8bb0a938ac6fb44041048e58289e40 Mon Sep 17 00:00:00 2001 From: haanhvu Date: Tue, 7 Jan 2025 22:11:35 +0700 Subject: [PATCH 3/6] Revert "Migrate to Gradle v8.9" This reverts commit 63e622fe47f5bd86f82df1bfb8b0f5ea3b0e81c5. --- app/build.gradle | 7 +++++-- gradle/wrapper/gradle-wrapper.properties | 2 +- versions.gradle | 2 +- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index b74d955a05..b426cd6a39 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -619,13 +619,16 @@ android { lint { disable 'ExtraTranslation' } - androidResources { + + aaptOptions { + noCompress 'ja' + noCompress 'dat' + noCompress 'bin' noCompress 'pak' noCompress 'ja' noCompress 'dat' noCompress 'bin' } - } configurations { diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 7836febc39..7f7ce3dc42 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ #Wed Jul 21 16:13:31 CEST 2021 distributionBase=GRADLE_USER_HOME -distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.2-bin.zip distributionPath=wrapper/dists zipStorePath=wrapper/dists zipStoreBase=GRADLE_USER_HOME diff --git a/versions.gradle b/versions.gradle index a2c1bd59f0..d35d6fc99c 100644 --- a/versions.gradle +++ b/versions.gradle @@ -45,7 +45,7 @@ versions.atsl_runner = "1.5.2" versions.atsl_rules = "1.5.0" versions.atsl_junit = "1.1.5" versions.espresso = "3.5.1" -versions.android_gradle_plugin = '8.7.1' +versions.android_gradle_plugin = "8.2.1" versions.kotlin = "1.9.21" versions.kotlin_coroutines = "1.7.3" versions.snakeyaml = "2.0" From 46ae3248f14c560c43d86409309b97db940f3a5d Mon Sep 17 00:00:00 2001 From: haanhvu Date: Wed, 22 Jan 2025 22:16:39 +0700 Subject: [PATCH 4/6] Enable going back to previous page from error page (temporary solution) --- app/src/main/res/raw/error_pages.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/raw/error_pages.html b/app/src/main/res/raw/error_pages.html index d278b873df..9375342206 100644 --- a/app/src/main/res/raw/error_pages.html +++ b/app/src/main/res/raw/error_pages.html @@ -61,7 +61,7 @@

%messageShort%

- +
From a4b5732a0dfa178e190662097ae9d4c0a1fb0ffe Mon Sep 17 00:00:00 2001 From: haanhvu Date: Wed, 22 Jan 2025 22:19:42 +0700 Subject: [PATCH 5/6] Reapply "Migrate to Gradle v8.9" This reverts commit 4e19de0e0b8bb0a938ac6fb44041048e58289e40. --- app/build.gradle | 7 ++----- gradle/wrapper/gradle-wrapper.properties | 2 +- versions.gradle | 2 +- 3 files changed, 4 insertions(+), 7 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index b426cd6a39..b74d955a05 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -619,16 +619,13 @@ android { lint { disable 'ExtraTranslation' } - - aaptOptions { - noCompress 'ja' - noCompress 'dat' - noCompress 'bin' + androidResources { noCompress 'pak' noCompress 'ja' noCompress 'dat' noCompress 'bin' } + } configurations { diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 7f7ce3dc42..7836febc39 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ #Wed Jul 21 16:13:31 CEST 2021 distributionBase=GRADLE_USER_HOME -distributionUrl=https\://services.gradle.org/distributions/gradle-8.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip distributionPath=wrapper/dists zipStorePath=wrapper/dists zipStoreBase=GRADLE_USER_HOME diff --git a/versions.gradle b/versions.gradle index d35d6fc99c..a2c1bd59f0 100644 --- a/versions.gradle +++ b/versions.gradle @@ -45,7 +45,7 @@ versions.atsl_runner = "1.5.2" versions.atsl_rules = "1.5.0" versions.atsl_junit = "1.1.5" versions.espresso = "3.5.1" -versions.android_gradle_plugin = "8.2.1" +versions.android_gradle_plugin = '8.7.1' versions.kotlin = "1.9.21" versions.kotlin_coroutines = "1.7.3" versions.snakeyaml = "2.0" From c6f3d8b7d164dc98f503680162041eb84d42eb3a Mon Sep 17 00:00:00 2001 From: haanhvu Date: Wed, 22 Jan 2025 22:19:59 +0700 Subject: [PATCH 6/6] Reapply "Upgrade AGP to 8.7.2" This reverts commit 4a0365cab55b6df0e63224894240d6e2346593f9. --- versions.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/versions.gradle b/versions.gradle index a2c1bd59f0..7d9f33a913 100644 --- a/versions.gradle +++ b/versions.gradle @@ -45,7 +45,7 @@ versions.atsl_runner = "1.5.2" versions.atsl_rules = "1.5.0" versions.atsl_junit = "1.1.5" versions.espresso = "3.5.1" -versions.android_gradle_plugin = '8.7.1' +versions.android_gradle_plugin = '8.7.2' versions.kotlin = "1.9.21" versions.kotlin_coroutines = "1.7.3" versions.snakeyaml = "2.0"