From 6a1707a0e7ccb52e012bb62f8c3aa76b8ffda52f Mon Sep 17 00:00:00 2001 From: Erik Kline Date: Thu, 26 Apr 2018 12:04:40 +0900 Subject: [PATCH] Fix carrier app CaptivePortalLoginActivity probes to bypass Private DNS Test: as follows - built - flashed - booted - runtest frameworks-net passes Bug: 64133961 Bug: 77140445 Bug: 78548486 Change-Id: I48c60fd6711dcf5406fba62a3f88aea12183ff87 --- .../CaptivePortalLoginActivity.java | 23 ++++++++++++------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/packages/CarrierDefaultApp/src/com/android/carrierdefaultapp/CaptivePortalLoginActivity.java b/packages/CarrierDefaultApp/src/com/android/carrierdefaultapp/CaptivePortalLoginActivity.java index 7479d9aa773bf..b1933373a8e63 100644 --- a/packages/CarrierDefaultApp/src/com/android/carrierdefaultapp/CaptivePortalLoginActivity.java +++ b/packages/CarrierDefaultApp/src/com/android/carrierdefaultapp/CaptivePortalLoginActivity.java @@ -111,13 +111,11 @@ public class CaptivePortalLoginActivity extends Activity { mWebView.setWebViewClient(mWebViewClient); mWebView.setWebChromeClient(new MyWebChromeClient()); - mNetwork = getNetworkForCaptivePortal(); - if (mNetwork == null) { + final Network network = getNetworkForCaptivePortal(); + if (network == null) { requestNetworkForCaptivePortal(); } else { - mCm.bindProcessToNetwork(mNetwork); - mCm.setProcessDefaultNetworkForHostResolution( - ResolvUtil.getNetworkWithUseLocalNameserversFlag(mNetwork)); + setNetwork(network); // Start initial page load so WebView finishes loading proxy settings. // Actual load of mUrl is initiated by MyWebViewClient. mWebView.loadData("", "text/html", null); @@ -159,6 +157,15 @@ public class CaptivePortalLoginActivity extends Activity { super.onDestroy(); } + private void setNetwork(Network network) { + if (network != null) { + mCm.bindProcessToNetwork(network); + mCm.setProcessDefaultNetworkForHostResolution( + ResolvUtil.getNetworkWithUseLocalNameserversFlag(network)); + } + mNetwork = network; + } + // Find WebView's proxy BroadcastReceiver and prompt it to read proxy system properties. private void setWebViewProxy() { LoadedApk loadedApk = getApplication().mLoadedApk; @@ -235,6 +242,7 @@ public class CaptivePortalLoginActivity extends Activity { private void testForCaptivePortal() { mTestingThread = new Thread(new Runnable() { public void run() { + final Network network = ResolvUtil.makeNetworkWithPrivateDnsBypass(mNetwork); // Give time for captive portal to open. try { Thread.sleep(1000); @@ -245,7 +253,7 @@ public class CaptivePortalLoginActivity extends Activity { int httpResponseCode = 500; int oldTag = TrafficStats.getAndSetThreadStatsTag(TrafficStats.TAG_SYSTEM_PROBE); try { - urlConnection = (HttpURLConnection) mNetwork.openConnection( + urlConnection = (HttpURLConnection) network.openConnection( new URL(mCm.getCaptivePortalServerUrl())); urlConnection.setInstanceFollowRedirects(false); urlConnection.setConnectTimeout(SOCKET_TIMEOUT_MS); @@ -292,8 +300,7 @@ public class CaptivePortalLoginActivity extends Activity { @Override public void onAvailable(Network network) { if (DBG) logd("Network available: " + network); - mCm.bindProcessToNetwork(network); - mNetwork = network; + setNetwork(network); runOnUiThreadIfNotFinishing(() -> { if (mReload) { mWebView.reload();