Merge "Fix the problem of CaptivePortalLogin app cannot show SSL error page"
am: 1a80ff943d
Change-Id: Ief7b9c8f172fa3ad5a1143d998d455797c1bf937
This commit is contained in:
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user