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