From: uazo Date: Sat, 15 Apr 2023 11:46:48 +0000 Subject: Remove ChromiumNetworkAdapter Removes from java code the ability to make http connections without asking the native code License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html --- .../webview_shell/WebViewBrowserFragment.java | 57 ----------------- .../browser/download/OMADownloadHandler.java | 39 ------------ .../browser/feedback/ConnectivityChecker.java | 36 +---------- .../ConnectivityDetector.java | 63 ------------------- .../chrome/browser/omaha/OmahaBase.java | 3 +- .../util/HttpURLConnectionFactoryImpl.java | 7 +-- .../firstrun/VariationsSeedFetcher.java | 26 +------- .../chromium/net/ChromiumNetworkAdapter.java | 13 ---- 8 files changed, 4 insertions(+), 240 deletions(-) diff --git a/android_webview/tools/system_webview_shell/apk/src/org/chromium/webview_shell/WebViewBrowserFragment.java b/android_webview/tools/system_webview_shell/apk/src/org/chromium/webview_shell/WebViewBrowserFragment.java --- a/android_webview/tools/system_webview_shell/apk/src/org/chromium/webview_shell/WebViewBrowserFragment.java +++ b/android_webview/tools/system_webview_shell/apk/src/org/chromium/webview_shell/WebViewBrowserFragment.java @@ -238,63 +238,6 @@ public class WebViewBrowserFragment extends Fragment { /** Downloading file in background thread */ @Override protected String doInBackground() { - try { - NetworkTrafficAnnotationTag annotation = - NetworkTrafficAnnotationTag.createComplete( - "android_webview_shell", - """ - semantics { - sender: "WebViewBrowserFragment (Android)" - description: - "Downloads files as specified by the shell browser." - trigger: "User interations within the browser, causing a download" - data: "No additional data." - destination: LOCAL - internal { - contacts { - email: "avvall@chromium.org" - } - } - user_data { - type: NONE - } - last_reviewed: "2024-07-25" - } - policy { - cookies_allowed: NO - setting: "This feature can not be disabled." - policy_exception_justification: "Not implemented." - }\ - """); - URL url = new URL(mFileUrl); - URLConnection connection = ChromiumNetworkAdapter.openConnection(url, annotation); - connection.connect(); - - // download the file - InputStream input = - new BufferedInputStream(ChromiumNetworkAdapter.openStream(url, annotation)); - - File path = - Environment.getExternalStoragePublicDirectory( - Environment.DIRECTORY_DOWNLOADS); - File file = new File(path, mNameOfFile); - // Make sure the Downloads directory exists. - path.mkdirs(); - OutputStream output = new FileOutputStream(file); - - int count; - byte[] data = new byte[BUFFER_SIZE]; - while ((count = input.read(data)) != -1) { - output.write(data, 0, count); - } - - output.flush(); - output.close(); - input.close(); - } catch (Exception e) { - Log.e(TAG, "Error: " + e.getMessage()); - } - return null; } } diff --git a/chrome/android/java/src/org/chromium/chrome/browser/download/OMADownloadHandler.java b/chrome/android/java/src/org/chromium/chrome/browser/download/OMADownloadHandler.java --- a/chrome/android/java/src/org/chromium/chrome/browser/download/OMADownloadHandler.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/download/OMADownloadHandler.java @@ -1019,45 +1019,6 @@ public class OMADownloadHandler extends BroadcastReceiver { protected Boolean doInBackground() { HttpURLConnection urlConnection = null; boolean success = false; - try { - URL url = new URL(mOMAInfo.getValue(OMA_INSTALL_NOTIFY_URI)); - urlConnection = - (HttpURLConnection) - ChromiumNetworkAdapter.openConnection(url, TRAFFIC_ANNOTATION); - urlConnection.setDoOutput(true); - urlConnection.setUseCaches(false); - urlConnection.setRequestMethod("POST"); - String userAgent = mDownloadInfo.getUserAgent(); - if (TextUtils.isEmpty(userAgent)) { - userAgent = ContentUtils.getBrowserUserAgent(); - } - urlConnection.setRequestProperty("User-Agent", userAgent); - urlConnection.setRequestProperty("cookie", mDownloadInfo.getCookie()); - - DataOutputStream dos = new DataOutputStream(urlConnection.getOutputStream()); - try { - dos.writeBytes(mStatusMessage); - dos.flush(); - } catch (IOException e) { - Log.w(TAG, "Cannot write status message.", e); - } finally { - dos.close(); - } - int responseCode = urlConnection.getResponseCode(); - if (responseCode == HttpURLConnection.HTTP_OK || responseCode == -1) { - success = true; - } else { - success = false; - } - } catch (MalformedURLException e) { - Log.w(TAG, "Invalid notification URL.", e); - } catch (IOException e) { - Log.w(TAG, "Cannot connect to server.", e); - } catch (IllegalStateException e) { - Log.w(TAG, "Cannot connect to server.", e); - } finally { - if (urlConnection != null) urlConnection.disconnect(); - } if (success) { String path = mDownloadInfo.getFilePath(); diff --git a/chrome/android/java/src/org/chromium/chrome/browser/feedback/ConnectivityChecker.java b/chrome/android/java/src/org/chromium/chrome/browser/feedback/ConnectivityChecker.java --- a/chrome/android/java/src/org/chromium/chrome/browser/feedback/ConnectivityChecker.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/feedback/ConnectivityChecker.java @@ -136,41 +136,7 @@ public final class ConnectivityChecker { postResult(callback, ConnectivityCheckResult.ERROR); return; } - new AsyncTask() { - @Override - protected Integer doInBackground() { - try { - HttpURLConnection conn = - (HttpURLConnection) - ChromiumNetworkAdapter.openConnection(url, TRAFFIC_ANNOTATION); - conn.setInstanceFollowRedirects(false); - conn.setRequestMethod("GET"); - conn.setDoInput(false); - conn.setDoOutput(false); - conn.setConnectTimeout(timeoutMs); - conn.setReadTimeout(timeoutMs); - - conn.connect(); - int responseCode = conn.getResponseCode(); - if (responseCode == HttpURLConnection.HTTP_NO_CONTENT) { - return ConnectivityCheckResult.CONNECTED; - } else { - return ConnectivityCheckResult.NOT_CONNECTED; - } - } catch (SocketTimeoutException e) { - return ConnectivityCheckResult.TIMEOUT; - } catch (ProtocolException e) { - return ConnectivityCheckResult.ERROR; - } catch (IOException e) { - return ConnectivityCheckResult.NOT_CONNECTED; - } - } - - @Override - protected void onPostExecute(Integer result) { - callback.onResult(result); - } - }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); + postResult(callback, ConnectivityCheckResult.ERROR); } /** diff --git a/chrome/android/java/src/org/chromium/chrome/browser/net/connectivitydetector/ConnectivityDetector.java b/chrome/android/java/src/org/chromium/chrome/browser/net/connectivitydetector/ConnectivityDetector.java --- a/chrome/android/java/src/org/chromium/chrome/browser/net/connectivitydetector/ConnectivityDetector.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/net/connectivitydetector/ConnectivityDetector.java @@ -401,69 +401,6 @@ public class ConnectivityDetector implements NetworkChangeNotifier.ConnectionTyp new AsyncTask() { @Override protected Integer doInBackground() { - HttpURLConnection urlConnection = null; - try { - RecordHistogram.recordCount1MHistogram( - "ConnectivityDetector.SentHttpProbe." + mClientName, 1); - Log.i(TAG, "Sending HTTP Probe now to url:" + urlString); - - URL url = new URL(urlString); - urlConnection = - (HttpURLConnection) - ChromiumNetworkAdapter.openConnection( - url, - NetworkTrafficAnnotationTag.MISSING_TRAFFIC_ANNOTATION); - urlConnection.setInstanceFollowRedirects(false); - urlConnection.setRequestMethod(sProbeMethod); - urlConnection.setConnectTimeout(timeoutMs); - urlConnection.setReadTimeout(timeoutMs); - urlConnection.setUseCaches(false); - urlConnection.setRequestProperty(USER_AGENT_HEADER_NAME, mUserAgentString); - - long requestTimestamp = SystemClock.elapsedRealtime(); - urlConnection.connect(); - long responseTimestamp = SystemClock.elapsedRealtime(); - int responseCode = urlConnection.getResponseCode(); - - Log.i( - TAG, - "Probe " - + urlString - + " time=" - + (responseTimestamp - requestTimestamp) - + "ms ret=" - + responseCode - + " headers=" - + urlConnection.getHeaderFields()); - - if (responseCode == HttpURLConnection.HTTP_NO_CONTENT) { - return ProbeResult.VALIDATED_WITH_NO_CONTENT; - } else if (responseCode >= 400) { - return ProbeResult.SERVER_ERROR; - } else if (responseCode == HttpURLConnection.HTTP_OK) { - // Treat 200 response with zero content length to not be a captive portal - // because the user cannot sign in to an empty page. Probably this is due to - // a broken transparent proxy. - if (urlConnection.getContentLength() == 0) { - return ProbeResult.VALIDATED_WITH_OK_BUT_ZERO_CONTENT_LENGTH; - } else if (urlConnection.getContentLength() == -1) { - // When no Content-length (default value == -1), attempt to read a byte - // from the response. - if (urlConnection.getInputStream().read() == -1) { - return ProbeResult.VALIDATED_WITH_OK_BUT_NO_CONTENT_LENGTH; - } - } - } - } catch (IOException e) { - Log.i(TAG, "Probe " + urlString + " failed w/ exception " + e); - // Most likely the exception is thrown due to host name not resolved or socket - // timeout. - return ProbeResult.NO_INTERNET; - } finally { - if (urlConnection != null) { - urlConnection.disconnect(); - } - } // The result returned from a well-known URL doesn't match the expected result, // probably due to that the traffic is intercepted by the captive portal. return ProbeResult.NOT_VALIDATED; diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omaha/OmahaBase.java b/chrome/android/java/src/org/chromium/chrome/browser/omaha/OmahaBase.java --- a/chrome/android/java/src/org/chromium/chrome/browser/omaha/OmahaBase.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/omaha/OmahaBase.java @@ -469,8 +469,7 @@ public class OmahaBase { }"""); try { URL url = new URL(assumeNonNull(getRequestGenerator()).getServerUrl()); - HttpURLConnection connection = - (HttpURLConnection) ChromiumNetworkAdapter.openConnection(url, annotation); + HttpURLConnection connection = null; connection.setConnectTimeout(MS_CONNECTION_TIMEOUT); connection.setReadTimeout(MS_CONNECTION_TIMEOUT); return connection; diff --git a/components/minidump_uploader/android/java/src/org/chromium/components/minidump_uploader/util/HttpURLConnectionFactoryImpl.java b/components/minidump_uploader/android/java/src/org/chromium/components/minidump_uploader/util/HttpURLConnectionFactoryImpl.java --- a/components/minidump_uploader/android/java/src/org/chromium/components/minidump_uploader/util/HttpURLConnectionFactoryImpl.java +++ b/components/minidump_uploader/android/java/src/org/chromium/components/minidump_uploader/util/HttpURLConnectionFactoryImpl.java @@ -40,11 +40,6 @@ public class HttpURLConnectionFactoryImpl implements HttpURLConnectionFactory { @Override public @Nullable HttpURLConnection createHttpURLConnection(String url) { - try { - return (HttpURLConnection) - ChromiumNetworkAdapter.openConnection(new URL(url), TRAFFIC_ANNOTATION); - } catch (IOException e) { - return null; - } + return null; } } diff --git a/components/variations/android/java/src/org/chromium/components/variations/firstrun/VariationsSeedFetcher.java b/components/variations/android/java/src/org/chromium/components/variations/firstrun/VariationsSeedFetcher.java --- a/components/variations/android/java/src/org/chromium/components/variations/firstrun/VariationsSeedFetcher.java +++ b/components/variations/android/java/src/org/chromium/components/variations/firstrun/VariationsSeedFetcher.java @@ -194,14 +194,6 @@ public class VariationsSeedFetcher { ResettersForTesting.register(() -> sInstance = oldValue); } - @VisibleForTesting - protected HttpURLConnection getServerConnection(SeedFetchParameters params) - throws MalformedURLException, IOException { - String urlString = getConnectionString(params); - URL url = new URL(urlString); - return (HttpURLConnection) ChromiumNetworkAdapter.openConnection(url, TRAFFIC_ANNOTATION); - } - @VisibleForTesting protected List getAvailableInstanceManipulations() { List compressions = new ArrayList(); @@ -533,24 +525,8 @@ public class VariationsSeedFetcher { HttpURLConnection connection = null; try { long startTimeMillis = SystemClock.elapsedRealtime(); - connection = getServerConnection(params); - connection.setReadTimeout(READ_TIMEOUT); - connection.setConnectTimeout(REQUEST_TIMEOUT); - connection.setDoInput(true); - if (currInfo != null) { - VariationsSeed currentVariationsSeed = currInfo.getParsedVariationsSeed(); - if (currentVariationsSeed != null) { - String serialNumber = currentVariationsSeed.getSerialNumber(); - if (!serialNumber.isEmpty()) { - connection.setRequestProperty("If-None-Match", serialNumber); - } - } - } List requestedInstanceManipulations = getAvailableInstanceManipulations(); - connection.setRequestProperty("A-IM", String.join(",", requestedInstanceManipulations)); - connection.connect(); - int responseCode = connection.getResponseCode(); - fetchInfo.seedFetchResult = responseCode; + int responseCode = 400; if (responseCode == HttpURLConnection.HTTP_OK) { recordSeedConnectTime(SystemClock.elapsedRealtime() - startTimeMillis); diff --git a/net/android/java/src/org/chromium/net/ChromiumNetworkAdapter.java b/net/android/java/src/org/chromium/net/ChromiumNetworkAdapter.java --- a/net/android/java/src/org/chromium/net/ChromiumNetworkAdapter.java +++ b/net/android/java/src/org/chromium/net/ChromiumNetworkAdapter.java @@ -26,10 +26,6 @@ public final class ChromiumNetworkAdapter { * data gets sent, what triggers it, etc. * @return a URLConnection linking to the URL. */ - public static URLConnection openConnection( - URL url, NetworkTrafficAnnotationTag trafficAnnotation) throws IOException { - return url.openConnection(); - } /** * Wrapper around URL#openConnection(Proxy), with an extra argument for static analysis/privacy @@ -41,11 +37,6 @@ public final class ChromiumNetworkAdapter { * data gets sent, what triggers it, etc. * @return a URLConnection linking to the URL. */ - public static URLConnection openConnection( - URL url, Proxy proxy, NetworkTrafficAnnotationTag trafficAnnotation) - throws IOException { - return url.openConnection(proxy); - } /** * Wrapper around URL#openStream(), with an extra argument for static analysis/privacy auditing. @@ -55,8 +46,4 @@ public final class ChromiumNetworkAdapter { * data gets sent, what triggers it, etc. * @return an InputStream linking to the URL. */ - public static InputStream openStream(URL url, NetworkTrafficAnnotationTag trafficAnnotation) - throws IOException { - return url.openStream(); - } } --