Commit 35e7414b authored by Rainhard Findling's avatar Rainhard Findling Committed by Commit Bot

Safety check UI: pluralized string for 'Change password[s]' button

* Prepares the safety check UI to receive a pluralized string to show
  in the 'Change password[s]' button, depending on if one or multiple
  passwords are compromised.
* Adds the C++ side string construction w/ tests.

Bug: 1015841
Change-Id: I4cf1b2197536f2cd7fbc606f8f167976cfc74f6b
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2107549Reviewed-by: default avatarEsmael Elmoslimany <aee@chromium.org>
Commit-Queue: Rainhard Findling <rainhard@chromium.org>
Cr-Commit-Position: refs/heads/master@{#751338}
parent 307ccefb
......@@ -1666,7 +1666,9 @@
No saved passwords
</message>
<message name="IDS_SETTINGS_SAFETY_CHECK_PASSWORDS_BUTTON" desc="This button allows users to change their compromised passwords.">
Change passwords
{NUM_PASSWORDS, plural,
=1 {Change password}
other {Change passwords}}
</message>
<message name="IDS_SETTINGS_SAFETY_CHECK_SAFE_BROWSING_ENABLED" desc="This text points out that Safe Browsing is enabled and that the user is protected.">
Safe Browsing is up to date and protecting you from harmful sites and downloads
......
......@@ -123,8 +123,8 @@
<div class="separator"></div>
<cr-button id="safetyCheckPasswordsButton" class="action-button"
on-click="onPasswordsButtonClick_" no-search
aria-label="$i18n{safetyCheckPasswordsButton}">
$i18n{safetyCheckPasswordsButton}
aria-label="[[passwordsButtonString_]]">
[[passwordsButtonString_]]
</cr-button>
</template>
</div>
......
......@@ -65,6 +65,7 @@ let UpdatesChangedEvent;
* @typedef {{
* newState: settings.SafetyCheckPasswordsStatus,
* displayString: string,
* buttonString: string,
* }}
*/
let PasswordsChangedEvent;
......@@ -168,6 +169,12 @@ Polymer({
* @private
*/
extensionsDisplayString_: String,
/**
* UI string to display in the password button.
* @private
*/
passwordsButtonString_: String,
},
/** @private {settings.SafetyCheckBrowserProxy} */
......@@ -271,6 +278,7 @@ Polymer({
*/
onSafetyCheckPasswordsChanged_: function(event) {
this.passwordsDisplayString_ = event.displayString;
this.passwordsButtonString_ = event.buttonString;
this.passwordsStatus_ = event.newState;
this.updateParentFromChildren_();
},
......
......@@ -39,6 +39,7 @@ constexpr char kPerformSafetyCheck[] = "performSafetyCheck";
constexpr char kGetParentRanDisplayString[] = "getSafetyCheckRanDisplayString";
constexpr char kNewState[] = "newState";
constexpr char kDisplayString[] = "displayString";
constexpr char kButtonString[] = "buttonString";
constexpr char kPasswordsCompromised[] = "passwordsCompromised";
constexpr char kExtensionsReenabledByUser[] = "extensionsReenabledByUser";
constexpr char kExtensionsReenabledByAdmin[] = "extensionsReenabledByAdmin";
......@@ -263,6 +264,10 @@ void SafetyCheckHandler::OnPasswordsCheckResult(PasswordsStatus status,
event.SetIntKey(kNewState, static_cast<int>(status));
if (status == PasswordsStatus::kCompromisedExist) {
event.SetIntKey(kPasswordsCompromised, num_compromised);
event.SetStringKey(
kButtonString,
l10n_util::GetPluralStringFUTF16(
IDS_SETTINGS_SAFETY_CHECK_PASSWORDS_BUTTON, num_compromised));
}
event.SetStringKey(kDisplayString,
GetStringForPasswords(status, num_compromised));
......
......@@ -179,6 +179,10 @@ class SafetyCheckHandlerTest : public ChromeRenderViewHostTestHarness {
const base::string16& expected);
void VerifyDisplayString(const base::DictionaryValue* event,
const std::string& expected);
void VerifyButtonString(const base::DictionaryValue* event,
const base::string16& expected);
void VerifyButtonString(const base::DictionaryValue* event,
const std::string& expected);
protected:
TestVersionUpdater* version_updater_ = nullptr;
......@@ -269,6 +273,20 @@ void SafetyCheckHandlerTest::VerifyDisplayString(
VerifyDisplayString(event, base::ASCIIToUTF16(expected));
}
void SafetyCheckHandlerTest::VerifyButtonString(
const base::DictionaryValue* event,
const base::string16& expected) {
base::string16 button;
ASSERT_TRUE(event->GetString("buttonString", &button));
EXPECT_EQ(expected, button);
}
void SafetyCheckHandlerTest::VerifyButtonString(
const base::DictionaryValue* event,
const std::string& expected) {
VerifyButtonString(event, base::ASCIIToUTF16(expected));
}
void SafetyCheckHandlerTest::ReplaceBrowserName(base::string16* s) {
base::ReplaceSubstringsAfterOffset(s, 0, base::ASCIIToUTF16("Google Chrome"),
base::ASCIIToUTF16("Browser"));
......@@ -587,6 +605,7 @@ TEST_F(SafetyCheckHandlerTest, CheckPasswords_CompromisedExist) {
ASSERT_TRUE(event2);
VerifyDisplayString(
event2, base::NumberToString(kCompromised) + " compromised passwords");
VerifyButtonString(event2, "Change passwords");
}
TEST_F(SafetyCheckHandlerTest, CheckPasswords_Error) {
......@@ -622,6 +641,7 @@ TEST_F(SafetyCheckHandlerTest, CheckPasswords_RunningOneCompromised) {
SafetyCheckHandler::PasswordsStatus::kCompromisedExist));
ASSERT_TRUE(event);
VerifyDisplayString(event, "1 compromised password");
VerifyButtonString(event, "Change password");
}
TEST_F(SafetyCheckHandlerTest, CheckPasswords_NoPasswords) {
......
......@@ -29,6 +29,7 @@ suite('SafetyCheckUiTests', function() {
const event = {};
event.newState = state;
event.displayString = null;
event.passwordsButtonString = null;
cr.webUIListenerCallback(
settings.SafetyCheckCallbackConstants.PASSWORDS_CHANGED, event);
}
......
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