Commit fb323cad authored by Rainhard Findling's avatar Rainhard Findling Committed by Commit Bot

Safety check: update Chrome cleaner safe states

* This CL aligns the Chrome cleaner child element behavior in the
  'safe' states with the latest mocks.

Bug: 1087263
Change-Id: Ie4c36cf6d45c80f421b191758aeadadab8d04280
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2282401Reviewed-by: default avatarEsmael Elmoslimany <aee@chromium.org>
Commit-Queue: Rainhard Findling <rainhard@chromium.org>
Cr-Commit-Position: refs/heads/master@{#791752}
parent 648a653d
......@@ -131,6 +131,30 @@
<message name="IDS_SETTINGS_SAFETY_CHECK_EXTENSIONS_ERROR" desc="This text describes that safety check could not check extensions for an unkown reason.">
Chromium can't check your extensions. Try again later.
</message>
<message name="IDS_SETTINGS_SAFETY_CHECK_CHROME_CLEANER_AFTER" desc="This text describes that Chrome automatically checks device software.">
Chromium checks for unwanted software once a week
</message>
<message name="IDS_SETTINGS_SAFETY_CHECK_CHROME_CLEANER_AFTER_SECONDS" desc="This text describes that Chrome automatically checks device software and that it last checked a moment ago.">
Chromium checks for unwanted software once a week. Last checked: a moment ago.
</message>
<message name="IDS_SETTINGS_SAFETY_CHECK_CHROME_CLEANER_AFTER_MINUTES" desc="This text describes that Chrome automatically checks device software and that it last checked minutes ago.">
{NUM_MINS, plural,
=1 {Chromium checks for unwanted software once a week. Last checked: 1 minute ago.}
other {Chromium checks for unwanted software once a week. Last checked: {NUM_MINS} minutes ago.}}
</message>
<message name="IDS_SETTINGS_SAFETY_CHECK_CHROME_CLEANER_AFTER_HOURS" desc="This text describes that Chrome automatically checks device software and that it last checked hours ago.">
{NUM_HOURS, plural,
=1 {Chromium checks for unwanted software once a week. Last checked: 1 hour ago.}
other {Chromium checks for unwanted software once a week. Last checked: {NUM_HOURS} hours ago.}}
</message>
<message name="IDS_SETTINGS_SAFETY_CHECK_CHROME_CLEANER_YESTERDAY" desc="This text describes that Chrome automatically checks device software and that it last checked yesterday.">
Chromium checks for unwanted software once a week. Last checked: yesterday.
</message>
<message name="IDS_SETTINGS_SAFETY_CHECK_CHROME_CLEANER_AFTER_DAYS" desc="This text describes that Chrome automatically checks device software and that it last checked days ago.">
{NUM_DAYS, plural,
=1 {Chromium checks for unwanted software once a week. Last checked: 1 day ago.}
other {Chromium checks for unwanted software once a week. Last checked: {NUM_DAYS} days ago.}}
</message>
<message name="IDS_SETTINGS_SAFETY_CHECK_CHROME_CLEANER_INFECTED" desc="This text describes that Chrome found harmful software on the computer.">
Chromium found harmful software on your computer
</message>
......
8cba4a7618c7021e673c6fe4bbfe38d3caed87bb
\ No newline at end of file
......@@ -132,6 +132,30 @@
<message name="IDS_SETTINGS_SAFETY_CHECK_EXTENSIONS_ERROR" desc="This text describes that safety check could not check extensions for an unkown reason.">
Chrome can't check your extensions. Try again later.
</message>
<message name="IDS_SETTINGS_SAFETY_CHECK_CHROME_CLEANER_AFTER" desc="This text describes that Chrome automatically checks device software.">
Chrome checks for unwanted software once a week
</message>
<message name="IDS_SETTINGS_SAFETY_CHECK_CHROME_CLEANER_AFTER_SECONDS" desc="This text describes that Chrome automatically checks device software and that it last checked a moment ago.">
Chrome checks for unwanted software once a week. Last checked: a moment ago.
</message>
<message name="IDS_SETTINGS_SAFETY_CHECK_CHROME_CLEANER_AFTER_MINUTES" desc="This text describes that Chrome automatically checks device software and that it last checked minutes ago.">
{NUM_MINS, plural,
=1 {Chrome checks for unwanted software once a week. Last checked: 1 minute ago.}
other {Chrome checks for unwanted software once a week. Last checked: {NUM_MINS} minutes ago.}}
</message>
<message name="IDS_SETTINGS_SAFETY_CHECK_CHROME_CLEANER_AFTER_HOURS" desc="This text describes that Chrome automatically checks device software and that it last checked hours ago.">
{NUM_HOURS, plural,
=1 {Chrome checks for unwanted software once a week. Last checked: 1 hour ago.}
other {Chrome checks for unwanted software once a week. Last checked: {NUM_HOURS} hours ago.}}
</message>
<message name="IDS_SETTINGS_SAFETY_CHECK_CHROME_CLEANER_YESTERDAY" desc="This text describes that Chrome automatically checks device software and that it last checked yesterday.">
Chrome checks for unwanted software once a week. Last checked: yesterday.
</message>
<message name="IDS_SETTINGS_SAFETY_CHECK_CHROME_CLEANER_AFTER_DAYS" desc="This text describes that Chrome automatically checks device software and that it last checked days ago.">
{NUM_DAYS, plural,
=1 {Chrome checks for unwanted software once a week. Last checked: 1 day ago.}
other {Chrome checks for unwanted software once a week. Last checked: {NUM_DAYS} days ago.}}
</message>
<message name="IDS_SETTINGS_SAFETY_CHECK_CHROME_CLEANER_INFECTED" desc="This text describes that Chrome found harmful software on the computer.">
Chrome found harmful software on your computer
</message>
......
......@@ -1243,7 +1243,10 @@
<message name="IDS_SETTINGS_SAFETY_CHECK_CHROME_CLEANER_BUTTON_ARIA_LABEL" desc="Accessiblity text for the button that allows users to review and remove harmful software found on their computer.">
Review device software
</message>
<message name="IDS_SETTINGS_SAFETY_CHECK_CHROME_CLEANER_MORE_BUTTON_ARIA_LABEL" desc="Accessiblity text for the button that leads users to the Chrome cleaner page, which explains details about the device softrware check.">
Show details of the device software check
</message>
<message name="IDS_SETTINGS_NETWORK_PREDICTION_ENABLED_LABEL" desc="In the advanced options tab, the text next to the checkbox that enables prediction of network actions. Actions include browser-initiated DNS prefetching, TCP and SSL preconnection, and prerendering of webpages.">
Preload pages for faster browsing and searching
</message>
......
......@@ -90,18 +90,22 @@ Polymer({
case SafetyCheckChromeCleanerStatus.CLEANING_SUCCEEDED:
case SafetyCheckChromeCleanerStatus.REPORTER_RUNNING:
case SafetyCheckChromeCleanerStatus.SCANNING:
// Safe states.
return SafetyCheckIconStatus.SAFE;
case SafetyCheckChromeCleanerStatus.REPORTER_FAILED:
case SafetyCheckChromeCleanerStatus.SCANNING_FAILED:
case SafetyCheckChromeCleanerStatus.CLEANING_FAILED:
case SafetyCheckChromeCleanerStatus.CLEANER_DOWNLOAD_FAILED:
// Error states.
case SafetyCheckChromeCleanerStatus.CLEANING:
case SafetyCheckChromeCleanerStatus.REBOOT_REQUIRED:
case SafetyCheckChromeCleanerStatus.DISABLED_BY_ADMIN:
// Other states.
return SafetyCheckIconStatus.INFO;
case SafetyCheckChromeCleanerStatus.CONNECTION_LOST:
case SafetyCheckChromeCleanerStatus.USER_DECLINED_CLEANUP:
case SafetyCheckChromeCleanerStatus.INFECTED:
// Infected states.
return SafetyCheckIconStatus.WARNING;
default:
assertNotReached();
......@@ -114,15 +118,26 @@ Polymer({
*/
getButtonLabel_: function() {
switch (this.status_) {
case SafetyCheckChromeCleanerStatus.INITIAL:
case SafetyCheckChromeCleanerStatus.REPORTER_FOUND_NOTHING:
case SafetyCheckChromeCleanerStatus.SCANNING_FOUND_NOTHING:
case SafetyCheckChromeCleanerStatus.CLEANING_SUCCEEDED:
case SafetyCheckChromeCleanerStatus.REPORTER_RUNNING:
case SafetyCheckChromeCleanerStatus.SCANNING:
// Safe states.
return this.i18n('privacyPageMore');
case SafetyCheckChromeCleanerStatus.REPORTER_FAILED:
case SafetyCheckChromeCleanerStatus.SCANNING_FAILED:
case SafetyCheckChromeCleanerStatus.CLEANING_FAILED:
case SafetyCheckChromeCleanerStatus.CLEANER_DOWNLOAD_FAILED:
// Error states.
return this.i18n('passwordViewDetails');
case SafetyCheckChromeCleanerStatus.CONNECTION_LOST:
case SafetyCheckChromeCleanerStatus.USER_DECLINED_CLEANUP:
case SafetyCheckChromeCleanerStatus.INFECTED:
// Infected states.
case SafetyCheckChromeCleanerStatus.CLEANING:
// Cleaning in progress.
return this.i18n('safetyCheckReview');
case SafetyCheckChromeCleanerStatus.REBOOT_REQUIRED:
return this.i18n('chromeCleanupRestartButtonLabel');
......@@ -137,15 +152,26 @@ Polymer({
*/
getButtonAriaLabel_: function() {
switch (this.status_) {
case SafetyCheckChromeCleanerStatus.INITIAL:
case SafetyCheckChromeCleanerStatus.REPORTER_FOUND_NOTHING:
case SafetyCheckChromeCleanerStatus.SCANNING_FOUND_NOTHING:
case SafetyCheckChromeCleanerStatus.CLEANING_SUCCEEDED:
case SafetyCheckChromeCleanerStatus.REPORTER_RUNNING:
case SafetyCheckChromeCleanerStatus.SCANNING:
// Safe states.
return this.i18n('safetyCheckChromeCleanerMoreButtonAriaLabel');
case SafetyCheckChromeCleanerStatus.REPORTER_FAILED:
case SafetyCheckChromeCleanerStatus.SCANNING_FAILED:
case SafetyCheckChromeCleanerStatus.CLEANING_FAILED:
case SafetyCheckChromeCleanerStatus.CLEANER_DOWNLOAD_FAILED:
// Error states.
return this.i18n('safetyCheckReviewErrorDetails');
case SafetyCheckChromeCleanerStatus.CONNECTION_LOST:
case SafetyCheckChromeCleanerStatus.USER_DECLINED_CLEANUP:
case SafetyCheckChromeCleanerStatus.INFECTED:
// Infected states.
case SafetyCheckChromeCleanerStatus.CLEANING:
// Cleaning in progress.
return this.i18n('safetyCheckChromeCleanerButtonAriaLabel');
case SafetyCheckChromeCleanerStatus.REBOOT_REQUIRED:
return this.i18n('chromeCleanupRestartButtonLabel');
......@@ -175,14 +201,24 @@ Polymer({
// TODO(crbug.com/1087263): Add metrics for safety check CCT child user
// actions.
switch (this.status_) {
case SafetyCheckChromeCleanerStatus.INITIAL:
case SafetyCheckChromeCleanerStatus.REPORTER_FOUND_NOTHING:
case SafetyCheckChromeCleanerStatus.SCANNING_FOUND_NOTHING:
case SafetyCheckChromeCleanerStatus.CLEANING_SUCCEEDED:
case SafetyCheckChromeCleanerStatus.REPORTER_RUNNING:
case SafetyCheckChromeCleanerStatus.SCANNING:
// Safe states.
case SafetyCheckChromeCleanerStatus.REPORTER_FAILED:
case SafetyCheckChromeCleanerStatus.SCANNING_FAILED:
case SafetyCheckChromeCleanerStatus.CONNECTION_LOST:
case SafetyCheckChromeCleanerStatus.USER_DECLINED_CLEANUP:
case SafetyCheckChromeCleanerStatus.CLEANING_FAILED:
// Error states.
case SafetyCheckChromeCleanerStatus.USER_DECLINED_CLEANUP:
case SafetyCheckChromeCleanerStatus.CLEANER_DOWNLOAD_FAILED:
case SafetyCheckChromeCleanerStatus.INFECTED:
// Infected states.
case SafetyCheckChromeCleanerStatus.CLEANING:
// Cleaning in progress.
Router.getInstance().navigateTo(
routes.CHROME_CLEANUP,
/* dynamicParams= */ null, /* removeSearch= */ true);
......
......@@ -637,17 +637,16 @@ base::string16 SafetyCheckHandler::GetStringForChromeCleaner(
}
#endif
base::string16 SafetyCheckHandler::GetStringForParentRan(
base::Time safety_check_completion_time) {
return SafetyCheckHandler::GetStringForParentRan(safety_check_completion_time,
base::Time::Now());
}
base::string16 SafetyCheckHandler::GetStringForParentRan(
base::Time safety_check_completion_time,
base::Time system_time) {
base::string16 SafetyCheckHandler::GetStringForTimePassed(
base::Time completion_timestamp,
base::Time system_time,
int less_than_one_minute_ago_message_id,
int minutes_ago_message_id,
int hours_ago_message_id,
int yesterday_message_id,
int days_ago_message_id) {
base::Time::Exploded completion_time_exploded;
safety_check_completion_time.LocalExplode(&completion_time_exploded);
completion_timestamp.LocalExplode(&completion_time_exploded);
base::Time::Exploded system_time_exploded;
system_time.LocalExplode(&system_time_exploded);
......@@ -656,43 +655,82 @@ base::string16 SafetyCheckHandler::GetStringForParentRan(
base::Time::Exploded time_yesterday_exploded;
time_yesterday.LocalExplode(&time_yesterday_exploded);
const auto time_diff = system_time - safety_check_completion_time;
const auto time_diff = system_time - completion_timestamp;
if (completion_time_exploded.year == system_time_exploded.year &&
completion_time_exploded.month == system_time_exploded.month &&
completion_time_exploded.day_of_month ==
system_time_exploded.day_of_month) {
// Safety check ran today.
// The timestamp is today.
const int time_diff_in_mins = time_diff.InMinutes();
if (time_diff_in_mins == 0) {
return l10n_util::GetStringUTF16(
IDS_SETTINGS_SAFETY_CHECK_PARENT_PRIMARY_LABEL_AFTER);
return l10n_util::GetStringUTF16(less_than_one_minute_ago_message_id);
} else if (time_diff_in_mins < 60) {
return l10n_util::GetPluralStringFUTF16(
IDS_SETTINGS_SAFETY_CHECK_PARENT_PRIMARY_LABEL_AFTER_MINS,
time_diff_in_mins);
return l10n_util::GetPluralStringFUTF16(minutes_ago_message_id,
time_diff_in_mins);
} else {
return l10n_util::GetPluralStringFUTF16(
IDS_SETTINGS_SAFETY_CHECK_PARENT_PRIMARY_LABEL_AFTER_HOURS,
time_diff_in_mins / 60);
return l10n_util::GetPluralStringFUTF16(hours_ago_message_id,
time_diff_in_mins / 60);
}
} else if (completion_time_exploded.year == time_yesterday_exploded.year &&
completion_time_exploded.month == time_yesterday_exploded.month &&
completion_time_exploded.day_of_month ==
time_yesterday_exploded.day_of_month) {
// Safety check ran yesterday.
return l10n_util::GetStringUTF16(
IDS_SETTINGS_SAFETY_CHECK_PARENT_PRIMARY_LABEL_AFTER_YESTERDAY);
// The timestamp was yesterday.
return l10n_util::GetStringUTF16(yesterday_message_id);
} else {
// Safety check ran longer ago than yesterday.
// The timestamp is longer ago than yesterday.
// TODO(crbug.com/1015841): While a minor issue, this is not be the ideal
// way to calculate the days passed since safety check ran. For example,
// way to calculate the days passed since the timestamp. For example,
// <48 h might still be 2 days ago.
const int time_diff_in_days = time_diff.InDays();
return l10n_util::GetPluralStringFUTF16(
IDS_SETTINGS_SAFETY_CHECK_PARENT_PRIMARY_LABEL_AFTER_DAYS,
time_diff_in_days);
return l10n_util::GetPluralStringFUTF16(days_ago_message_id,
time_diff_in_days);
}
}
base::string16 SafetyCheckHandler::GetStringForParentRan(
base::Time safety_check_completion_time,
base::Time system_time) {
return SafetyCheckHandler::GetStringForTimePassed(
safety_check_completion_time, system_time,
IDS_SETTINGS_SAFETY_CHECK_PARENT_PRIMARY_LABEL_AFTER,
IDS_SETTINGS_SAFETY_CHECK_PARENT_PRIMARY_LABEL_AFTER_MINS,
IDS_SETTINGS_SAFETY_CHECK_PARENT_PRIMARY_LABEL_AFTER_HOURS,
IDS_SETTINGS_SAFETY_CHECK_PARENT_PRIMARY_LABEL_AFTER_YESTERDAY,
IDS_SETTINGS_SAFETY_CHECK_PARENT_PRIMARY_LABEL_AFTER_DAYS);
}
base::string16 SafetyCheckHandler::GetStringForParentRan(
base::Time safety_check_completion_time) {
return SafetyCheckHandler::GetStringForParentRan(safety_check_completion_time,
base::Time::Now());
}
#if defined(OS_WIN) && BUILDFLAG(GOOGLE_CHROME_BRANDING)
base::string16 SafetyCheckHandler::GetStringForChromeCleanerRan() {
base::Time cct_completion_time;
// TODO(crbug.com/1087263): If FOIL completion time exists in Windows Registry
// write it to |cct_completion_time|.
return SafetyCheckHandler::GetStringForChromeCleanerRan(cct_completion_time,
base::Time::Now());
}
base::string16 SafetyCheckHandler::GetStringForChromeCleanerRan(
base::Time cct_completion_time,
base::Time system_time) {
if (cct_completion_time.is_null()) {
return l10n_util::GetStringUTF16(
IDS_SETTINGS_SAFETY_CHECK_CHROME_CLEANER_AFTER);
}
return SafetyCheckHandler::GetStringForTimePassed(
cct_completion_time, system_time,
IDS_SETTINGS_SAFETY_CHECK_CHROME_CLEANER_AFTER_SECONDS,
IDS_SETTINGS_SAFETY_CHECK_CHROME_CLEANER_AFTER_MINUTES,
IDS_SETTINGS_SAFETY_CHECK_CHROME_CLEANER_AFTER_HOURS,
IDS_SETTINGS_SAFETY_CHECK_CHROME_CLEANER_YESTERDAY,
IDS_SETTINGS_SAFETY_CHECK_CHROME_CLEANER_AFTER_DAYS);
}
#endif
void SafetyCheckHandler::DetermineIfOfflineOrError(bool connected) {
OnUpdateCheckResult(connected ? UpdateStatus::kFailed
......
......@@ -123,12 +123,30 @@ class SafetyCheckHandler
// should only be called as a result of an explicit user action.
void PerformSafetyCheck();
// Constructs a string depicting how much time passed since the completion of
// something from the corresponding timestamps and strings IDs.
base::string16 GetStringForTimePassed(base::Time completion_timestamp,
base::Time system_time,
int less_than_one_minute_ago_message_id,
int minutes_ago_message_id,
int hours_ago_message_id,
int yesterday_message_id,
int days_ago_message_id);
// Constructs the 'safety check ran' display string by how long ago safety
// check ran.
base::string16 GetStringForParentRan(base::Time safety_check_completion_time);
base::string16 GetStringForParentRan(base::Time safety_check_completion_time,
base::Time system_time);
#if defined(OS_WIN) && BUILDFLAG(GOOGLE_CHROME_BRANDING)
// Constructs the string for the Chrome cleaner 'safe' state which depicts
// how long ago its last check ran.
base::string16 GetStringForChromeCleanerRan();
base::string16 GetStringForChromeCleanerRan(base::Time cct_completion_time,
base::Time system_time);
#endif
protected:
SafetyCheckHandler(
std::unique_ptr<safety_check::UpdateCheckHelper> update_helper,
......
......@@ -201,6 +201,11 @@ class SafetyCheckHandlerTest : public ChromeRenderViewHostTestHarness {
void VerifyDisplayString(const base::DictionaryValue* event,
const std::string& expected);
// Replaces any instances of browser name (e.g. Google Chrome, Chromium,
// etc) with "browser" to make sure tests work both on Chromium and
// Google Chrome.
void ReplaceBrowserName(base::string16* s);
protected:
safety_check::TestUpdateCheckHelper* update_helper_ = nullptr;
TestVersionUpdater* version_updater_ = nullptr;
......@@ -211,12 +216,6 @@ class SafetyCheckHandlerTest : public ChromeRenderViewHostTestHarness {
content::TestWebUI test_web_ui_;
std::unique_ptr<TestingSafetyCheckHandler> safety_check_;
base::HistogramTester histogram_tester_;
private:
// Replaces any instances of browser name (e.g. Google Chrome, Chromium,
// etc) with "browser" to make sure tests work both on Chromium and
// Google Chrome.
void ReplaceBrowserName(base::string16* s);
};
void SafetyCheckHandlerTest::SetUp() {
......@@ -1137,6 +1136,79 @@ TEST_F(SafetyCheckHandlerTest, CheckParentRanDisplayString) {
}
}
#if defined(OS_WIN) && BUILDFLAG(GOOGLE_CHROME_BRANDING)
TEST_F(SafetyCheckHandlerTest, CheckChromeCleanerRanDisplayString) {
// Test string without timestamp.
base::Time null_time;
base::string16 display_string =
safety_check_->GetStringForChromeCleanerRan(null_time, null_time);
ReplaceBrowserName(&display_string);
EXPECT_EQ(
display_string,
base::UTF8ToUTF16("Browser checks for unwanted software once a week"));
// Test strings with timestamp.
// 1 second before midnight Dec 31st 2020, so that -(24h-1s) is still on the
// same day. This test time is hard coded to prevent DST flakiness, see
// crbug.com/1066576.
const base::Time system_time =
base::Time::FromDoubleT(1609459199).LocalMidnight() -
base::TimeDelta::FromSeconds(1);
// Display strings for given time deltas in seconds.
std::vector<std::tuple<std::string, int>> tuples{
std::make_tuple("Browser checks for unwanted software once a week. Last "
"checked: a moment ago.",
1),
std::make_tuple("Browser checks for unwanted software once a week. Last "
"checked: a moment ago.",
59),
std::make_tuple("Browser checks for unwanted software once a week. Last "
"checked: 1 minute ago.",
60),
std::make_tuple("Browser checks for unwanted software once a week. Last "
"checked: 2 minutes ago.",
60 * 2),
std::make_tuple("Browser checks for unwanted software once a week. Last "
"checked: 59 minutes ago.",
60 * 60 - 1),
std::make_tuple("Browser checks for unwanted software once a week. Last "
"checked: 1 hour ago.",
60 * 60),
std::make_tuple("Browser checks for unwanted software once a week. Last "
"checked: 2 hours ago.",
60 * 60 * 2),
std::make_tuple("Browser checks for unwanted software once a week. Last "
"checked: 23 hours ago.",
60 * 60 * 23),
std::make_tuple("Browser checks for unwanted software once a week. Last "
"checked: yesterday.",
60 * 60 * 24),
std::make_tuple("Browser checks for unwanted software once a week. Last "
"checked: yesterday.",
60 * 60 * 24 * 2 - 1),
std::make_tuple("Browser checks for unwanted software once a week. Last "
"checked: 2 days ago.",
60 * 60 * 24 * 2),
std::make_tuple("Browser checks for unwanted software once a week. Last "
"checked: 2 days ago.",
60 * 60 * 24 * 3 - 1),
std::make_tuple("Browser checks for unwanted software once a week. Last "
"checked: 3 days ago.",
60 * 60 * 24 * 3),
std::make_tuple("Browser checks for unwanted software once a week. Last "
"checked: 3 days ago.",
60 * 60 * 24 * 4 - 1)};
// Test that above time deltas produce the corresponding display strings.
for (auto tuple : tuples) {
const base::Time time =
system_time - base::TimeDelta::FromSeconds(std::get<1>(tuple));
display_string =
safety_check_->GetStringForChromeCleanerRan(time, system_time);
ReplaceBrowserName(&display_string);
EXPECT_EQ(base::UTF8ToUTF16(std::get<0>(tuple)), display_string);
}
}
#endif
TEST_F(SafetyCheckHandlerTest, CheckSafetyCheckStartedWebUiEvents) {
safety_check_->SendSafetyCheckStartedWebUiUpdates();
......
......@@ -1370,6 +1370,8 @@ void AddPrivacyStrings(content::WebUIDataSource* html_source,
IDS_SETTINGS_SAFETY_CHECK_CHROME_CLEANER_PRIMARY_LABEL},
{"safetyCheckChromeCleanerButtonAriaLabel",
IDS_SETTINGS_SAFETY_CHECK_CHROME_CLEANER_BUTTON_ARIA_LABEL},
{"safetyCheckChromeCleanerMoreButtonAriaLabel",
IDS_SETTINGS_SAFETY_CHECK_CHROME_CLEANER_MORE_BUTTON_ARIA_LABEL},
};
AddLocalizedStringsBulk(html_source, kLocalizedStrings);
......
......@@ -117,7 +117,10 @@ suite('SafetyCheckChromeCleanerUiTests', function() {
page: page,
iconStatus: SafetyCheckIconStatus.SAFE,
label: 'Device software',
buttonLabel: 'More',
buttonAriaLabel: 'Show details of the device software check',
});
expectChromeCleanerRouteButtonClickActions();
break;
default:
// Not covered by this test.
......
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