From: csagan5 <32685696+csagan5@users.noreply.github.com> Date: Sun, 3 Nov 2019 08:22:29 +0100 Subject: Remove SMS integration License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html --- .../browser/language/AppLocaleUtils.java | 45 ------- .../content/browser/sms/SmsProviderGms.java | 29 +--- .../browser/sms/SmsUserConsentReceiver.java | 48 +------ .../browser/sms/SmsVerificationReceiver.java | 126 +----------------- .../content/browser/sms/Wrappers.java | 27 +--- 5 files changed, 8 insertions(+), 267 deletions(-) diff --git a/chrome/browser/language/android/java/src/org/chromium/chrome/browser/language/AppLocaleUtils.java b/chrome/browser/language/android/java/src/org/chromium/chrome/browser/language/AppLocaleUtils.java --- a/chrome/browser/language/android/java/src/org/chromium/chrome/browser/language/AppLocaleUtils.java +++ b/chrome/browser/language/android/java/src/org/chromium/chrome/browser/language/AppLocaleUtils.java @@ -121,51 +121,6 @@ public class AppLocaleUtils { return Locale.forLanguageTag("en-US"); } - /** - * Download the language split. If successful set the application language shared preference. - * If set to null the system language will be used. - * @param languageName String BCP-47 code of language to download. - */ - public static void setAppLanguagePref(String languageName) { - setAppLanguagePref(languageName, success -> {}); - } - - /** - * Download the language split using the provided listener for callbacks. If successful set the - * application language shared preference. If called from an APK build where no bundle needs to - * be downloaded the listener's on complete function is immediately called. If languageName is - * null the system language will be used. - * @param languageName String BCP-47 code of language to download. - * @param listener LanguageSplitInstaller.InstallListener to use for callbacks. - */ - public static void setAppLanguagePref( - String languageName, LanguageSplitInstaller.InstallListener listener) { - // Wrap the install listener so that on success the app override preference is set. - LanguageSplitInstaller.InstallListener wrappedListener = - (success) -> { - if (success) { - if (shouldUseSystemManagedLocale()) { - setSystemManagedAppLanguage(languageName); - } else { - ChromeSharedPreferences.getInstance() - .writeString( - ChromePreferenceKeys.APPLICATION_OVERRIDE_LANGUAGE, - languageName); - } - } - listener.onComplete(success); - }; - - // If this is not a bundle build or the default system language is being used the language - // split should not be installed. Instead indicate that the listener completed successfully - // since the language resources will already be present. - if (!BundleUtils.isBundle() || isFollowSystemLanguage(languageName)) { - wrappedListener.onComplete(true); - } else { - LanguageSplitInstaller.getInstance().installLanguage(languageName, wrappedListener); - } - } - /** * Sets the {@link LocaleManager} App language to |languageName|. * TODO(crbug.com/1333981) Move to Android T. diff --git a/content/public/android/java/src/org/chromium/content/browser/sms/SmsProviderGms.java b/content/public/android/java/src/org/chromium/content/browser/sms/SmsProviderGms.java --- a/content/public/android/java/src/org/chromium/content/browser/sms/SmsProviderGms.java +++ b/content/public/android/java/src/org/chromium/content/browser/sms/SmsProviderGms.java @@ -6,9 +6,6 @@ package org.chromium.content.browser.sms; import androidx.annotation.VisibleForTesting; -import com.google.android.gms.common.ConnectionResult; -import com.google.android.gms.common.GoogleApiAvailability; - import org.jni_zero.CalledByNative; import org.jni_zero.JNINamespace; import org.jni_zero.NativeMethods; @@ -47,17 +44,11 @@ public class SmsProviderGms { public SmsProviderGms( long smsProviderGmsAndroid, @GmsBackend int backend, - boolean isVerificationBackendAvailable) { + boolean ignored) { mSmsProviderGmsAndroid = smsProviderGmsAndroid; mBackend = backend; mContext = new Wrappers.WebOTPServiceContext(ContextUtils.getApplicationContext(), this); - // Creates an mVerificationReceiver regardless of the backend to support requests from - // remote devices. - if (isVerificationBackendAvailable) { - mVerificationReceiver = new SmsVerificationReceiver(this, mContext); - } - if (mBackend == GmsBackend.AUTO || mBackend == GmsBackend.USER_CONSENT) { mUserConsentReceiver = new SmsUserConsentReceiver(this, mContext); } @@ -89,13 +80,7 @@ public class SmsProviderGms { @CalledByNative private static SmsProviderGms create(long smsProviderGmsAndroid, @GmsBackend int backend) { Log.d(TAG, "Creating SmsProviderGms"); - boolean isVerificationBackendAvailable = - GoogleApiAvailability.getInstance() - .isGooglePlayServicesAvailable( - ContextUtils.getApplicationContext(), - MIN_GMS_VERSION_NUMBER_WITH_CODE_BROWSER_BACKEND) - == ConnectionResult.SUCCESS; - return new SmsProviderGms(smsProviderGmsAndroid, backend, isVerificationBackendAvailable); + return new SmsProviderGms(smsProviderGmsAndroid, backend, false); } @CalledByNative @@ -191,16 +176,6 @@ public class SmsProviderGms { } public Wrappers.SmsRetrieverClientWrapper getClient() { - if (mClient != null) { - return mClient; - } - mClient = - new Wrappers.SmsRetrieverClientWrapper( - mUserConsentReceiver != null ? mUserConsentReceiver.createClient() : null, - mVerificationReceiver != null - ? mVerificationReceiver.createClient() - : null); - return mClient; } diff --git a/content/public/android/java/src/org/chromium/content/browser/sms/SmsUserConsentReceiver.java b/content/public/android/java/src/org/chromium/content/browser/sms/SmsUserConsentReceiver.java --- a/content/public/android/java/src/org/chromium/content/browser/sms/SmsUserConsentReceiver.java +++ b/content/public/android/java/src/org/chromium/content/browser/sms/SmsUserConsentReceiver.java @@ -10,13 +10,6 @@ import android.content.Context; import android.content.Intent; import android.content.IntentFilter; -import com.google.android.gms.auth.api.phone.SmsRetriever; -import com.google.android.gms.auth.api.phone.SmsRetrieverClient; -import com.google.android.gms.common.api.CommonStatusCodes; -import com.google.android.gms.common.api.Status; -import com.google.android.gms.tasks.OnFailureListener; -import com.google.android.gms.tasks.Task; - import org.chromium.base.ContextUtils; import org.chromium.base.Log; import org.chromium.ui.base.WindowAndroid; @@ -33,30 +26,12 @@ public class SmsUserConsentReceiver extends BroadcastReceiver { mDestroyed = false; mProvider = provider; mContext = context; - - // A broadcast receiver is registered upon the creation of this class - // which happens when the SMS Retriever API is used for the first time - // since chrome last restarted (which, on android, happens frequently). - // The broadcast receiver is fairly lightweight (e.g. it responds - // quickly without much computation). - // If this broadcast receiver becomes more heavyweight, we should make - // this registration expire after the SMS message is received. - if (DEBUG) Log.d(TAG, "Registering intent filters."); - IntentFilter filter = new IntentFilter(); - filter.addAction(SmsRetriever.SMS_RETRIEVED_ACTION); - ContextUtils.registerExportedBroadcastReceiver( - mContext, this, filter, SmsRetriever.SEND_PERMISSION); - } - - public SmsRetrieverClient createClient() { - return SmsRetriever.getClient(mContext); } public void destroy() { if (mDestroyed) return; if (DEBUG) Log.d(TAG, "Destroying SmsUserConsentReceiver."); mDestroyed = true; - mContext.unregisterReceiver(this); } @Override @@ -67,7 +42,7 @@ public class SmsUserConsentReceiver extends BroadcastReceiver { return; } - if (!SmsRetriever.SMS_RETRIEVED_ACTION.equals(intent.getAction())) { + /*if (!SmsRetriever.SMS_RETRIEVED_ACTION.equals(intent.getAction())) { return; } @@ -105,29 +80,14 @@ public class SmsUserConsentReceiver extends BroadcastReceiver { if (DEBUG) Log.d(TAG, "Timeout"); mProvider.onTimeout(); break; - } + } */ } void onConsentResult(int resultCode, Intent data) { - if (resultCode == Activity.RESULT_OK) { - String message = data.getStringExtra(SmsRetriever.EXTRA_SMS_MESSAGE); - mProvider.onReceive(message, GmsBackend.USER_CONSENT); - } else if (resultCode == Activity.RESULT_CANCELED) { - if (DEBUG) Log.d(TAG, "Activity result cancelled."); - mProvider.onCancel(); - } + if (DEBUG) Log.d(TAG, "Activity result discarded."); } public void listen(WindowAndroid windowAndroid) { - Task task = mProvider.getClient().startSmsUserConsent(null); - - task.addOnFailureListener( - new OnFailureListener() { - @Override - public void onFailure(Exception e) { - Log.e(TAG, "Task failed to start", e); - } - }); - if (DEBUG) Log.d(TAG, "Installed task"); + if (DEBUG) Log.d(TAG, "Ignored task"); } } diff --git a/content/public/android/java/src/org/chromium/content/browser/sms/SmsVerificationReceiver.java b/content/public/android/java/src/org/chromium/content/browser/sms/SmsVerificationReceiver.java --- a/content/public/android/java/src/org/chromium/content/browser/sms/SmsVerificationReceiver.java +++ b/content/public/android/java/src/org/chromium/content/browser/sms/SmsVerificationReceiver.java @@ -11,16 +11,6 @@ import android.content.Context; import android.content.Intent; import android.content.IntentFilter; -import com.google.android.gms.auth.api.phone.SmsCodeBrowserClient; -import com.google.android.gms.auth.api.phone.SmsCodeRetriever; -import com.google.android.gms.auth.api.phone.SmsRetriever; -import com.google.android.gms.auth.api.phone.SmsRetrieverStatusCodes; -import com.google.android.gms.common.api.ApiException; -import com.google.android.gms.common.api.CommonStatusCodes; -import com.google.android.gms.common.api.ResolvableApiException; -import com.google.android.gms.common.api.Status; -import com.google.android.gms.tasks.Task; - import org.chromium.base.ContextUtils; import org.chromium.base.Log; import org.chromium.base.metrics.RecordHistogram; @@ -64,65 +54,13 @@ public class SmsVerificationReceiver extends BroadcastReceiver { // lightweight (e.g. it responds quickly without much computation). If this broadcast // receiver becomes more heavyweight, we should make this registration expire after the SMS // message is received. - if (DEBUG) Log.i(TAG, "Registering intent filters."); - IntentFilter filter = new IntentFilter(); - filter.addAction(SmsCodeRetriever.SMS_CODE_RETRIEVED_ACTION); - - // The SEND_PERMISSION permission is not documented to held by the sender of this broadcast, - // but it's coming from the same place the UserConsent (SmsRetriever.SMS_RETRIEVED_ACTION) - // broadcast is coming from, so the sender will be holding this permission. This prevents - // other apps from spoofing verification codes. - ContextUtils.registerExportedBroadcastReceiver( - mContext, this, filter, SmsRetriever.SEND_PERMISSION); - } - - public SmsCodeBrowserClient createClient() { - return SmsCodeRetriever.getBrowserClient(mContext); } public void destroy() { - if (mDestroyed) return; - if (DEBUG) Log.d(TAG, "Destroying SmsVerificationReceiver."); - mDestroyed = true; - mContext.unregisterReceiver(this); } @Override public void onReceive(Context context, Intent intent) { - if (DEBUG) Log.d(TAG, "Received something!"); - - if (mDestroyed) { - return; - } - - if (!SmsCodeRetriever.SMS_CODE_RETRIEVED_ACTION.equals(intent.getAction())) { - return; - } - - if (intent.getExtras() == null) { - return; - } - - final Status status; - - try { - status = (Status) intent.getParcelableExtra(SmsRetriever.EXTRA_STATUS); - } catch (Throwable e) { - if (DEBUG) Log.d(TAG, "Error getting parceable"); - return; - } - - switch (status.getStatusCode()) { - case CommonStatusCodes.SUCCESS: - String message = intent.getExtras().getString(SmsCodeRetriever.EXTRA_SMS_CODE_LINE); - if (DEBUG) Log.d(TAG, "Got message: %s!", message); - mProvider.onReceive(message, GmsBackend.VERIFICATION); - break; - case CommonStatusCodes.TIMEOUT: - if (DEBUG) Log.d(TAG, "Timeout"); - mProvider.onTimeout(); - break; - } } public void onPermissionDone(int resultCode, boolean isLocalRequest) { @@ -142,72 +80,10 @@ public class SmsVerificationReceiver extends BroadcastReceiver { * task. */ public void onRetrieverTaskFailure(boolean isLocalRequest, Exception e) { - if (DEBUG) Log.d(TAG, "Task failed. Attempting recovery.", e); - ApiException exception = (ApiException) e; - if (exception.getStatusCode() == SmsRetrieverStatusCodes.API_NOT_CONNECTED) { - reportBackendAvailability(BackendAvailability.API_NOT_CONNECTED); - mProvider.onMethodNotAvailable(isLocalRequest); - Log.d(TAG, "update GMS services."); - } else if (exception.getStatusCode() == SmsRetrieverStatusCodes.PLATFORM_NOT_SUPPORTED) { - reportBackendAvailability(BackendAvailability.PLATFORM_NOT_SUPPORTED); - mProvider.onMethodNotAvailable(isLocalRequest); - Log.d(TAG, "old android platform."); - } else if (exception.getStatusCode() == SmsRetrieverStatusCodes.API_NOT_AVAILABLE) { - reportBackendAvailability(BackendAvailability.API_NOT_AVAILABLE); - mProvider.onMethodNotAvailable(isLocalRequest); - Log.d(TAG, "not the default browser."); - } else if (exception.getStatusCode() == SmsRetrieverStatusCodes.USER_PERMISSION_REQUIRED) { - cancelRequestAndReportBackendAvailability(); - Log.d(TAG, "user permission is required."); - } else if (exception.getStatusCode() == CommonStatusCodes.RESOLUTION_REQUIRED) { - if (exception instanceof ResolvableApiException) { - // This occurs if the default browser is in NONE permission - // state. Resolve it by calling PendingIntent.send() method. - // This shows the consent dialog to user so they grant - // one-time permission. The dialog result will be received - // via `onPermissionDone()` - ResolvableApiException rex = (ResolvableApiException) exception; - try { - PendingIntent resolutionIntent = rex.getResolution(); - mProvider - .getWindow() - .showIntent( - resolutionIntent, - new WindowAndroid.IntentCallback() { - @Override - public void onIntentCompleted(int resultCode, Intent data) { - // Backend availability will be recorded inside - // |onPermissionDone|. - onPermissionDone(resultCode, isLocalRequest); - } - }, - null); - } catch (Exception ex) { - cancelRequestAndReportBackendAvailability(); - Log.e(TAG, "Cannot launch user permission", ex); - } - } - } else { - Log.w(TAG, "Unexpected exception", e); - } } public void listen(boolean isLocalRequest) { - Wrappers.SmsRetrieverClientWrapper client = mProvider.getClient(); - Task task = client.startSmsCodeBrowserRetriever(); - - task.addOnSuccessListener( - unused -> { - this.reportBackendAvailability(BackendAvailability.AVAILABLE); - mProvider.verificationReceiverSucceeded(isLocalRequest); - }); - task.addOnFailureListener( - (Exception e) -> { - this.onRetrieverTaskFailure(isLocalRequest, e); - mProvider.verificationReceiverFailed(isLocalRequest); - }); - - if (DEBUG) Log.d(TAG, "Installed task"); + if (DEBUG) Log.d(TAG, "Ignored task"); } public void reportBackendAvailability(BackendAvailability availability) { diff --git a/content/public/android/java/src/org/chromium/content/browser/sms/Wrappers.java b/content/public/android/java/src/org/chromium/content/browser/sms/Wrappers.java --- a/content/public/android/java/src/org/chromium/content/browser/sms/Wrappers.java +++ b/content/public/android/java/src/org/chromium/content/browser/sms/Wrappers.java @@ -14,27 +14,15 @@ import android.os.Handler; import androidx.annotation.RequiresApi; -import com.google.android.gms.auth.api.phone.SmsCodeBrowserClient; -import com.google.android.gms.auth.api.phone.SmsCodeRetriever; -import com.google.android.gms.auth.api.phone.SmsRetrieverClient; -import com.google.android.gms.tasks.Task; - class Wrappers { // Prevent instantiation. private Wrappers() {} /** Wraps com.google.android.gms.auth.api.phone.SmsRetrieverClient. */ static class SmsRetrieverClientWrapper { - // Used for user consent flow. - private final SmsRetrieverClient mSmsRetrieverClient; - // Used for browser code flow. - private final SmsCodeBrowserClient mSmsCodeBrowserClient; private WebOTPServiceContext mContext; - public SmsRetrieverClientWrapper( - SmsRetrieverClient smsRetrieverClient, SmsCodeBrowserClient smsCodeBrowserClient) { - mSmsRetrieverClient = smsRetrieverClient; - mSmsCodeBrowserClient = smsCodeBrowserClient; + public SmsRetrieverClientWrapper() { } public void setContext(WebOTPServiceContext context) { @@ -44,14 +32,6 @@ class Wrappers { public WebOTPServiceContext getContext() { return mContext; } - - public Task startSmsCodeBrowserRetriever() { - return mSmsCodeBrowserClient.startSmsCodeRetriever(); - } - - public Task startSmsUserConsent(String senderAddress) { - return mSmsRetrieverClient.startSmsUserConsent(senderAddress); - } } /** @@ -81,11 +61,6 @@ class Wrappers { } private void onRegisterReceiver(BroadcastReceiver receiver, IntentFilter filter) { - if (filter.hasAction(SmsCodeRetriever.SMS_CODE_RETRIEVED_ACTION)) { - mVerificationReceiver = receiver; - } else { - mUserConsentReceiver = receiver; - } } // --------------------------------------------------------------------- --