Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0f05c2a7 authored by Lucas Lin's avatar Lucas Lin Committed by android-build-merger
Browse files

Merge "Fix the problem of CaptivePortalLogin app cannot show SSL error page" am: 1a80ff94

am: 4e7830d8

Change-Id: I6a14e5e1ddbf6346e90c98b324a1760b0e3e8227
parents dc025370 4e7830d8
Loading
Loading
Loading
Loading
+19 −9
Original line number Diff line number Diff line
@@ -53,6 +53,7 @@ import android.view.View;
import android.webkit.CookieManager;
import android.webkit.SslErrorHandler;
import android.webkit.WebChromeClient;
import android.webkit.WebResourceRequest;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
@@ -408,8 +409,7 @@ public class CaptivePortalLoginActivity extends Activity {
                    TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 1,
                    getResources().getDisplayMetrics());
        private int mPagesLoaded;
        // the host of the page that this webview is currently loading. Can be null when undefined.
        private String mHostname;
        private String mMainFrameUrl;

        // If we haven't finished cleaning up the history, don't allow going back.
        public boolean allowBack() {
@@ -435,7 +435,6 @@ public class CaptivePortalLoginActivity extends Activity {
            }
            final URL url = makeURL(urlString);
            Log.d(TAG, "onPageStarted: " + sanitizeURL(url));
            mHostname = host(url);
            // For internally generated pages, leave URL bar listing prior URL as this is the URL
            // the page refers to.
            if (!urlString.startsWith(INTERNAL_ASSETS)) {
@@ -479,17 +478,28 @@ public class CaptivePortalLoginActivity extends Activity {
            return Integer.toString((int)dp) + "px";
        }

        // Check if webview is trying to load the main frame and record its url.
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
            if (request.isForMainFrame()) {
                mMainFrameUrl = request.getUrl().toString();
            }
            return false;
        }

        // A web page consisting of a large broken lock icon to indicate SSL failure.

        @Override
        public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
            final URL url = makeURL(error.getUrl());
            final String host = host(url);
            final URL errorUrl = makeURL(error.getUrl());
            final URL mainFrameUrl = makeURL(mMainFrameUrl);
            Log.d(TAG, String.format("SSL error: %s, url: %s, certificate: %s",
                    sslErrorName(error), sanitizeURL(url), error.getCertificate()));
            if (url == null || !Objects.equals(host, mHostname)) {
                // Ignore ssl errors for resources coming from a different hostname than the page
                // that we are currently loading, and only cancel the request.
                    sslErrorName(error), sanitizeURL(errorUrl), error.getCertificate()));
            if (errorUrl == null
                    // Ignore SSL errors from resources by comparing the main frame url with SSL
                    // error url.
                    || !errorUrl.equals(mainFrameUrl)) {
                Log.d(TAG, "onReceivedSslError: mMainFrameUrl = " + mMainFrameUrl);
                handler.cancel();
                return;
            }