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..9375342206 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(); } @@ -67,7 +61,7 @@

%messageShort%

- +