Merge "Fix the problem of CaptivePortalLogin app cannot show SSL error page"

am: 1a80ff943d

Change-Id: Ief7b9c8f172fa3ad5a1143d998d455797c1bf937
This commit is contained in:
Lucas Lin
2019-03-20 00:07:59 -07:00
committed by android-build-merger

View File

@@ -53,6 +53,7 @@ import android.view.View;
import android.webkit.CookieManager; import android.webkit.CookieManager;
import android.webkit.SslErrorHandler; import android.webkit.SslErrorHandler;
import android.webkit.WebChromeClient; import android.webkit.WebChromeClient;
import android.webkit.WebResourceRequest;
import android.webkit.WebSettings; import android.webkit.WebSettings;
import android.webkit.WebView; import android.webkit.WebView;
import android.webkit.WebViewClient; import android.webkit.WebViewClient;
@@ -408,8 +409,7 @@ public class CaptivePortalLoginActivity extends Activity {
TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 1, TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 1,
getResources().getDisplayMetrics()); getResources().getDisplayMetrics());
private int mPagesLoaded; private int mPagesLoaded;
// the host of the page that this webview is currently loading. Can be null when undefined. private String mMainFrameUrl;
private String mHostname;
// If we haven't finished cleaning up the history, don't allow going back. // If we haven't finished cleaning up the history, don't allow going back.
public boolean allowBack() { public boolean allowBack() {
@@ -435,7 +435,6 @@ public class CaptivePortalLoginActivity extends Activity {
} }
final URL url = makeURL(urlString); final URL url = makeURL(urlString);
Log.d(TAG, "onPageStarted: " + sanitizeURL(url)); Log.d(TAG, "onPageStarted: " + sanitizeURL(url));
mHostname = host(url);
// For internally generated pages, leave URL bar listing prior URL as this is the URL // For internally generated pages, leave URL bar listing prior URL as this is the URL
// the page refers to. // the page refers to.
if (!urlString.startsWith(INTERNAL_ASSETS)) { if (!urlString.startsWith(INTERNAL_ASSETS)) {
@@ -479,17 +478,28 @@ public class CaptivePortalLoginActivity extends Activity {
return Integer.toString((int)dp) + "px"; 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. // A web page consisting of a large broken lock icon to indicate SSL failure.
@Override @Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) { public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
final URL url = makeURL(error.getUrl()); final URL errorUrl = makeURL(error.getUrl());
final String host = host(url); final URL mainFrameUrl = makeURL(mMainFrameUrl);
Log.d(TAG, String.format("SSL error: %s, url: %s, certificate: %s", Log.d(TAG, String.format("SSL error: %s, url: %s, certificate: %s",
sslErrorName(error), sanitizeURL(url), error.getCertificate())); sslErrorName(error), sanitizeURL(errorUrl), error.getCertificate()));
if (url == null || !Objects.equals(host, mHostname)) { if (errorUrl == null
// Ignore ssl errors for resources coming from a different hostname than the page // Ignore SSL errors from resources by comparing the main frame url with SSL
// that we are currently loading, and only cancel the request. // error url.
|| !errorUrl.equals(mainFrameUrl)) {
Log.d(TAG, "onReceivedSslError: mMainFrameUrl = " + mMainFrameUrl);
handler.cancel(); handler.cancel();
return; return;
} }