Commit c69d9fb5 authored by Friedrich Horschig's avatar Friedrich Horschig Committed by Commit Bot

[TouchToFill][Android] Formatted blank usernames

This CL ensures that blank usernames display a translated version
instead of an empty string.

Bug: 1011836
Change-Id: Ic473e5adc59375c638c04b60ca81e0934891aec6
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1847303
Commit-Queue: Friedrich [CET] <fhorschig@chromium.org>
Reviewed-by: default avatarBoris Sazonov <bsazonov@chromium.org>
Cr-Commit-Position: refs/heads/master@{#703786}
parent 08a9110b
...@@ -44,8 +44,10 @@ class TouchToFillBridge implements TouchToFillComponent.Delegate { ...@@ -44,8 +44,10 @@ class TouchToFillBridge implements TouchToFillComponent.Delegate {
@CalledByNative @CalledByNative
private static void insertCredential(Credential[] credentials, int index, String username, private static void insertCredential(Credential[] credentials, int index, String username,
String password, String originUrl, boolean isPublicSuffixMatch) { String password, String formattedUsername, String originUrl,
credentials[index] = new Credential(username, password, originUrl, isPublicSuffixMatch); boolean isPublicSuffixMatch) {
credentials[index] = new Credential(
username, password, formattedUsername, originUrl, isPublicSuffixMatch);
} }
@CalledByNative @CalledByNative
......
...@@ -42,7 +42,7 @@ class TouchToFillViewBinder { ...@@ -42,7 +42,7 @@ class TouchToFillViewBinder {
*/ */
static void bindCredentialView(View view, Credential credential) { static void bindCredentialView(View view, Credential credential) {
TextView usernameText = view.findViewById(R.id.username); TextView usernameText = view.findViewById(R.id.username);
usernameText.setText(credential.getUsername()); usernameText.setText(credential.getFormattedUsername());
TextView passwordText = view.findViewById(R.id.password); TextView passwordText = view.findViewById(R.id.password);
passwordText.setText(credential.getPassword()); passwordText.setText(credential.getPassword());
......
...@@ -12,6 +12,7 @@ import org.chromium.base.annotations.CalledByNative; ...@@ -12,6 +12,7 @@ import org.chromium.base.annotations.CalledByNative;
public class Credential { public class Credential {
private final String mUsername; private final String mUsername;
private final String mPassword; private final String mPassword;
private final String mFormattedUsername;
private final String mOriginUrl; private final String mOriginUrl;
private final boolean mIsPublicSuffixMatch; private final boolean mIsPublicSuffixMatch;
...@@ -21,10 +22,11 @@ public class Credential { ...@@ -21,10 +22,11 @@ public class Credential {
* @param originUrl Origin URL shown to the user in case this credential is a PSL match. * @param originUrl Origin URL shown to the user in case this credential is a PSL match.
* @param isPublicSuffixMatch Indicating whether the credential is a PSL match. * @param isPublicSuffixMatch Indicating whether the credential is a PSL match.
*/ */
public Credential( public Credential(String username, String password, String formattedUsername, String originUrl,
String username, String password, String originUrl, boolean isPublicSuffixMatch) { boolean isPublicSuffixMatch) {
mUsername = username; mUsername = username;
mPassword = password; mPassword = password;
mFormattedUsername = formattedUsername;
mOriginUrl = originUrl; mOriginUrl = originUrl;
mIsPublicSuffixMatch = isPublicSuffixMatch; mIsPublicSuffixMatch = isPublicSuffixMatch;
} }
...@@ -39,6 +41,10 @@ public class Credential { ...@@ -39,6 +41,10 @@ public class Credential {
return mPassword; return mPassword;
} }
public String getFormattedUsername() {
return mFormattedUsername;
}
@CalledByNative @CalledByNative
public String getOriginUrl() { public String getOriginUrl() {
return mOriginUrl; return mOriginUrl;
......
...@@ -46,8 +46,9 @@ import java.util.Arrays; ...@@ -46,8 +46,9 @@ import java.util.Arrays;
public class TouchToFillIntegrationTest { public class TouchToFillIntegrationTest {
private static final String EXAMPLE_URL = "www.example.xyz"; private static final String EXAMPLE_URL = "www.example.xyz";
private static final String MOBILE_URL = "m.example.xyz"; private static final String MOBILE_URL = "m.example.xyz";
private static final Credential ANA = new Credential("Ana", "S3cr3t", EXAMPLE_URL, false); private static final Credential ANA =
private static final Credential BOB = new Credential("Bob", "*****", MOBILE_URL, true); new Credential("Ana", "S3cr3t", "Ana", EXAMPLE_URL, false);
private static final Credential BOB = new Credential("Bob", "*****", "Bob", MOBILE_URL, true);
private final TouchToFillComponent mTouchToFill = new TouchToFillCoordinator(); private final TouchToFillComponent mTouchToFill = new TouchToFillCoordinator();
......
...@@ -111,8 +111,8 @@ public class TouchToFillViewTest { ...@@ -111,8 +111,8 @@ public class TouchToFillViewTest {
TestThreadUtils.runOnUiThreadBlocking(() -> { TestThreadUtils.runOnUiThreadBlocking(() -> {
mTouchToFillView.setVisible(true); mTouchToFillView.setVisible(true);
mModel.get(CREDENTIAL_LIST) mModel.get(CREDENTIAL_LIST)
.addAll(Arrays.asList(new Credential("Ana", "S3cr3t", null, false), .addAll(Arrays.asList(new Credential("Ana", "S3cr3t", "Ana", null, false),
new Credential("Bob", "***", "m.example.xyz", true))); new Credential("", "***", "No Username", "m.example.xyz", true)));
}); });
pollUiThread(() -> getBottomSheetState() == SheetState.FULL); pollUiThread(() -> getBottomSheetState() == SheetState.FULL);
...@@ -121,7 +121,7 @@ public class TouchToFillViewTest { ...@@ -121,7 +121,7 @@ public class TouchToFillViewTest {
assertThat(getCredentialPasswordAt(0).getText(), is("S3cr3t")); assertThat(getCredentialPasswordAt(0).getText(), is("S3cr3t"));
assertThat(getCredentialPasswordAt(0).getTransformationMethod(), assertThat(getCredentialPasswordAt(0).getTransformationMethod(),
instanceOf(PasswordTransformationMethod.class)); instanceOf(PasswordTransformationMethod.class));
assertThat(getCredentialNameAt(1).getText(), is("Bob")); assertThat(getCredentialNameAt(1).getText(), is("No Username"));
assertThat(getCredentialPasswordAt(1).getText(), is("***")); assertThat(getCredentialPasswordAt(1).getText(), is("***"));
assertThat(getCredentialPasswordAt(1).getTransformationMethod(), assertThat(getCredentialPasswordAt(1).getTransformationMethod(),
instanceOf(PasswordTransformationMethod.class)); instanceOf(PasswordTransformationMethod.class));
...@@ -132,8 +132,8 @@ public class TouchToFillViewTest { ...@@ -132,8 +132,8 @@ public class TouchToFillViewTest {
public void testCredentialsAreClickable() { public void testCredentialsAreClickable() {
TestThreadUtils.runOnUiThreadBlocking(() -> { TestThreadUtils.runOnUiThreadBlocking(() -> {
mModel.get(CREDENTIAL_LIST) mModel.get(CREDENTIAL_LIST)
.addAll(Arrays.asList(new Credential("Carl", "G3h3!m", "", false), .addAll(Arrays.asList(new Credential("Carl", "G3h3!m", "Carl", "", false),
new Credential("Bob", "***", "m.example.xyz", true))); new Credential("Bob", "***", "Bob", "m.example.xyz", true)));
mModel.set(VISIBLE, true); mModel.set(VISIBLE, true);
}); });
pollUiThread(() -> getBottomSheetState() == SheetState.FULL); pollUiThread(() -> getBottomSheetState() == SheetState.FULL);
......
...@@ -36,9 +36,10 @@ import java.util.Collections; ...@@ -36,9 +36,10 @@ import java.util.Collections;
public class TouchToFillControllerTest { public class TouchToFillControllerTest {
private static final String TEST_URL = "www.example.xyz"; private static final String TEST_URL = "www.example.xyz";
private static final String TEST_MOBILE_URL = "www.example.xyz"; private static final String TEST_MOBILE_URL = "www.example.xyz";
private static final Credential ANA = new Credential("Ana", "S3cr3t", null, false); private static final Credential ANA = new Credential("Ana", "S3cr3t", "Ana", null, false);
private static final Credential BOB = new Credential("Bob", "*****", TEST_MOBILE_URL, true); private static final Credential BOB =
private static final Credential CARL = new Credential("Carl", "G3h3!m", "", false); new Credential("Bob", "*****", "Bob", TEST_MOBILE_URL, true);
private static final Credential CARL = new Credential("Carl", "G3h3!m", "Carl", "", false);
@Mock @Mock
private TouchToFillComponent.Delegate mMockDelegate; private TouchToFillComponent.Delegate mMockDelegate;
......
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
#include "chrome/browser/password_manager/touch_to_fill_controller.h" #include "chrome/browser/password_manager/touch_to_fill_controller.h"
#include "chrome/browser/touch_to_fill/android/jni_headers/Credential_jni.h" #include "chrome/browser/touch_to_fill/android/jni_headers/Credential_jni.h"
#include "chrome/browser/touch_to_fill/android/jni_headers/TouchToFillBridge_jni.h" #include "chrome/browser/touch_to_fill/android/jni_headers/TouchToFillBridge_jni.h"
#include "chrome/browser/ui/passwords/manage_passwords_view_utils.h"
#include "components/password_manager/core/browser/origin_credential_store.h" #include "components/password_manager/core/browser/origin_credential_store.h"
#include "ui/android/view_android.h" #include "ui/android/view_android.h"
#include "ui/android/window_android.h" #include "ui/android/window_android.h"
...@@ -70,6 +71,7 @@ void TouchToFillViewImpl::Show( ...@@ -70,6 +71,7 @@ void TouchToFillViewImpl::Show(
env, credential_array, i, env, credential_array, i,
ConvertUTF16ToJavaString(env, credential.username), ConvertUTF16ToJavaString(env, credential.username),
ConvertUTF16ToJavaString(env, credential.password), ConvertUTF16ToJavaString(env, credential.password),
ConvertUTF16ToJavaString(env, GetDisplayUsername(credential)),
ConvertUTF8ToJavaString(env, credential.origin_url.spec()), ConvertUTF8ToJavaString(env, credential.origin_url.spec()),
credential.is_public_suffix_match); credential.is_public_suffix_match);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment