summaryrefslogtreecommitdiffstats
path: root/chromium/chrome/browser/ui/webui/settings
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2018-08-28 15:28:34 +0200
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2018-08-28 13:54:51 +0000
commit2a19c63448c84c1805fb1a585c3651318bb86ca7 (patch)
treeeb17888e8531aa6ee5e85721bd553b832a7e5156 /chromium/chrome/browser/ui/webui/settings
parentb014812705fc80bff0a5c120dfcef88f349816dc (diff)
BASELINE: Update Chromium to 69.0.3497.70
Change-Id: I2b7b56e4e7a8b26656930def0d4575dc32b900a0 Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'chromium/chrome/browser/ui/webui/settings')
-rw-r--r--chromium/chrome/browser/ui/webui/settings/about_handler.cc8
-rw-r--r--chromium/chrome/browser/ui/webui/settings/about_handler.h2
-rw-r--r--chromium/chrome/browser/ui/webui/settings/change_password_handler.cc2
-rw-r--r--chromium/chrome/browser/ui/webui/settings/chrome_cleanup_handler.cc32
-rw-r--r--chromium/chrome/browser/ui/webui/settings/chromeos/account_manager_handler.cc67
-rw-r--r--chromium/chrome/browser/ui/webui/settings/chromeos/account_manager_handler.h26
-rw-r--r--chromium/chrome/browser/ui/webui/settings/chromeos/android_apps_handler.cc12
-rw-r--r--chromium/chrome/browser/ui/webui/settings/chromeos/android_apps_handler.h6
-rw-r--r--chromium/chrome/browser/ui/webui/settings/chromeos/crostini_handler.cc6
-rw-r--r--chromium/chrome/browser/ui/webui/settings/chromeos/cups_printers_handler.cc6
-rw-r--r--chromium/chrome/browser/ui/webui/settings/chromeos/device_storage_handler.cc176
-rw-r--r--chromium/chrome/browser/ui/webui/settings/chromeos/device_storage_handler.h39
-rw-r--r--chromium/chrome/browser/ui/webui/settings/chromeos/easy_unlock_settings_handler_unittest.cc2
-rw-r--r--chromium/chrome/browser/ui/webui/settings/chromeos/internet_handler.cc132
-rw-r--r--chromium/chrome/browser/ui/webui/settings/chromeos/internet_handler.h6
-rw-r--r--chromium/chrome/browser/ui/webui/settings/chromeos/multidevice_handler.cc38
-rw-r--r--chromium/chrome/browser/ui/webui/settings/chromeos/multidevice_handler.h38
-rw-r--r--chromium/chrome/browser/ui/webui/settings/chromeos/smb_handler.cc66
-rw-r--r--chromium/chrome/browser/ui/webui/settings/chromeos/smb_handler.h10
-rw-r--r--chromium/chrome/browser/ui/webui/settings/extension_control_handler.cc5
-rw-r--r--chromium/chrome/browser/ui/webui/settings/font_handler.cc2
-rw-r--r--chromium/chrome/browser/ui/webui/settings/languages_handler.cc15
-rw-r--r--chromium/chrome/browser/ui/webui/settings/md_settings_localized_strings_provider.cc293
-rw-r--r--chromium/chrome/browser/ui/webui/settings/md_settings_ui.cc49
-rw-r--r--chromium/chrome/browser/ui/webui/settings/people_handler.cc56
-rw-r--r--chromium/chrome/browser/ui/webui/settings/people_handler.h2
-rw-r--r--chromium/chrome/browser/ui/webui/settings/people_handler_unittest.cc52
-rw-r--r--chromium/chrome/browser/ui/webui/settings/safe_browsing_handler.cc6
-rw-r--r--chromium/chrome/browser/ui/webui/settings/search_engines_handler.cc6
-rw-r--r--chromium/chrome/browser/ui/webui/settings/settings_clear_browsing_data_handler.cc133
-rw-r--r--chromium/chrome/browser/ui/webui/settings/settings_clear_browsing_data_handler.h13
-rw-r--r--chromium/chrome/browser/ui/webui/settings/settings_cookies_view_handler.cc120
-rw-r--r--chromium/chrome/browser/ui/webui/settings/settings_cookies_view_handler.h3
-rw-r--r--chromium/chrome/browser/ui/webui/settings/settings_manage_profile_handler.cc2
-rw-r--r--chromium/chrome/browser/ui/webui/settings/site_settings_handler.cc129
-rw-r--r--chromium/chrome/browser/ui/webui/settings/site_settings_handler.h7
-rw-r--r--chromium/chrome/browser/ui/webui/settings/site_settings_handler_unittest.cc176
-rw-r--r--chromium/chrome/browser/ui/webui/settings/tts_handler.cc50
38 files changed, 1218 insertions, 575 deletions
diff --git a/chromium/chrome/browser/ui/webui/settings/about_handler.cc b/chromium/chrome/browser/ui/webui/settings/about_handler.cc
index 8bd560132b1..067049dbd29 100644
--- a/chromium/chrome/browser/ui/webui/settings/about_handler.cc
+++ b/chromium/chrome/browser/ui/webui/settings/about_handler.cc
@@ -66,6 +66,7 @@
#include "chrome/browser/ui/webui/help/version_updater_chromeos.h"
#include "chromeos/chromeos_switches.h"
#include "chromeos/dbus/power_manager_client.h"
+#include "chromeos/dbus/util/version_loader.h"
#include "chromeos/network/network_state.h"
#include "chromeos/network/network_state_handler.h"
#include "chromeos/system/statistics_provider.h"
@@ -321,6 +322,11 @@ AboutHandler* AboutHandler::Create(content::WebUIDataSource* html_source,
IDS_ABOUT_CROS_VERSION_LICENSE,
base::ASCIIToUTF16(chrome::kChromeUIOSCreditsURL));
html_source->AddString("aboutProductOsLicense", os_license);
+ base::string16 os_with_linux_license = l10n_util::GetStringFUTF16(
+ IDS_ABOUT_CROS_WITH_LINUX_VERSION_LICENSE,
+ base::ASCIIToUTF16(chrome::kChromeUIOSCreditsURL));
+ html_source->AddString("aboutProductOsWithLinuxLicense",
+ os_with_linux_license);
html_source->AddBoolean("aboutEnterpriseManaged", IsEnterpriseManaged());
base::Time build_time = base::SysInfo::GetLsbReleaseTime();
@@ -646,6 +652,7 @@ void AboutHandler::RequestUpdate() {
void AboutHandler::SetUpdateStatus(VersionUpdater::Status status,
int progress,
+ bool rollback,
const std::string& version,
int64_t size,
const base::string16& message) {
@@ -656,6 +663,7 @@ void AboutHandler::SetUpdateStatus(VersionUpdater::Status status,
event->SetString("status", UpdateStatusToString(status));
event->SetString("message", message);
event->SetInteger("progress", progress);
+ event->SetBoolean("rollback", rollback);
event->SetString("version", version);
// DictionaryValue does not support int64_t, so convert to string.
event->SetString("size", base::Int64ToString(size));
diff --git a/chromium/chrome/browser/ui/webui/settings/about_handler.h b/chromium/chrome/browser/ui/webui/settings/about_handler.h
index 3cbfa4a8d4b..4c8ae08a292 100644
--- a/chromium/chrome/browser/ui/webui/settings/about_handler.h
+++ b/chromium/chrome/browser/ui/webui/settings/about_handler.h
@@ -22,7 +22,6 @@
#if defined(OS_CHROMEOS)
#include "base/task/cancelable_task_tracker.h"
#include "chrome/browser/chromeos/tpm_firmware_update.h"
-#include "chromeos/system/version_loader.h"
#endif // defined(OS_CHROMEOS)
namespace base {
@@ -128,6 +127,7 @@ class AboutHandler : public settings::SettingsPageUIHandler,
// Callback method which forwards status updates to the page.
void SetUpdateStatus(VersionUpdater::Status status,
int progress,
+ bool rollback,
const std::string& version,
int64_t size,
const base::string16& fail_message);
diff --git a/chromium/chrome/browser/ui/webui/settings/change_password_handler.cc b/chromium/chrome/browser/ui/webui/settings/change_password_handler.cc
index 6d64f7bbd08..090962aebcf 100644
--- a/chromium/chrome/browser/ui/webui/settings/change_password_handler.cc
+++ b/chromium/chrome/browser/ui/webui/settings/change_password_handler.cc
@@ -54,6 +54,8 @@ void ChangePasswordHandler::HandleInitialize(const base::ListValue* args) {
void ChangePasswordHandler::HandleChangePassword(const base::ListValue* args) {
service_->OnUserAction(
web_ui()->GetWebContents(),
+ safe_browsing::LoginReputationClientRequest::PasswordReuseEvent::
+ SIGN_IN_PASSWORD,
safe_browsing::PasswordProtectionService::CHROME_SETTINGS,
safe_browsing::PasswordProtectionService::CHANGE_PASSWORD);
}
diff --git a/chromium/chrome/browser/ui/webui/settings/chrome_cleanup_handler.cc b/chromium/chrome/browser/ui/webui/settings/chrome_cleanup_handler.cc
index f07c59b79c0..271e31ac2b6 100644
--- a/chromium/chrome/browser/ui/webui/settings/chrome_cleanup_handler.cc
+++ b/chromium/chrome/browser/ui/webui/settings/chrome_cleanup_handler.cc
@@ -44,24 +44,27 @@ std::unique_ptr<base::ListValue> GetFilesAsListStorage(
return value;
}
-// Returns a ListValue containing a copy of the registry keys stored in
-// |registry_keys|.
-std::unique_ptr<base::ListValue> GetRegistryKeysAsListStorage(
- const std::set<base::string16>& registry_keys) {
+// Returns a ListValue containing a copy of the strings stored in |string_set|.
+std::unique_ptr<base::ListValue> GetStringSetAsListStorage(
+ const std::set<base::string16>& string_set) {
auto value = std::make_unique<base::ListValue>();
- for (const base::string16& key : registry_keys)
- value->AppendString(key);
+ for (const base::string16& string : string_set)
+ value->AppendString(string);
return value;
}
base::DictionaryValue GetScannerResultsAsDictionary(
- const safe_browsing::ChromeCleanerScannerResults& scanner_results) {
+ const safe_browsing::ChromeCleanerScannerResults& scanner_results,
+ Profile* profile) {
base::DictionaryValue value;
value.SetList("files",
GetFilesAsListStorage(scanner_results.files_to_delete()));
value.SetList("registryKeys",
- GetRegistryKeysAsListStorage(scanner_results.registry_keys()));
+ GetStringSetAsListStorage(scanner_results.registry_keys()));
+ std::set<base::string16> extensions;
+ scanner_results.FetchExtensionNames(profile, &extensions);
+ value.SetList("extensions", GetStringSetAsListStorage(extensions));
return value;
}
@@ -178,7 +181,7 @@ void ChromeCleanupHandler::OnInfected(
const safe_browsing::ChromeCleanerScannerResults& scanner_results) {
FireWebUIListener("chrome-cleanup-on-infected",
base::Value(is_powered_by_partner),
- GetScannerResultsAsDictionary(scanner_results));
+ GetScannerResultsAsDictionary(scanner_results, profile_));
}
void ChromeCleanupHandler::OnCleaning(
@@ -186,7 +189,7 @@ void ChromeCleanupHandler::OnCleaning(
const safe_browsing::ChromeCleanerScannerResults& scanner_results) {
FireWebUIListener("chrome-cleanup-on-cleaning",
base::Value(is_powered_by_partner),
- GetScannerResultsAsDictionary(scanner_results));
+ GetScannerResultsAsDictionary(scanner_results, profile_));
}
void ChromeCleanupHandler::OnRebootRequired() {
@@ -194,14 +197,9 @@ void ChromeCleanupHandler::OnRebootRequired() {
}
void ChromeCleanupHandler::OnLogsEnabledChanged(bool logs_enabled) {
- // Logs are considered managed if the logs themselves are managed or if the
- // entire cleanup feature is disabled by policy.
- PrefService* local_state = g_browser_process->local_state();
- bool is_managed = !controller_->IsAllowedByPolicy() ||
- (local_state && local_state->IsManagedPreference(
- prefs::kSwReporterReportingEnabled));
FireWebUIListener("chrome-cleanup-upload-permission-change",
- base::Value(is_managed), base::Value(logs_enabled));
+ base::Value(controller_->IsReportingManagedByPolicy()),
+ base::Value(logs_enabled));
}
void ChromeCleanupHandler::OnLogsEnabledPrefChanged() {
diff --git a/chromium/chrome/browser/ui/webui/settings/chromeos/account_manager_handler.cc b/chromium/chrome/browser/ui/webui/settings/chromeos/account_manager_handler.cc
index aba28c25d50..46968303b50 100644
--- a/chromium/chrome/browser/ui/webui/settings/chromeos/account_manager_handler.cc
+++ b/chromium/chrome/browser/ui/webui/settings/chromeos/account_manager_handler.cc
@@ -14,6 +14,7 @@
#include "chrome/browser/chromeos/profiles/profile_helper.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/webui/settings/settings_page_ui_handler.h"
+#include "chrome/browser/ui/webui/signin/inline_login_handler_dialog_chromeos.h"
#include "chromeos/account_manager/account_manager.h"
#include "chromeos/account_manager/account_manager_factory.h"
#include "components/signin/core/browser/account_tracker_service.h"
@@ -29,15 +30,28 @@ AccountManagerUIHandler::AccountManagerUIHandler(
AccountTrackerService* account_tracker_service)
: account_manager_(account_manager),
account_tracker_service_(account_tracker_service),
- weak_factory_(this) {}
+ weak_factory_(this) {
+ DCHECK(account_manager_);
+ DCHECK(account_tracker_service_);
-AccountManagerUIHandler::~AccountManagerUIHandler() = default;
+ account_manager_->AddObserver(this);
+ account_tracker_service_->AddObserver(this);
+}
+
+AccountManagerUIHandler::~AccountManagerUIHandler() {
+ account_manager_->RemoveObserver(this);
+ account_tracker_service_->RemoveObserver(this);
+}
void AccountManagerUIHandler::RegisterMessages() {
web_ui()->RegisterMessageCallback(
"getAccounts",
base::BindRepeating(&AccountManagerUIHandler::HandleGetAccounts,
weak_factory_.GetWeakPtr()));
+ web_ui()->RegisterMessageCallback(
+ "addAccount",
+ base::BindRepeating(&AccountManagerUIHandler::HandleAddAccount,
+ weak_factory_.GetWeakPtr()));
}
void AccountManagerUIHandler::HandleGetAccounts(const base::ListValue* args) {
@@ -71,6 +85,12 @@ void AccountManagerUIHandler::GetAccountsCallbackHandler(
account_tracker_service_->FindAccountInfoByGaiaId(account_key.id);
DCHECK(!account_info.IsEmpty());
+ if (account_info.full_name.empty()) {
+ // Account info has not been fully fetched yet from GAIA. Ignore this
+ // account.
+ continue;
+ }
+
base::DictionaryValue account;
account.SetString("fullName", account_info.full_name);
account.SetString("email", account_info.email);
@@ -96,9 +116,52 @@ void AccountManagerUIHandler::GetAccountsCallbackHandler(
ResolveJavascriptCallback(callback_id, accounts);
}
+void AccountManagerUIHandler::HandleAddAccount(const base::ListValue* args) {
+ AllowJavascript();
+ InlineLoginHandlerDialogChromeOS::Show();
+}
+
void AccountManagerUIHandler::OnJavascriptAllowed() {}
void AccountManagerUIHandler::OnJavascriptDisallowed() {}
+// |AccountManager::Observer| overrides.
+// Note: We need to listen on |AccountManager| in addition to
+// |AccountTrackerService| because there is no guarantee that |AccountManager|
+// (our source of truth) will have a newly added account by the time
+// |AccountTrackerService| has it.
+void AccountManagerUIHandler::OnTokenUpserted(
+ const AccountManager::AccountKey& account_key) {
+ RefreshUI();
+}
+
+void AccountManagerUIHandler::OnAccountRemoved(
+ const AccountManager::AccountKey& account_key) {
+ RefreshUI();
+}
+
+// |AccountTrackerService::Observer| overrides.
+// For newly added accounts, |AccountTrackerService| may take some time to
+// fetch user's full name and account image. Whenever that is completed, we
+// may need to update the UI with this new set of information.
+// Note that we may be listening to |AccountTrackerService| but we still
+// consider |AccountManager| to be the source of truth for account list.
+void AccountManagerUIHandler::OnAccountUpdated(const AccountInfo& info) {
+ RefreshUI();
+}
+
+void AccountManagerUIHandler::OnAccountImageUpdated(
+ const std::string& account_id,
+ const gfx::Image& image) {
+ RefreshUI();
+}
+
+void AccountManagerUIHandler::OnAccountRemoved(const AccountInfo& account_key) {
+}
+
+void AccountManagerUIHandler::RefreshUI() {
+ FireWebUIListener("accounts-changed");
+}
+
} // namespace settings
} // namespace chromeos
diff --git a/chromium/chrome/browser/ui/webui/settings/chromeos/account_manager_handler.h b/chromium/chrome/browser/ui/webui/settings/chromeos/account_manager_handler.h
index 95316717231..078a51cb189 100644
--- a/chromium/chrome/browser/ui/webui/settings/chromeos/account_manager_handler.h
+++ b/chromium/chrome/browser/ui/webui/settings/chromeos/account_manager_handler.h
@@ -5,19 +5,21 @@
#ifndef CHROME_BROWSER_UI_WEBUI_SETTINGS_CHROMEOS_ACCOUNT_MANAGER_HANDLER_H_
#define CHROME_BROWSER_UI_WEBUI_SETTINGS_CHROMEOS_ACCOUNT_MANAGER_HANDLER_H_
+#include <string>
#include <vector>
#include "base/macros.h"
#include "base/memory/weak_ptr.h"
#include "chrome/browser/ui/webui/settings/settings_page_ui_handler.h"
#include "chromeos/account_manager/account_manager.h"
-
-class AccountTrackerService;
+#include "components/signin/core/browser/account_tracker_service.h"
namespace chromeos {
namespace settings {
-class AccountManagerUIHandler : public ::settings::SettingsPageUIHandler {
+class AccountManagerUIHandler : public ::settings::SettingsPageUIHandler,
+ public AccountManager::Observer,
+ public AccountTrackerService::Observer {
public:
// Accepts non-owning pointers to |AccountManager| and
// |AccountTrackerService|. Both of these must outlive |this| instance.
@@ -30,15 +32,33 @@ class AccountManagerUIHandler : public ::settings::SettingsPageUIHandler {
void OnJavascriptAllowed() override;
void OnJavascriptDisallowed() override;
+ // |AccountManager::Observer| overrides.
+ // |AccountManager| is considered to be the source of truth for account
+ // information.
+ void OnTokenUpserted(const AccountManager::AccountKey& account_key) override;
+ void OnAccountRemoved(const AccountManager::AccountKey& account_key) override;
+
+ // |AccountTrackerService::Observer| overrides.
+ void OnAccountUpdated(const AccountInfo& info) override;
+ void OnAccountImageUpdated(const std::string& account_id,
+ const gfx::Image& image) override;
+ void OnAccountRemoved(const AccountInfo& account_key) override;
+
private:
// WebUI "getAccounts" message callback.
void HandleGetAccounts(const base::ListValue* args);
+ // WebUI "addAccount" message callback.
+ void HandleAddAccount(const base::ListValue* args);
+
// |AccountManager::GetAccounts| callback.
void GetAccountsCallbackHandler(
base::Value callback_id,
std::vector<AccountManager::AccountKey> account_keys);
+ // Refreshes the UI.
+ void RefreshUI();
+
// A non-owning pointer to |AccountManager|.
AccountManager* const account_manager_;
diff --git a/chromium/chrome/browser/ui/webui/settings/chromeos/android_apps_handler.cc b/chromium/chrome/browser/ui/webui/settings/chromeos/android_apps_handler.cc
index 1a3824cb28e..20b842fa019 100644
--- a/chromium/chrome/browser/ui/webui/settings/chromeos/android_apps_handler.cc
+++ b/chromium/chrome/browser/ui/webui/settings/chromeos/android_apps_handler.cc
@@ -57,14 +57,20 @@ void AndroidAppsHandler::OnJavascriptDisallowed() {
void AndroidAppsHandler::OnAppRegistered(
const std::string& app_id,
const ArcAppListPrefs::AppInfo& app_info) {
- OnAppChanged(app_id);
+ HandleAppChanged(app_id);
+}
+
+void AndroidAppsHandler::OnAppStatesChanged(
+ const std::string& app_id,
+ const ArcAppListPrefs::AppInfo& app_info) {
+ HandleAppChanged(app_id);
}
void AndroidAppsHandler::OnAppRemoved(const std::string& app_id) {
- OnAppChanged(app_id);
+ HandleAppChanged(app_id);
}
-void AndroidAppsHandler::OnAppChanged(const std::string& app_id) {
+void AndroidAppsHandler::HandleAppChanged(const std::string& app_id) {
if (app_id != arc::kSettingsAppId)
return;
SendAndroidAppsInfo();
diff --git a/chromium/chrome/browser/ui/webui/settings/chromeos/android_apps_handler.h b/chromium/chrome/browser/ui/webui/settings/chromeos/android_apps_handler.h
index 94d6e16c132..cb89bc38224 100644
--- a/chromium/chrome/browser/ui/webui/settings/chromeos/android_apps_handler.h
+++ b/chromium/chrome/browser/ui/webui/settings/chromeos/android_apps_handler.h
@@ -37,17 +37,19 @@ class AndroidAppsHandler : public ::settings::SettingsPageUIHandler,
void OnJavascriptDisallowed() override;
// ArcAppListPrefs::Observer
- void OnAppRemoved(const std::string& app_id) override;
void OnAppRegistered(const std::string& app_id,
const ArcAppListPrefs::AppInfo& app_info) override;
+ void OnAppStatesChanged(const std::string& app_id,
+ const ArcAppListPrefs::AppInfo& app_info) override;
+ void OnAppRemoved(const std::string& app_id) override;
// arc::ArcSessionManager::Observer:
void OnArcPlayStoreEnabledChanged(bool enabled) override;
private:
std::unique_ptr<base::DictionaryValue> BuildAndroidAppsInfo();
- void OnAppChanged(const std::string& app_id);
void HandleRequestAndroidAppsInfo(const base::ListValue* args);
+ void HandleAppChanged(const std::string& app_id);
void SendAndroidAppsInfo();
void ShowAndroidAppsSettings(const base::ListValue* args);
void ShowAndroidManageAppLinks(const base::ListValue* args);
diff --git a/chromium/chrome/browser/ui/webui/settings/chromeos/crostini_handler.cc b/chromium/chrome/browser/ui/webui/settings/chromeos/crostini_handler.cc
index 03a08cad53e..4b100018022 100644
--- a/chromium/chrome/browser/ui/webui/settings/chromeos/crostini_handler.cc
+++ b/chromium/chrome/browser/ui/webui/settings/chromeos/crostini_handler.cc
@@ -31,12 +31,14 @@ void CrostiniHandler::RegisterMessages() {
void CrostiniHandler::HandleRequestCrostiniInstallerView(
const base::ListValue* args) {
AllowJavascript();
- ShowCrostiniInstallerView(Profile::FromWebUI(web_ui()));
+ ShowCrostiniInstallerView(Profile::FromWebUI(web_ui()),
+ CrostiniUISurface::kSettings);
}
void CrostiniHandler::HandleRequestRemoveCrostini(const base::ListValue* args) {
AllowJavascript();
- ShowCrostiniUninstallerView(Profile::FromWebUI(web_ui()));
+ ShowCrostiniUninstallerView(Profile::FromWebUI(web_ui()),
+ CrostiniUISurface::kSettings);
}
} // namespace settings
diff --git a/chromium/chrome/browser/ui/webui/settings/chromeos/cups_printers_handler.cc b/chromium/chrome/browser/ui/webui/settings/chromeos/cups_printers_handler.cc
index 98fc7863982..3c61e3ba330 100644
--- a/chromium/chrome/browser/ui/webui/settings/chromeos/cups_printers_handler.cc
+++ b/chromium/chrome/browser/ui/webui/settings/chromeos/cups_printers_handler.cc
@@ -220,8 +220,7 @@ CupsPrintersHandler::CupsPrintersHandler(content::WebUI* webui)
ppd_provider_(CreatePpdProvider(profile_)),
printer_configurer_(PrinterConfigurer::Create(profile_)),
printers_manager_(
- CupsPrintersManagerFactory::GetInstance()->GetForBrowserContext(
- profile_)),
+ CupsPrintersManagerFactory::GetForBrowserContext(profile_)),
printers_manager_observer_(this),
weak_factory_(this) {}
@@ -334,7 +333,8 @@ void CupsPrintersHandler::HandleUpdateCupsPrinter(const base::ListValue* args) {
// TODO(xdai): Replace "on-add-cups-printer" callback with Promise resolve
// function.
- FireWebUIListener("on-add-cups-printer", base::Value(true),
+ FireWebUIListener("on-add-cups-printer",
+ base::Value(PrinterSetupResult::kSuccess),
base::Value(printer_name));
}
diff --git a/chromium/chrome/browser/ui/webui/settings/chromeos/device_storage_handler.cc b/chromium/chrome/browser/ui/webui/settings/chromeos/device_storage_handler.cc
index 04fe8449120..9b221939c81 100644
--- a/chromium/chrome/browser/ui/webui/settings/chromeos/device_storage_handler.cc
+++ b/chromium/chrome/browser/ui/webui/settings/chromeos/device_storage_handler.cc
@@ -24,6 +24,8 @@
#include "chrome/browser/browsing_data/browsing_data_local_storage_helper.h"
#include "chrome/browser/browsing_data/browsing_data_service_worker_helper.h"
#include "chrome/browser/chromeos/arc/arc_util.h"
+#include "chrome/browser/chromeos/crostini/crostini_manager.h"
+#include "chrome/browser/chromeos/crostini/crostini_util.h"
#include "chrome/browser/chromeos/drive/file_system_util.h"
#include "chrome/browser/chromeos/file_manager/path_util.h"
#include "chrome/browser/platform_util.h"
@@ -64,7 +66,7 @@ const int64_t kSpaceLowBytes = 1 * 1024 * 1024 * 1024;
} // namespace
-StorageHandler::StorageHandler()
+StorageHandler::StorageHandler(Profile* profile)
: browser_cache_size_(-1),
has_browser_cache_size_(false),
browser_site_data_size_(-1),
@@ -73,7 +75,9 @@ StorageHandler::StorageHandler()
updating_drive_cache_size_(false),
updating_browsing_data_size_(false),
updating_android_size_(false),
+ updating_crostini_size_(false),
updating_other_users_size_(false),
+ profile_(profile),
weak_ptr_factory_(this) {}
StorageHandler::~StorageHandler() {
@@ -106,26 +110,23 @@ void StorageHandler::HandleUpdateStorageInfo(const base::ListValue* args) {
UpdateDownloadsSize();
UpdateDriveCacheSize();
UpdateBrowsingDataSize();
- UpdateOtherUsersSize();
UpdateAndroidSize();
+ UpdateCrostiniSize();
+ UpdateOtherUsersSize();
}
void StorageHandler::HandleOpenDownloads(
const base::ListValue* unused_args) {
- Profile* const profile = Profile::FromWebUI(web_ui());
const base::FilePath downloads_path =
- file_manager::util::GetDownloadsFolderForProfile(profile);
- platform_util::OpenItem(
- profile,
- downloads_path,
- platform_util::OPEN_FOLDER,
- platform_util::OpenOperationCallback());
+ file_manager::util::GetDownloadsFolderForProfile(profile_);
+ platform_util::OpenItem(profile_, downloads_path, platform_util::OPEN_FOLDER,
+ platform_util::OpenOperationCallback());
}
void StorageHandler::HandleOpenArcStorage(
const base::ListValue* unused_args) {
- auto* arc_storage_manager = arc::ArcStorageManager::GetForBrowserContext(
- Profile::FromWebUI(web_ui()));
+ auto* arc_storage_manager =
+ arc::ArcStorageManager::GetForBrowserContext(profile_);
if (arc_storage_manager)
arc_storage_manager->OpenPrivateVolumeSettings();
}
@@ -133,17 +134,20 @@ void StorageHandler::HandleOpenArcStorage(
void StorageHandler::HandleClearDriveCache(
const base::ListValue* unused_args) {
drive::FileSystemInterface* const file_system =
- drive::util::GetFileSystemByProfile(Profile::FromWebUI(web_ui()));
+ drive::util::GetFileSystemByProfile(profile_);
file_system->FreeDiskSpaceIfNeededFor(
std::numeric_limits<int64_t>::max(), // Removes as much as possible.
base::Bind(&StorageHandler::OnClearDriveCacheDone,
weak_ptr_factory_.GetWeakPtr()));
}
+void StorageHandler::OnClearDriveCacheDone(bool /*success*/) {
+ UpdateDriveCacheSize();
+}
+
void StorageHandler::UpdateSizeStat() {
- Profile* const profile = Profile::FromWebUI(web_ui());
const base::FilePath downloads_path =
- file_manager::util::GetDownloadsFolderForProfile(profile);
+ file_manager::util::GetDownloadsFolderForProfile(profile_);
int64_t* total_size = new int64_t(0);
int64_t* available_size = new int64_t(0);
@@ -179,9 +183,8 @@ void StorageHandler::UpdateDownloadsSize() {
return;
updating_downloads_size_ = true;
- Profile* const profile = Profile::FromWebUI(web_ui());
const base::FilePath downloads_path =
- file_manager::util::GetDownloadsFolderForProfile(profile);
+ file_manager::util::GetDownloadsFolderForProfile(profile_);
base::PostTaskWithTraitsAndReplyWithResult(
FROM_HERE, {base::MayBlock(), base::TaskPriority::BACKGROUND},
@@ -197,17 +200,17 @@ void StorageHandler::OnGetDownloadsSize(int64_t size) {
}
void StorageHandler::UpdateDriveCacheSize() {
- if (updating_drive_cache_size_)
- return;
-
drive::FileSystemInterface* const file_system =
- drive::util::GetFileSystemByProfile(Profile::FromWebUI(web_ui()));
+ drive::util::GetFileSystemByProfile(profile_);
if (!file_system)
return;
- // Shows the item "Offline cache" and start calculating size.
- FireWebUIListener("storage-drive-enabled-changed", base::Value(true));
+ if (updating_drive_cache_size_)
+ return;
updating_drive_cache_size_ = true;
+
+ // Shows the item "Offline cache" and starts calculating size.
+ FireWebUIListener("storage-drive-enabled-changed", base::Value(true));
file_system->CalculateCacheSize(base::Bind(
&StorageHandler::OnGetDriveCacheSize, weak_ptr_factory_.GetWeakPtr()));
}
@@ -225,35 +228,33 @@ void StorageHandler::UpdateBrowsingDataSize() {
has_browser_cache_size_ = false;
has_browser_site_data_size_ = false;
- Profile* const profile = Profile::FromWebUI(web_ui());
// Fetch the size of http cache in browsing data.
- // ConditionalCacheCountingHelper deletes itself when it is done.
- browsing_data::ConditionalCacheCountingHelper::CreateForRange(
- content::BrowserContext::GetDefaultStoragePartition(profile),
- base::Time(), base::Time::Max())
- ->CountAndDestroySelfWhenFinished(base::Bind(
- &StorageHandler::OnGetCacheSize, weak_ptr_factory_.GetWeakPtr()));
+ browsing_data::ConditionalCacheCountingHelper::Count(
+ content::BrowserContext::GetDefaultStoragePartition(profile_),
+ base::Time(), base::Time::Max(),
+ base::BindOnce(&StorageHandler::OnGetCacheSize,
+ weak_ptr_factory_.GetWeakPtr()));
// Fetch the size of site data in browsing data.
if (!site_data_size_collector_.get()) {
content::StoragePartition* storage_partition =
- content::BrowserContext::GetDefaultStoragePartition(profile);
+ content::BrowserContext::GetDefaultStoragePartition(profile_);
site_data_size_collector_.reset(new SiteDataSizeCollector(
storage_partition->GetPath(),
- new BrowsingDataCookieHelper(profile->GetRequestContext()),
- new BrowsingDataDatabaseHelper(profile),
- new BrowsingDataLocalStorageHelper(profile),
- new BrowsingDataAppCacheHelper(profile),
+ new BrowsingDataCookieHelper(storage_partition),
+ new BrowsingDataDatabaseHelper(profile_),
+ new BrowsingDataLocalStorageHelper(profile_),
+ new BrowsingDataAppCacheHelper(profile_),
new BrowsingDataIndexedDBHelper(
storage_partition->GetIndexedDBContext()),
BrowsingDataFileSystemHelper::Create(
storage_partition->GetFileSystemContext()),
- BrowsingDataChannelIDHelper::Create(profile->GetRequestContext()),
+ BrowsingDataChannelIDHelper::Create(profile_->GetRequestContext()),
new BrowsingDataServiceWorkerHelper(
storage_partition->GetServiceWorkerContext()),
new BrowsingDataCacheStorageHelper(
storage_partition->GetCacheStorageContext()),
- BrowsingDataFlashLSOHelper::Create(profile)));
+ BrowsingDataFlashLSOHelper::Create(profile_)));
}
site_data_size_collector_->Fetch(
base::Bind(&StorageHandler::OnGetBrowsingDataSize,
@@ -288,6 +289,66 @@ void StorageHandler::OnGetBrowsingDataSize(bool is_site_data, int64_t size) {
}
}
+void StorageHandler::UpdateAndroidSize() {
+ if (!arc::IsArcPlayStoreEnabledForProfile(profile_) ||
+ arc::IsArcOptInVerificationDisabled()) {
+ return;
+ }
+
+ if (updating_android_size_)
+ return;
+ updating_android_size_ = true;
+
+ // Shows the item "Android apps and cache" and starts calculating size.
+ FireWebUIListener("storage-android-enabled-changed", base::Value(true));
+
+ bool success = false;
+ auto* arc_storage_manager =
+ arc::ArcStorageManager::GetForBrowserContext(profile_);
+ if (arc_storage_manager) {
+ success = arc_storage_manager->GetApplicationsSize(base::BindOnce(
+ &StorageHandler::OnGetAndroidSize, weak_ptr_factory_.GetWeakPtr()));
+ }
+ if (!success)
+ updating_android_size_ = false;
+}
+
+void StorageHandler::OnGetAndroidSize(bool succeeded,
+ arc::mojom::ApplicationsSizePtr size) {
+ base::string16 size_string;
+ if (succeeded) {
+ uint64_t total_bytes = size->total_code_bytes + size->total_data_bytes +
+ size->total_cache_bytes;
+ size_string = ui::FormatBytes(total_bytes);
+ } else {
+ size_string = l10n_util::GetStringUTF16(IDS_SETTINGS_STORAGE_SIZE_UNKNOWN);
+ }
+ updating_android_size_ = false;
+ FireWebUIListener("storage-android-size-changed", base::Value(size_string));
+}
+
+void StorageHandler::UpdateCrostiniSize() {
+ if (!IsCrostiniEnabled(profile_)) {
+ return;
+ }
+
+ if (updating_crostini_size_)
+ return;
+ updating_crostini_size_ = true;
+
+ crostini::CrostiniManager::GetInstance()->ListVmDisks(
+ CryptohomeIdForProfile(profile_),
+ base::BindOnce(&StorageHandler::OnGetCrostiniSize,
+ weak_ptr_factory_.GetWeakPtr()));
+}
+
+void StorageHandler::OnGetCrostiniSize(crostini::ConciergeClientResult result,
+ int64_t size) {
+ updating_crostini_size_ = false;
+ FireWebUIListener("storage-crostini-size-changed",
+ base::Value(ui::FormatBytes(size)));
+}
+
void StorageHandler::UpdateOtherUsersSize() {
if (updating_other_users_size_)
return;
@@ -333,48 +394,5 @@ void StorageHandler::OnGetOtherUserSize(
}
}
-void StorageHandler::UpdateAndroidSize() {
- if (updating_android_size_)
- return;
- updating_android_size_ = true;
-
- Profile* const profile = Profile::FromWebUI(web_ui());
- if (!arc::IsArcPlayStoreEnabledForProfile(profile) ||
- arc::IsArcOptInVerificationDisabled()) {
- return;
- }
-
- // Shows the item "Android apps and cache" and start calculating size.
- FireWebUIListener("storage-android-enabled-changed", base::Value(true));
- bool success = false;
- auto* arc_storage_manager =
- arc::ArcStorageManager::GetForBrowserContext(profile);
- if (arc_storage_manager) {
- success = arc_storage_manager->GetApplicationsSize(base::BindOnce(
- &StorageHandler::OnGetAndroidSize, weak_ptr_factory_.GetWeakPtr()));
- }
- if (!success)
- updating_android_size_ = false;
-}
-
-void StorageHandler::OnGetAndroidSize(bool succeeded,
- arc::mojom::ApplicationsSizePtr size) {
- base::string16 size_string;
- if (succeeded) {
- uint64_t total_bytes = size->total_code_bytes +
- size->total_data_bytes +
- size->total_cache_bytes;
- size_string = ui::FormatBytes(total_bytes);
- } else {
- size_string = l10n_util::GetStringUTF16(IDS_SETTINGS_STORAGE_SIZE_UNKNOWN);
- }
- updating_android_size_ = false;
- FireWebUIListener("storage-android-size-changed", base::Value(size_string));
-}
-
-void StorageHandler::OnClearDriveCacheDone(bool success) {
- UpdateDriveCacheSize();
-}
-
} // namespace settings
} // namespace chromeos
diff --git a/chromium/chrome/browser/ui/webui/settings/chromeos/device_storage_handler.h b/chromium/chrome/browser/ui/webui/settings/chromeos/device_storage_handler.h
index 48f3d5b5875..8d5f7b04ceb 100644
--- a/chromium/chrome/browser/ui/webui/settings/chromeos/device_storage_handler.h
+++ b/chromium/chrome/browser/ui/webui/settings/chromeos/device_storage_handler.h
@@ -19,6 +19,12 @@
#include "components/arc/storage_manager/arc_storage_manager.h"
#include "components/user_manager/user.h"
+class Profile;
+
+namespace crostini {
+enum class ConciergeClientResult;
+} // namespace crostini
+
namespace chromeos {
namespace settings {
@@ -32,7 +38,7 @@ class StorageHandler : public ::settings::SettingsPageUIHandler {
STORAGE_SPACE_CRITICALLY_LOW = 2,
};
- StorageHandler();
+ explicit StorageHandler(Profile* profile);
~StorageHandler() override;
// SettingsPageUIHandler implementation.
@@ -47,6 +53,9 @@ class StorageHandler : public ::settings::SettingsPageUIHandler {
void HandleOpenArcStorage(const base::ListValue* unused_args);
void HandleClearDriveCache(const base::ListValue* unused_args);
+ // Callback called when clearing Drive cache is done.
+ void OnClearDriveCacheDone(bool success);
+
// Requests updating disk space information.
void UpdateSizeStat();
@@ -74,20 +83,24 @@ class StorageHandler : public ::settings::SettingsPageUIHandler {
// Callback to update the UI about the size of browsing data.
void OnGetBrowsingDataSize(bool is_site_data, int64_t size);
- // Requests updating the total size of other users' data.
- void UpdateOtherUsersSize();
-
- // Callback to save the fetched user sizes and update the UI.
- void OnGetOtherUserSize(base::Optional<cryptohome::BaseReply> reply);
-
// Requests updating the space size used by Android apps and cache.
void UpdateAndroidSize();
// Callback to update the UI about Android apps and cache.
void OnGetAndroidSize(bool succeeded, arc::mojom::ApplicationsSizePtr size);
- // Callback called when clearing Drive cache is done.
- void OnClearDriveCacheDone(bool success);
+ // Requests updating the space size used by Crostini VMs and their apps and
+ // cache.
+ void UpdateCrostiniSize();
+
+ // Callback to update the UI about Crostini VMs and their apps and cache.
+ void OnGetCrostiniSize(crostini::ConciergeClientResult result, int64_t size);
+
+ // Requests updating the total size of other users' data.
+ void UpdateOtherUsersSize();
+
+ // Callback to save the fetched user sizes and update the UI.
+ void OnGetOtherUserSize(base::Optional<cryptohome::BaseReply> reply);
// Total size of cache data in browsing data.
int64_t browser_cache_size_;
@@ -101,6 +114,9 @@ class StorageHandler : public ::settings::SettingsPageUIHandler {
// True if we have already received the size of site data.
bool has_browser_site_data_size_;
+ // Helper to compute the total size of all types of site date.
+ std::unique_ptr<SiteDataSizeCollector> site_data_size_collector_;
+
// The list of other users whose directory sizes will be accumulated as the
// size of "Other users".
user_manager::UserList other_users_;
@@ -108,16 +124,15 @@ class StorageHandler : public ::settings::SettingsPageUIHandler {
// Fetched sizes of user directories.
std::vector<int64_t> user_sizes_;
- // Helper to compute the total size of all types of site date.
- std::unique_ptr<SiteDataSizeCollector> site_data_size_collector_;
-
// Flags indicating fetch operations for storage sizes are ongoing.
bool updating_downloads_size_;
bool updating_drive_cache_size_;
bool updating_browsing_data_size_;
bool updating_android_size_;
+ bool updating_crostini_size_;
bool updating_other_users_size_;
+ Profile* const profile_;
base::WeakPtrFactory<StorageHandler> weak_ptr_factory_;
DISALLOW_COPY_AND_ASSIGN(StorageHandler);
diff --git a/chromium/chrome/browser/ui/webui/settings/chromeos/easy_unlock_settings_handler_unittest.cc b/chromium/chrome/browser/ui/webui/settings/chromeos/easy_unlock_settings_handler_unittest.cc
index 287e99313d6..f30ce4ca6d8 100644
--- a/chromium/chrome/browser/ui/webui/settings/chromeos/easy_unlock_settings_handler_unittest.cc
+++ b/chromium/chrome/browser/ui/webui/settings/chromeos/easy_unlock_settings_handler_unittest.cc
@@ -22,7 +22,7 @@ namespace {
class FakeEasyUnlockService : public EasyUnlockService {
public:
explicit FakeEasyUnlockService(Profile* profile)
- : EasyUnlockService(profile),
+ : EasyUnlockService(profile, nullptr /* secure_channel_client */),
turn_off_status_(IDLE),
is_allowed_(true),
is_enabled_(false) {}
diff --git a/chromium/chrome/browser/ui/webui/settings/chromeos/internet_handler.cc b/chromium/chrome/browser/ui/webui/settings/chromeos/internet_handler.cc
index 8367559e562..8dc3a46c55f 100644
--- a/chromium/chrome/browser/ui/webui/settings/chromeos/internet_handler.cc
+++ b/chromium/chrome/browser/ui/webui/settings/chromeos/internet_handler.cc
@@ -9,12 +9,12 @@
#include "base/bind.h"
#include "base/values.h"
-#include "chrome/browser/chromeos/options/network_config_view.h"
#include "chrome/browser/chromeos/profiles/profile_helper.h"
#include "chrome/browser/chromeos/tether/tether_service.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/app_list/arc/arc_app_list_prefs.h"
#include "chrome/browser/ui/app_list/arc/arc_app_utils.h"
+#include "chromeos/network/network_event_log.h"
#include "chromeos/network/network_state.h"
#include "chromeos/network/network_state_handler.h"
#include "components/arc/arc_bridge_service.h"
@@ -33,8 +33,8 @@ namespace chromeos {
namespace {
-const char kAddNetworkMessage[] = "addNetwork";
-const char kConfigureNetworkMessage[] = "configureNetwork";
+const char kAddThirdPartyVpnMessage[] = "addThirdPartyVpn";
+const char kConfigureThirdPartyVpnMessage[] = "configureThirdPartyVpn";
const char kRequestArcVpnProviders[] = "requestArcVpnProviders";
const char kSendArcVpnProviders[] = "sendArcVpnProviders";
const char kRequestGmsCoreNotificationsDisabledDeviceNames[] =
@@ -42,13 +42,6 @@ const char kRequestGmsCoreNotificationsDisabledDeviceNames[] =
const char kSendGmsCoreNotificationsDisabledDeviceNames[] =
"sendGmsCoreNotificationsDisabledDeviceNames";
-std::string ServicePathFromGuid(const std::string& guid) {
- const NetworkState* network =
- NetworkHandler::Get()->network_state_handler()->GetNetworkStateFromGuid(
- guid);
- return network ? network->path() : "";
-}
-
Profile* GetProfileForPrimaryUser() {
return ProfileHelper::Get()->GetProfileByUser(
user_manager::UserManager::Get()->GetPrimaryUser());
@@ -93,14 +86,13 @@ InternetHandler::~InternetHandler() {
}
void InternetHandler::RegisterMessages() {
- // TODO(stevenjb): Eliminate once network configuration UI is integrated
- // into settings.
web_ui()->RegisterMessageCallback(
- kAddNetworkMessage, base::BindRepeating(&InternetHandler::AddNetwork,
- base::Unretained(this)));
+ kAddThirdPartyVpnMessage,
+ base::BindRepeating(&InternetHandler::AddThirdPartyVpn,
+ base::Unretained(this)));
web_ui()->RegisterMessageCallback(
- kConfigureNetworkMessage,
- base::BindRepeating(&InternetHandler::ConfigureNetwork,
+ kConfigureThirdPartyVpnMessage,
+ base::BindRepeating(&InternetHandler::ConfigureThirdPartyVpn,
base::Unretained(this)));
web_ui()->RegisterMessageCallback(
kRequestArcVpnProviders,
@@ -142,85 +134,81 @@ void InternetHandler::OnGmsCoreNotificationStateChanged() {
SetGmsCoreNotificationsDisabledDeviceNames();
}
-void InternetHandler::AddNetwork(const base::ListValue* args) {
- std::string onc_type;
- if (args->GetSize() < 1 || !args->GetString(0, &onc_type)) {
- NOTREACHED() << "Invalid args for: " << kAddNetworkMessage;
+void InternetHandler::AddThirdPartyVpn(const base::ListValue* args) {
+ std::string app_id;
+ if (args->GetSize() < 1 || !args->GetString(0, &app_id)) {
+ NOTREACHED() << "Invalid args for: " << kAddThirdPartyVpnMessage;
+ return;
+ }
+ if (app_id.empty()) {
+ NET_LOG(ERROR) << "Empty app id for " << kAddThirdPartyVpnMessage;
+ return;
+ }
+ if (profile_ != GetProfileForPrimaryUser()) {
+ NET_LOG(ERROR) << "Only the primary user can add VPNs";
return;
}
- if (onc_type == ::onc::network_type::kVPN) {
- std::string app_id;
- if (args->GetSize() >= 2)
- args->GetString(1, &app_id);
- if (app_id.empty()) {
- // Show the "add network" dialog for the built-in OpenVPN/L2TP provider.
- NetworkConfigView::ShowForType(shill::kTypeVPN);
- return;
- }
- // Request to launch Arc VPN provider.
- const auto* arc_app_list_prefs = ArcAppListPrefs::Get(profile_);
- if (arc_app_list_prefs && arc_app_list_prefs->GetApp(app_id)) {
- arc::LaunchApp(profile_, app_id, ui::EF_NONE);
- return;
- }
- // Request that the third-party VPN provider identified by |provider_id|
- // show its "add network" dialog.
- VpnServiceFactory::GetForBrowserContext(GetProfileForPrimaryUser())
- ->SendShowAddDialogToExtension(app_id);
- } else if (onc_type == ::onc::network_type::kWiFi) {
- NetworkConfigView::ShowForType(shill::kTypeWifi);
- } else {
- LOG(ERROR) << "Unsupported type for: " << kAddNetworkMessage;
+ // Request to launch Arc VPN provider.
+ const auto* arc_app_list_prefs = ArcAppListPrefs::Get(profile_);
+ if (arc_app_list_prefs && arc_app_list_prefs->GetApp(app_id)) {
+ arc::LaunchApp(profile_, app_id, ui::EF_NONE,
+ arc::UserInteractionType::APP_STARTED_FROM_SETTINGS);
+ return;
}
+
+ // Request that the third-party VPN provider identified by |provider_id|
+ // show its "add network" dialog.
+ VpnServiceFactory::GetForBrowserContext(GetProfileForPrimaryUser())
+ ->SendShowAddDialogToExtension(app_id);
}
-void InternetHandler::ConfigureNetwork(const base::ListValue* args) {
+void InternetHandler::ConfigureThirdPartyVpn(const base::ListValue* args) {
std::string guid;
if (args->GetSize() < 1 || !args->GetString(0, &guid)) {
- NOTREACHED() << "Invalid args for: " << kConfigureNetworkMessage;
+ NOTREACHED() << "Invalid args for: " << kConfigureThirdPartyVpnMessage;
return;
}
-
- const std::string service_path = ServicePathFromGuid(guid);
- if (service_path.empty()) {
- LOG(ERROR) << "Network not found: " << guid;
+ if (profile_ != GetProfileForPrimaryUser()) {
+ NET_LOG(ERROR) << "Only the primary user can configure VPNs";
return;
}
const NetworkState* network =
- NetworkHandler::Get()->network_state_handler()->GetNetworkState(
- service_path);
+ NetworkHandler::Get()->network_state_handler()->GetNetworkStateFromGuid(
+ guid);
if (!network) {
- LOG(ERROR) << "Network not found with service_path: " << service_path;
+ NET_LOG(ERROR) << "ConfigureThirdPartyVpn: Network not found: " << guid;
+ return;
+ }
+ if (network->type() != shill::kTypeVPN) {
+ NET_LOG(ERROR) << "ConfigureThirdPartyVpn: Network is not a VPN: " << guid;
return;
}
- if (network->type() == shill::kTypeVPN) {
- if (profile_ != GetProfileForPrimaryUser())
- return;
+ if (network->vpn_provider_type() == shill::kProviderThirdPartyVpn) {
+ // Request that the third-party VPN provider used by the |network| show a
+ // configuration dialog for it.
+ VpnServiceFactory::GetForBrowserContext(profile_)
+ ->SendShowConfigureDialogToExtension(network->vpn_provider_id(),
+ network->name());
+ return;
+ }
- if (network->vpn_provider_type() == shill::kProviderThirdPartyVpn) {
- // Request that the third-party VPN provider used by the |network| show a
- // configuration dialog for it.
- VpnServiceFactory::GetForBrowserContext(profile_)
- ->SendShowConfigureDialogToExtension(network->vpn_provider_id(),
- network->name());
- return;
- } else if (network->vpn_provider_type() == shill::kProviderArcVpn) {
- auto* net_instance = ARC_GET_INSTANCE_FOR_METHOD(
- arc::ArcServiceManager::Get()->arc_bridge_service()->net(),
- ConfigureAndroidVpn);
- if (!net_instance) {
- LOG(ERROR) << "User requested VPN configuration but API is unavailable";
- return;
- }
- net_instance->ConfigureAndroidVpn();
+ if (network->vpn_provider_type() == shill::kProviderArcVpn) {
+ auto* net_instance = ARC_GET_INSTANCE_FOR_METHOD(
+ arc::ArcServiceManager::Get()->arc_bridge_service()->net(),
+ ConfigureAndroidVpn);
+ if (!net_instance) {
+ NET_LOG(ERROR) << "ConfigureThirdPartyVpn: API is unavailable";
return;
}
+ net_instance->ConfigureAndroidVpn();
+ return;
}
- NetworkConfigView::ShowForNetworkId(network->guid());
+ NET_LOG(ERROR) << "ConfigureThirdPartyVpn: Unsupported VPN type: "
+ << network->vpn_provider_type() << " For: " << guid;
}
void InternetHandler::RequestArcVpnProviders(const base::ListValue* args) {
diff --git a/chromium/chrome/browser/ui/webui/settings/chromeos/internet_handler.h b/chromium/chrome/browser/ui/webui/settings/chromeos/internet_handler.h
index 332d5dd8a5e..31ed7c90e43 100644
--- a/chromium/chrome/browser/ui/webui/settings/chromeos/internet_handler.h
+++ b/chromium/chrome/browser/ui/webui/settings/chromeos/internet_handler.h
@@ -24,8 +24,6 @@ class GmsCoreNotificationsStateTracker;
namespace settings {
// Chrome OS Internet settings page UI handler.
-// TODO(lgcheng/stevenjb): Rename this ThirdPartyVpnHandler once configuration
-// is handled in the Settings UI (crbug.com/380937
class InternetHandler
: public app_list::ArcVpnProviderManager::Observer,
public chromeos::tether::GmsCoreNotificationsStateTracker::Observer,
@@ -55,8 +53,8 @@ class InternetHandler
friend class InternetHandlerTest;
// Settings JS handlers.
- void AddNetwork(const base::ListValue* args);
- void ConfigureNetwork(const base::ListValue* args);
+ void AddThirdPartyVpn(const base::ListValue* args);
+ void ConfigureThirdPartyVpn(const base::ListValue* args);
void RequestArcVpnProviders(const base::ListValue* args);
void RequestGmsCoreNotificationsDisabledDeviceNames(
const base::ListValue* args);
diff --git a/chromium/chrome/browser/ui/webui/settings/chromeos/multidevice_handler.cc b/chromium/chrome/browser/ui/webui/settings/chromeos/multidevice_handler.cc
new file mode 100644
index 00000000000..ca84973cd35
--- /dev/null
+++ b/chromium/chrome/browser/ui/webui/settings/chromeos/multidevice_handler.cc
@@ -0,0 +1,38 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/ui/webui/settings/chromeos/multidevice_handler.h"
+
+#include "base/bind.h"
+#include "base/bind_helpers.h"
+#include "base/logging.h"
+#include "chrome/browser/ui/webui/chromeos/multidevice_setup/multidevice_setup_dialog.h"
+#include "content/public/browser/web_ui.h"
+
+namespace chromeos {
+
+namespace settings {
+
+MultideviceHandler::MultideviceHandler() = default;
+MultideviceHandler::~MultideviceHandler() = default;
+
+void MultideviceHandler::OnJavascriptAllowed() {}
+void MultideviceHandler::OnJavascriptDisallowed() {}
+
+void MultideviceHandler::RegisterMessages() {
+ web_ui()->RegisterMessageCallback(
+ "showMultiDeviceSetupDialog",
+ base::BindRepeating(&MultideviceHandler::HandleShowMultiDeviceSetupDialog,
+ base::Unretained(this)));
+}
+
+void MultideviceHandler::HandleShowMultiDeviceSetupDialog(
+ const base::ListValue* args) {
+ DCHECK(args->empty());
+ multidevice_setup::MultiDeviceSetupDialog::Show();
+}
+
+} // namespace settings
+
+} // namespace chromeos
diff --git a/chromium/chrome/browser/ui/webui/settings/chromeos/multidevice_handler.h b/chromium/chrome/browser/ui/webui/settings/chromeos/multidevice_handler.h
new file mode 100644
index 00000000000..3ab88522348
--- /dev/null
+++ b/chromium/chrome/browser/ui/webui/settings/chromeos/multidevice_handler.h
@@ -0,0 +1,38 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_UI_WEBUI_SETTINGS_CHROMEOS_MULTIDEVICE_HANDLER_H_
+#define CHROME_BROWSER_UI_WEBUI_SETTINGS_CHROMEOS_MULTIDEVICE_HANDLER_H_
+
+#include "base/macros.h"
+#include "chrome/browser/ui/webui/settings/settings_page_ui_handler.h"
+
+namespace chromeos {
+
+namespace settings {
+
+// Chrome "Multidevice" (a.k.a. "Connected Devices") settings page UI handler.
+class MultideviceHandler : public ::settings::SettingsPageUIHandler {
+ public:
+ MultideviceHandler();
+ ~MultideviceHandler() override;
+
+ // content::WebUIMessageHandler:
+ void RegisterMessages() override;
+
+ // ::settings::SettingsPageUIHandler:
+ void OnJavascriptAllowed() override;
+ void OnJavascriptDisallowed() override;
+
+ private:
+ void HandleShowMultiDeviceSetupDialog(const base::ListValue* args);
+
+ DISALLOW_COPY_AND_ASSIGN(MultideviceHandler);
+};
+
+} // namespace settings
+
+} // namespace chromeos
+
+#endif // CHROME_BROWSER_UI_WEBUI_SETTINGS_CHROMEOS_MULTIDEVICE_HANDLER_H_
diff --git a/chromium/chrome/browser/ui/webui/settings/chromeos/smb_handler.cc b/chromium/chrome/browser/ui/webui/settings/chromeos/smb_handler.cc
index 2b3ef9136d0..8a5af4ee012 100644
--- a/chromium/chrome/browser/ui/webui/settings/chromeos/smb_handler.cc
+++ b/chromium/chrome/browser/ui/webui/settings/chromeos/smb_handler.cc
@@ -16,6 +16,17 @@
namespace chromeos {
namespace settings {
+namespace {
+
+smb_client::SmbService* GetSmbService(Profile* profile) {
+ smb_client::SmbService* const service = smb_client::SmbService::Get(profile);
+ DCHECK(service);
+
+ return service;
+}
+
+} // namespace
+
SmbHandler::SmbHandler(Profile* profile)
: profile_(profile), weak_ptr_factory_(this) {}
@@ -25,32 +36,63 @@ void SmbHandler::RegisterMessages() {
web_ui()->RegisterMessageCallback(
"smbMount",
base::BindRepeating(&SmbHandler::HandleSmbMount, base::Unretained(this)));
+
+ web_ui()->RegisterMessageCallback(
+ "startDiscovery", base::BindRepeating(&SmbHandler::HandleStartDiscovery,
+ base::Unretained(this)));
}
void SmbHandler::HandleSmbMount(const base::ListValue* args) {
- CHECK_EQ(3U, args->GetSize());
- std::string mountUrl;
+ CHECK_EQ(4U, args->GetSize());
+ std::string mount_url;
+ std::string mount_name;
std::string username;
std::string password;
- CHECK(args->GetString(0, &mountUrl));
- CHECK(args->GetString(1, &username));
- CHECK(args->GetString(2, &password));
+ CHECK(args->GetString(0, &mount_url));
+ CHECK(args->GetString(1, &mount_name));
+ CHECK(args->GetString(2, &username));
+ CHECK(args->GetString(3, &password));
- chromeos::smb_client::SmbService* const service =
- chromeos::smb_client::SmbService::Get(profile_);
+ smb_client::SmbService* const service = GetSmbService(profile_);
chromeos::file_system_provider::MountOptions mo;
- mo.display_name = mountUrl;
+ mo.display_name = mount_name.empty() ? mount_url : mount_name;
mo.writable = true;
- service->Mount(mo, base::FilePath(mountUrl), username, password,
- base::BindOnce(&SmbHandler::HandleSmbMountResponse,
- weak_ptr_factory_.GetWeakPtr()));
+ auto mount_response = base::BindOnce(&SmbHandler::HandleSmbMountResponse,
+ weak_ptr_factory_.GetWeakPtr());
+ auto mount_call = base::BindOnce(
+ &smb_client::SmbService::Mount, base::Unretained(service), mo,
+ base::FilePath(mount_url), username, password, std::move(mount_response));
+
+ if (host_discovery_done_) {
+ std::move(mount_call).Run();
+ } else {
+ stored_mount_call_ = std::move(mount_call);
+ }
}
void SmbHandler::HandleSmbMountResponse(SmbMountResult result) {
AllowJavascript();
- FireWebUIListener("on-add-smb-share", base::Value(result));
+ FireWebUIListener("on-add-smb-share", base::Value(static_cast<int>(result)));
+}
+
+void SmbHandler::HandleStartDiscovery(const base::ListValue* args) {
+ smb_client::SmbService* const service = GetSmbService(profile_);
+
+ service->GatherSharesInNetwork(base::BindRepeating(
+ &SmbHandler::HandleGatherSharesResponse, weak_ptr_factory_.GetWeakPtr()));
+}
+
+void SmbHandler::HandleGatherSharesResponse(
+ const std::vector<smb_client::SmbUrl>& shares_gathered) {
+ host_discovery_done_ = true;
+ if (!stored_mount_call_.is_null()) {
+ std::move(stored_mount_call_).Run();
+ }
+
+ // TODO(zentaro): Pass the shares discovered back to the UI.
+ // https://crbug.com/852199.
}
} // namespace settings
diff --git a/chromium/chrome/browser/ui/webui/settings/chromeos/smb_handler.h b/chromium/chrome/browser/ui/webui/settings/chromeos/smb_handler.h
index 315a302f144..fe6c85db64f 100644
--- a/chromium/chrome/browser/ui/webui/settings/chromeos/smb_handler.h
+++ b/chromium/chrome/browser/ui/webui/settings/chromeos/smb_handler.h
@@ -5,6 +5,7 @@
#ifndef CHROME_BROWSER_UI_WEBUI_SETTINGS_CHROMEOS_SMB_HANDLER_H_
#define CHROME_BROWSER_UI_WEBUI_SETTINGS_CHROMEOS_SMB_HANDLER_H_
+#include "base/callback_forward.h"
#include "base/files/file.h"
#include "base/macros.h"
#include "base/memory/weak_ptr.h"
@@ -31,9 +32,18 @@ class SmbHandler : public ::settings::SettingsPageUIHandler {
// WebUI call to mount an Smb Filesystem.
void HandleSmbMount(const base::ListValue* args);
+ // WebUI call to start file share discovery on the network.
+ void HandleStartDiscovery(const base::ListValue* args);
+
// Callback handler for SmbMount.
void HandleSmbMountResponse(SmbMountResult result);
+ // Callback handler for StartDiscovery.
+ void HandleGatherSharesResponse(
+ const std::vector<smb_client::SmbUrl>& shares_gathered);
+
+ bool host_discovery_done_ = false;
+ base::OnceClosure stored_mount_call_;
Profile* const profile_;
base::WeakPtrFactory<SmbHandler> weak_ptr_factory_;
diff --git a/chromium/chrome/browser/ui/webui/settings/extension_control_handler.cc b/chromium/chrome/browser/ui/webui/settings/extension_control_handler.cc
index 7f5a1b27042..ad36ee33086 100644
--- a/chromium/chrome/browser/ui/webui/settings/extension_control_handler.cc
+++ b/chromium/chrome/browser/ui/webui/settings/extension_control_handler.cc
@@ -29,8 +29,9 @@ void ExtensionControlHandler::HandleDisableExtension(
const base::ListValue* args) {
std::string extension_id;
CHECK(args->GetString(0, &extension_id));
- ExtensionService* extension_service = extensions::ExtensionSystem::Get(
- Profile::FromWebUI(web_ui()))->extension_service();
+ extensions::ExtensionService* extension_service =
+ extensions::ExtensionSystem::Get(Profile::FromWebUI(web_ui()))
+ ->extension_service();
DCHECK(extension_service);
extension_service->DisableExtension(
extension_id, extensions::disable_reason::DISABLE_USER_ACTION);
diff --git a/chromium/chrome/browser/ui/webui/settings/font_handler.cc b/chromium/chrome/browser/ui/webui/settings/font_handler.cc
index 037d0a5b3a4..ffb8f495ab7 100644
--- a/chromium/chrome/browser/ui/webui/settings/font_handler.cc
+++ b/chromium/chrome/browser/ui/webui/settings/font_handler.cc
@@ -100,7 +100,7 @@ void FontHandler::HandleOpenAdvancedFontSettings(
}
const extensions::Extension* FontHandler::GetAdvancedFontSettingsExtension() {
- ExtensionService* service =
+ extensions::ExtensionService* service =
extensions::ExtensionSystem::Get(profile_)->extension_service();
if (!service->IsExtensionEnabled(kAdvancedFontSettingsExtensionId))
return nullptr;
diff --git a/chromium/chrome/browser/ui/webui/settings/languages_handler.cc b/chromium/chrome/browser/ui/webui/settings/languages_handler.cc
index 6ec6856e4d2..0346fa16e01 100644
--- a/chromium/chrome/browser/ui/webui/settings/languages_handler.cc
+++ b/chromium/chrome/browser/ui/webui/settings/languages_handler.cc
@@ -10,6 +10,7 @@
#include "chrome/browser/browser_process.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/common/pref_names.h"
+#include "components/language/core/browser/pref_names.h"
#include "components/prefs/pref_service.h"
#include "content/public/browser/web_ui.h"
@@ -50,12 +51,12 @@ void LanguagesHandler::HandleGetProspectiveUILanguage(
std::string locale;
#if defined(OS_CHROMEOS)
// On Chrome OS, an individual profile may have a preferred locale.
- locale = profile_->GetPrefs()->GetString(prefs::kApplicationLocale);
+ locale = profile_->GetPrefs()->GetString(language::prefs::kApplicationLocale);
#endif // defined(OS_CHROMEOS)
if (locale.empty()) {
- locale =
- g_browser_process->local_state()->GetString(prefs::kApplicationLocale);
+ locale = g_browser_process->local_state()->GetString(
+ language::prefs::kApplicationLocale);
}
ResolveJavascriptCallback(*callback_id, base::Value(locale));
@@ -70,16 +71,16 @@ void LanguagesHandler::HandleSetProspectiveUILanguage(
CHECK(args->GetString(0, &language_code));
#if defined(OS_CHROMEOS)
- // check if prospectiveUILanguage is allowed by policy (AllowedLocales)
- if (!chromeos::locale_util::IsAllowedLocale(language_code,
- profile_->GetPrefs())) {
+ // check if prospectiveUILanguage is allowed by policy (AllowedUILocales)
+ if (!chromeos::locale_util::IsAllowedUILocale(language_code,
+ profile_->GetPrefs())) {
return;
}
#endif
#if defined(OS_WIN)
PrefService* prefs = g_browser_process->local_state();
- prefs->SetString(prefs::kApplicationLocale, language_code);
+ prefs->SetString(language::prefs::kApplicationLocale, language_code);
#elif defined(OS_CHROMEOS)
// Secondary users and public session users cannot change the locale.
user_manager::UserManager* user_manager = user_manager::UserManager::Get();
diff --git a/chromium/chrome/browser/ui/webui/settings/md_settings_localized_strings_provider.cc b/chromium/chrome/browser/ui/webui/settings/md_settings_localized_strings_provider.cc
index 77f1c6afba4..65230a3aea7 100644
--- a/chromium/chrome/browser/ui/webui/settings/md_settings_localized_strings_provider.cc
+++ b/chromium/chrome/browser/ui/webui/settings/md_settings_localized_strings_provider.cc
@@ -7,6 +7,7 @@
#include <string>
#include "base/command_line.h"
+#include "base/feature_list.h"
#include "base/i18n/number_formatting.h"
#include "base/strings/string_number_conversions.h"
#include "base/strings/utf_string_conversions.h"
@@ -28,8 +29,10 @@
#include "chrome/grit/locale_settings.h"
#include "components/autofill/core/browser/payments/payments_service_url.h"
#include "components/autofill/core/common/autofill_constants.h"
+#include "components/content_settings/core/common/features.h"
#include "components/google/core/browser/google_util.h"
-#include "components/password_manager/core/browser/password_manager_constants.h"
+#include "components/omnibox/browser/omnibox_field_trial.h"
+#include "components/password_manager/core/common/password_manager_features.h"
#include "components/safe_browsing/common/safe_browsing_prefs.h"
#include "components/signin/core/browser/signin_buildflags.h"
#include "components/strings/grit/components_strings.h"
@@ -52,6 +55,7 @@
#include "chrome/browser/chromeos/profiles/profile_helper.h"
#include "chrome/browser/ui/webui/chromeos/bluetooth_dialog_localized_strings_provider.h"
#include "chrome/browser/ui/webui/chromeos/network_element_localized_strings_provider.h"
+#include "chromeos/chromeos_features.h"
#include "chromeos/chromeos_switches.h"
#include "components/arc/arc_util.h"
#include "components/user_manager/user_manager.h"
@@ -195,6 +199,7 @@ void AddA11yStrings(content::WebUIDataSource* html_source) {
{"delayBeforeClickShort", IDS_SETTINGS_DELAY_BEFORE_CLICK_SHORT},
{"delayBeforeClickLong", IDS_SETTINGS_DELAY_BEFORE_CLICK_LONG},
{"delayBeforeClickVeryLong", IDS_SETTINGS_DELAY_BEFORE_CLICK_VERY_LONG},
+ {"dictationDescription", IDS_SETTINGS_ACCESSIBILITY_DICTATION_DESCRIPTION},
{"dictationLabel", IDS_SETTINGS_ACCESSIBILITY_DICTATION_LABEL},
{"onScreenKeyboardLabel", IDS_SETTINGS_ON_SCREEN_KEYBOARD_LABEL},
{"monoAudioLabel", IDS_SETTINGS_MONO_AUDIO_LABEL},
@@ -228,7 +233,6 @@ void AddA11yStrings(content::WebUIDataSource* html_source) {
IDS_SETTINGS_ACCESSIBILITY_APPEARANCE_SETTINGS_TITLE},
{"appearanceSettingsDescription",
IDS_SETTINGS_ACCESSIBILITY_APPEARANCE_SETTINGS_DESCRIPTION},
- {"keyboardHeading", IDS_SETTINGS_ACCESSIBILITY_KEYBOARD_HEADING},
{"keyboardAndTextInputHeading",
IDS_SETTINGS_ACCESSIBILITY_KEYBOARD_AND_TEXT_INPUT_HEADING},
{"keyboardSettingsTitle",
@@ -248,6 +252,7 @@ void AddA11yStrings(content::WebUIDataSource* html_source) {
{"textToSpeechVoices", IDS_SETTINGS_TEXT_TO_SPEECH_VOICES},
{"textToSpeechNoVoicesMessage",
IDS_SETTINGS_TEXT_TO_SPEECH_NO_VOICES_MESSAGE},
+ {"textToSpeechMoreLanguages", IDS_SETTINGS_TEXT_TO_SPEECH_MORE_LANGUAGES},
{"textToSpeechProperties", IDS_SETTINGS_TEXT_TO_SPEECH_PROPERTIES},
{"textToSpeechRate", IDS_SETTINGS_TEXT_TO_SPEECH_RATE},
{"textToSpeechRateMinimumLabel",
@@ -273,7 +278,6 @@ void AddA11yStrings(content::WebUIDataSource* html_source) {
{"textToSpeechPreviewVoice", IDS_SETTINGS_TEXT_TO_SPEECH_PREVIEW_VOICE},
{"textToSpeechPreviewPlay", IDS_SETTINGS_TEXT_TO_SPEECH_PREVIEW_PLAY},
{"textToSpeechEngines", IDS_SETTINGS_TEXT_TO_SPEECH_ENGINES},
- {"textToSpeechInstallEngines", IDS_SETTINGS_TEXT_TO_SPEECH_INSTALL_ENGINES},
#endif
};
AddLocalizedStringsBulk(html_source, localized_strings,
@@ -330,6 +334,8 @@ void AddAboutStrings(content::WebUIDataSource* html_source) {
{"aboutPlatformLabel", IDS_SETTINGS_ABOUT_PAGE_PLATFORM},
{"aboutRelaunchAndPowerwash",
IDS_SETTINGS_ABOUT_PAGE_RELAUNCH_AND_POWERWASH},
+ {"aboutRollbackInProgress", IDS_SETTINGS_UPGRADE_ROLLBACK_IN_PROGRESS},
+ {"aboutRollbackSuccess", IDS_SETTINGS_UPGRADE_ROLLBACK_SUCCESS},
{"aboutUpgradeUpdatingChannelSwitch",
IDS_SETTINGS_UPGRADE_UPDATING_CHANNEL_SWITCH},
{"aboutUpgradeSuccessChannelSwitch",
@@ -388,13 +394,17 @@ void AddAboutStrings(content::WebUIDataSource* html_source) {
void AddCrostiniStrings(content::WebUIDataSource* html_source) {
LocalizedString localized_strings[] = {
{"crostiniPageTitle", IDS_SETTINGS_CROSTINI_TITLE},
- {"crostiniSubtext", IDS_SETTINGS_CROSTINI_SUBTEXT},
{"crostiniPageLabel", IDS_SETTINGS_CROSTINI_LABEL},
{"crostiniEnable", IDS_SETTINGS_TURN_ON},
{"crostiniRemove", IDS_SETTINGS_CROSTINI_REMOVE},
};
AddLocalizedStringsBulk(html_source, localized_strings,
arraysize(localized_strings));
+ html_source->AddString(
+ "crostiniSubtext",
+ l10n_util::GetStringFUTF16(
+ IDS_SETTINGS_CROSTINI_SUBTEXT,
+ GetHelpUrlWithBoard(chrome::kLinuxAppsLearnMoreURL)));
}
void AddAndroidAppStrings(content::WebUIDataSource* html_source) {
@@ -501,21 +511,6 @@ void AddChangePasswordStrings(content::WebUIDataSource* html_source) {
void AddClearBrowsingDataStrings(content::WebUIDataSource* html_source,
Profile* profile) {
- int clear_cookies_summary_msg_id =
- IDS_SETTINGS_CLEAR_COOKIES_AND_SITE_DATA_SUMMARY_BASIC;
-
-#if defined(OS_CHROMEOS)
- if (AccountConsistencyModeManager::IsMirrorEnabledForProfile(profile)) {
- clear_cookies_summary_msg_id =
- IDS_SETTINGS_CLEAR_COOKIES_AND_SITE_DATA_SUMMARY_BASIC_WITH_EXCEPTION;
- }
-#else // !defined(OS_CHROMEOS)
- if (AccountConsistencyModeManager::IsDiceEnabledForProfile(profile)) {
- clear_cookies_summary_msg_id =
- IDS_SETTINGS_CLEAR_COOKIES_AND_SITE_DATA_SUMMARY_BASIC_WITH_EXCEPTION;
- }
-#endif
-
LocalizedString localized_strings[] = {
{"clearTimeRange", IDS_SETTINGS_CLEAR_PERIOD_TITLE},
{"clearBrowsingHistory", IDS_SETTINGS_CLEAR_BROWSING_HISTORY},
@@ -524,7 +519,10 @@ void AddClearBrowsingDataStrings(content::WebUIDataSource* html_source,
{"clearDownloadHistory", IDS_SETTINGS_CLEAR_DOWNLOAD_HISTORY},
{"clearCache", IDS_SETTINGS_CLEAR_CACHE},
{"clearCookies", IDS_SETTINGS_CLEAR_COOKIES},
- {"clearCookiesSummary", clear_cookies_summary_msg_id},
+ {"clearCookiesSummary",
+ IDS_SETTINGS_CLEAR_COOKIES_AND_SITE_DATA_SUMMARY_BASIC},
+ {"clearCookiesSummarySignedIn",
+ IDS_SETTINGS_CLEAR_COOKIES_AND_SITE_DATA_SUMMARY_BASIC_WITH_EXCEPTION},
{"clearCookiesCounter", IDS_DEL_COOKIES_COUNTER},
{"clearCookiesFlash", IDS_SETTINGS_CLEAR_COOKIES_FLASH},
{"clearPasswords", IDS_SETTINGS_CLEAR_PASSWORDS},
@@ -539,11 +537,6 @@ void AddClearBrowsingDataStrings(content::WebUIDataSource* html_source,
{"historyDeletionDialogTitle",
IDS_CLEAR_BROWSING_DATA_HISTORY_NOTICE_TITLE},
{"historyDeletionDialogOK", IDS_CLEAR_BROWSING_DATA_HISTORY_NOTICE_OK},
- {"importantSitesSubtitleCookies",
- IDS_SETTINGS_IMPORTANT_SITES_SUBTITLE_COOKIES},
- {"importantSitesSubtitleCookiesAndCache",
- IDS_SETTINGS_IMPORTANT_SITES_SUBTITLE_COOKIES_AND_CACHE},
- {"importantSitesConfirm", IDS_SETTINGS_IMPORTANT_SITES_CONFIRM},
{"notificationWarning", IDS_SETTINGS_NOTIFICATION_WARNING},
};
@@ -751,7 +744,7 @@ void AddDeviceStrings(content::WebUIDataSource* html_source) {
display::HasExternalTouchscreenDevice());
html_source->AddBoolean("nightLightFeatureEnabled",
- ash::switches::IsNightLightEnabled());
+ ash::features::IsNightLightEnabled());
LocalizedString storage_strings[] = {
{"storageTitle", IDS_SETTINGS_STORAGE_TITLE},
@@ -761,6 +754,7 @@ void AddDeviceStrings(content::WebUIDataSource* html_source) {
{"storageItemDriveCache", IDS_SETTINGS_STORAGE_ITEM_DRIVE_CACHE},
{"storageItemBrowsingData", IDS_SETTINGS_STORAGE_ITEM_BROWSING_DATA},
{"storageItemAndroid", IDS_SETTINGS_STORAGE_ITEM_ANDROID},
+ {"storageItemCrostini", IDS_SETTINGS_STORAGE_ITEM_CROSTINI},
{"storageItemOtherUsers", IDS_SETTINGS_STORAGE_ITEM_OTHER_USERS},
{"storageSizeComputing", IDS_SETTINGS_STORAGE_SIZE_CALCULATING},
{"storageSizeUnknown", IDS_SETTINGS_STORAGE_SIZE_UNKNOWN},
@@ -823,6 +817,7 @@ void AddDownloadsStrings(content::WebUIDataSource* html_source) {
IDS_SETTINGS_DOWNLOADS_SMB_SHARES_LEARN_MORE_LABEL},
{"addSmbShare", IDS_SETTINGS_DOWNLOADS_SMB_SHARES_ADD_SHARE},
{"smbShareUrl", IDS_SETTINGS_DOWNLOADS_ADD_SHARE_URL},
+ {"smbShareName", IDS_SETTINGS_DOWNLOADS_ADD_SHARE_NAME},
{"smbShareUsername", IDS_SETTINGS_DOWNLOADS_ADD_SHARE_USERNAME},
{"smbSharePassword", IDS_SETTINGS_DOWNLOADS_ADD_SHARE_PASSWORD},
{"smbShareAddedSuccessfulMessage",
@@ -857,6 +852,8 @@ void AddChromeCleanupStrings(content::WebUIDataSource* html_source) {
LocalizedString localized_strings[] = {
{"chromeCleanupPageTitle",
IDS_SETTINGS_RESET_CLEAN_UP_COMPUTER_PAGE_TITLE},
+ {"chromeCleanupDetailsExtensions",
+ IDS_SETTINGS_RESET_CLEANUP_DETAILS_EXTENSIONS},
{"chromeCleanupDetailsFilesAndPrograms",
IDS_SETTINGS_RESET_CLEANUP_DETAILS_FILES_AND_PROGRAMS},
{"chromeCleanupDetailsRegistryEntries",
@@ -1242,8 +1239,6 @@ void AddInternetStrings(content::WebUIDataSource* html_source) {
AddLocalizedStringsBulk(html_source, localized_strings,
arraysize(localized_strings));
- html_source->AddBoolean("networkSettingsConfig",
- chromeos::switches::IsNetworkSettingsConfigEnabled());
html_source->AddString("networkGoogleNameserversLearnMoreUrl",
chrome::kGoogleNameserversLearnMoreURL);
html_source->AddString(
@@ -1273,6 +1268,8 @@ void AddLanguagesStrings(content::WebUIDataSource* html_source) {
{"inputMethodEnabled", IDS_SETTINGS_LANGUAGES_INPUT_METHOD_ENABLED},
{"inputMethodsExpandA11yLabel",
IDS_SETTINGS_LANGUAGES_INPUT_METHODS_EXPAND_ACCESSIBILITY_LABEL},
+ {"inputMethodsManagedbyPolicy",
+ IDS_SETTINGS_LANGUAGES_INPUT_METHODS_MANAGED_BY_POLICY},
{"manageInputMethods", IDS_SETTINGS_LANGUAGES_INPUT_METHODS_MANAGE},
{"manageInputMethodsPageTitle",
IDS_SETTINGS_LANGUAGES_MANAGE_INPUT_METHODS_TITLE},
@@ -1381,10 +1378,13 @@ void AddPasswordsAndFormsStrings(content::WebUIDataSource* html_source) {
LocalizedString localized_strings[] = {
{"passwordsAndAutofillPageTitle",
IDS_SETTINGS_PASSWORDS_AND_AUTOFILL_PAGE_TITLE},
- {"autofill", IDS_SETTINGS_AUTOFILL},
{"googlePayments", IDS_SETTINGS_GOOGLE_PAYMENTS},
{"googlePaymentsCached", IDS_SETTINGS_GOOGLE_PAYMENTS_CACHED},
{"autofillFormsLabel", IDS_SETTINGS_AUTOFILL_TOGGLE_LABEL},
+ {"enableProfilesLabel",
+ IDS_SETTINGS_AUTOFILL_ENABLE_PROFILES_TOGGLE_LABEL},
+ {"enableCreditCardsLabel",
+ IDS_SETTINGS_AUTOFILL_ENABLE_CREDIT_CARDS_TOGGLE_LABEL},
{"addresses", IDS_SETTINGS_AUTOFILL_ADDRESSES_HEADING},
{"addAddressTitle", IDS_SETTINGS_AUTOFILL_ADDRESSES_ADD_TITLE},
{"editAddressTitle", IDS_SETTINGS_AUTOFILL_ADDRESSES_EDIT_TITLE},
@@ -1392,7 +1392,6 @@ void AddPasswordsAndFormsStrings(content::WebUIDataSource* html_source) {
{"addressPhone", IDS_SETTINGS_AUTOFILL_ADDRESSES_PHONE},
{"addressEmail", IDS_SETTINGS_AUTOFILL_ADDRESSES_EMAIL},
{"removeAddress", IDS_SETTINGS_ADDRESS_REMOVE},
- {"creditCards", IDS_SETTINGS_AUTOFILL_CREDIT_CARD_HEADING},
{"removeCreditCard", IDS_SETTINGS_CREDIT_CARD_REMOVE},
{"clearCreditCard", IDS_SETTINGS_CREDIT_CARD_CLEAR},
{"creditCardType", IDS_SETTINGS_AUTOFILL_CREDIT_CARD_TYPE_COLUMN_LABEL},
@@ -1406,7 +1405,6 @@ void AddPasswordsAndFormsStrings(content::WebUIDataSource* html_source) {
{"addCreditCardTitle", IDS_SETTINGS_ADD_CREDIT_CARD_TITLE},
{"canMakePaymentToggleLabel", IDS_SETTINGS_CAN_MAKE_PAYMENT_TOGGLE_LABEL},
{"autofillDetail", IDS_SETTINGS_AUTOFILL_DETAIL},
- {"passwords", IDS_SETTINGS_PASSWORDS},
{"passwordsSavePasswordsLabel",
IDS_SETTINGS_PASSWORDS_SAVE_PASSWORDS_TOGGLE_LABEL},
{"passwordsAutosigninLabel",
@@ -1427,8 +1425,6 @@ void AddPasswordsAndFormsStrings(content::WebUIDataSource* html_source) {
{"editPasswordUsernameLabel", IDS_SETTINGS_PASSWORDS_USERNAME},
{"editPasswordPasswordLabel", IDS_SETTINGS_PASSWORDS_PASSWORD},
{"noAddressesFound", IDS_SETTINGS_ADDRESS_NONE},
- {"noCreditCardsFound", IDS_SETTINGS_CREDIT_CARD_NONE},
- {"noCreditCardsPolicy", IDS_SETTINGS_CREDIT_CARD_DISABLED},
{"noPasswordsFound", IDS_SETTINGS_PASSWORDS_NONE},
{"noExceptionsFound", IDS_SETTINGS_PASSWORDS_EXCEPTIONS_NONE},
{"import", IDS_PASSWORD_MANAGER_IMPORT_BUTTON},
@@ -1452,12 +1448,31 @@ void AddPasswordsAndFormsStrings(content::WebUIDataSource* html_source) {
{"exportPasswordsFailTipsAnotherFolder",
IDS_SETTINGS_PASSWORDS_EXPORTING_FAILURE_TIP_ANOTHER_FOLDER}};
+ // TODO(https://crbug.com/854562): Integrate these strings into the
+ // |localized_strings| array once Autofill Home is fully launched.
+ if (base::FeatureList::IsEnabled(password_manager::features::kAutofillHome)) {
+ html_source->AddLocalizedString("autofill",
+ IDS_SETTINGS_AUTOFILL_AUTOFILL_HOME);
+ html_source->AddLocalizedString("passwords",
+ IDS_SETTINGS_PASSWORDS_AUTOFILL_HOME);
+ html_source->AddLocalizedString("creditCards",
+ IDS_SETTINGS_AUTOFILL_PAYMENT_METHODS);
+ html_source->AddLocalizedString("noCreditCardsFound",
+ IDS_SETTINGS_PAYMENT_METHODS_NONE);
+ } else {
+ html_source->AddLocalizedString("autofill", IDS_SETTINGS_AUTOFILL);
+ html_source->AddLocalizedString("passwords", IDS_SETTINGS_PASSWORDS);
+ html_source->AddLocalizedString("creditCards",
+ IDS_SETTINGS_AUTOFILL_CREDIT_CARD_HEADING);
+ html_source->AddLocalizedString("noCreditCardsFound",
+ IDS_SETTINGS_CREDIT_CARD_NONE);
+ }
+
html_source->AddString(
"managePasswordsLabel",
l10n_util::GetStringFUTF16(
IDS_SETTINGS_PASSWORDS_MANAGE_PASSWORDS,
- base::ASCIIToUTF16(
- password_manager::kPasswordManagerAccountDashboardURL)));
+ l10n_util::GetStringUTF16(IDS_PASSWORDS_WEB_LINK)));
html_source->AddString("passwordManagerLearnMoreURL",
chrome::kPasswordManagerLearnMoreURL);
html_source->AddString("manageAddressesUrl",
@@ -1477,6 +1492,7 @@ void AddPeopleStrings(content::WebUIDataSource* html_source, Profile* profile) {
{"accountManagerPageTitle", IDS_SETTINGS_ACCOUNT_MANAGER_PAGE_TITLE},
{"accountManagerDescription", IDS_SETTINGS_ACCOUNT_MANAGER_DESCRIPTION},
{"accountListHeader", IDS_SETTINGS_ACCOUNT_MANAGER_LIST_HEADER},
+ {"addAccountLabel", IDS_SETTINGS_ACCOUNT_MANAGER_ADD_ACCOUNT_LABEL},
{"configureFingerprintTitle", IDS_SETTINGS_ADD_FINGERPRINT_DIALOG_TITLE},
{"configureFingerprintInstructionLocateScannerStep",
IDS_SETTINGS_ADD_FINGERPRINT_DIALOG_INSTRUCTION_LOCATE_SCANNER},
@@ -1586,6 +1602,7 @@ void AddPeopleStrings(content::WebUIDataSource* html_source, Profile* profile) {
#endif // defined(OS_CHROMEOS)
#if BUILDFLAG(ENABLE_DICE_SUPPORT)
{"peopleSignIn", IDS_SETTINGS_PEOPLE_SIGN_IN},
+ {"peopleSignOut", IDS_SETTINGS_PEOPLE_SIGN_OUT},
{"peopleSignInPrompt", IDS_SETTINGS_PEOPLE_SIGN_IN_PROMPT},
{"peopleSignInPromptSecondaryWithNoAccount",
IDS_SETTINGS_PEOPLE_SIGN_IN_PROMPT_SECONDARY_WITH_NO_ACCOUNT},
@@ -1595,23 +1612,22 @@ void AddPeopleStrings(content::WebUIDataSource* html_source, Profile* profile) {
{"syncAsName", IDS_SETTINGS_PEOPLE_SYNC_AS_NAME},
{"syncingTo", IDS_SETTINGS_PEOPLE_SYNCING_TO_ACCOUNT},
{"turnOffSync", IDS_SETTINGS_PEOPLE_SYNC_TURN_OFF},
+ {"signInAgain", IDS_SYNC_ERROR_USER_MENU_SIGNIN_AGAIN_BUTTON},
{"syncNotWorking", IDS_SETTINGS_PEOPLE_SYNC_NOT_WORKING},
{"syncPaused", IDS_SETTINGS_PEOPLE_SYNC_PAUSED},
{"syncSignInPromptWithAccount",
IDS_SETTINGS_SYNC_SIGN_IN_PROMPT_WITH_ACCOUNT},
{"syncSignInPromptWithNoAccount",
IDS_SETTINGS_SYNC_SIGN_IN_PROMPT_WITH_NO_ACCOUNT},
- {"syncSignInPromptSecondary", IDS_SETTINGS_SYNC_SIGN_IN_PROMPT_SECONDARY},
#endif
{"syncUnifiedConsentToggleTitle",
IDS_SETTINGS_PEOPLE_SYNC_UNIFIED_CONSENT_TOGGLE_TITLE},
- {"syncUnifiedConsentToggleSubtitle",
- IDS_SETTINGS_PEOPLE_SYNC_UNIFIED_CONSENT_TOGGLE_SUBTITLE},
{"syncOverview", IDS_SETTINGS_SYNC_OVERVIEW},
+ {"syncDisabled", IDS_PROFILES_DICE_SYNC_DISABLED_TITLE},
{"syncDisabledByAdministrator",
IDS_SETTINGS_SYNC_DISABLED_BY_ADMINISTRATOR},
{"syncSignin", IDS_SETTINGS_SYNC_SIGNIN},
- {"syncDisconnect", IDS_SETTINGS_SYNC_DISCONNECT},
+ {"syncDisconnect", IDS_SETTINGS_PEOPLE_SIGN_OUT},
{"syncDisconnectTitle", IDS_SETTINGS_SYNC_DISCONNECT_TITLE},
{"syncDisconnectDeleteProfile",
IDS_SETTINGS_SYNC_DISCONNECT_DELETE_PROFILE},
@@ -1623,18 +1639,24 @@ void AddPeopleStrings(content::WebUIDataSource* html_source, Profile* profile) {
IDS_SETTINGS_SYNC_DISCONNECT_DELETE_PROFILE_WARNING_WITH_COUNTS_PLURAL},
{"deleteProfileWarningWithoutCounts",
IDS_SETTINGS_SYNC_DISCONNECT_DELETE_PROFILE_WARNING_WITHOUT_COUNTS},
- {"syncDisconnectExplanation", IDS_SETTINGS_SYNC_DISCONNECT_EXPLANATION},
{"syncDisconnectConfirm", IDS_SETTINGS_SYNC_DISCONNECT_CONFIRM},
- {"sync", IDS_SETTINGS_SYNC},
- {"syncDescription", IDS_SETTINGS_SYNC_DESCRIPTION},
- {"personalizationSectionLabel", IDS_SETTINGS_PERSONALIZATION_SECTION_LABEL},
- {"personalizationSectionDesc", IDS_SETTINGS_PERSONALIZATION_SECTION_DESC},
- {"personalizationExpandA11yLabel",
- IDS_SETTINGS_PERSONALIZATION_SECTION_ACCESSIBILITY_LABEL},
+ {"sync", IsUnifiedConsentEnabled(profile)
+ ? IDS_SETTINGS_SYNC_UNIFIED_CONSENT
+ : IDS_SETTINGS_SYNC},
+ {"syncDescription", IsUnifiedConsentEnabled(profile)
+ ? IDS_SETTINGS_SYNC_DESCRIPTION_UNIFIED_CONSENT
+ : IDS_SETTINGS_SYNC_DESCRIPTION},
+ {"nonPersonalizedServicesSectionLabel",
+ IDS_SETTINGS_NON_PERSONALIZED_SERVICES_SECTION_LABEL},
+ {"nonPersonalizedServicesSectionDesc",
+ IDS_SETTINGS_NON_PERSONALIZED_SERVICES_SECTION_DESC},
+ {"nonPersonalizedServicesExpandA11yLabel",
+ IDS_SETTINGS_NON_PERSONALIZED_SERVICES_SECTION_ACCESSIBILITY_LABEL},
{"syncExpandA11yLabel", IDS_SETTINGS_SYNC_SECTION_ACCESSIBILITY_LABEL},
- {"syncAndPersonalization", IDS_SETTINGS_SYNC_SYNC_AND_PERSONALIZATION},
+ {"syncAndNonPersonalizedServices",
+ IDS_SETTINGS_SYNC_SYNC_AND_NON_PERSONALIZED_SERVICES},
{"syncPageTitle", IsUnifiedConsentEnabled(profile)
- ? IDS_SETTINGS_SYNC_SYNC_AND_PERSONALIZATION
+ ? IDS_SETTINGS_SYNC_SYNC_AND_NON_PERSONALIZED_SERVICES
: IDS_SETTINGS_SYNC_PAGE_TITLE},
{"syncLoading", IDS_SETTINGS_SYNC_LOADING},
{"syncTimeout", IDS_SETTINGS_SYNC_TIMEOUT},
@@ -1650,8 +1672,10 @@ void AddPeopleStrings(content::WebUIDataSource* html_source, Profile* profile) {
{"bookmarksCheckboxLabel", IDS_SETTINGS_BOOKMARKS_CHECKBOX_LABEL},
{"passwordsCheckboxLabel", IDS_SETTINGS_PASSWORDS_CHECKBOX_LABEL},
{"openTabsCheckboxLabel", IDS_SETTINGS_OPEN_TABS_CHECKBOX_LABEL},
- {"enablePaymentsIntegrationCheckboxLabel",
- IDS_SETTINGS_ENABLE_PAYMENTS_INTEGRATION_CHECKBOX_LABEL},
+ {"userEventsCheckboxLabel", IDS_SETTINGS_USER_EVENTS_CHECKBOX_LABEL},
+ {"userEventsCheckboxText", IDS_SETTINGS_USER_EVENTS_CHECKBOX_TEXT},
+ {"driveSuggestPref", IDS_DRIVE_SUGGEST_PREF},
+ {"driveSuggestPrefDesc", IDS_DRIVE_SUGGEST_PREF_DESC},
{"manageSyncedDataTitle", IDS_SETTINGS_MANAGE_SYNCED_DATA_TITLE},
{"encryptionOptionsTitle", IDS_SETTINGS_ENCRYPTION_OPTIONS},
{"syncDataEncryptedText", IDS_SETTINGS_SYNC_DATA_ENCRYPTED_TEXT},
@@ -1667,12 +1691,23 @@ void AddPeopleStrings(content::WebUIDataSource* html_source, Profile* profile) {
{"submitPassphraseButton", IDS_SETTINGS_SUBMIT_PASSPHRASE},
{"personalizeGoogleServicesTitle",
IDS_SETTINGS_PERSONALIZE_GOOGLE_SERVICES_TITLE},
- {"personalizeGoogleServicesText",
- IDS_SETTINGS_PERSONALIZE_GOOGLE_SERVICES_TEXT},
+ {"existingPassphraseTitle", IDS_SETTINGS_EXISTING_PASSPHRASE_TITLE},
};
AddLocalizedStringsBulk(html_source, localized_strings,
arraysize(localized_strings));
+ // TODO(https://crbug.com/854562): Integrate these strings into the
+ // |localized_strings| array once Autofill Home is fully launched.
+ if (base::FeatureList::IsEnabled(password_manager::features::kAutofillHome)) {
+ html_source->AddLocalizedString(
+ "enablePaymentsIntegrationCheckboxLabel",
+ IDS_SETTINGS_ENABLE_PAYMENTS_INTEGRATION_CHECKBOX_LABEL_AUTOFILL_HOME);
+ } else {
+ html_source->AddLocalizedString(
+ "enablePaymentsIntegrationCheckboxLabel",
+ IDS_SETTINGS_ENABLE_PAYMENTS_INTEGRATION_CHECKBOX_LABEL);
+ }
+
// Format numbers to be used on the pin keyboard.
for (int j = 0; j <= 9; j++) {
html_source->AddString("pinKeyboard" + base::IntToString(j),
@@ -1712,8 +1747,11 @@ void AddPeopleStrings(content::WebUIDataSource* html_source, Profile* profile) {
base::ASCIIToUTF16(sync_dashboard_url)));
html_source->AddString(
"passphraseResetHint",
- l10n_util::GetStringFUTF8(IDS_SETTINGS_PASSPHRASE_RESET_HINT,
- base::ASCIIToUTF16(sync_dashboard_url)));
+ l10n_util::GetStringFUTF8(
+ IsUnifiedConsentEnabled(profile)
+ ? IDS_SETTINGS_PASSPHRASE_RESET_HINT_UNIFIED_CONSENT
+ : IDS_SETTINGS_PASSPHRASE_RESET_HINT,
+ base::ASCIIToUTF16(sync_dashboard_url)));
html_source->AddString(
"passphraseRecover",
l10n_util::GetStringFUTF8(IDS_SETTINGS_PASSPHRASE_RECOVER,
@@ -1733,8 +1771,11 @@ void AddPeopleStrings(content::WebUIDataSource* html_source, Profile* profile) {
// The syncDisconnect text differs depending on Dice-enabledness.
if (AccountConsistencyModeManager::IsDiceEnabledForProfile(profile)) {
LocalizedString sync_disconnect_strings[] = {
- {"syncDisconnect", IDS_SETTINGS_TURN_OFF_SYNC_DIALOG_CONFIRM},
- {"syncDisconnectTitle", IDS_SETTINGS_TURN_OFF_SYNC_DIALOG_TITLE},
+ {"syncDisconnect", IDS_SETTINGS_PEOPLE_SYNC_TURN_OFF},
+ {"syncDisconnectTitle",
+ IsUnifiedConsentEnabled(profile)
+ ? IDS_SETTINGS_TURN_OFF_SYNC_AND_SIGN_OUT_DIALOG_TITLE_UNIFIED_CONSENT
+ : IDS_SETTINGS_TURN_OFF_SYNC_AND_SIGN_OUT_DIALOG_TITLE},
{"syncDisconnectDeleteProfile",
IDS_SETTINGS_TURN_OFF_SYNC_DIALOG_CHECKBOX},
{"syncDisconnectConfirm",
@@ -1742,6 +1783,18 @@ void AddPeopleStrings(content::WebUIDataSource* html_source, Profile* profile) {
};
AddLocalizedStringsBulk(html_source, sync_disconnect_strings,
arraysize(sync_disconnect_strings));
+
+ if (IsUnifiedConsentEnabled(profile)) {
+ html_source->AddLocalizedString(
+ "syncDisconnectExplanation",
+ IDS_SETTINGS_SYNC_DISCONNECT_AND_SIGN_OUT_EXPLANATION_UNIFIED_CONSENT);
+ } else {
+ html_source->AddString(
+ "syncDisconnectExplanation",
+ l10n_util::GetStringFUTF8(
+ IDS_SETTINGS_SYNC_DISCONNECT_AND_SIGN_OUT_EXPLANATION,
+ base::ASCIIToUTF16(sync_dashboard_url)));
+ }
}
#endif
@@ -1756,6 +1809,10 @@ void AddPeopleStrings(content::WebUIDataSource* html_source, Profile* profile) {
html_source->AddBoolean(
"changePictureVideoModeEnabled",
base::FeatureList::IsEnabled(features::kChangePictureVideoMode));
+
+ html_source->AddBoolean(
+ "driveSuggestAvailable",
+ base::FeatureList::IsEnabled(omnibox::kDocumentProvider));
}
void AddPrintingStrings(content::WebUIDataSource* html_source) {
@@ -1882,7 +1939,18 @@ void AddPrivacyStrings(content::WebUIDataSource* html_source,
{"clearBrowsingData", IDS_SETTINGS_CLEAR_BROWSING_DATA},
{"clearBrowsingDataDescription", IDS_SETTINGS_CLEAR_DATA_DESCRIPTION},
{"titleAndCount", IDS_SETTINGS_TITLE_AND_COUNT},
- {"syncAndPersonalizationLink", IDS_SETTINGS_PRIVACY_MORE_SETTINGS},
+ {"safeBrowsingEnableExtendedReporting",
+ IDS_SETTINGS_SAFEBROWSING_ENABLE_REPORTING},
+ {"safeBrowsingEnableExtendedReportingDesc",
+ IDS_SETTINGS_SAFEBROWSING_ENABLE_REPORTING_DESC},
+ {"safeBrowsingEnableProtection",
+ IDS_SETTINGS_SAFEBROWSING_ENABLEPROTECTION},
+ {"safeBrowsingEnableProtectionDesc",
+ IDS_SETTINGS_SAFEBROWSING_ENABLEPROTECTION_DESC},
+ {"urlKeyedAnonymizedDataCollection",
+ IDS_SETTINGS_ENABLE_URL_KEYED_ANONYMIZED_DATA_COLLECTION},
+ {"urlKeyedAnonymizedDataCollectionDesc",
+ IDS_SETTINGS_ENABLE_URL_KEYED_ANONYMIZED_DATA_COLLECTION_DESC},
};
AddLocalizedStringsBulk(html_source, localized_strings,
arraysize(localized_strings));
@@ -1894,10 +1962,6 @@ void AddPrivacyStrings(content::WebUIDataSource* html_source,
{"searchSuggestPref", IDS_SETTINGS_SUGGEST_PREF_UNIFIED_CONSENT},
{"searchSuggestPrefDesc",
IDS_SETTINGS_SUGGEST_PREF_DESC_UNIFIED_CONSENT},
- {"safeBrowsingEnableExtendedReporting",
- IDS_SETTINGS_SAFEBROWSING_ENABLE_REPORTING_UNIFIED_CONSENT},
- {"safeBrowsingEnableExtendedReportingDesc",
- IDS_SETTINGS_SAFEBROWSING_ENABLE_REPORTING_DESC_UNIFIED_CONSENT},
{"networkPredictionEnabled",
IDS_SETTINGS_NETWORK_PREDICTION_ENABLED_LABEL_UNIFIED_CONSENT},
{"networkPredictionEnabledDesc",
@@ -1905,13 +1969,11 @@ void AddPrivacyStrings(content::WebUIDataSource* html_source,
{"linkDoctorPref", IDS_SETTINGS_LINKDOCTOR_PREF_UNIFIED_CONSENT},
{"linkDoctorPrefDesc",
IDS_SETTINGS_LINKDOCTOR_PREF_DESC_UNIFIED_CONSENT},
- {"safeBrowsingEnableProtection",
- IDS_SETTINGS_SAFEBROWSING_ENABLEPROTECTION_UNIFIED_CONSENT},
- {"safeBrowsingEnableProtectionDesc",
- IDS_SETTINGS_SAFEBROWSING_ENABLEPROTECTION_DESC_UNIFIED_CONSENT},
{"spellingPref", IDS_SETTINGS_SPELLING_PREF_UNIFIED_CONSENT},
{"spellingDescription",
IDS_SETTINGS_SPELLING_DESCRIPTION_UNIFIED_CONSENT},
+ {"syncAndPersonalizationLink",
+ IDS_SETTINGS_PRIVACY_MORE_SETTINGS_UNIFIED_CONSENT},
{"enableLogging", IDS_SETTINGS_ENABLE_LOGGING_UNIFIED_CONSENT},
{"enableLoggingDesc", IDS_SETTINGS_ENABLE_LOGGING_DESC_UNIFIED_CONSENT},
};
@@ -1921,17 +1983,14 @@ void AddPrivacyStrings(content::WebUIDataSource* html_source,
LocalizedString conditional_localized_strings[] = {
{"searchSuggestPref", IDS_SETTINGS_SUGGEST_PREF},
{"searchSuggestPrefDesc", IDS_SETTINGS_EMPTY_STRING},
- {"safeBrowsingEnableExtendedReportingDesc", IDS_SETTINGS_EMPTY_STRING},
{"networkPredictionEnabled",
IDS_SETTINGS_NETWORK_PREDICTION_ENABLED_LABEL},
{"networkPredictionEnabledDesc", IDS_SETTINGS_EMPTY_STRING},
{"linkDoctorPref", IDS_SETTINGS_LINKDOCTOR_PREF},
{"linkDoctorPrefDesc", IDS_SETTINGS_EMPTY_STRING},
- {"safeBrowsingEnableProtection",
- IDS_SETTINGS_SAFEBROWSING_ENABLEPROTECTION},
- {"safeBrowsingEnableProtectionDesc", IDS_SETTINGS_EMPTY_STRING},
{"spellingPref", IDS_SETTINGS_SPELLING_PREF},
{"spellingDescription", IDS_SETTINGS_SPELLING_DESCRIPTION},
+ {"syncAndPersonalizationLink", IDS_SETTINGS_PRIVACY_MORE_SETTINGS},
#if defined(OS_CHROMEOS)
{"enableLogging", IDS_SETTINGS_ENABLE_LOGGING_DIAGNOSTIC_AND_USAGE_DATA},
#else
@@ -1941,19 +2000,12 @@ void AddPrivacyStrings(content::WebUIDataSource* html_source,
};
AddLocalizedStringsBulk(html_source, conditional_localized_strings,
arraysize(conditional_localized_strings));
-
- html_source->AddLocalizedString(
- "safeBrowsingEnableExtendedReporting",
- safe_browsing::ChooseOptInTextResource(
- *profile->GetPrefs(),
- IDS_SETTINGS_SAFEBROWSING_ENABLE_EXTENDED_REPORTING,
- IDS_SETTINGS_SAFEBROWSING_ENABLE_SCOUT_REPORTING));
}
- html_source->AddBoolean(
- "importantSitesInCbd",
- base::FeatureList::IsEnabled(features::kImportantSitesInCbd));
-
+ html_source->AddString("syncAndGoogleServicesLearnMoreURL",
+ IsUnifiedConsentEnabled(profile)
+ ? chrome::kSyncAndGoogleServicesLearnMoreURL
+ : "");
html_source->AddString(
"improveBrowsingExperience",
l10n_util::GetStringFUTF16(
@@ -2027,6 +2079,8 @@ void AddSearchStrings(content::WebUIDataSource* html_source, Profile* profile) {
html_source->AddString("searchExplanation", search_explanation_text);
#if defined(OS_CHROMEOS)
html_source->AddBoolean("enableVoiceInteraction", is_assistant_allowed);
+ html_source->AddBoolean("enableAssistant",
+ chromeos::switches::IsAssistantEnabled());
#endif
}
@@ -2067,6 +2121,10 @@ void AddGoogleAssistantStrings(content::WebUIDataSource* html_source) {
IDS_SETTINGS_GOOGLE_ASSISTANT_ENABLE_CONTEXT},
{"googleAssistantEnableContextDescription",
IDS_SETTINGS_GOOGLE_ASSISTANT_ENABLE_CONTEXT_DESCRIPTION},
+ {"googleAssistantEnableHotword",
+ IDS_SETTINGS_GOOGLE_ASSISTANT_ENABLE_HOTWORD},
+ {"googleAssistantEnableHotwordDescription",
+ IDS_SETTINGS_GOOGLE_ASSISTANT_ENABLE_HOTWORD_DESCRIPTION},
{"googleAssistantSettings", IDS_SETTINGS_GOOGLE_ASSISTANT_SETTINGS},
};
AddLocalizedStringsBulk(html_source, localized_strings,
@@ -2089,7 +2147,6 @@ void AddSiteSettingsStrings(content::WebUIDataSource* html_source,
{"cookieFlashLso", IDS_SETTINGS_COOKIES_FLASH_LSO},
{"cookieLocalStorage", IDS_SETTINGS_COOKIES_LOCAL_STORAGE},
{"cookieMediaLicense", IDS_SETTINGS_COOKIES_MEDIA_LICENSE},
- {"cookiePlural", IDS_SETTINGS_COOKIES_PLURAL_COOKIES},
{"cookieServiceWorker", IDS_SETTINGS_COOKIES_SERVICE_WORKER},
{"cookieSharedWorker", IDS_SETTINGS_COOKIES_SHARED_WORKER},
{"embeddedOnAnyHost", IDS_SETTINGS_EXCEPTIONS_EMBEDDED_ON_ANY_HOST},
@@ -2156,6 +2213,12 @@ void AddSiteSettingsStrings(content::WebUIDataSource* html_source,
{"siteSettingsAllSites", IDS_SETTINGS_SITE_SETTINGS_ALL_SITES},
{"siteSettingsAllSitesDescription",
IDS_SETTINGS_SITE_SETTINGS_ALL_SITES_DESCRIPTION},
+ {"siteSettingsAllSitesSearch", IDS_SETTINGS_SITE_SETTINGS_ALL_SITES_SEARCH},
+ {"siteSettingsAllSitesSort", IDS_SETTINGS_SITE_SETTINGS_ALL_SITES_SORT},
+ {"siteSettingsAllSitesSortMethodName",
+ IDS_SETTINGS_SITE_SETTINGS_ALL_SITES_SORT_METHOD_NAME},
+ {"siteSettingsSiteRepresentationSeparator",
+ IDS_SETTINGS_SITE_SETTINGS_SITE_REPRESENTATION_SEPARATOR},
{"siteSettingsAutomaticDownloads",
IDS_SETTINGS_SITE_SETTINGS_AUTOMATIC_DOWNLOADS},
{"siteSettingsBackgroundSync", IDS_SETTINGS_SITE_SETTINGS_BACKGROUND_SYNC},
@@ -2326,11 +2389,19 @@ void AddSiteSettingsStrings(content::WebUIDataSource* html_source,
{"siteSettingsCookieSearch", IDS_SETTINGS_SITE_SETTINGS_COOKIE_SEARCH},
{"siteSettingsCookieSubpage", IDS_SETTINGS_SITE_SETTINGS_COOKIE_SUBPAGE},
{"siteSettingsDelete", IDS_SETTINGS_SITE_SETTINGS_DELETE},
+ {"siteSettingsSiteClearStorage",
+ IDS_SETTINGS_SITE_SETTINGS_SITE_CLEAR_STORAGE},
+ {"siteSettingsSiteClearStorageConfirmation",
+ IDS_SETTINGS_SITE_SETTINGS_SITE_CLEAR_STORAGE_CONFIRMATION},
+ {"siteSettingsSiteClearStorageDialogTitle",
+ IDS_SETTINGS_SITE_SETTINGS_SITE_CLEAR_STORAGE_DIALOG_TITLE},
+ {"siteSettingsSiteGroupResetDialogTitle",
+ IDS_SETTINGS_SITE_SETTINGS_SITE_GROUP_RESET_DIALOG_TITLE},
+ {"siteSettingsSiteGroupResetConfirmation",
+ IDS_SETTINGS_SITE_SETTINGS_SITE_GROUP_RESET_CONFIRMATION},
{"siteSettingsSiteResetAll", IDS_SETTINGS_SITE_SETTINGS_SITE_RESET_ALL},
{"siteSettingsSiteResetConfirmation",
IDS_SETTINGS_SITE_SETTINGS_SITE_RESET_CONFIRMATION},
- {"siteSettingsSiteResetDialogTitle",
- IDS_SETTINGS_SITE_SETTINGS_SITE_RESET_DIALOG_TITLE},
{"thirdPartyCookie", IDS_SETTINGS_SITE_SETTINGS_THIRD_PARTY_COOKIE},
{"thirdPartyCookieSublabel",
IDS_SETTINGS_SITE_SETTINGS_THIRD_PARTY_COOKIE_SUBLABEL},
@@ -2365,7 +2436,7 @@ void AddSiteSettingsStrings(content::WebUIDataSource* html_source,
html_source->AddBoolean(
"enableSafeBrowsingSubresourceFilter",
base::FeatureList::IsEnabled(
- subresource_filter::kSafeBrowsingSubresourceFilterExperimentalUI));
+ subresource_filter::kSafeBrowsingSubresourceFilter));
html_source->AddBoolean(
"enableSoundContentSetting",
@@ -2383,12 +2454,20 @@ void AddSiteSettingsStrings(content::WebUIDataSource* html_source,
"enablePaymentHandlerContentSetting",
base::FeatureList::IsEnabled(features::kServiceWorkerPaymentApps));
+ html_source->AddBoolean(
+ "enableEphemeralFlashPermission",
+ base::FeatureList::IsEnabled(
+ content_settings::features::kEnableEphemeralFlashPermission));
+
if (PluginUtils::ShouldPreferHtmlOverPlugins(
HostContentSettingsMapFactory::GetForProfile(profile))) {
LocalizedString flash_strings[] = {
{"siteSettingsFlashAskFirst", IDS_SETTINGS_SITE_SETTINGS_ASK_FIRST},
{"siteSettingsFlashAskFirstRecommended",
IDS_SETTINGS_SITE_SETTINGS_ASK_FIRST_RECOMMENDED},
+ {"siteSettingsFlashPermissionsEphemeral",
+ IDS_SETTINGS_SITE_SETTINGS_FLASH_PERMISSIONS_ARE_EPHEMERAL},
+
};
AddLocalizedStringsBulk(html_source, flash_strings,
arraysize(flash_strings));
@@ -2398,6 +2477,8 @@ void AddSiteSettingsStrings(content::WebUIDataSource* html_source,
IDS_SETTINGS_SITE_SETTINGS_FLASH_DETECT_IMPORTANT},
{"siteSettingsFlashAskFirstRecommended",
IDS_SETTINGS_SITE_SETTINGS_FLASH_DETECT_IMPORTANT_RECOMMENDED},
+ {"siteSettingsFlashPermissionsEphemeral",
+ IDS_SETTINGS_SITE_SETTINGS_FLASH_PERMISSIONS_ARE_EPHEMERAL},
};
AddLocalizedStringsBulk(html_source, flash_strings,
arraysize(flash_strings));
@@ -2476,14 +2557,50 @@ void AddWebContentStrings(content::WebUIDataSource* html_source) {
void AddMultideviceStrings(content::WebUIDataSource* html_source) {
LocalizedString localized_strings[] = {
{"multidevicePageTitle", IDS_SETTINGS_MULTIDEVICE},
- {"smsConnect", IDS_SETTINGS_MULTIDEVICE_SMS_CONNECT},
- {"smsConnectSummary", IDS_SETTINGS_MULTIDEVICE_SMS_CONNECT_SUMMARY},
+ {"multideviceSetupButton", IDS_SETTINGS_MULTIDEVICE_SETUP_BUTTON},
+ {"multideviceVerifyButton", IDS_SETTINGS_MULTIDEVICE_VERIFY_BUTTON},
+ {"multideviceSetupItemHeading",
+ IDS_SETTINGS_MULTIDEVICE_SETUP_ITEM_HEADING},
+ {"multideviceEnabled", IDS_SETTINGS_MULTIDEVICE_ENABLED},
+ {"multideviceDisabled", IDS_SETTINGS_MULTIDEVICE_DISABLED},
+ {"multideviceSmartLockItemTitle", IDS_SETTINGS_EASY_UNLOCK_SECTION_TITLE},
+ {"multideviceInstantTetheringItemTitle",
+ IDS_SETTINGS_MULTIDEVICE_INSTANT_TETHERING},
+ {"multideviceAndroidMessagesItemTitle",
+ IDS_SETTINGS_MULTIDEVICE_ANDROID_MESSAGES},
+ {"multideviceAndroidMessagesItemSummary",
+ IDS_SETTINGS_MULTIDEVICE_ANDROID_MESSAGES_SUMMARY},
+ {"multideviceForgetDevice", IDS_SETTINGS_MULTIDEVICE_FORGET_THIS_DEVICE},
+ {"multideviceForgetDeviceSummary",
+ IDS_SETTINGS_MULTIDEVICE_FORGET_THIS_DEVICE_EXPLANATION},
};
AddLocalizedStringsBulk(html_source, localized_strings,
arraysize(localized_strings));
- html_source->AddBoolean("enableMultideviceSettings",
- base::FeatureList::IsEnabled(features::kMultidevice));
+ html_source->AddBoolean(
+ "enableMultideviceSettings",
+ base::FeatureList::IsEnabled(
+ chromeos::features::kEnableUnifiedMultiDeviceSettings));
+ html_source->AddString(
+ "multideviceVerificationText",
+ l10n_util::GetStringFUTF16(
+ IDS_SETTINGS_MULTIDEVICE_VERIFICATION_TEXT,
+ GetHelpUrlWithBoard(chrome::kMultiDeviceLearnMoreURL)));
+ html_source->AddString(
+ "multideviceCouldNotConnect",
+ l10n_util::GetStringFUTF16(
+ IDS_SETTINGS_MULTIDEVICE_COULD_NOT_CONNECT,
+ GetHelpUrlWithBoard(chrome::kMultiDeviceLearnMoreURL)));
+ html_source->AddString(
+ "multideviceSetupSummary",
+ l10n_util::GetStringFUTF16(
+ IDS_SETTINGS_MULTIDEVICE_SETUP_SUMMARY,
+ GetHelpUrlWithBoard(chrome::kMultiDeviceLearnMoreURL)));
+ html_source->AddString(
+ "multideviceSmartLockItemSummary",
+ l10n_util::GetStringFUTF16(
+ IDS_SETTINGS_MULTIDEVICE_SMART_LOCK_SUMMARY,
+ GetHelpUrlWithBoard(chrome::kEasyUnlockLearnMoreUrl)));
}
#endif
diff --git a/chromium/chrome/browser/ui/webui/settings/md_settings_ui.cc b/chromium/chrome/browser/ui/webui/settings/md_settings_ui.cc
index c7ca00e9642..e2feea6212e 100644
--- a/chromium/chrome/browser/ui/webui/settings/md_settings_ui.cc
+++ b/chromium/chrome/browser/ui/webui/settings/md_settings_ui.cc
@@ -75,7 +75,6 @@
#include "chrome/browser/chromeos/crostini/crostini_util.h"
#include "chrome/browser/chromeos/login/quick_unlock/quick_unlock_utils.h"
#include "chrome/browser/signin/account_tracker_service_factory.h"
-#include "chrome/browser/ui/ash/ash_util.h"
#include "chrome/browser/ui/webui/settings/chromeos/accessibility_handler.h"
#include "chrome/browser/ui/webui/settings/chromeos/account_manager_handler.h"
#include "chrome/browser/ui/webui/settings/chromeos/android_apps_handler.h"
@@ -92,17 +91,19 @@
#include "chrome/browser/ui/webui/settings/chromeos/fingerprint_handler.h"
#include "chrome/browser/ui/webui/settings/chromeos/google_assistant_handler.h"
#include "chrome/browser/ui/webui/settings/chromeos/internet_handler.h"
+#include "chrome/browser/ui/webui/settings/chromeos/multidevice_handler.h"
#include "chrome/browser/ui/webui/settings/chromeos/smb_handler.h"
#include "chrome/common/chrome_switches.h"
#include "chromeos/account_manager/account_manager.h"
#include "chromeos/account_manager/account_manager_factory.h"
#include "chromeos/chromeos_switches.h"
#include "components/arc/arc_util.h"
+#include "ui/base/ui_base_features.h"
#else // !defined(OS_CHROMEOS)
+#include "chrome/browser/signin/account_consistency_mode_manager.h"
#include "chrome/browser/ui/webui/settings/settings_default_browser_handler.h"
#include "chrome/browser/ui/webui/settings/settings_manage_profile_handler.h"
#include "chrome/browser/ui/webui/settings/system_handler.h"
-#include "components/signin/core/browser/profile_management_switches.h"
#endif // defined(OS_CHROMEOS)
#if defined(USE_NSS_CERTS)
@@ -182,15 +183,19 @@ MdSettingsUI::MdSettingsUI(content::WebUI* web_ui)
AddSettingsPageUIHandler(
std::make_unique<chromeos::settings::AndroidAppsHandler>(profile));
- chromeos::AccountManagerFactory* factory =
- g_browser_process->platform_part()->GetAccountManagerFactory();
- chromeos::AccountManager* account_manager =
- factory->GetAccountManager(profile->GetPath().value());
- DCHECK(account_manager);
- AddSettingsPageUIHandler(
- std::make_unique<chromeos::settings::AccountManagerUIHandler>(
- account_manager,
- AccountTrackerServiceFactory::GetInstance()->GetForProfile(profile)));
+ if (!profile->IsGuestSession()) {
+ chromeos::AccountManagerFactory* factory =
+ g_browser_process->platform_part()->GetAccountManagerFactory();
+ chromeos::AccountManager* account_manager =
+ factory->GetAccountManager(profile->GetPath().value());
+ DCHECK(account_manager);
+
+ AddSettingsPageUIHandler(
+ std::make_unique<chromeos::settings::AccountManagerUIHandler>(
+ account_manager,
+ AccountTrackerServiceFactory::GetInstance()->GetForProfile(
+ profile)));
+ }
AddSettingsPageUIHandler(
std::make_unique<chromeos::settings::ChangePictureHandler>());
if (IsCrostiniUIAllowedForProfile(profile)) {
@@ -201,18 +206,21 @@ MdSettingsUI::MdSettingsUI(content::WebUI* web_ui)
std::make_unique<chromeos::settings::CupsPrintersHandler>(web_ui));
AddSettingsPageUIHandler(
std::make_unique<chromeos::settings::FingerprintHandler>(profile));
- if (chromeos::switches::IsVoiceInteractionEnabled()) {
+ if (chromeos::switches::IsVoiceInteractionEnabled() ||
+ chromeos::switches::IsAssistantEnabled()) {
AddSettingsPageUIHandler(
std::make_unique<chromeos::settings::GoogleAssistantHandler>(profile));
}
AddSettingsPageUIHandler(
std::make_unique<chromeos::settings::KeyboardHandler>());
AddSettingsPageUIHandler(
+ std::make_unique<chromeos::settings::MultideviceHandler>());
+ AddSettingsPageUIHandler(
std::make_unique<chromeos::settings::PointerHandler>());
AddSettingsPageUIHandler(
std::make_unique<chromeos::settings::SmbHandler>(profile));
AddSettingsPageUIHandler(
- std::make_unique<chromeos::settings::StorageHandler>());
+ std::make_unique<chromeos::settings::StorageHandler>(profile));
AddSettingsPageUIHandler(
std::make_unique<chromeos::settings::StylusHandler>());
AddSettingsPageUIHandler(
@@ -230,8 +238,6 @@ MdSettingsUI::MdSettingsUI(content::WebUI* web_ui)
content::WebUIDataSource* html_source =
content::WebUIDataSource::Create(chrome::kChromeUISettingsHost);
- html_source->OverrideContentSecurityPolicyScriptSrc(
- "script-src chrome://resources 'self';");
#if defined(OS_WIN)
AddSettingsPageUIHandler(std::make_unique<ChromeCleanupHandler>(profile));
@@ -310,20 +316,27 @@ MdSettingsUI::MdSettingsUI(content::WebUI* web_ui)
html_source->AddBoolean("havePlayStoreApp", arc::IsPlayStoreAvailable());
// TODO(mash): Support Chrome power settings in Mash. crbug.com/644348
- bool enable_power_settings = !ash_util::IsRunningInMash();
+ bool enable_power_settings = features::IsAshInBrowserProcess();
html_source->AddBoolean("enablePowerSettings", enable_power_settings);
if (enable_power_settings) {
AddSettingsPageUIHandler(std::make_unique<chromeos::settings::PowerHandler>(
profile->GetPrefs()));
}
#else // !defined(OS_CHROMEOS)
- html_source->AddBoolean("diceEnabled",
- signin::IsDiceEnabledForProfile(profile->GetPrefs()));
+ html_source->AddBoolean(
+ "diceEnabled",
+ AccountConsistencyModeManager::IsDiceEnabledForProfile(profile));
#endif // defined(OS_CHROMEOS)
html_source->AddBoolean("unifiedConsentEnabled",
IsUnifiedConsentEnabled(profile));
+ // TODO(jdoerrie): https://crbug.com/854562.
+ // Remove once Autofill Home is launched.
+ html_source->AddBoolean(
+ "autofillHomeEnabled",
+ base::FeatureList::IsEnabled(password_manager::features::kAutofillHome));
+
html_source->AddBoolean("showImportPasswords",
base::FeatureList::IsEnabled(
password_manager::features::kPasswordImport));
diff --git a/chromium/chrome/browser/ui/webui/settings/people_handler.cc b/chromium/chrome/browser/ui/webui/settings/people_handler.cc
index 75d91f07c7c..d33f651f224 100644
--- a/chromium/chrome/browser/ui/webui/settings/people_handler.cc
+++ b/chromium/chrome/browser/ui/webui/settings/people_handler.cc
@@ -21,6 +21,7 @@
#include "chrome/browser/profiles/profile_metrics.h"
#include "chrome/browser/profiles/profile_window.h"
#include "chrome/browser/signin/chrome_signin_helper.h"
+#include "chrome/browser/signin/profile_oauth2_token_service_factory.h"
#include "chrome/browser/signin/signin_error_controller_factory.h"
#include "chrome/browser/signin/signin_manager_factory.h"
#include "chrome/browser/signin/signin_promo.h"
@@ -42,6 +43,7 @@
#include "components/browser_sync/profile_sync_service.h"
#include "components/prefs/pref_service.h"
#include "components/signin/core/browser/profile_management_switches.h"
+#include "components/signin/core/browser/profile_oauth2_token_service.h"
#include "components/signin/core/browser/signin_error_controller.h"
#include "components/signin/core/browser/signin_header_helper.h"
#include "components/signin/core/browser/signin_metrics.h"
@@ -251,9 +253,8 @@ void PeopleHandler::RegisterMessages() {
base::Unretained(this)));
#else
web_ui()->RegisterMessageCallback(
- "SyncSetupStopSyncing",
- base::BindRepeating(&PeopleHandler::HandleStopSyncing,
- base::Unretained(this)));
+ "SyncSetupSignout", base::BindRepeating(&PeopleHandler::HandleSignout,
+ base::Unretained(this)));
web_ui()->RegisterMessageCallback(
"SyncSetupStartSignIn",
base::BindRepeating(&PeopleHandler::HandleStartSignin,
@@ -614,10 +615,12 @@ void PeopleHandler::HandleShowSetupUI(const base::ListValue* args) {
ProfileSyncService* service = GetSyncService();
- // Just let the page open for now, even when the user's not signed in.
+ // Just let the page open for now, even when the user's not signed in or sync
+ // is disabled.
// TODO(scottchen): finish the UI for signed-out users
// (https://crbug.com/800972).
- if (IsUnifiedConsentEnabled(profile_) && IsProfileAuthNeededOrHasErrors()) {
+ if (IsUnifiedConsentEnabled(profile_) &&
+ (IsProfileAuthNeededOrHasErrors() || !service)) {
if (service && !sync_blocker_)
sync_blocker_ = service->GetSetupInProgressHandle();
@@ -708,19 +711,30 @@ void PeopleHandler::HandleStartSignin(const base::ListValue* args) {
DisplayGaiaLogin(signin_metrics::AccessPoint::ACCESS_POINT_SETTINGS);
}
-void PeopleHandler::HandleStopSyncing(const base::ListValue* args) {
+void PeopleHandler::HandleSignout(const base::ListValue* args) {
bool delete_profile = false;
args->GetBoolean(0, &delete_profile);
- if (!SigninManagerFactory::GetForProfile(profile_)->IsSignoutProhibited()) {
- if (GetSyncService())
- ProfileSyncService::SyncEvent(ProfileSyncService::STOP_FROM_OPTIONS);
-
- signin_metrics::SignoutDelete delete_metric =
- delete_profile ? signin_metrics::SignoutDelete::DELETED
- : signin_metrics::SignoutDelete::KEEPING;
- SigninManagerFactory::GetForProfile(profile_)
- ->SignOut(signin_metrics::USER_CLICKED_SIGNOUT_SETTINGS, delete_metric);
+ SigninManager* signin_manager = SigninManagerFactory::GetForProfile(profile_);
+ if (signin_manager->IsSignoutProhibited()) {
+ // If the user cannot signout, the profile must be destroyed.
+ DCHECK(delete_profile);
+ } else {
+ if (signin_manager->IsAuthenticated()) {
+ if (GetSyncService())
+ ProfileSyncService::SyncEvent(ProfileSyncService::STOP_FROM_OPTIONS);
+
+ signin_metrics::SignoutDelete delete_metric =
+ delete_profile ? signin_metrics::SignoutDelete::DELETED
+ : signin_metrics::SignoutDelete::KEEPING;
+ signin_manager->SignOutAndRemoveAllAccounts(
+ signin_metrics::USER_CLICKED_SIGNOUT_SETTINGS, delete_metric);
+ } else {
+ DCHECK(!delete_profile)
+ << "Deleting the profile should only be offered the user is syncing.";
+ ProfileOAuth2TokenServiceFactory::GetForProfile(profile_)
+ ->RevokeAllCredentials();
+ }
}
if (delete_profile) {
@@ -877,10 +891,13 @@ PeopleHandler::GetSyncStatusDictionary() {
// makes Profile::IsSyncAllowed() false.
ProfileSyncService* service =
ProfileSyncServiceFactory::GetInstance()->GetForProfile(profile_);
+ bool disallowed_by_policy =
+ service && service->HasDisableReason(
+ syncer::SyncService::DISABLE_REASON_ENTERPRISE_POLICY);
sync_status->SetBoolean("signinAllowed", signin->IsSigninAllowed());
sync_status->SetBoolean("syncSystemEnabled", (service != nullptr));
sync_status->SetBoolean("setupInProgress",
- service && !service->IsManaged() &&
+ service && !disallowed_by_policy &&
service->IsFirstSetupInProgress() &&
signin->IsAuthenticated());
@@ -896,7 +913,12 @@ PeopleHandler::GetSyncStatusDictionary() {
sync_status->SetBoolean("hasError", status_has_error);
sync_status->SetString("statusAction", GetSyncErrorAction(action_type));
- sync_status->SetBoolean("managed", service && service->IsManaged());
+ sync_status->SetBoolean("managed", disallowed_by_policy);
+ sync_status->SetBoolean(
+ "disabled",
+ !service || disallowed_by_policy ||
+ service->HasDisableReason(
+ syncer::SyncService::DISABLE_REASON_PLATFORM_OVERRIDE));
sync_status->SetBoolean("signedIn", signin->IsAuthenticated());
sync_status->SetString("signedInUsername",
signin_ui_util::GetAuthenticatedUsername(signin));
diff --git a/chromium/chrome/browser/ui/webui/settings/people_handler.h b/chromium/chrome/browser/ui/webui/settings/people_handler.h
index b39378b9726..bfedcdc900e 100644
--- a/chromium/chrome/browser/ui/webui/settings/people_handler.h
+++ b/chromium/chrome/browser/ui/webui/settings/people_handler.h
@@ -174,7 +174,7 @@ class PeopleHandler : public SettingsPageUIHandler,
void HandleRequestPinLoginState(const base::ListValue* args);
#endif
void HandleStartSignin(const base::ListValue* args);
- void HandleStopSyncing(const base::ListValue* args);
+ void HandleSignout(const base::ListValue* args);
void HandleGetSyncStatus(const base::ListValue* args);
void HandleManageOtherPeople(const base::ListValue* args);
diff --git a/chromium/chrome/browser/ui/webui/settings/people_handler_unittest.cc b/chromium/chrome/browser/ui/webui/settings/people_handler_unittest.cc
index 8964c907cb6..58a9f2b000a 100644
--- a/chromium/chrome/browser/ui/webui/settings/people_handler_unittest.cc
+++ b/chromium/chrome/browser/ui/webui/settings/people_handler_unittest.cc
@@ -106,6 +106,7 @@ std::string GetConfiguration(const base::DictionaryValue* extra_values,
result.SetBoolean("tabsSynced", types.Has(syncer::PROXY_TABS));
result.SetBoolean("themesSynced", types.Has(syncer::THEMES));
result.SetBoolean("typedUrlsSynced", types.Has(syncer::TYPED_URLS));
+ result.SetBoolean("userEventsSynced", types.Has(syncer::USER_EVENTS));
result.SetBoolean("paymentsIntegrationEnabled", false);
std::string args;
base::JSONWriter::Write(result, &args);
@@ -153,6 +154,7 @@ void CheckConfigDataTypeArguments(const base::DictionaryValue* dictionary,
CheckBool(dictionary, "tabsSynced", types.Has(syncer::PROXY_TABS));
CheckBool(dictionary, "themesSynced", types.Has(syncer::THEMES));
CheckBool(dictionary, "typedUrlsSynced", types.Has(syncer::TYPED_URLS));
+ CheckBool(dictionary, "userEventsSynced", types.Has(syncer::USER_EVENTS));
}
} // namespace
@@ -233,7 +235,8 @@ class PeopleHandlerTest : public ChromeRenderViewHostTestHarness {
// Setup the expectations for calls made when displaying the config page.
void SetDefaultExpectationsForConfigPage() {
- EXPECT_CALL(*mock_pss_, CanSyncStart()).WillRepeatedly(Return(true));
+ EXPECT_CALL(*mock_pss_, GetDisableReasons())
+ .WillRepeatedly(Return(syncer::SyncService::DISABLE_REASON_NONE));
EXPECT_CALL(*mock_pss_, GetRegisteredDataTypes())
.WillRepeatedly(Return(GetAllTypes()));
EXPECT_CALL(*mock_pss_, GetPreferredDataTypes())
@@ -333,7 +336,9 @@ TEST_F(PeopleHandlerFirstSigninTest, DisplayBasicLogin) {
// Test that the HandleStartSignin call enables JavaScript.
handler_->DisallowJavascript();
- EXPECT_CALL(*mock_pss_, CanSyncStart()).WillRepeatedly(Return(false));
+ EXPECT_CALL(*mock_pss_, GetDisableReasons())
+ .WillRepeatedly(
+ Return(syncer::SyncService::DISABLE_REASON_NOT_SIGNED_IN));
EXPECT_CALL(*mock_pss_, IsFirstSetupComplete()).WillRepeatedly(Return(false));
// Ensure that the user is not signed in before calling |HandleStartSignin()|.
SigninManager* manager = SigninManager::FromSigninManagerBase(mock_signin_);
@@ -356,7 +361,9 @@ TEST_F(PeopleHandlerFirstSigninTest, DisplayBasicLogin) {
}
TEST_F(PeopleHandlerTest, ShowSyncSetupWhenNotSignedIn) {
- EXPECT_CALL(*mock_pss_, CanSyncStart()).WillRepeatedly(Return(false));
+ EXPECT_CALL(*mock_pss_, GetDisableReasons())
+ .WillRepeatedly(
+ Return(syncer::SyncService::DISABLE_REASON_NOT_SIGNED_IN));
EXPECT_CALL(*mock_pss_, IsFirstSetupComplete()).WillRepeatedly(Return(false));
handler_->HandleShowSetupUI(nullptr);
@@ -372,7 +379,9 @@ TEST_F(PeopleHandlerTest, ShowSyncSetupWhenNotSignedIn) {
// Verifies that the sync setup is terminated correctly when the
// sync is disabled.
TEST_F(PeopleHandlerTest, HandleSetupUIWhenSyncDisabled) {
- EXPECT_CALL(*mock_pss_, IsManaged()).WillRepeatedly(Return(true));
+ EXPECT_CALL(*mock_pss_, GetDisableReasons())
+ .WillRepeatedly(
+ Return(syncer::SyncService::DISABLE_REASON_ENTERPRISE_POLICY));
handler_->HandleShowSetupUI(nullptr);
// Sync setup is closed when sync is disabled.
@@ -385,7 +394,8 @@ TEST_F(PeopleHandlerTest, HandleSetupUIWhenSyncDisabled) {
// Verifies that the handler correctly handles a cancellation when
// it is displaying the spinner to the user.
TEST_F(PeopleHandlerTest, DisplayConfigureWithEngineDisabledAndCancel) {
- EXPECT_CALL(*mock_pss_, CanSyncStart()).WillRepeatedly(Return(true));
+ EXPECT_CALL(*mock_pss_, GetDisableReasons())
+ .WillRepeatedly(Return(syncer::SyncService::DISABLE_REASON_NONE));
EXPECT_CALL(*mock_pss_, IsFirstSetupComplete()).WillRepeatedly(Return(false));
error_ = GoogleServiceAuthError::AuthErrorNone();
EXPECT_CALL(*mock_pss_, IsEngineInitialized()).WillRepeatedly(Return(false));
@@ -409,8 +419,9 @@ TEST_F(PeopleHandlerTest, DisplayConfigureWithEngineDisabledAndCancel) {
// to showing a configuration page when sync setup completes successfully.
TEST_F(PeopleHandlerTest,
DisplayConfigureWithEngineDisabledAndSyncStartupCompleted) {
- EXPECT_CALL(*mock_pss_, CanSyncStart()).WillRepeatedly(Return(true));
EXPECT_CALL(*mock_pss_, IsFirstSetupComplete()).WillRepeatedly(Return(false));
+ EXPECT_CALL(*mock_pss_, GetDisableReasons())
+ .WillRepeatedly(Return(syncer::SyncService::DISABLE_REASON_NONE));
error_ = GoogleServiceAuthError::AuthErrorNone();
// Sync engine is stopped initially, and will start up.
EXPECT_CALL(*mock_pss_, IsEngineInitialized()).WillRepeatedly(Return(false));
@@ -446,7 +457,8 @@ TEST_F(PeopleHandlerTest,
// user has continued on.
TEST_F(PeopleHandlerTest,
DisplayConfigureWithEngineDisabledAndCancelAfterSigninSuccess) {
- EXPECT_CALL(*mock_pss_, CanSyncStart()).WillRepeatedly(Return(true));
+ EXPECT_CALL(*mock_pss_, GetDisableReasons())
+ .WillRepeatedly(Return(syncer::SyncService::DISABLE_REASON_NONE));
EXPECT_CALL(*mock_pss_, IsFirstSetupComplete()).WillRepeatedly(Return(false));
error_ = GoogleServiceAuthError::AuthErrorNone();
EXPECT_CALL(*mock_pss_, IsEngineInitialized())
@@ -469,7 +481,8 @@ TEST_F(PeopleHandlerTest,
}
TEST_F(PeopleHandlerTest, DisplayConfigureWithEngineDisabledAndSigninFailed) {
- EXPECT_CALL(*mock_pss_, CanSyncStart()).WillRepeatedly(Return(true));
+ EXPECT_CALL(*mock_pss_, GetDisableReasons())
+ .WillRepeatedly(Return(syncer::SyncService::DISABLE_REASON_NONE));
EXPECT_CALL(*mock_pss_, IsFirstSetupComplete()).WillRepeatedly(Return(false));
error_ = GoogleServiceAuthError::AuthErrorNone();
EXPECT_CALL(*mock_pss_, IsEngineInitialized()).WillRepeatedly(Return(false));
@@ -526,20 +539,11 @@ class PeopleHandlerNonCrosTest : public PeopleHandlerTest {
PeopleHandlerNonCrosTest() {}
};
-TEST_F(PeopleHandlerNonCrosTest, HandleGaiaAuthFailure) {
- EXPECT_CALL(*mock_pss_, CanSyncStart()).WillRepeatedly(Return(false));
- EXPECT_CALL(*mock_pss_, HasUnrecoverableError())
- .WillRepeatedly(Return(false));
- EXPECT_CALL(*mock_pss_, IsFirstSetupComplete()).WillRepeatedly(Return(false));
- // Open the web UI.
- handler_->HandleShowSetupUI(nullptr);
-
- ASSERT_FALSE(handler_->is_configuring_sync());
-}
-
// TODO(kochi): We need equivalent tests for ChromeOS.
TEST_F(PeopleHandlerNonCrosTest, UnrecoverableErrorInitializingSync) {
- EXPECT_CALL(*mock_pss_, CanSyncStart()).WillRepeatedly(Return(false));
+ EXPECT_CALL(*mock_pss_, GetDisableReasons())
+ .WillRepeatedly(
+ Return(syncer::SyncService::DISABLE_REASON_UNRECOVERABLE_ERROR));
EXPECT_CALL(*mock_pss_, IsFirstSetupComplete()).WillRepeatedly(Return(false));
// Open the web UI.
handler_->HandleShowSetupUI(nullptr);
@@ -548,7 +552,9 @@ TEST_F(PeopleHandlerNonCrosTest, UnrecoverableErrorInitializingSync) {
}
TEST_F(PeopleHandlerNonCrosTest, GaiaErrorInitializingSync) {
- EXPECT_CALL(*mock_pss_, CanSyncStart()).WillRepeatedly(Return(false));
+ EXPECT_CALL(*mock_pss_, GetDisableReasons())
+ .WillRepeatedly(
+ Return(syncer::SyncService::DISABLE_REASON_NOT_SIGNED_IN));
EXPECT_CALL(*mock_pss_, IsFirstSetupComplete()).WillRepeatedly(Return(false));
// Open the web UI.
handler_->HandleShowSetupUI(nullptr);
@@ -767,7 +773,8 @@ TEST_F(PeopleHandlerTest, ShowSigninOnAuthError) {
FakeAuthStatusProvider provider(
SigninErrorControllerFactory::GetForProfile(profile()));
provider.SetAuthError(kTestUser, error_);
- EXPECT_CALL(*mock_pss_, CanSyncStart()).WillRepeatedly(Return(true));
+ EXPECT_CALL(*mock_pss_, GetDisableReasons())
+ .WillRepeatedly(Return(syncer::SyncService::DISABLE_REASON_NONE));
EXPECT_CALL(*mock_pss_, IsPassphraseRequired())
.WillRepeatedly(Return(false));
EXPECT_CALL(*mock_pss_, IsUsingSecondaryPassphrase())
@@ -819,6 +826,7 @@ TEST_F(PeopleHandlerTest, ShowSetupSyncEverything) {
CheckBool(dictionary, "tabsRegistered", true);
CheckBool(dictionary, "themesRegistered", true);
CheckBool(dictionary, "typedUrlsRegistered", true);
+ CheckBool(dictionary, "userEventsRegistered", true);
CheckBool(dictionary, "paymentsIntegrationEnabled", true);
CheckBool(dictionary, "passphraseRequired", false);
CheckBool(dictionary, "passphraseTypeIsCustom", false);
diff --git a/chromium/chrome/browser/ui/webui/settings/safe_browsing_handler.cc b/chromium/chrome/browser/ui/webui/settings/safe_browsing_handler.cc
index d43930fb1e8..56b43446319 100644
--- a/chromium/chrome/browser/ui/webui/settings/safe_browsing_handler.cc
+++ b/chromium/chrome/browser/ui/webui/settings/safe_browsing_handler.cc
@@ -47,9 +47,6 @@ void SafeBrowsingHandler::RegisterMessages() {
void SafeBrowsingHandler::OnJavascriptAllowed() {
profile_pref_registrar_.Init(prefs_);
profile_pref_registrar_.Add(
- prefs::kSafeBrowsingExtendedReportingEnabled,
- base::Bind(&SafeBrowsingHandler::OnPrefChanged, base::Unretained(this)));
- profile_pref_registrar_.Add(
prefs::kSafeBrowsingScoutReportingEnabled,
base::Bind(&SafeBrowsingHandler::OnPrefChanged, base::Unretained(this)));
}
@@ -76,8 +73,7 @@ void SafeBrowsingHandler::HandleSetSafeBrowsingExtendedReportingEnabled(
}
void SafeBrowsingHandler::OnPrefChanged(const std::string& pref_name) {
- DCHECK(pref_name == prefs::kSafeBrowsingExtendedReportingEnabled ||
- pref_name == prefs::kSafeBrowsingScoutReportingEnabled);
+ DCHECK(pref_name == prefs::kSafeBrowsingScoutReportingEnabled);
FireWebUIListener("safe-browsing-extended-reporting-change",
GetSberStateDictionaryValue(*prefs_));
diff --git a/chromium/chrome/browser/ui/webui/settings/search_engines_handler.cc b/chromium/chrome/browser/ui/webui/settings/search_engines_handler.cc
index 878159e995c..be2b79caa67 100644
--- a/chromium/chrome/browser/ui/webui/settings/search_engines_handler.cc
+++ b/chromium/chrome/browser/ui/webui/settings/search_engines_handler.cc
@@ -18,7 +18,6 @@
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/search_engines/template_url_service_factory.h"
#include "chrome/browser/search_engines/ui_thread_search_terms_data.h"
-#include "chrome/browser/signin/signin_manager_factory.h"
#include "chrome/browser/ui/search_engines/template_url_table_model.h"
#include "chrome/common/pref_names.h"
#include "chrome/common/url_constants.h"
@@ -26,7 +25,6 @@
#include "components/prefs/pref_service.h"
#include "components/search_engines/template_url.h"
#include "components/search_engines/template_url_service.h"
-#include "components/signin/core/browser/signin_manager.h"
#include "content/public/browser/web_ui.h"
#include "extensions/browser/extension_registry.h"
#include "extensions/browser/extension_system.h"
@@ -34,8 +32,8 @@
#include "extensions/common/extension.h"
namespace {
-// The following strings need to match with the IDs of the paper-input elements
-// at settings/search_engines_page/add_search_engine_dialog.html.
+// The following strings need to match with the IDs of the text input elements
+// at settings/search_engines_page/search_engine_dialog.html.
const char kSearchEngineField[] = "searchEngine";
const char kKeywordField[] = "keyword";
const char kQueryUrlField[] = "queryUrl";
diff --git a/chromium/chrome/browser/ui/webui/settings/settings_clear_browsing_data_handler.cc b/chromium/chrome/browser/ui/webui/settings/settings_clear_browsing_data_handler.cc
index c1442684021..871a956100d 100644
--- a/chromium/chrome/browser/ui/webui/settings/settings_clear_browsing_data_handler.cc
+++ b/chromium/chrome/browser/ui/webui/settings/settings_clear_browsing_data_handler.cc
@@ -17,8 +17,6 @@
#include "chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.h"
#include "chrome/browser/browsing_data/counters/browsing_data_counter_factory.h"
#include "chrome/browser/browsing_data/counters/browsing_data_counter_utils.h"
-#include "chrome/browser/engagement/important_sites_usage_counter.h"
-#include "chrome/browser/engagement/important_sites_util.h"
#include "chrome/browser/history/web_history_service_factory.h"
#include "chrome/browser/signin/signin_manager_factory.h"
#include "chrome/browser/sync/profile_sync_service_factory.h"
@@ -42,7 +40,6 @@
#include "chrome/browser/feature_engagement/incognito_window/incognito_window_tracker_factory.h"
#endif
-using ImportantReason = ImportantSitesUtil::ImportantReason;
using BrowsingDataType = browsing_data::BrowsingDataType;
namespace {
@@ -67,13 +64,6 @@ const char* kCounterPrefsBasic[] = {
browsing_data::prefs::kDeleteCacheBasic,
};
-const char kRegisterableDomainField[] = "registerableDomain";
-const char kReasonBitField[] = "reasonBitfield";
-const char kExampleOriginField[] = "exampleOrigin";
-const char kIsCheckedField[] = "isChecked";
-const char kStorageSizeField[] = "storageSize";
-const char kHasNotificationsField[] = "hasNotifications";
-
} // namespace
namespace settings {
@@ -97,11 +87,6 @@ void ClearBrowsingDataHandler::RegisterMessages() {
base::Unretained(this)));
web_ui()->RegisterMessageCallback(
- "getImportantSites",
- base::BindRepeating(&ClearBrowsingDataHandler::HandleGetImportantSites,
- base::Unretained(this)));
-
- web_ui()->RegisterMessageCallback(
"initializeClearBrowsingData",
base::BindRepeating(&ClearBrowsingDataHandler::HandleInitialize,
base::Unretained(this)));
@@ -144,27 +129,23 @@ void ClearBrowsingDataHandler::OnJavascriptDisallowed() {
void ClearBrowsingDataHandler::HandleClearBrowsingDataForTest() {
// HandleClearBrowsingData takes in a ListValue as its only parameter. The
// ListValue must contain four values: web_ui callback ID, a list of data
- // types that the user cleared from the clear browsing data UI, time period of
- // the data to be cleared, and important sites to remove.
+ // types that the user cleared from the clear browsing data UI and time period
+ // of the data to be cleared.
std::unique_ptr<base::ListValue> data_types =
std::make_unique<base::ListValue>();
data_types->AppendString("browser.clear_data.browsing_history");
- std::unique_ptr<base::ListValue> important_sites =
- std::make_unique<base::ListValue>();
-
base::ListValue list_args;
list_args.AppendString("webui_callback_id");
list_args.Append(std::move(data_types));
list_args.AppendInteger(1u);
- list_args.Append(std::move(important_sites));
HandleClearBrowsingData(&list_args);
}
void ClearBrowsingDataHandler::HandleClearBrowsingData(
const base::ListValue* args) {
- CHECK_EQ(4U, args->GetSize());
+ CHECK_EQ(3U, args->GetSize());
std::string webui_callback_id;
CHECK(args->GetString(0, &webui_callback_id));
@@ -270,11 +251,6 @@ void ClearBrowsingDataHandler::HandleClearBrowsingData(
int period_selected;
CHECK(args->GetInteger(2, &period_selected));
- const base::ListValue* important_sites = nullptr;
- CHECK(args->GetList(3, &important_sites));
- std::unique_ptr<content::BrowsingDataFilterBuilder> filter_builder =
- ProcessImportantSites(important_sites);
-
content::BrowsingDataRemover* remover =
content::BrowserContext::GetBrowsingDataRemover(profile_);
@@ -285,8 +261,11 @@ void ClearBrowsingDataHandler::HandleClearBrowsingData(
static_cast<browsing_data::TimePeriod>(period_selected);
browsing_data_important_sites_util::Remove(
- remove_mask, origin_mask, time_period, std::move(filter_builder), remover,
- std::move(callback));
+ remove_mask, origin_mask, time_period,
+ content::BrowsingDataFilterBuilder::Create(
+ content::BrowsingDataFilterBuilder::BLACKLIST),
+ remover, std::move(callback));
+
#if BUILDFLAG(ENABLE_DESKTOP_IN_PRODUCT_HELP)
feature_engagement::IncognitoWindowTrackerFactory::GetInstance()
->GetForProfile(profile_)
@@ -294,46 +273,6 @@ void ClearBrowsingDataHandler::HandleClearBrowsingData(
#endif
}
-std::unique_ptr<content::BrowsingDataFilterBuilder>
-ClearBrowsingDataHandler::ProcessImportantSites(
- const base::ListValue* important_sites) {
- std::vector<std::string> excluding_domains;
- std::vector<int32_t> excluding_domain_reasons;
- std::vector<std::string> ignoring_domains;
- std::vector<int32_t> ignoring_domain_reasons;
- for (const auto& item : *important_sites) {
- const base::DictionaryValue* site = nullptr;
- CHECK(item.GetAsDictionary(&site));
- bool is_checked = false;
- CHECK(site->GetBoolean(kIsCheckedField, &is_checked));
- std::string domain;
- CHECK(site->GetString(kRegisterableDomainField, &domain));
- int domain_reason = -1;
- CHECK(site->GetInteger(kReasonBitField, &domain_reason));
- if (is_checked) { // Selected important sites should be deleted.
- ignoring_domains.push_back(domain);
- ignoring_domain_reasons.push_back(domain_reason);
- } else { // Unselected sites should be kept.
- excluding_domains.push_back(domain);
- excluding_domain_reasons.push_back(domain_reason);
- }
- }
-
- if (!excluding_domains.empty() || !ignoring_domains.empty()) {
- ImportantSitesUtil::RecordBlacklistedAndIgnoredImportantSites(
- profile_->GetOriginalProfile(), excluding_domains,
- excluding_domain_reasons, ignoring_domains, ignoring_domain_reasons);
- }
-
- std::unique_ptr<content::BrowsingDataFilterBuilder> filter_builder(
- content::BrowsingDataFilterBuilder::Create(
- content::BrowsingDataFilterBuilder::BLACKLIST));
- for (const std::string& domain : excluding_domains) {
- filter_builder->AddRegisterableDomain(domain);
- }
- return filter_builder;
-}
-
void ClearBrowsingDataHandler::OnClearingTaskFinished(
const std::string& webui_callback_id,
const base::flat_set<BrowsingDataType>& data_types) {
@@ -365,59 +304,6 @@ void ClearBrowsingDataHandler::OnClearingTaskFinished(
base::Value(show_notice));
}
-void ClearBrowsingDataHandler::HandleGetImportantSites(
- const base::ListValue* args) {
- AllowJavascript();
- std::string callback_id;
- CHECK(args->GetString(0, &callback_id));
- DCHECK(base::FeatureList::IsEnabled(features::kImportantSitesInCbd));
-
- Profile* profile = profile_->GetOriginalProfile();
- bool important_sites_dialog_disabled =
- ImportantSitesUtil::IsDialogDisabled(profile);
-
- if (important_sites_dialog_disabled) {
- ResolveJavascriptCallback(base::Value(callback_id), base::ListValue());
- return;
- }
-
- std::vector<ImportantSitesUtil::ImportantDomainInfo> important_sites =
- ImportantSitesUtil::GetImportantRegisterableDomains(
- profile, ImportantSitesUtil::kMaxImportantSites);
- content::StoragePartition* partition =
- content::BrowserContext::GetDefaultStoragePartition(profile);
- storage::QuotaManager* quota_manager = partition->GetQuotaManager();
- content::DOMStorageContext* dom_storage = partition->GetDOMStorageContext();
-
- ImportantSitesUsageCounter::GetUsage(
- std::move(important_sites), quota_manager, dom_storage,
- base::BindOnce(&ClearBrowsingDataHandler::OnFetchImportantSitesFinished,
- weak_ptr_factory_.GetWeakPtr(), callback_id));
-}
-
-void ClearBrowsingDataHandler::OnFetchImportantSitesFinished(
- const std::string& callback_id,
- std::vector<ImportantSitesUtil::ImportantDomainInfo> important_sites) {
- base::ListValue important_sites_list;
-
- for (const auto& info : important_sites) {
- auto entry = std::make_unique<base::DictionaryValue>();
- entry->SetString(kRegisterableDomainField, info.registerable_domain);
- // The |reason_bitfield| is only passed to Javascript to be logged
- // from |HandleClearBrowsingData|.
- entry->SetInteger(kReasonBitField, info.reason_bitfield);
- entry->SetString(kExampleOriginField, info.example_origin.spec());
- // Initially all sites are selected for deletion.
- entry->SetBoolean(kIsCheckedField, true);
- entry->SetString(kStorageSizeField, ui::FormatBytes(info.usage));
- bool has_notifications =
- (info.reason_bitfield & (1 << ImportantReason::NOTIFICATIONS)) != 0;
- entry->SetBoolean(kHasNotificationsField, has_notifications);
- important_sites_list.Append(std::move(entry));
- }
- ResolveJavascriptCallback(base::Value(callback_id), important_sites_list);
-}
-
void ClearBrowsingDataHandler::HandleInitialize(const base::ListValue* args) {
AllowJavascript();
const base::Value* callback_id;
@@ -447,7 +333,8 @@ void ClearBrowsingDataHandler::UpdateSyncState() {
base::Value(signin_manager && signin_manager->IsAuthenticated()),
base::Value(sync_service_ && sync_service_->IsSyncActive() &&
sync_service_->GetActiveDataTypes().Has(
- syncer::HISTORY_DELETE_DIRECTIVES)));
+ syncer::HISTORY_DELETE_DIRECTIVES)),
+ base::Value(ShouldShowCookieException(profile_)));
}
void ClearBrowsingDataHandler::RefreshHistoryNotice() {
diff --git a/chromium/chrome/browser/ui/webui/settings/settings_clear_browsing_data_handler.h b/chromium/chrome/browser/ui/webui/settings/settings_clear_browsing_data_handler.h
index f135b0172af..40fcfa0b06f 100644
--- a/chromium/chrome/browser/ui/webui/settings/settings_clear_browsing_data_handler.h
+++ b/chromium/chrome/browser/ui/webui/settings/settings_clear_browsing_data_handler.h
@@ -12,7 +12,6 @@
#include "base/containers/flat_set.h"
#include "base/macros.h"
#include "base/scoped_observer.h"
-#include "chrome/browser/engagement/important_sites_util.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/webui/settings/settings_page_ui_handler.h"
#include "components/browser_sync/profile_sync_service.h"
@@ -24,7 +23,6 @@ class ListValue;
}
namespace content {
-class BrowsingDataFilterBuilder;
class WebUI;
}
@@ -49,10 +47,6 @@ class ClearBrowsingDataHandler : public SettingsPageUIHandler,
// Clears browsing data, called by Javascript.
void HandleClearBrowsingData(const base::ListValue* value);
- // Parses a ListValue with important site information and creates a
- // BrowsingDataFilterBuilder.
- std::unique_ptr<content::BrowsingDataFilterBuilder> ProcessImportantSites(
- const base::ListValue* important_sites);
// Called when a clearing task finished. |webui_callback_id| is provided
// by the WebUI action that initiated it.
@@ -60,13 +54,6 @@ class ClearBrowsingDataHandler : public SettingsPageUIHandler,
const std::string& webui_callback_id,
const base::flat_set<browsing_data::BrowsingDataType>& data_types);
- // Get important sites, called by Javascript.
- void HandleGetImportantSites(const base::ListValue* value);
-
- void OnFetchImportantSitesFinished(
- const std::string& callback_id,
- std::vector<ImportantSitesUtil::ImportantDomainInfo> sites);
-
// Initializes the dialog UI. Called by JavaScript when the DOM is ready.
void HandleInitialize(const base::ListValue* args);
diff --git a/chromium/chrome/browser/ui/webui/settings/settings_cookies_view_handler.cc b/chromium/chrome/browser/ui/webui/settings/settings_cookies_view_handler.cc
index 2017d6c1fee..9150748cdba 100644
--- a/chromium/chrome/browser/ui/webui/settings/settings_cookies_view_handler.cc
+++ b/chromium/chrome/browser/ui/webui/settings/settings_cookies_view_handler.cc
@@ -52,11 +52,6 @@ int GetCategoryLabelID(CookieTreeNode::DetailedInfo::NodeType node_type) {
} kCategoryLabels[] = {
// Multiple keys (node_type) may have the same value (id).
- {CookieTreeNode::DetailedInfo::TYPE_COOKIES,
- IDS_SETTINGS_COOKIES_SINGLE_COOKIE},
- {CookieTreeNode::DetailedInfo::TYPE_COOKIE,
- IDS_SETTINGS_COOKIES_SINGLE_COOKIE},
-
{CookieTreeNode::DetailedInfo::TYPE_DATABASES,
IDS_SETTINGS_COOKIES_DATABASE_STORAGE},
{CookieTreeNode::DetailedInfo::TYPE_DATABASE,
@@ -179,6 +174,10 @@ void CookiesViewHandler::RegisterMessages() {
base::BindRepeating(&CookiesViewHandler::HandleGetCookieDetails,
base::Unretained(this)));
web_ui()->RegisterMessageCallback(
+ "localData.getNumCookiesString",
+ base::BindRepeating(&CookiesViewHandler::HandleGetNumCookiesString,
+ base::Unretained(this)));
+ web_ui()->RegisterMessageCallback(
"localData.removeCookie",
base::BindRepeating(&CookiesViewHandler::HandleRemove,
base::Unretained(this)));
@@ -268,8 +267,8 @@ void CookiesViewHandler::EnsureCookiesTreeModelCreated() {
storage_partition->GetCacheStorageContext();
storage::FileSystemContext* file_system_context =
storage_partition->GetFileSystemContext();
- LocalDataContainer* container = new LocalDataContainer(
- new BrowsingDataCookieHelper(profile->GetRequestContext()),
+ auto container = std::make_unique<LocalDataContainer>(
+ new BrowsingDataCookieHelper(storage_partition),
new BrowsingDataDatabaseHelper(profile),
new BrowsingDataLocalStorageHelper(profile),
/*session_storage_helper=*/nullptr,
@@ -284,9 +283,8 @@ void CookiesViewHandler::EnsureCookiesTreeModelCreated() {
new BrowsingDataCacheStorageHelper(cache_storage_context),
BrowsingDataFlashLSOHelper::Create(profile),
BrowsingDataMediaLicenseHelper::Create(file_system_context));
- cookies_tree_model_.reset(
- new CookiesTreeModel(container,
- profile->GetExtensionSpecialStoragePolicy()));
+ cookies_tree_model_ = std::make_unique<CookiesTreeModel>(
+ std::move(container), profile->GetExtensionSpecialStoragePolicy());
cookies_tree_model_->AddCookiesTreeObserver(this);
}
}
@@ -311,6 +309,61 @@ void CookiesViewHandler::HandleGetCookieDetails(const base::ListValue* args) {
SendCookieDetails(node);
}
+void CookiesViewHandler::HandleGetNumCookiesString(
+ const base::ListValue* args) {
+ CHECK_EQ(2U, args->GetSize());
+ std::string callback_id;
+ CHECK(args->GetString(0, &callback_id));
+ base::string16 etld_plus1;
+ CHECK(args->GetString(1, &etld_plus1));
+
+ AllowJavascript();
+ CHECK(cookies_tree_model_.get());
+ // This method is only interested in the number of cookies, so don't save the
+ // filter and keep the existing |sorted_sites_| list.
+ if (etld_plus1 != filter_)
+ cookies_tree_model_->UpdateSearchResults(etld_plus1);
+
+ int num_cookies = 0;
+ const CookieTreeNode* root = cookies_tree_model_->GetRoot();
+ for (int i = 0; i < root->child_count(); ++i) {
+ const CookieTreeNode* site = root->GetChild(i);
+ const base::string16& title = site->GetTitle();
+ if (!base::EndsWith(title, etld_plus1,
+ base::CompareCase::INSENSITIVE_ASCII)) {
+ continue;
+ }
+
+ for (int j = 0; j < site->child_count(); ++j) {
+ const CookieTreeNode* category = site->GetChild(j);
+ if (category->GetDetailedInfo().node_type !=
+ CookieTreeNode::DetailedInfo::TYPE_COOKIES) {
+ continue;
+ }
+
+ for (int k = 0; k < category->child_count(); ++k) {
+ if (category->GetChild(k)->GetDetailedInfo().node_type !=
+ CookieTreeNode::DetailedInfo::TYPE_COOKIE) {
+ continue;
+ }
+
+ ++num_cookies;
+ }
+ }
+ }
+
+ if (etld_plus1 != filter_) {
+ // Restore the original |filter_|.
+ cookies_tree_model_->UpdateSearchResults(filter_);
+ }
+ const base::string16 string =
+ num_cookies > 0 ? l10n_util::GetPluralStringFUTF16(
+ IDS_SETTINGS_SITE_SETTINGS_NUM_COOKIES, num_cookies)
+ : base::string16();
+
+ ResolveJavascriptCallback(base::Value(callback_id), base::Value(string));
+}
+
void CookiesViewHandler::HandleGetDisplayList(const base::ListValue* args) {
CHECK(request_.callback_id_.empty());
CHECK_EQ(2U, args->GetSize());
@@ -418,32 +471,35 @@ void CookiesViewHandler::SendLocalDataList(const CookieTreeNode* parent) {
std::unique_ptr<base::ListValue> site_list(new base::ListValue);
for (int i = 0; i < list_item_count; ++i) {
const CookieTreeNode* site = parent->GetChild(sorted_sites_[i].second);
- std::string description;
+ base::string16 description;
for (int k = 0; k < site->child_count(); ++k) {
- const CookieTreeNode* category = site->GetChild(k);
- const auto node_type = category->GetDetailedInfo().node_type;
- if (node_type == CookieTreeNode::DetailedInfo::TYPE_QUOTA) {
- // TODO(crbug.com/642955): Omit quota values until bug is addressed.
- continue;
- }
- int ids_value = GetCategoryLabelID(node_type);
- if (!ids_value) {
- // If we don't have a label to call it by, don't show it. Please add
- // a label ID if an expected category is not appearing in the UI.
- continue;
- }
if (description.size()) {
- description += ", ";
+ description += base::ASCIIToUTF16(", ");
}
+ const CookieTreeNode* category = site->GetChild(k);
+ const auto node_type = category->GetDetailedInfo().node_type;
int item_count = category->child_count();
- if (category->GetDetailedInfo().node_type ==
- CookieTreeNode::DetailedInfo::TYPE_COOKIES &&
- item_count > 1) {
- description +=
- l10n_util::GetStringFUTF8(IDS_SETTINGS_COOKIES_PLURAL_COOKIES,
- base::FormatNumber(item_count));
- } else {
- description += l10n_util::GetStringUTF8(ids_value);
+ switch (node_type) {
+ case CookieTreeNode::DetailedInfo::TYPE_QUOTA:
+ // TODO(crbug.com/642955): Omit quota values until bug is addressed.
+ continue;
+ case CookieTreeNode::DetailedInfo::TYPE_COOKIE:
+ DCHECK_EQ(0, item_count);
+ item_count = 1;
+ FALLTHROUGH;
+ case CookieTreeNode::DetailedInfo::TYPE_COOKIES:
+ description += l10n_util::GetPluralStringFUTF16(
+ IDS_SETTINGS_SITE_SETTINGS_NUM_COOKIES, item_count);
+ break;
+ default:
+ int ids_value = GetCategoryLabelID(node_type);
+ if (!ids_value) {
+ // If we don't have a label to call it by, don't show it. Please add
+ // a label ID if an expected category is not appearing in the UI.
+ continue;
+ }
+ description += l10n_util::GetStringUTF16(ids_value);
+ break;
}
}
std::unique_ptr<base::DictionaryValue> list_info(new base::DictionaryValue);
diff --git a/chromium/chrome/browser/ui/webui/settings/settings_cookies_view_handler.h b/chromium/chrome/browser/ui/webui/settings/settings_cookies_view_handler.h
index 6cc8458645a..0b742577c16 100644
--- a/chromium/chrome/browser/ui/webui/settings/settings_cookies_view_handler.h
+++ b/chromium/chrome/browser/ui/webui/settings/settings_cookies_view_handler.h
@@ -61,6 +61,9 @@ class CookiesViewHandler : public SettingsPageUIHandler,
// Retrieve cookie details for a specific site.
void HandleGetCookieDetails(const base::ListValue* args);
+ // Gets the number of cookies formatted in a plural string, given a site.
+ void HandleGetNumCookiesString(const base::ListValue* args);
+
// Remove all sites data.
void HandleRemoveAll(const base::ListValue* args);
diff --git a/chromium/chrome/browser/ui/webui/settings/settings_manage_profile_handler.cc b/chromium/chrome/browser/ui/webui/settings/settings_manage_profile_handler.cc
index 5a68d2419c3..721518a1f17 100644
--- a/chromium/chrome/browser/ui/webui/settings/settings_manage_profile_handler.cc
+++ b/chromium/chrome/browser/ui/webui/settings/settings_manage_profile_handler.cc
@@ -24,7 +24,6 @@
#include "chrome/browser/profiles/profile_shortcut_manager.h"
#include "chrome/browser/profiles/profile_window.h"
#include "chrome/browser/profiles/profiles_state.h"
-#include "chrome/browser/signin/signin_manager_factory.h"
#include "chrome/browser/ui/browser_finder.h"
#include "chrome/common/pref_names.h"
#include "chrome/common/url_constants.h"
@@ -32,7 +31,6 @@
#include "components/prefs/pref_service.h"
#include "components/prefs/scoped_user_pref_update.h"
#include "components/signin/core/browser/profile_management_switches.h"
-#include "components/signin/core/browser/signin_manager.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/notification_service.h"
#include "content/public/browser/web_ui.h"
diff --git a/chromium/chrome/browser/ui/webui/settings/site_settings_handler.cc b/chromium/chrome/browser/ui/webui/settings/site_settings_handler.cc
index 10862aa2adc..fa89523712c 100644
--- a/chromium/chrome/browser/ui/webui/settings/site_settings_handler.cc
+++ b/chromium/chrome/browser/ui/webui/settings/site_settings_handler.cc
@@ -5,7 +5,9 @@
#include "chrome/browser/ui/webui/settings/site_settings_handler.h"
#include <algorithm>
+#include <map>
#include <memory>
+#include <set>
#include <string>
#include <utility>
@@ -22,6 +24,7 @@
#include "chrome/browser/infobars/infobar_service.h"
#include "chrome/browser/permissions/chooser_context_base.h"
#include "chrome/browser/permissions/permission_decision_auto_blocker.h"
+#include "chrome/browser/permissions/permission_manager.h"
#include "chrome/browser/permissions/permission_uma_util.h"
#include "chrome/browser/permissions/permission_util.h"
#include "chrome/browser/profiles/profile.h"
@@ -61,6 +64,8 @@ namespace settings {
namespace {
+constexpr char kEffectiveTopLevelDomainPlus1Name[] = "etldPlus1";
+constexpr char kOriginList[] = "origins";
constexpr char kZoom[] = "zoom";
// Return an appropriate API Permission ID for the given string name.
@@ -112,6 +117,38 @@ void AddExceptionsGrantedByHostedApps(content::BrowserContext* context,
}
}
+// Whether |pattern| applies to a single origin.
+bool PatternAppliesToSingleOrigin(const ContentSettingPatternSource& pattern) {
+ const GURL url(pattern.primary_pattern.ToString());
+ // Default settings and other patterns apply to multiple origins.
+ if (url::Origin::Create(url).unique())
+ return false;
+ // Embedded content settings only when |url| is embedded in another origin, so
+ // ignore non-wildcard secondary patterns that are different to the primary.
+ if (pattern.primary_pattern != pattern.secondary_pattern &&
+ pattern.secondary_pattern != ContentSettingsPattern::Wildcard()) {
+ return false;
+ }
+ return true;
+}
+
+// Groups |url| into sets of eTLD+1s in |site_group_map|, assuming |url| is an
+// origin.
+void CreateOrAppendSiteGroupEntry(
+ std::map<std::string, std::set<std::string>>* site_group_map,
+ const GURL& url) {
+ std::string etld_plus1_string =
+ net::registry_controlled_domains::GetDomainAndRegistry(
+ url, net::registry_controlled_domains::INCLUDE_PRIVATE_REGISTRIES);
+ auto entry = site_group_map->find(etld_plus1_string);
+ if (entry == site_group_map->end()) {
+ site_group_map->emplace(etld_plus1_string,
+ std::set<std::string>({url.spec()}));
+ } else {
+ entry->second.insert(url.spec());
+ }
+}
+
} // namespace
@@ -149,6 +186,10 @@ void SiteSettingsHandler::RegisterMessages() {
&SiteSettingsHandler::HandleGetDefaultValueForContentType,
base::Unretained(this)));
web_ui()->RegisterMessageCallback(
+ "getAllSites",
+ base::BindRepeating(&SiteSettingsHandler::HandleGetAllSites,
+ base::Unretained(this)));
+ web_ui()->RegisterMessageCallback(
"getExceptionList",
base::BindRepeating(&SiteSettingsHandler::HandleGetExceptionList,
base::Unretained(this)));
@@ -280,7 +321,7 @@ void SiteSettingsHandler::OnContentSettingChanged(
const ContentSettingsPattern& primary_pattern,
const ContentSettingsPattern& secondary_pattern,
ContentSettingsType content_type,
- std::string resource_identifier) {
+ const std::string& resource_identifier) {
if (!site_settings::HasRegisteredGroupName(content_type))
return;
@@ -486,6 +527,92 @@ void SiteSettingsHandler::HandleGetDefaultValueForContentType(
ResolveJavascriptCallback(*callback_id, category);
}
+void SiteSettingsHandler::HandleGetAllSites(const base::ListValue* args) {
+ AllowJavascript();
+
+ CHECK_EQ(2U, args->GetSize());
+ const base::Value* callback_id;
+ CHECK(args->Get(0, &callback_id));
+ const base::ListValue* types;
+ CHECK(args->GetList(1, &types));
+
+ // Convert |types| to a list of ContentSettingsTypes.
+ std::vector<ContentSettingsType> content_types;
+ for (size_t i = 0; i < types->GetSize(); ++i) {
+ std::string type;
+ types->GetString(i, &type);
+ content_types.push_back(
+ site_settings::ContentSettingsTypeFromGroupName(type));
+ }
+
+ // Incognito contains incognito content settings plus non-incognito content
+ // settings. Thus if it exists, just get exceptions for the incognito profile.
+ Profile* profile = profile_;
+ if (profile_->HasOffTheRecordProfile() &&
+ profile_->GetOffTheRecordProfile() != profile_) {
+ profile = profile_->GetOffTheRecordProfile();
+ }
+ DCHECK(profile);
+ HostContentSettingsMap* map =
+ HostContentSettingsMapFactory::GetForProfile(profile);
+ std::map<std::string, std::set<std::string>> all_sites_map;
+
+ // TODO(https://crbug.com/835712): Assess performance of this method for
+ // unusually large numbers of stored content settings.
+
+ // Retrieve a list of embargoed settings to check separately. This ensures
+ // that only settings included in |content_types| will be listed in all sites.
+ ContentSettingsForOneType embargo_settings;
+ map->GetSettingsForOneType(CONTENT_SETTINGS_TYPE_PERMISSION_AUTOBLOCKER_DATA,
+ std::string(), &embargo_settings);
+ PermissionManager* permission_manager = PermissionManager::Get(profile);
+ for (const ContentSettingPatternSource& e : embargo_settings) {
+ for (ContentSettingsType content_type : content_types) {
+ if (PermissionUtil::IsPermission(content_type)) {
+ const GURL url(e.primary_pattern.ToString());
+ // Add |url| to the set if there are any embargo settings.
+ PermissionResult result =
+ permission_manager->GetPermissionStatus(content_type, url, url);
+ if (result.source == PermissionStatusSource::MULTIPLE_DISMISSALS ||
+ result.source == PermissionStatusSource::MULTIPLE_IGNORES) {
+ CreateOrAppendSiteGroupEntry(&all_sites_map, url);
+ break;
+ }
+ }
+ }
+ }
+
+ // Convert |types| to a list of ContentSettingsTypes.
+ for (ContentSettingsType content_type : content_types) {
+ // TODO(https://crbug.com/835712): Add extension content settings, plus
+ // sites that use any non-zero amount of storage.
+
+ ContentSettingsForOneType entries;
+ map->GetSettingsForOneType(content_type, std::string(), &entries);
+ for (const ContentSettingPatternSource& e : entries) {
+ if (PatternAppliesToSingleOrigin(e))
+ CreateOrAppendSiteGroupEntry(&all_sites_map,
+ GURL(e.primary_pattern.ToString()));
+ }
+ }
+
+ // Convert |all_sites_map| to a list of base::DictionaryValues.
+ base::Value result(base::Value::Type::LIST);
+ for (const auto& entry : all_sites_map) {
+ // eTLD+1 is the effective top level domain + 1.
+ base::Value site_group(base::Value::Type::DICTIONARY);
+ site_group.SetKey(kEffectiveTopLevelDomainPlus1Name,
+ base::Value(entry.first));
+ base::Value origin_list(base::Value::Type::LIST);
+ for (const std::string& origin : entry.second) {
+ origin_list.GetList().emplace_back(origin);
+ }
+ site_group.SetKey(kOriginList, std::move(origin_list));
+ result.GetList().push_back(std::move(site_group));
+ }
+ ResolveJavascriptCallback(*callback_id, result);
+}
+
void SiteSettingsHandler::HandleGetExceptionList(const base::ListValue* args) {
AllowJavascript();
diff --git a/chromium/chrome/browser/ui/webui/settings/site_settings_handler.h b/chromium/chrome/browser/ui/webui/settings/site_settings_handler.h
index 9c78d451b85..3f5b4a470ad 100644
--- a/chromium/chrome/browser/ui/webui/settings/site_settings_handler.h
+++ b/chromium/chrome/browser/ui/webui/settings/site_settings_handler.h
@@ -60,7 +60,7 @@ class SiteSettingsHandler : public SettingsPageUIHandler,
void OnContentSettingChanged(const ContentSettingsPattern& primary_pattern,
const ContentSettingsPattern& secondary_pattern,
ContentSettingsType content_type,
- std::string resource_identifier) override;
+ const std::string& resource_identifier) override;
// content::NotificationObserver:
void Observe(int type,
@@ -84,6 +84,7 @@ class SiteSettingsHandler : public SettingsPageUIHandler,
FRIEND_TEST_ALL_PREFIXES(SiteSettingsHandlerTest, GetAndSetOriginPermissions);
FRIEND_TEST_ALL_PREFIXES(SiteSettingsHandlerTest, GetAndSetForInvalidURLs);
FRIEND_TEST_ALL_PREFIXES(SiteSettingsHandlerTest, Incognito);
+ FRIEND_TEST_ALL_PREFIXES(SiteSettingsHandlerTest, GetAllSites);
FRIEND_TEST_ALL_PREFIXES(SiteSettingsHandlerTest, Origins);
FRIEND_TEST_ALL_PREFIXES(SiteSettingsHandlerTest, Patterns);
FRIEND_TEST_ALL_PREFIXES(SiteSettingsHandlerTest, ZoomLevels);
@@ -108,6 +109,10 @@ class SiteSettingsHandler : public SettingsPageUIHandler,
void HandleSetDefaultValueForContentType(const base::ListValue* args);
void HandleGetDefaultValueForContentType(const base::ListValue* args);
+ // Returns a list of sites, grouped by their effective top level domain plus
+ // 1, affected by any of the content settings specified in |args|.
+ void HandleGetAllSites(const base::ListValue* args);
+
// Returns the list of site exceptions for a given content settings type.
void HandleGetExceptionList(const base::ListValue* args);
diff --git a/chromium/chrome/browser/ui/webui/settings/site_settings_handler_unittest.cc b/chromium/chrome/browser/ui/webui/settings/site_settings_handler_unittest.cc
index 6efafe49981..2b1e3700934 100644
--- a/chromium/chrome/browser/ui/webui/settings/site_settings_handler_unittest.cc
+++ b/chromium/chrome/browser/ui/webui/settings/site_settings_handler_unittest.cc
@@ -7,12 +7,14 @@
#include <memory>
#include <string>
-#include "base/test/histogram_tester.h"
+#include "base/test/metrics/histogram_tester.h"
+#include "base/test/simple_test_clock.h"
#include "chrome/browser/chrome_notification_types.h"
#include "chrome/browser/content_settings/host_content_settings_map_factory.h"
#include "chrome/browser/extensions/extension_service.h"
#include "chrome/browser/extensions/test_extension_system.h"
#include "chrome/browser/infobars/infobar_service.h"
+#include "chrome/browser/permissions/permission_decision_auto_blocker.h"
#include "chrome/browser/ui/browser_window.h"
#include "chrome/browser/ui/tabs/tab_strip_model.h"
#include "chrome/browser/ui/webui/site_settings_helper.h"
@@ -64,10 +66,11 @@ class FlashContentSettingsChangeWaiter : public content_settings::Observer {
}
// content_settings::Observer:
- void OnContentSettingChanged(const ContentSettingsPattern& primary_pattern,
- const ContentSettingsPattern& secondary_pattern,
- ContentSettingsType content_type,
- std::string resource_identifier) override {
+ void OnContentSettingChanged(
+ const ContentSettingsPattern& primary_pattern,
+ const ContentSettingsPattern& secondary_pattern,
+ ContentSettingsType content_type,
+ const std::string& resource_identifier) override {
if (content_type == CONTENT_SETTINGS_TYPE_PLUGINS)
Proceed();
}
@@ -355,6 +358,169 @@ TEST_F(SiteSettingsHandlerTest, GetAndSetDefault) {
site_settings::SiteSettingSource::kDefault, 3U);
}
+TEST_F(SiteSettingsHandlerTest, GetAllSites) {
+ base::ListValue get_all_sites_args;
+ get_all_sites_args.AppendString(kCallbackId);
+ base::Value category_list(base::Value::Type::LIST);
+ category_list.GetList().emplace_back(kNotifications);
+ category_list.GetList().emplace_back(kFlash);
+ get_all_sites_args.GetList().push_back(std::move(category_list));
+
+ // Test all sites is empty when there are no preferences.
+ handler()->HandleGetAllSites(&get_all_sites_args);
+ EXPECT_EQ(1U, web_ui()->call_data().size());
+
+ {
+ const content::TestWebUI::CallData& data = *web_ui()->call_data().back();
+ EXPECT_EQ("cr.webUIResponse", data.function_name());
+ EXPECT_EQ(kCallbackId, data.arg1()->GetString());
+ ASSERT_TRUE(data.arg2()->GetBool());
+
+ const base::Value::ListStorage& site_groups = data.arg3()->GetList();
+ EXPECT_EQ(0UL, site_groups.size());
+ }
+
+ // Add a couple of exceptions and check they appear in all sites.
+ HostContentSettingsMap* map =
+ HostContentSettingsMapFactory::GetForProfile(profile());
+ const GURL url1("http://example.com");
+ const GURL url2("https://other.example.com");
+ map->SetContentSettingDefaultScope(url1, url1,
+ CONTENT_SETTINGS_TYPE_NOTIFICATIONS,
+ std::string(), CONTENT_SETTING_BLOCK);
+ map->SetContentSettingDefaultScope(url2, url2, CONTENT_SETTINGS_TYPE_PLUGINS,
+ std::string(), CONTENT_SETTING_ALLOW);
+ handler()->HandleGetAllSites(&get_all_sites_args);
+
+ {
+ const content::TestWebUI::CallData& data = *web_ui()->call_data().back();
+ EXPECT_EQ("cr.webUIResponse", data.function_name());
+ EXPECT_EQ(kCallbackId, data.arg1()->GetString());
+ ASSERT_TRUE(data.arg2()->GetBool());
+
+ const base::Value::ListStorage& site_groups = data.arg3()->GetList();
+ EXPECT_EQ(1UL, site_groups.size());
+ for (const base::Value& site_group : site_groups) {
+ const std::string& etld_plus1_string =
+ site_group.FindKey("etldPlus1")->GetString();
+ const base::Value::ListStorage& origin_list =
+ site_group.FindKey("origins")->GetList();
+ EXPECT_EQ("example.com", etld_plus1_string);
+ EXPECT_EQ(2UL, origin_list.size());
+ EXPECT_EQ(url1.spec(), origin_list[0].GetString());
+ EXPECT_EQ(url2.spec(), origin_list[1].GetString());
+ }
+ }
+
+ // Add an additional exception belonging to a different eTLD+1.
+ const GURL url3("https://example2.net");
+ map->SetContentSettingDefaultScope(url3, url3, CONTENT_SETTINGS_TYPE_PLUGINS,
+ std::string(), CONTENT_SETTING_BLOCK);
+ handler()->HandleGetAllSites(&get_all_sites_args);
+
+ {
+ const content::TestWebUI::CallData& data = *web_ui()->call_data().back();
+ EXPECT_EQ("cr.webUIResponse", data.function_name());
+
+ EXPECT_EQ(kCallbackId, data.arg1()->GetString());
+ ASSERT_TRUE(data.arg2()->GetBool());
+
+ const base::Value::ListStorage& site_groups = data.arg3()->GetList();
+ EXPECT_EQ(2UL, site_groups.size());
+ for (const base::Value& site_group : site_groups) {
+ const std::string& etld_plus1_string =
+ site_group.FindKey("etldPlus1")->GetString();
+ const base::Value::ListStorage& origin_list =
+ site_group.FindKey("origins")->GetList();
+ if (etld_plus1_string == "example2.net") {
+ EXPECT_EQ(1UL, origin_list.size());
+ EXPECT_EQ(url3.spec(), origin_list[0].GetString());
+ } else {
+ EXPECT_EQ("example.com", etld_plus1_string);
+ }
+ }
+ }
+
+ // Test embargoed settings also appear.
+ PermissionDecisionAutoBlocker* auto_blocker =
+ PermissionDecisionAutoBlocker::GetForProfile(profile());
+ const GURL url4("https://example2.co.uk");
+ for (int i = 0; i < 3; ++i) {
+ auto_blocker->RecordDismissAndEmbargo(url4,
+ CONTENT_SETTINGS_TYPE_NOTIFICATIONS);
+ }
+ EXPECT_EQ(
+ CONTENT_SETTING_BLOCK,
+ auto_blocker->GetEmbargoResult(url4, CONTENT_SETTINGS_TYPE_NOTIFICATIONS)
+ .content_setting);
+ handler()->HandleGetAllSites(&get_all_sites_args);
+
+ {
+ const content::TestWebUI::CallData& data = *web_ui()->call_data().back();
+ EXPECT_EQ("cr.webUIResponse", data.function_name());
+ EXPECT_EQ(kCallbackId, data.arg1()->GetString());
+ ASSERT_TRUE(data.arg2()->GetBool());
+
+ const base::Value::ListStorage& site_groups = data.arg3()->GetList();
+ EXPECT_EQ(3UL, site_groups.size());
+ }
+
+ // Add an expired embargo setting to a) an existing eTLD+1 group and b) a new
+ // eTLD+1 group.
+ base::SimpleTestClock clock;
+ clock.SetNow(base::Time::Now());
+ auto_blocker->SetClockForTesting(&clock);
+ for (int i = 0; i < 3; ++i) {
+ auto_blocker->RecordDismissAndEmbargo(url3,
+ CONTENT_SETTINGS_TYPE_NOTIFICATIONS);
+ }
+ EXPECT_EQ(
+ CONTENT_SETTING_BLOCK,
+ auto_blocker->GetEmbargoResult(url3, CONTENT_SETTINGS_TYPE_NOTIFICATIONS)
+ .content_setting);
+ clock.Advance(base::TimeDelta::FromDays(8));
+ EXPECT_EQ(
+ CONTENT_SETTING_ASK,
+ auto_blocker->GetEmbargoResult(url3, CONTENT_SETTINGS_TYPE_NOTIFICATIONS)
+ .content_setting);
+
+ {
+ const content::TestWebUI::CallData& data = *web_ui()->call_data().back();
+ EXPECT_EQ("cr.webUIResponse", data.function_name());
+ EXPECT_EQ(kCallbackId, data.arg1()->GetString());
+ ASSERT_TRUE(data.arg2()->GetBool());
+
+ const base::Value::ListStorage& site_groups = data.arg3()->GetList();
+ EXPECT_EQ(3UL, site_groups.size());
+ }
+
+ clock.SetNow(base::Time::Now());
+ const GURL url5("http://test.example5.com");
+ for (int i = 0; i < 3; ++i) {
+ auto_blocker->RecordDismissAndEmbargo(url5,
+ CONTENT_SETTINGS_TYPE_NOTIFICATIONS);
+ }
+ EXPECT_EQ(
+ CONTENT_SETTING_BLOCK,
+ auto_blocker->GetEmbargoResult(url5, CONTENT_SETTINGS_TYPE_NOTIFICATIONS)
+ .content_setting);
+ clock.Advance(base::TimeDelta::FromDays(8));
+ EXPECT_EQ(
+ CONTENT_SETTING_ASK,
+ auto_blocker->GetEmbargoResult(url5, CONTENT_SETTINGS_TYPE_NOTIFICATIONS)
+ .content_setting);
+
+ {
+ const content::TestWebUI::CallData& data = *web_ui()->call_data().back();
+ EXPECT_EQ("cr.webUIResponse", data.function_name());
+ EXPECT_EQ(kCallbackId, data.arg1()->GetString());
+ ASSERT_TRUE(data.arg2()->GetBool());
+
+ const base::Value::ListStorage& site_groups = data.arg3()->GetList();
+ EXPECT_EQ(3UL, site_groups.size());
+ }
+}
+
TEST_F(SiteSettingsHandlerTest, Origins) {
const std::string google("https://www.google.com:443");
const std::string uma_base("WebsiteSettings.Menu.PermissionChanged");
diff --git a/chromium/chrome/browser/ui/webui/settings/tts_handler.cc b/chromium/chrome/browser/ui/webui/settings/tts_handler.cc
index 44cfc2fa7f9..0984278d7eb 100644
--- a/chromium/chrome/browser/ui/webui/settings/tts_handler.cc
+++ b/chromium/chrome/browser/ui/webui/settings/tts_handler.cc
@@ -14,6 +14,7 @@
#include "chrome/browser/speech/tts_controller.h"
#include "chrome/browser/speech/tts_controller_impl.h"
#include "chrome/common/extensions/extension_constants.h"
+#include "chrome/grit/generated_resources.h"
#include "content/public/browser/web_ui.h"
#include "extensions/browser/event_router.h"
#include "extensions/browser/extension_registry.h"
@@ -29,6 +30,9 @@ void TtsHandler::HandleGetAllTtsVoiceData(const base::ListValue* args) {
}
void TtsHandler::HandleGetTtsExtensions(const base::ListValue* args) {
+ // Ensure the built in tts engine is loaded to be able to respond to messages.
+ TtsExtensionEngine::GetInstance()->LoadBuiltInTtsExtension(
+ Profile::FromWebUI(web_ui()));
base::ListValue responses;
Profile* profile = Profile::FromWebUI(web_ui());
extensions::ExtensionRegistry* registry =
@@ -48,19 +52,18 @@ void TtsHandler::HandleGetTtsExtensions(const base::ListValue* args) {
continue;
}
base::DictionaryValue response;
- response.SetPath({"name"}, base::Value(extension->name()));
- response.SetPath({"extensionId"}, base::Value(extension_id));
+ response.SetString("name", extension->name());
+ response.SetString("extensionId", extension_id);
if (extensions::OptionsPageInfo::HasOptionsPage(extension)) {
- response.SetPath(
- {"optionsPage"},
- base::Value(
- extensions::OptionsPageInfo::GetOptionsPage(extension).spec()));
+ response.SetString(
+ "optionsPage",
+
+ extensions::OptionsPageInfo::GetOptionsPage(extension).spec());
}
responses.GetList().push_back(std::move(response));
}
- CallJavascriptFunction("cr.webUIListenerCallback",
- base::Value("tts-extensions-updated"), responses);
+ FireWebUIListener("tts-extensions-updated", responses);
}
void TtsHandler::OnVoicesChanged() {
@@ -72,21 +75,28 @@ void TtsHandler::OnVoicesChanged() {
for (const auto& voice : voices) {
base::DictionaryValue response;
int language_score = GetVoiceLangMatchScore(&voice, app_locale);
- std::string language_code = l10n_util::GetLanguage(voice.lang);
- response.SetPath({"name"}, base::Value(voice.name));
- response.SetPath({"languageCode"}, base::Value(language_code));
- response.SetPath({"fullLanguageCode"}, base::Value(voice.lang));
- response.SetPath({"languageScore"}, base::Value(language_score));
- response.SetPath({"extensionId"}, base::Value(voice.extension_id));
- response.SetPath(
- {"displayLanguage"},
- base::Value(l10n_util::GetDisplayNameForLocale(
- language_code, g_browser_process->GetApplicationLocale(), true)));
+ std::string language_code;
+ if (voice.lang.empty()) {
+ language_code = "noLanguageCode";
+ response.SetString(
+ "displayLanguage",
+ l10n_util::GetStringUTF8(IDS_TEXT_TO_SPEECH_SETTINGS_NO_LANGUAGE));
+ } else {
+ language_code = l10n_util::GetLanguage(voice.lang);
+ response.SetString(
+ "displayLanguage",
+ l10n_util::GetDisplayNameForLocale(
+ language_code, g_browser_process->GetApplicationLocale(), true));
+ }
+ response.SetString("name", voice.name);
+ response.SetString("languageCode", language_code);
+ response.SetString("fullLanguageCode", voice.lang);
+ response.SetInteger("languageScore", language_score);
+ response.SetString("extensionId", voice.extension_id);
responses.GetList().push_back(std::move(response));
}
AllowJavascript();
- CallJavascriptFunction("cr.webUIListenerCallback",
- base::Value("all-voice-data-updated"), responses);
+ FireWebUIListener("all-voice-data-updated", responses);
// Also refresh the TTS extensions in case they have changed.
HandleGetTtsExtensions(nullptr);