diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2018-05-15 10:20:33 +0200 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2018-05-15 10:28:57 +0000 |
commit | d17ea114e5ef69ad5d5d7413280a13e6428098aa (patch) | |
tree | 2c01a75df69f30d27b1432467cfe7c1467a498da /chromium/chrome/browser/ui/webui/settings | |
parent | 8c5c43c7b138c9b4b0bf56d946e61d3bbc111bec (diff) |
BASELINE: Update Chromium to 67.0.3396.47
Change-Id: Idcb1341782e417561a2473eeecc82642dafda5b7
Reviewed-by: Michal Klocek <michal.klocek@qt.io>
Diffstat (limited to 'chromium/chrome/browser/ui/webui/settings')
59 files changed, 1201 insertions, 784 deletions
diff --git a/chromium/chrome/browser/ui/webui/settings/about_handler.cc b/chromium/chrome/browser/ui/webui/settings/about_handler.cc index 0e22bfc93e3..787f802a743 100644 --- a/chromium/chrome/browser/ui/webui/settings/about_handler.cc +++ b/chromium/chrome/browser/ui/webui/settings/about_handler.cc @@ -283,7 +283,7 @@ AboutHandler* AboutHandler::Create(content::WebUIDataSource* html_source, l10n_util::GetStringUTF16(version_info::IsOfficialBuild() ? IDS_VERSION_UI_OFFICIAL : IDS_VERSION_UI_UNOFFICIAL), - base::UTF8ToUTF16(chrome::GetChannelString()), + base::UTF8ToUTF16(chrome::GetChannelName()), #if defined(ARCH_CPU_64_BITS) l10n_util::GetStringUTF16(IDS_VERSION_UI_64BIT))); #else @@ -346,42 +346,44 @@ AboutHandler* AboutHandler::Create(content::WebUIDataSource* html_source, void AboutHandler::RegisterMessages() { web_ui()->RegisterMessageCallback( - "aboutPageReady", - base::Bind(&AboutHandler::HandlePageReady, base::Unretained(this))); + "aboutPageReady", base::BindRepeating(&AboutHandler::HandlePageReady, + base::Unretained(this))); web_ui()->RegisterMessageCallback( "refreshUpdateStatus", - base::Bind(&AboutHandler::HandleRefreshUpdateStatus, - base::Unretained(this))); + base::BindRepeating(&AboutHandler::HandleRefreshUpdateStatus, + base::Unretained(this))); web_ui()->RegisterMessageCallback( - "openFeedbackDialog", base::Bind(&AboutHandler::HandleOpenFeedbackDialog, - base::Unretained(this))); + "openFeedbackDialog", + base::BindRepeating(&AboutHandler::HandleOpenFeedbackDialog, + base::Unretained(this))); web_ui()->RegisterMessageCallback( - "openHelpPage", - base::Bind(&AboutHandler::HandleOpenHelpPage, base::Unretained(this))); + "openHelpPage", base::BindRepeating(&AboutHandler::HandleOpenHelpPage, + base::Unretained(this))); #if defined(OS_CHROMEOS) web_ui()->RegisterMessageCallback( - "setChannel", - base::Bind(&AboutHandler::HandleSetChannel, base::Unretained(this))); + "setChannel", base::BindRepeating(&AboutHandler::HandleSetChannel, + base::Unretained(this))); web_ui()->RegisterMessageCallback( - "requestUpdate", - base::Bind(&AboutHandler::HandleRequestUpdate, base::Unretained(this))); + "requestUpdate", base::BindRepeating(&AboutHandler::HandleRequestUpdate, + base::Unretained(this))); web_ui()->RegisterMessageCallback( "requestUpdateOverCellular", - base::Bind(&AboutHandler::HandleRequestUpdateOverCellular, - base::Unretained(this))); + base::BindRepeating(&AboutHandler::HandleRequestUpdateOverCellular, + base::Unretained(this))); web_ui()->RegisterMessageCallback( - "getVersionInfo", - base::Bind(&AboutHandler::HandleGetVersionInfo, base::Unretained(this))); + "getVersionInfo", base::BindRepeating(&AboutHandler::HandleGetVersionInfo, + base::Unretained(this))); web_ui()->RegisterMessageCallback( - "getRegulatoryInfo", base::Bind(&AboutHandler::HandleGetRegulatoryInfo, - base::Unretained(this))); + "getRegulatoryInfo", + base::BindRepeating(&AboutHandler::HandleGetRegulatoryInfo, + base::Unretained(this))); web_ui()->RegisterMessageCallback( - "getChannelInfo", base::Bind(&AboutHandler::HandleGetChannelInfo, - base::Unretained(this))); + "getChannelInfo", base::BindRepeating(&AboutHandler::HandleGetChannelInfo, + base::Unretained(this))); web_ui()->RegisterMessageCallback( "refreshTPMFirmwareUpdateStatus", - base::Bind(&AboutHandler::HandleRefreshTPMFirmwareUpdateStatus, - base::Unretained(this))); + base::BindRepeating(&AboutHandler::HandleRefreshTPMFirmwareUpdateStatus, + base::Unretained(this))); web_ui()->RegisterMessageCallback( "getHasEndOfLife", base::BindRepeating(&AboutHandler::HandleGetHasEndOfLife, @@ -389,8 +391,8 @@ void AboutHandler::RegisterMessages() { #endif #if defined(OS_MACOSX) web_ui()->RegisterMessageCallback( - "promoteUpdater", - base::Bind(&AboutHandler::PromoteUpdater, base::Unretained(this))); + "promoteUpdater", base::BindRepeating(&AboutHandler::PromoteUpdater, + base::Unretained(this))); #endif #if defined(OS_CHROMEOS) diff --git a/chromium/chrome/browser/ui/webui/settings/appearance_handler.cc b/chromium/chrome/browser/ui/webui/settings/appearance_handler.cc index 3e9bb1a4d96..ae92d569046 100644 --- a/chromium/chrome/browser/ui/webui/settings/appearance_handler.cc +++ b/chromium/chrome/browser/ui/webui/settings/appearance_handler.cc @@ -29,29 +29,29 @@ void AppearanceHandler::OnJavascriptDisallowed() {} void AppearanceHandler::RegisterMessages() { web_ui()->RegisterMessageCallback( "useDefaultTheme", - base::Bind(&AppearanceHandler::HandleUseDefaultTheme, - base::Unretained(this))); + base::BindRepeating(&AppearanceHandler::HandleUseDefaultTheme, + base::Unretained(this))); #if defined(OS_LINUX) && !defined(OS_CHROMEOS) web_ui()->RegisterMessageCallback( "useSystemTheme", - base::Bind(&AppearanceHandler::HandleUseSystemTheme, - base::Unretained(this))); + base::BindRepeating(&AppearanceHandler::HandleUseSystemTheme, + base::Unretained(this))); #endif #if defined(OS_CHROMEOS) web_ui()->RegisterMessageCallback( "openWallpaperManager", - base::Bind(&AppearanceHandler::HandleOpenWallpaperManager, - base::Unretained(this))); + base::BindRepeating(&AppearanceHandler::HandleOpenWallpaperManager, + base::Unretained(this))); web_ui()->RegisterMessageCallback( "isWallpaperSettingVisible", - base::Bind(&AppearanceHandler::IsWallpaperSettingVisible, - base::Unretained(this))); + base::BindRepeating(&AppearanceHandler::IsWallpaperSettingVisible, + base::Unretained(this))); web_ui()->RegisterMessageCallback( "isWallpaperPolicyControlled", - base::Bind(&AppearanceHandler::IsWallpaperPolicyControlled, - base::Unretained(this))); + base::BindRepeating(&AppearanceHandler::IsWallpaperPolicyControlled, + base::Unretained(this))); #endif } diff --git a/chromium/chrome/browser/ui/webui/settings/browser_lifetime_handler.cc b/chromium/chrome/browser/ui/webui/settings/browser_lifetime_handler.cc index 551123b58ae..c4eb7282a45 100644 --- a/chromium/chrome/browser/ui/webui/settings/browser_lifetime_handler.cc +++ b/chromium/chrome/browser/ui/webui/settings/browser_lifetime_handler.cc @@ -25,19 +25,21 @@ BrowserLifetimeHandler::BrowserLifetimeHandler() {} BrowserLifetimeHandler::~BrowserLifetimeHandler() {} void BrowserLifetimeHandler::RegisterMessages() { - web_ui()->RegisterMessageCallback("restart", - base::Bind(&BrowserLifetimeHandler::HandleRestart, - base::Unretained(this))); - web_ui()->RegisterMessageCallback("relaunch", - base::Bind(&BrowserLifetimeHandler::HandleRelaunch, - base::Unretained(this))); + web_ui()->RegisterMessageCallback( + "restart", base::BindRepeating(&BrowserLifetimeHandler::HandleRestart, + base::Unretained(this))); + web_ui()->RegisterMessageCallback( + "relaunch", base::BindRepeating(&BrowserLifetimeHandler::HandleRelaunch, + base::Unretained(this))); #if defined(OS_CHROMEOS) - web_ui()->RegisterMessageCallback("signOutAndRestart", - base::Bind(&BrowserLifetimeHandler::HandleSignOutAndRestart, - base::Unretained(this))); - web_ui()->RegisterMessageCallback("factoryReset", - base::Bind(&BrowserLifetimeHandler::HandleFactoryReset, - base::Unretained(this))); + web_ui()->RegisterMessageCallback( + "signOutAndRestart", + base::BindRepeating(&BrowserLifetimeHandler::HandleSignOutAndRestart, + base::Unretained(this))); + web_ui()->RegisterMessageCallback( + "factoryReset", + base::BindRepeating(&BrowserLifetimeHandler::HandleFactoryReset, + base::Unretained(this))); #endif // defined(OS_CHROMEOS) } 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 a077bd75bd2..6d64f7bbd08 100644 --- a/chromium/chrome/browser/ui/webui/settings/change_password_handler.cc +++ b/chromium/chrome/browser/ui/webui/settings/change_password_handler.cc @@ -26,11 +26,12 @@ ChangePasswordHandler::~ChangePasswordHandler() {} void ChangePasswordHandler::RegisterMessages() { web_ui()->RegisterMessageCallback( "initializeChangePasswordHandler", - base::Bind(&ChangePasswordHandler::HandleInitialize, - base::Unretained(this))); + base::BindRepeating(&ChangePasswordHandler::HandleInitialize, + base::Unretained(this))); web_ui()->RegisterMessageCallback( - "changePassword", base::Bind(&ChangePasswordHandler::HandleChangePassword, - base::Unretained(this))); + "changePassword", + base::BindRepeating(&ChangePasswordHandler::HandleChangePassword, + base::Unretained(this))); } void ChangePasswordHandler::OnJavascriptAllowed() { diff --git a/chromium/chrome/browser/ui/webui/settings/chromeos/accessibility_handler.cc b/chromium/chrome/browser/ui/webui/settings/chromeos/accessibility_handler.cc index a74053c73a4..43375c860ec 100644 --- a/chromium/chrome/browser/ui/webui/settings/chromeos/accessibility_handler.cc +++ b/chromium/chrome/browser/ui/webui/settings/chromeos/accessibility_handler.cc @@ -25,16 +25,17 @@ AccessibilityHandler::~AccessibilityHandler() {} void AccessibilityHandler::RegisterMessages() { web_ui()->RegisterMessageCallback( "showChromeVoxSettings", - base::Bind(&AccessibilityHandler::HandleShowChromeVoxSettings, - base::Unretained(this))); + base::BindRepeating(&AccessibilityHandler::HandleShowChromeVoxSettings, + base::Unretained(this))); web_ui()->RegisterMessageCallback( "showSelectToSpeakSettings", - base::Bind(&AccessibilityHandler::HandleShowSelectToSpeakSettings, - base::Unretained(this))); + base::BindRepeating( + &AccessibilityHandler::HandleShowSelectToSpeakSettings, + base::Unretained(this))); web_ui()->RegisterMessageCallback( "showSwitchAccessSettings", - base::Bind(&AccessibilityHandler::HandleShowSwitchAccessSettings, - base::Unretained(this))); + base::BindRepeating(&AccessibilityHandler::HandleShowSwitchAccessSettings, + base::Unretained(this))); } void AccessibilityHandler::HandleShowChromeVoxSettings( 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 01baa407efa..1a3824cb28e 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 @@ -28,16 +28,16 @@ void AndroidAppsHandler::RegisterMessages() { // Note: requestAndroidAppsInfo must be called before observers will be added. web_ui()->RegisterMessageCallback( "requestAndroidAppsInfo", - base::Bind(&AndroidAppsHandler::HandleRequestAndroidAppsInfo, - weak_ptr_factory_.GetWeakPtr())); + base::BindRepeating(&AndroidAppsHandler::HandleRequestAndroidAppsInfo, + weak_ptr_factory_.GetWeakPtr())); web_ui()->RegisterMessageCallback( "showAndroidAppsSettings", - base::Bind(&AndroidAppsHandler::ShowAndroidAppsSettings, - weak_ptr_factory_.GetWeakPtr())); + base::BindRepeating(&AndroidAppsHandler::ShowAndroidAppsSettings, + weak_ptr_factory_.GetWeakPtr())); web_ui()->RegisterMessageCallback( "showAndroidManageAppLinks", - base::Bind(&AndroidAppsHandler::ShowAndroidManageAppLinks, - weak_ptr_factory_.GetWeakPtr())); + base::BindRepeating(&AndroidAppsHandler::ShowAndroidManageAppLinks, + weak_ptr_factory_.GetWeakPtr())); } void AndroidAppsHandler::OnJavascriptAllowed() { diff --git a/chromium/chrome/browser/ui/webui/settings/chromeos/change_picture_handler.cc b/chromium/chrome/browser/ui/webui/settings/chromeos/change_picture_handler.cc index 6a345261eb0..578bbdbb08e 100644 --- a/chromium/chrome/browser/ui/webui/settings/chromeos/change_picture_handler.cc +++ b/chromium/chrome/browser/ui/webui/settings/chromeos/change_picture_handler.cc @@ -100,25 +100,27 @@ ChangePictureHandler::~ChangePictureHandler() { void ChangePictureHandler::RegisterMessages() { web_ui()->RegisterMessageCallback( - "chooseFile", base::Bind(&ChangePictureHandler::HandleChooseFile, - base::Unretained(this))); + "chooseFile", base::BindRepeating(&ChangePictureHandler::HandleChooseFile, + base::Unretained(this))); web_ui()->RegisterMessageCallback( - "photoTaken", base::Bind(&ChangePictureHandler::HandlePhotoTaken, - base::Unretained(this))); + "photoTaken", base::BindRepeating(&ChangePictureHandler::HandlePhotoTaken, + base::Unretained(this))); web_ui()->RegisterMessageCallback( - "discardPhoto", base::Bind(&ChangePictureHandler::HandleDiscardPhoto, - base::Unretained(this))); + "discardPhoto", + base::BindRepeating(&ChangePictureHandler::HandleDiscardPhoto, + base::Unretained(this))); web_ui()->RegisterMessageCallback( "onChangePicturePageInitialized", - base::Bind(&ChangePictureHandler::HandlePageInitialized, - base::Unretained(this))); + base::BindRepeating(&ChangePictureHandler::HandlePageInitialized, + base::Unretained(this))); web_ui()->RegisterMessageCallback( - "selectImage", base::Bind(&ChangePictureHandler::HandleSelectImage, - base::Unretained(this))); + "selectImage", + base::BindRepeating(&ChangePictureHandler::HandleSelectImage, + base::Unretained(this))); web_ui()->RegisterMessageCallback( "requestSelectedImage", - base::Bind(&ChangePictureHandler::HandleRequestSelectedImage, - base::Unretained(this))); + base::BindRepeating(&ChangePictureHandler::HandleRequestSelectedImage, + base::Unretained(this))); } void ChangePictureHandler::OnJavascriptAllowed() { 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 a535d490d14..942bd8bfbc4 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 @@ -37,6 +37,7 @@ #include "chromeos/printing/ppd_line_reader.h" #include "chromeos/printing/ppd_provider.h" #include "chromeos/printing/printer_configuration.h" +#include "chromeos/printing/printer_translator.h" #include "chromeos/printing/printing_constants.h" #include "chromeos/printing/uri_components.h" #include "content/public/browser/browser_context.h" @@ -102,84 +103,6 @@ void QueryAutoconf(const std::string& printer_uri, callback); } -// Create an empty CupsPrinterInfo dictionary value. It should be consistent -// with the fields in js side. See cups_printers_browser_proxy.js for the -// definition of CupsPrinterInfo. -std::unique_ptr<base::DictionaryValue> CreateEmptyPrinterInfo() { - std::unique_ptr<base::DictionaryValue> printer_info = - std::make_unique<base::DictionaryValue>(); - printer_info->SetString("ppdManufacturer", ""); - printer_info->SetString("ppdModel", ""); - printer_info->SetString("printerAddress", ""); - printer_info->SetBoolean("printerAutoconf", false); - printer_info->SetString("printerDescription", ""); - printer_info->SetString("printerId", ""); - printer_info->SetString("printerManufacturer", ""); - printer_info->SetString("printerModel", ""); - printer_info->SetString("printerMakeAndModel", ""); - printer_info->SetString("printerName", ""); - printer_info->SetString("printerPPDPath", ""); - printer_info->SetString("printerProtocol", "ipp"); - printer_info->SetString("printerQueue", ""); - printer_info->SetString("printerStatus", ""); - return printer_info; -} - -// Formats a host and port string. The |port| portion is omitted if -// it is unspecified or invalid. -std::string PrinterAddress(const std::string& host, int port) { - if (port != url::PORT_UNSPECIFIED && port != url::PORT_INVALID) { - return base::StringPrintf("%s:%d", host.c_str(), port); - } - - return host; -} - -// Returns a JSON representation of |printer| as a CupsPrinterInfo. If the -// printer uri cannot be parsed, the relevant fields are populated with default -// values. -std::unique_ptr<base::DictionaryValue> GetPrinterInfo(const Printer& printer) { - std::unique_ptr<base::DictionaryValue> printer_info = - CreateEmptyPrinterInfo(); - printer_info->SetString("printerId", printer.id()); - printer_info->SetString("printerName", printer.display_name()); - printer_info->SetString("printerDescription", printer.description()); - printer_info->SetString("printerManufacturer", printer.manufacturer()); - printer_info->SetString("printerModel", printer.model()); - printer_info->SetString("printerMakeAndModel", printer.make_and_model()); - - auto optional = printer.GetUriComponents(); - if (!optional.has_value()) { - // Uri is invalid so we set default values. - LOG(WARNING) << "Could not parse uri. Defaulting values"; - printer_info->SetString("printerAddress", ""); - printer_info->SetString("printerQueue", ""); - printer_info->SetString("printerProtocol", - "ipp"); // IPP is our default protocol. - return printer_info; - } - - UriComponents uri = optional.value(); - - if (base::ToLowerASCII(uri.scheme()) == "usb") { - // USB has URI path (and, maybe, query) components that aren't really - // associated with a queue -- the mapping between printing semantics and URI - // semantics breaks down a bit here. From the user's point of view, the - // entire host/path/query block is the printer address for USB. - printer_info->SetString("printerAddress", - printer.uri().substr(strlen("usb://"))); - } else { - printer_info->SetString("printerAddress", - PrinterAddress(uri.host(), uri.port())); - if (!uri.path().empty()) { - printer_info->SetString("printerQueue", uri.path().substr(1)); - } - } - printer_info->SetString("printerProtocol", base::ToLowerASCII(uri.scheme())); - - return printer_info; -} - // Extracts a sanitized value of printerQueue from |printer_dict|. Returns an // empty string if the value was not present in the dictionary. std::string GetPrinterQueue(const base::DictionaryValue& printer_dict) { @@ -265,52 +188,58 @@ CupsPrintersHandler::~CupsPrintersHandler() {} void CupsPrintersHandler::RegisterMessages() { web_ui()->RegisterMessageCallback( "getCupsPrintersList", - base::Bind(&CupsPrintersHandler::HandleGetCupsPrintersList, - base::Unretained(this))); + base::BindRepeating(&CupsPrintersHandler::HandleGetCupsPrintersList, + base::Unretained(this))); web_ui()->RegisterMessageCallback( "updateCupsPrinter", - base::Bind(&CupsPrintersHandler::HandleUpdateCupsPrinter, - base::Unretained(this))); + base::BindRepeating(&CupsPrintersHandler::HandleUpdateCupsPrinter, + base::Unretained(this))); web_ui()->RegisterMessageCallback( "removeCupsPrinter", - base::Bind(&CupsPrintersHandler::HandleRemoveCupsPrinter, - base::Unretained(this))); + base::BindRepeating(&CupsPrintersHandler::HandleRemoveCupsPrinter, + base::Unretained(this))); web_ui()->RegisterMessageCallback( - "addCupsPrinter", base::Bind(&CupsPrintersHandler::HandleAddCupsPrinter, - base::Unretained(this))); + "addCupsPrinter", + base::BindRepeating(&CupsPrintersHandler::HandleAddCupsPrinter, + base::Unretained(this))); web_ui()->RegisterMessageCallback( - "getPrinterInfo", base::Bind(&CupsPrintersHandler::HandleGetPrinterInfo, - base::Unretained(this))); + "getPrinterInfo", + base::BindRepeating(&CupsPrintersHandler::HandleGetPrinterInfo, + base::Unretained(this))); web_ui()->RegisterMessageCallback( "getCupsPrinterManufacturersList", - base::Bind(&CupsPrintersHandler::HandleGetCupsPrinterManufacturers, - base::Unretained(this))); + base::BindRepeating( + &CupsPrintersHandler::HandleGetCupsPrinterManufacturers, + base::Unretained(this))); web_ui()->RegisterMessageCallback( "getCupsPrinterModelsList", - base::Bind(&CupsPrintersHandler::HandleGetCupsPrinterModels, - base::Unretained(this))); + base::BindRepeating(&CupsPrintersHandler::HandleGetCupsPrinterModels, + base::Unretained(this))); web_ui()->RegisterMessageCallback( - "selectPPDFile", base::Bind(&CupsPrintersHandler::HandleSelectPPDFile, - base::Unretained(this))); + "selectPPDFile", + base::BindRepeating(&CupsPrintersHandler::HandleSelectPPDFile, + base::Unretained(this))); web_ui()->RegisterMessageCallback( "startDiscoveringPrinters", - base::Bind(&CupsPrintersHandler::HandleStartDiscovery, - base::Unretained(this))); + base::BindRepeating(&CupsPrintersHandler::HandleStartDiscovery, + base::Unretained(this))); web_ui()->RegisterMessageCallback( "stopDiscoveringPrinters", - base::Bind(&CupsPrintersHandler::HandleStopDiscovery, - base::Unretained(this))); + base::BindRepeating(&CupsPrintersHandler::HandleStopDiscovery, + base::Unretained(this))); web_ui()->RegisterMessageCallback( "getPrinterPpdManufacturerAndModel", - base::Bind(&CupsPrintersHandler::HandleGetPrinterPpdManufacturerAndModel, - base::Unretained(this))); + base::BindRepeating( + &CupsPrintersHandler::HandleGetPrinterPpdManufacturerAndModel, + base::Unretained(this))); web_ui()->RegisterMessageCallback( "addDiscoveredPrinter", - base::Bind(&CupsPrintersHandler::HandleAddDiscoveredPrinter, - base::Unretained(this))); + base::BindRepeating(&CupsPrintersHandler::HandleAddDiscoveredPrinter, + base::Unretained(this))); web_ui()->RegisterMessageCallback( - "cancelPrinterSetUp", base::Bind(&CupsPrintersHandler::HandleSetUpCancel, - base::Unretained(this))); + "cancelPrinterSetUp", + base::BindRepeating(&CupsPrintersHandler::HandleSetUpCancel, + base::Unretained(this))); } void CupsPrintersHandler::OnJavascriptAllowed() { @@ -336,7 +265,7 @@ void CupsPrintersHandler::HandleGetCupsPrintersList( for (const Printer& printer : printers) { // Some of these printers could be invalid but we want to allow the user // to edit them. crbug.com/778383 - printers_list->Append(GetPrinterInfo(printer)); + printers_list->Append(GetCupsPrinterInfo(printer)); } auto response = std::make_unique<base::DictionaryValue>(); @@ -464,7 +393,7 @@ void CupsPrintersHandler::OnAutoconfQueriedDiscovered( // much information as we can about the printer, and ask the user to supply // the rest. FireWebUIListener("on-manually-add-discovered-printer", - *GetPrinterInfo(*printer)); + *GetCupsPrinterInfo(*printer)); } void CupsPrintersHandler::OnAutoconfQueried(const std::string& callback_id, @@ -810,10 +739,10 @@ void CupsPrintersHandler::OnPrintersChanged( std::unique_ptr<base::ListValue> printers_list = std::make_unique<base::ListValue>(); for (const Printer& printer : automatic_printers_) { - printers_list->Append(GetPrinterInfo(printer)); + printers_list->Append(GetCupsPrinterInfo(printer)); } for (const Printer& printer : discovered_printers_) { - printers_list->Append(GetPrinterInfo(printer)); + printers_list->Append(GetCupsPrinterInfo(printer)); } FireWebUIListener("on-printer-discovered", *printers_list); @@ -866,7 +795,7 @@ void CupsPrintersHandler::HandleAddDiscoveredPrinter( } else { // If it's not an IPP printer, the user must choose a PPD. FireWebUIListener("on-manually-add-discovered-printer", - *GetPrinterInfo(*printer)); + *GetCupsPrinterInfo(*printer)); } } diff --git a/chromium/chrome/browser/ui/webui/settings/chromeos/date_time_handler.cc b/chromium/chrome/browser/ui/webui/settings/chromeos/date_time_handler.cc index ffe094e20ee..901d006207d 100644 --- a/chromium/chrome/browser/ui/webui/settings/chromeos/date_time_handler.cc +++ b/chromium/chrome/browser/ui/webui/settings/chromeos/date_time_handler.cc @@ -88,14 +88,16 @@ DateTimeHandler* DateTimeHandler::Create( void DateTimeHandler::RegisterMessages() { web_ui()->RegisterMessageCallback( - "dateTimePageReady", base::Bind(&DateTimeHandler::HandleDateTimePageReady, - base::Unretained(this))); + "dateTimePageReady", + base::BindRepeating(&DateTimeHandler::HandleDateTimePageReady, + base::Unretained(this))); web_ui()->RegisterMessageCallback( - "getTimeZones", - base::Bind(&DateTimeHandler::HandleGetTimeZones, base::Unretained(this))); + "getTimeZones", base::BindRepeating(&DateTimeHandler::HandleGetTimeZones, + base::Unretained(this))); web_ui()->RegisterMessageCallback( - "showSetDateTimeUI", base::Bind(&DateTimeHandler::HandleShowSetDateTimeUI, - base::Unretained(this))); + "showSetDateTimeUI", + base::BindRepeating(&DateTimeHandler::HandleShowSetDateTimeUI, + base::Unretained(this))); } void DateTimeHandler::OnJavascriptAllowed() { diff --git a/chromium/chrome/browser/ui/webui/settings/chromeos/device_keyboard_handler.cc b/chromium/chrome/browser/ui/webui/settings/chromeos/device_keyboard_handler.cc index 53bf08503de..59a3f7f004d 100644 --- a/chromium/chrome/browser/ui/webui/settings/chromeos/device_keyboard_handler.cc +++ b/chromium/chrome/browser/ui/webui/settings/chromeos/device_keyboard_handler.cc @@ -46,12 +46,12 @@ KeyboardHandler::~KeyboardHandler() = default; void KeyboardHandler::RegisterMessages() { web_ui()->RegisterMessageCallback( "initializeKeyboardSettings", - base::Bind(&KeyboardHandler::HandleInitialize, - base::Unretained(this))); + base::BindRepeating(&KeyboardHandler::HandleInitialize, + base::Unretained(this))); web_ui()->RegisterMessageCallback( "showKeyboardShortcutsOverlay", - base::Bind(&KeyboardHandler::HandleShowKeyboardShortcutsOverlay, - base::Unretained(this))); + base::BindRepeating(&KeyboardHandler::HandleShowKeyboardShortcutsOverlay, + base::Unretained(this))); } void KeyboardHandler::OnJavascriptAllowed() { diff --git a/chromium/chrome/browser/ui/webui/settings/chromeos/device_keyboard_handler_unittest.cc b/chromium/chrome/browser/ui/webui/settings/chromeos/device_keyboard_handler_unittest.cc index bbf2fa12df1..c875a4480ff 100644 --- a/chromium/chrome/browser/ui/webui/settings/chromeos/device_keyboard_handler_unittest.cc +++ b/chromium/chrome/browser/ui/webui/settings/chromeos/device_keyboard_handler_unittest.cc @@ -9,7 +9,6 @@ #include "base/command_line.h" #include "base/logging.h" #include "base/macros.h" -#include "base/memory/ptr_util.h" #include "base/observer_list.h" #include "chromeos/chromeos_switches.h" #include "content/public/test/test_web_ui.h" diff --git a/chromium/chrome/browser/ui/webui/settings/chromeos/device_pointer_handler.cc b/chromium/chrome/browser/ui/webui/settings/chromeos/device_pointer_handler.cc index 061dad6d182..0f5933cc8a8 100644 --- a/chromium/chrome/browser/ui/webui/settings/chromeos/device_pointer_handler.cc +++ b/chromium/chrome/browser/ui/webui/settings/chromeos/device_pointer_handler.cc @@ -18,7 +18,8 @@ PointerHandler::~PointerHandler() {} void PointerHandler::RegisterMessages() { web_ui()->RegisterMessageCallback( "initializePointerSettings", - base::Bind(&PointerHandler::HandleInitialize, base::Unretained(this))); + base::BindRepeating(&PointerHandler::HandleInitialize, + base::Unretained(this))); } void PointerHandler::OnJavascriptAllowed() { diff --git a/chromium/chrome/browser/ui/webui/settings/chromeos/device_power_handler.cc b/chromium/chrome/browser/ui/webui/settings/chromeos/device_power_handler.cc index c07cfbf1074..38957b75449 100644 --- a/chromium/chrome/browser/ui/webui/settings/chromeos/device_power_handler.cc +++ b/chromium/chrome/browser/ui/webui/settings/chromeos/device_power_handler.cc @@ -7,13 +7,13 @@ #include <memory> #include <utility> +#include "ash/public/cpp/ash_pref_names.h" #include "base/bind.h" #include "base/bind_helpers.h" #include "base/strings/string_number_conversions.h" #include "base/strings/utf_string_conversions.h" #include "base/time/time.h" #include "base/values.h" -#include "chrome/common/pref_names.h" #include "chrome/grit/generated_resources.h" #include "chromeos/dbus/dbus_thread_manager.h" #include "components/prefs/pref_change_registrar.h" @@ -89,22 +89,24 @@ PowerHandler::~PowerHandler() {} void PowerHandler::RegisterMessages() { web_ui()->RegisterMessageCallback( - "updatePowerStatus", base::Bind(&PowerHandler::HandleUpdatePowerStatus, - base::Unretained(this))); + "updatePowerStatus", + base::BindRepeating(&PowerHandler::HandleUpdatePowerStatus, + base::Unretained(this))); web_ui()->RegisterMessageCallback( - "setPowerSource", - base::Bind(&PowerHandler::HandleSetPowerSource, base::Unretained(this))); + "setPowerSource", base::BindRepeating(&PowerHandler::HandleSetPowerSource, + base::Unretained(this))); web_ui()->RegisterMessageCallback( "requestPowerManagementSettings", - base::Bind(&PowerHandler::HandleRequestPowerManagementSettings, - base::Unretained(this))); + base::BindRepeating(&PowerHandler::HandleRequestPowerManagementSettings, + base::Unretained(this))); web_ui()->RegisterMessageCallback( "setLidClosedBehavior", - base::Bind(&PowerHandler::HandleSetLidClosedBehavior, - base::Unretained(this))); + base::BindRepeating(&PowerHandler::HandleSetLidClosedBehavior, + base::Unretained(this))); web_ui()->RegisterMessageCallback( "setIdleBehavior", - base::Bind(&PowerHandler::HandleSetIdleBehavior, base::Unretained(this))); + base::BindRepeating(&PowerHandler::HandleSetIdleBehavior, + base::Unretained(this))); } void PowerHandler::OnJavascriptAllowed() { @@ -121,15 +123,18 @@ void PowerHandler::OnJavascriptAllowed() { base::Unretained(this), false /* force */)); pref_change_registrar_ = std::make_unique<PrefChangeRegistrar>(); pref_change_registrar_->Init(prefs_); - pref_change_registrar_->Add(prefs::kPowerAcIdleAction, callback); - pref_change_registrar_->Add(prefs::kPowerAcScreenDimDelayMs, callback); - pref_change_registrar_->Add(prefs::kPowerAcScreenOffDelayMs, callback); - pref_change_registrar_->Add(prefs::kPowerAcScreenLockDelayMs, callback); - pref_change_registrar_->Add(prefs::kPowerBatteryIdleAction, callback); - pref_change_registrar_->Add(prefs::kPowerBatteryScreenDimDelayMs, callback); - pref_change_registrar_->Add(prefs::kPowerBatteryScreenOffDelayMs, callback); - pref_change_registrar_->Add(prefs::kPowerBatteryScreenLockDelayMs, callback); - pref_change_registrar_->Add(prefs::kPowerLidClosedAction, callback); + pref_change_registrar_->Add(ash::prefs::kPowerAcIdleAction, callback); + pref_change_registrar_->Add(ash::prefs::kPowerAcScreenDimDelayMs, callback); + pref_change_registrar_->Add(ash::prefs::kPowerAcScreenOffDelayMs, callback); + pref_change_registrar_->Add(ash::prefs::kPowerAcScreenLockDelayMs, callback); + pref_change_registrar_->Add(ash::prefs::kPowerBatteryIdleAction, callback); + pref_change_registrar_->Add(ash::prefs::kPowerBatteryScreenDimDelayMs, + callback); + pref_change_registrar_->Add(ash::prefs::kPowerBatteryScreenOffDelayMs, + callback); + pref_change_registrar_->Add(ash::prefs::kPowerBatteryScreenLockDelayMs, + callback); + pref_change_registrar_->Add(ash::prefs::kPowerLidClosedAction, callback); } void PowerHandler::OnJavascriptDisallowed() { @@ -183,42 +188,42 @@ void PowerHandler::HandleSetIdleBehavior(const base::ListValue* args) { case IdleBehavior::DISPLAY_OFF_SLEEP: // The default behavior is to turn the display off and sleep. Clear the // prefs so we use the default delays. - prefs_->ClearPref(prefs::kPowerAcIdleAction); - prefs_->ClearPref(prefs::kPowerAcScreenDimDelayMs); - prefs_->ClearPref(prefs::kPowerAcScreenOffDelayMs); - prefs_->ClearPref(prefs::kPowerAcScreenLockDelayMs); - prefs_->ClearPref(prefs::kPowerBatteryIdleAction); - prefs_->ClearPref(prefs::kPowerBatteryScreenDimDelayMs); - prefs_->ClearPref(prefs::kPowerBatteryScreenOffDelayMs); - prefs_->ClearPref(prefs::kPowerBatteryScreenLockDelayMs); + prefs_->ClearPref(ash::prefs::kPowerAcIdleAction); + prefs_->ClearPref(ash::prefs::kPowerAcScreenDimDelayMs); + prefs_->ClearPref(ash::prefs::kPowerAcScreenOffDelayMs); + prefs_->ClearPref(ash::prefs::kPowerAcScreenLockDelayMs); + prefs_->ClearPref(ash::prefs::kPowerBatteryIdleAction); + prefs_->ClearPref(ash::prefs::kPowerBatteryScreenDimDelayMs); + prefs_->ClearPref(ash::prefs::kPowerBatteryScreenOffDelayMs); + prefs_->ClearPref(ash::prefs::kPowerBatteryScreenLockDelayMs); break; case IdleBehavior::DISPLAY_OFF: // Override idle actions to keep the system awake, but use the default // screen delays. - prefs_->SetInteger(prefs::kPowerAcIdleAction, + prefs_->SetInteger(ash::prefs::kPowerAcIdleAction, PowerPolicyController::ACTION_DO_NOTHING); - prefs_->ClearPref(prefs::kPowerAcScreenDimDelayMs); - prefs_->ClearPref(prefs::kPowerAcScreenOffDelayMs); - prefs_->ClearPref(prefs::kPowerAcScreenLockDelayMs); - prefs_->SetInteger(prefs::kPowerBatteryIdleAction, + prefs_->ClearPref(ash::prefs::kPowerAcScreenDimDelayMs); + prefs_->ClearPref(ash::prefs::kPowerAcScreenOffDelayMs); + prefs_->ClearPref(ash::prefs::kPowerAcScreenLockDelayMs); + prefs_->SetInteger(ash::prefs::kPowerBatteryIdleAction, PowerPolicyController::ACTION_DO_NOTHING); - prefs_->ClearPref(prefs::kPowerBatteryScreenDimDelayMs); - prefs_->ClearPref(prefs::kPowerBatteryScreenOffDelayMs); - prefs_->ClearPref(prefs::kPowerBatteryScreenLockDelayMs); + prefs_->ClearPref(ash::prefs::kPowerBatteryScreenDimDelayMs); + prefs_->ClearPref(ash::prefs::kPowerBatteryScreenOffDelayMs); + prefs_->ClearPref(ash::prefs::kPowerBatteryScreenLockDelayMs); break; case IdleBehavior::DISPLAY_ON: // Override idle actions and set screen delays to 0 in order to disable // them (i.e. keep the screen on). - prefs_->SetInteger(prefs::kPowerAcIdleAction, + prefs_->SetInteger(ash::prefs::kPowerAcIdleAction, PowerPolicyController::ACTION_DO_NOTHING); - prefs_->SetInteger(prefs::kPowerAcScreenDimDelayMs, 0); - prefs_->SetInteger(prefs::kPowerAcScreenOffDelayMs, 0); - prefs_->SetInteger(prefs::kPowerAcScreenLockDelayMs, 0); - prefs_->SetInteger(prefs::kPowerBatteryIdleAction, + prefs_->SetInteger(ash::prefs::kPowerAcScreenDimDelayMs, 0); + prefs_->SetInteger(ash::prefs::kPowerAcScreenOffDelayMs, 0); + prefs_->SetInteger(ash::prefs::kPowerAcScreenLockDelayMs, 0); + prefs_->SetInteger(ash::prefs::kPowerBatteryIdleAction, PowerPolicyController::ACTION_DO_NOTHING); - prefs_->SetInteger(prefs::kPowerBatteryScreenDimDelayMs, 0); - prefs_->SetInteger(prefs::kPowerBatteryScreenOffDelayMs, 0); - prefs_->SetInteger(prefs::kPowerBatteryScreenLockDelayMs, 0); + prefs_->SetInteger(ash::prefs::kPowerBatteryScreenDimDelayMs, 0); + prefs_->SetInteger(ash::prefs::kPowerBatteryScreenOffDelayMs, 0); + prefs_->SetInteger(ash::prefs::kPowerBatteryScreenLockDelayMs, 0); break; default: NOTREACHED() << "Invalid idle behavior " << value; @@ -232,10 +237,10 @@ void PowerHandler::HandleSetLidClosedBehavior(const base::ListValue* args) { CHECK(args->GetInteger(0, &value)); switch (static_cast<PowerPolicyController::Action>(value)) { case PowerPolicyController::ACTION_SUSPEND: - prefs_->ClearPref(prefs::kPowerLidClosedAction); + prefs_->ClearPref(ash::prefs::kPowerLidClosedAction); break; case PowerPolicyController::ACTION_DO_NOTHING: - prefs_->SetInteger(prefs::kPowerLidClosedAction, + prefs_->SetInteger(ash::prefs::kPowerLidClosedAction, PowerPolicyController::ACTION_DO_NOTHING); break; default: @@ -300,31 +305,32 @@ void PowerHandler::SendPowerManagementSettings(bool force) { // be able to display something meaningful in the UI in those cases anyway. const PowerPolicyController::Action idle_action = static_cast<PowerPolicyController::Action>( - prefs_->GetInteger(prefs::kPowerAcIdleAction)); + prefs_->GetInteger(ash::prefs::kPowerAcIdleAction)); IdleBehavior idle_behavior = IdleBehavior::OTHER; if (idle_action == PowerPolicyController::ACTION_SUSPEND) { idle_behavior = IdleBehavior::DISPLAY_OFF_SLEEP; } else if (idle_action == PowerPolicyController::ACTION_DO_NOTHING) { - idle_behavior = (prefs_->GetInteger(prefs::kPowerAcScreenOffDelayMs) > 0 - ? IdleBehavior::DISPLAY_OFF - : IdleBehavior::DISPLAY_ON); + idle_behavior = + (prefs_->GetInteger(ash::prefs::kPowerAcScreenOffDelayMs) > 0 + ? IdleBehavior::DISPLAY_OFF + : IdleBehavior::DISPLAY_ON); } const bool idle_controlled = - prefs_->IsManagedPreference(prefs::kPowerAcIdleAction) || - prefs_->IsManagedPreference(prefs::kPowerAcScreenDimDelayMs) || - prefs_->IsManagedPreference(prefs::kPowerAcScreenOffDelayMs) || - prefs_->IsManagedPreference(prefs::kPowerAcScreenLockDelayMs) || - prefs_->IsManagedPreference(prefs::kPowerBatteryIdleAction) || - prefs_->IsManagedPreference(prefs::kPowerBatteryScreenDimDelayMs) || - prefs_->IsManagedPreference(prefs::kPowerBatteryScreenOffDelayMs) || - prefs_->IsManagedPreference(prefs::kPowerBatteryScreenLockDelayMs); + prefs_->IsManagedPreference(ash::prefs::kPowerAcIdleAction) || + prefs_->IsManagedPreference(ash::prefs::kPowerAcScreenDimDelayMs) || + prefs_->IsManagedPreference(ash::prefs::kPowerAcScreenOffDelayMs) || + prefs_->IsManagedPreference(ash::prefs::kPowerAcScreenLockDelayMs) || + prefs_->IsManagedPreference(ash::prefs::kPowerBatteryIdleAction) || + prefs_->IsManagedPreference(ash::prefs::kPowerBatteryScreenDimDelayMs) || + prefs_->IsManagedPreference(ash::prefs::kPowerBatteryScreenOffDelayMs) || + prefs_->IsManagedPreference(ash::prefs::kPowerBatteryScreenLockDelayMs); const PowerPolicyController::Action lid_closed_behavior = static_cast<PowerPolicyController::Action>( - prefs_->GetInteger(prefs::kPowerLidClosedAction)); + prefs_->GetInteger(ash::prefs::kPowerLidClosedAction)); const bool lid_closed_controlled = - prefs_->IsManagedPreference(prefs::kPowerLidClosedAction); + prefs_->IsManagedPreference(ash::prefs::kPowerLidClosedAction); const bool has_lid = lid_state_ != PowerManagerClient::LidState::NOT_PRESENT; // Don't notify the UI if nothing changed. diff --git a/chromium/chrome/browser/ui/webui/settings/chromeos/device_power_handler_unittest.cc b/chromium/chrome/browser/ui/webui/settings/chromeos/device_power_handler_browsertest.cc index 149c2b74fd1..edfc117d906 100644 --- a/chromium/chrome/browser/ui/webui/settings/chromeos/device_power_handler_unittest.cc +++ b/chromium/chrome/browser/ui/webui/settings/chromeos/device_power_handler_browsertest.cc @@ -5,25 +5,40 @@ #include "chrome/browser/ui/webui/settings/chromeos/device_power_handler.h" #include <memory> +#include <utility> -#include "ash/system/power/power_status.h" +#include "ash/public/cpp/ash_pref_names.h" #include "base/json/json_writer.h" #include "base/macros.h" #include "base/run_loop.h" -#include "base/test/scoped_task_environment.h" #include "base/values.h" -#include "chrome/browser/chromeos/power/power_prefs.h" -#include "chrome/common/pref_names.h" +#include "chrome/browser/profiles/profile_manager.h" +#include "chrome/test/base/in_process_browser_test.h" #include "chromeos/dbus/dbus_thread_manager.h" #include "chromeos/dbus/fake_power_manager_client.h" #include "chromeos/dbus/power_policy_controller.h" -#include "components/sync_preferences/testing_pref_service_syncable.h" +#include "components/policy/core/browser/browser_policy_connector.h" +#include "components/policy/core/common/mock_configuration_policy_provider.h" +#include "components/policy/policy_constants.h" +#include "components/prefs/pref_service.h" #include "content/public/test/test_web_ui.h" +#include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" +using testing::Return; +using testing::_; + namespace chromeos { namespace settings { +namespace { + +PrefService* GetPrefs() { + return ProfileManager::GetActiveUserProfile()->GetPrefs(); +} + +} // namespace + class TestPowerHandler : public PowerHandler { public: explicit TestPowerHandler(PrefService* prefs) : PowerHandler(prefs) {} @@ -32,21 +47,24 @@ class TestPowerHandler : public PowerHandler { using PowerHandler::set_web_ui; }; -class PowerHandlerTest : public testing::Test { - public: - PowerHandlerTest() { - // This initializes chromeos::DBusThreadManager. - std::unique_ptr<chromeos::DBusThreadManagerSetter> dbus_setter = - chromeos::DBusThreadManager::GetSetterForTesting(); - dbus_setter->SetPowerManagerClient( - std::make_unique<chromeos::FakePowerManagerClient>()); - power_manager_client_ = static_cast<chromeos::FakePowerManagerClient*>( - chromeos::DBusThreadManager::Get()->GetPowerManagerClient()); - ash::PowerStatus::Initialize(); - - chromeos::PowerPrefs::RegisterUserProfilePrefs(prefs_.registry()); - - handler_ = std::make_unique<TestPowerHandler>(&prefs_); +class PowerHandlerTest : public InProcessBrowserTest { + protected: + PowerHandlerTest() = default; + ~PowerHandlerTest() override = default; + + // InProcessBrowserTest: + void SetUpInProcessBrowserTestFixture() override { + power_manager_client_ = new chromeos::FakePowerManagerClient; + chromeos::DBusThreadManager::GetSetterForTesting()->SetPowerManagerClient( + base::WrapUnique(power_manager_client_)); + + // Initialize user policy. + ON_CALL(provider_, IsInitializationComplete(_)).WillByDefault(Return(true)); + policy::BrowserPolicyConnector::SetPolicyProviderForTesting(&provider_); + } + + void SetUpOnMainThread() override { + handler_ = std::make_unique<TestPowerHandler>(GetPrefs()); test_api_ = std::make_unique<PowerHandler::TestAPI>(handler_.get()); handler_->set_web_ui(&web_ui_); handler_->RegisterMessages(); @@ -54,13 +72,11 @@ class PowerHandlerTest : public testing::Test { base::RunLoop().RunUntilIdle(); } - ~PowerHandlerTest() override { + void TearDownOnMainThread() override { + test_api_.reset(); handler_.reset(); - ash::PowerStatus::Shutdown(); - chromeos::DBusThreadManager::Shutdown(); } - protected: // Returns a JSON representation of the contents of the last message sent to // WebUI about settings being changed. std::string GetLastSettingsChangedMessage() WARN_UNUSED_RESULT { @@ -113,13 +129,21 @@ class PowerHandlerTest : public testing::Test { // Returns the user-set value of the integer pref identified by |name| or -1 // if the pref is unset. int GetIntPref(const std::string& name) { - const base::Value* value = prefs_.GetUserPref(name); - return value ? value->GetInt() : -1; + if (!GetPrefs()->HasPrefPath(name)) + return -1; + return GetPrefs()->GetInteger(name); } - base::test::ScopedTaskEnvironment scoped_task_environment_; - sync_preferences::TestingPrefServiceSyncable prefs_; - content::TestWebUI web_ui_; + // Sets a policy update which will cause power pref managed change. + void SetPolicyForPolicyKey(policy::PolicyMap* policy_map, + const std::string& policy_key, + std::unique_ptr<base::Value> value) { + policy_map->Set(policy_key, policy::POLICY_LEVEL_MANDATORY, + policy::POLICY_SCOPE_USER, policy::POLICY_SOURCE_CLOUD, + std::move(value), nullptr); + provider_.UpdateChromePolicy(*policy_map); + base::RunLoop().RunUntilIdle(); + } // Owned by chromeos::DBusThreadManager. chromeos::FakePowerManagerClient* power_manager_client_; @@ -127,12 +151,16 @@ class PowerHandlerTest : public testing::Test { std::unique_ptr<TestPowerHandler> handler_; std::unique_ptr<TestPowerHandler::TestAPI> test_api_; + content::TestWebUI web_ui_; + + policy::MockConfigurationPolicyProvider provider_; + private: DISALLOW_COPY_AND_ASSIGN(PowerHandlerTest); }; // Verifies that settings are sent to WebUI when requested. -TEST_F(PowerHandlerTest, SendInitialSettings) { +IN_PROC_BROWSER_TEST_F(PowerHandlerTest, SendInitialSettings) { test_api_->RequestPowerManagementSettings(); EXPECT_EQ( CreateSettingsChangedString( @@ -143,7 +171,7 @@ TEST_F(PowerHandlerTest, SendInitialSettings) { } // Verifies that WebUI receives updated settings when the lid state changes. -TEST_F(PowerHandlerTest, SendSettingsForLidStateChanges) { +IN_PROC_BROWSER_TEST_F(PowerHandlerTest, SendSettingsForLidStateChanges) { power_manager_client_->SetLidState(PowerManagerClient::LidState::NOT_PRESENT, base::TimeTicks()); EXPECT_EQ( @@ -165,10 +193,11 @@ TEST_F(PowerHandlerTest, SendSettingsForLidStateChanges) { // Verifies that when various prefs are controlled, the corresponding settings // are reported as controlled to WebUI. -TEST_F(PowerHandlerTest, SendSettingsForControlledPrefs) { +IN_PROC_BROWSER_TEST_F(PowerHandlerTest, SendSettingsForControlledPrefs) { + policy::PolicyMap policy_map; // Making an arbitrary delay pref managed should result in the idle setting // being reported as controlled. - prefs_.SetManagedPref(prefs::kPowerAcScreenDimDelayMs, + SetPolicyForPolicyKey(&policy_map, policy::key::kScreenDimDelayAC, std::make_unique<base::Value>(10000)); EXPECT_EQ( CreateSettingsChangedString( @@ -178,8 +207,8 @@ TEST_F(PowerHandlerTest, SendSettingsForControlledPrefs) { GetLastSettingsChangedMessage()); // Ditto for making the lid action pref managed. - prefs_.SetManagedPref( - prefs::kPowerLidClosedAction, + SetPolicyForPolicyKey( + &policy_map, policy::key::kLidCloseAction, std::make_unique<base::Value>(PowerPolicyController::ACTION_SUSPEND)); EXPECT_EQ( CreateSettingsChangedString( @@ -191,13 +220,11 @@ TEST_F(PowerHandlerTest, SendSettingsForControlledPrefs) { // Verifies that idle-related prefs are distilled into the proper WebUI // settings. -TEST_F(PowerHandlerTest, SendIdleSettingForPrefChanges) { +IN_PROC_BROWSER_TEST_F(PowerHandlerTest, SendIdleSettingForPrefChanges) { // Set a do-nothing idle action and a nonzero screen-off delay. - prefs_.SetUserPref( - prefs::kPowerAcIdleAction, - std::make_unique<base::Value>(PowerPolicyController::ACTION_DO_NOTHING)); - prefs_.SetUserPref(prefs::kPowerAcScreenOffDelayMs, - std::make_unique<base::Value>(10000)); + GetPrefs()->Set(ash::prefs::kPowerAcIdleAction, + base::Value(PowerPolicyController::ACTION_DO_NOTHING)); + GetPrefs()->Set(ash::prefs::kPowerAcScreenOffDelayMs, base::Value(10000)); EXPECT_EQ(CreateSettingsChangedString(PowerHandler::IdleBehavior::DISPLAY_OFF, false /* idle_controlled */, PowerPolicyController::ACTION_SUSPEND, @@ -206,8 +233,7 @@ TEST_F(PowerHandlerTest, SendIdleSettingForPrefChanges) { GetLastSettingsChangedMessage()); // Now set the delay to zero and check that the setting goes to "display on". - prefs_.SetUserPref(prefs::kPowerAcScreenOffDelayMs, - std::make_unique<base::Value>(0)); + GetPrefs()->Set(ash::prefs::kPowerAcScreenOffDelayMs, base::Value(0)); EXPECT_EQ(CreateSettingsChangedString(PowerHandler::IdleBehavior::DISPLAY_ON, false /* idle_controlled */, PowerPolicyController::ACTION_SUSPEND, @@ -216,9 +242,8 @@ TEST_F(PowerHandlerTest, SendIdleSettingForPrefChanges) { GetLastSettingsChangedMessage()); // Other idle actions should result in an "other" setting. - prefs_.SetUserPref(prefs::kPowerAcIdleAction, - std::make_unique<base::Value>( - PowerPolicyController::ACTION_STOP_SESSION)); + GetPrefs()->Set(ash::prefs::kPowerAcIdleAction, + base::Value(PowerPolicyController::ACTION_STOP_SESSION)); EXPECT_EQ(CreateSettingsChangedString( PowerHandler::IdleBehavior::OTHER, false /* idle_controlled */, PowerPolicyController::ACTION_SUSPEND, @@ -227,10 +252,9 @@ TEST_F(PowerHandlerTest, SendIdleSettingForPrefChanges) { } // Verifies that the lid-closed pref's value is sent directly to WebUI. -TEST_F(PowerHandlerTest, SendLidSettingForPrefChanges) { - prefs_.SetUserPref( - prefs::kPowerLidClosedAction, - std::make_unique<base::Value>(PowerPolicyController::ACTION_SHUT_DOWN)); +IN_PROC_BROWSER_TEST_F(PowerHandlerTest, SendLidSettingForPrefChanges) { + GetPrefs()->Set(ash::prefs::kPowerLidClosedAction, + base::Value(PowerPolicyController::ACTION_SHUT_DOWN)); EXPECT_EQ( CreateSettingsChangedString( PowerHandler::IdleBehavior::DISPLAY_OFF_SLEEP, @@ -238,9 +262,8 @@ TEST_F(PowerHandlerTest, SendLidSettingForPrefChanges) { false /* lid_closed_controlled */, true /* has_lid */), GetLastSettingsChangedMessage()); - prefs_.SetUserPref(prefs::kPowerLidClosedAction, - std::make_unique<base::Value>( - PowerPolicyController::ACTION_STOP_SESSION)); + GetPrefs()->Set(ash::prefs::kPowerLidClosedAction, + base::Value(PowerPolicyController::ACTION_STOP_SESSION)); EXPECT_EQ(CreateSettingsChangedString( PowerHandler::IdleBehavior::DISPLAY_OFF_SLEEP, false /* idle_controlled */, @@ -251,59 +274,59 @@ TEST_F(PowerHandlerTest, SendLidSettingForPrefChanges) { // Verifies that requests from WebUI to update the idle behavior update prefs // appropriately. -TEST_F(PowerHandlerTest, SetIdleBehavior) { +IN_PROC_BROWSER_TEST_F(PowerHandlerTest, SetIdleBehavior) { // Request the "Keep display on" setting and check that prefs are set // appropriately. test_api_->SetIdleBehavior(PowerHandler::IdleBehavior::DISPLAY_ON); EXPECT_EQ(PowerPolicyController::ACTION_DO_NOTHING, - GetIntPref(prefs::kPowerAcIdleAction)); - EXPECT_EQ(0, GetIntPref(prefs::kPowerAcScreenDimDelayMs)); - EXPECT_EQ(0, GetIntPref(prefs::kPowerAcScreenOffDelayMs)); - EXPECT_EQ(0, GetIntPref(prefs::kPowerAcScreenLockDelayMs)); + GetIntPref(ash::prefs::kPowerAcIdleAction)); + EXPECT_EQ(0, GetIntPref(ash::prefs::kPowerAcScreenDimDelayMs)); + EXPECT_EQ(0, GetIntPref(ash::prefs::kPowerAcScreenOffDelayMs)); + EXPECT_EQ(0, GetIntPref(ash::prefs::kPowerAcScreenLockDelayMs)); EXPECT_EQ(PowerPolicyController::ACTION_DO_NOTHING, - GetIntPref(prefs::kPowerBatteryIdleAction)); - EXPECT_EQ(0, GetIntPref(prefs::kPowerBatteryScreenDimDelayMs)); - EXPECT_EQ(0, GetIntPref(prefs::kPowerBatteryScreenOffDelayMs)); - EXPECT_EQ(0, GetIntPref(prefs::kPowerBatteryScreenLockDelayMs)); + GetIntPref(ash::prefs::kPowerBatteryIdleAction)); + EXPECT_EQ(0, GetIntPref(ash::prefs::kPowerBatteryScreenDimDelayMs)); + EXPECT_EQ(0, GetIntPref(ash::prefs::kPowerBatteryScreenOffDelayMs)); + EXPECT_EQ(0, GetIntPref(ash::prefs::kPowerBatteryScreenLockDelayMs)); // "Turn off display" should set the idle prefs but clear the screen // delays. test_api_->SetIdleBehavior(PowerHandler::IdleBehavior::DISPLAY_OFF); EXPECT_EQ(PowerPolicyController::ACTION_DO_NOTHING, - GetIntPref(prefs::kPowerAcIdleAction)); - EXPECT_EQ(-1, GetIntPref(prefs::kPowerAcScreenDimDelayMs)); - EXPECT_EQ(-1, GetIntPref(prefs::kPowerAcScreenOffDelayMs)); - EXPECT_EQ(-1, GetIntPref(prefs::kPowerAcScreenLockDelayMs)); + GetIntPref(ash::prefs::kPowerAcIdleAction)); + EXPECT_EQ(-1, GetIntPref(ash::prefs::kPowerAcScreenDimDelayMs)); + EXPECT_EQ(-1, GetIntPref(ash::prefs::kPowerAcScreenOffDelayMs)); + EXPECT_EQ(-1, GetIntPref(ash::prefs::kPowerAcScreenLockDelayMs)); EXPECT_EQ(PowerPolicyController::ACTION_DO_NOTHING, - GetIntPref(prefs::kPowerBatteryIdleAction)); - EXPECT_EQ(-1, GetIntPref(prefs::kPowerBatteryScreenDimDelayMs)); - EXPECT_EQ(-1, GetIntPref(prefs::kPowerBatteryScreenOffDelayMs)); - EXPECT_EQ(-1, GetIntPref(prefs::kPowerBatteryScreenLockDelayMs)); + GetIntPref(ash::prefs::kPowerBatteryIdleAction)); + EXPECT_EQ(-1, GetIntPref(ash::prefs::kPowerBatteryScreenDimDelayMs)); + EXPECT_EQ(-1, GetIntPref(ash::prefs::kPowerBatteryScreenOffDelayMs)); + EXPECT_EQ(-1, GetIntPref(ash::prefs::kPowerBatteryScreenLockDelayMs)); // Now switch to the "Keep display on" setting (to set the prefs again) and // check that the "Turn off display and sleep" setting clears all the prefs. test_api_->SetIdleBehavior(PowerHandler::IdleBehavior::DISPLAY_ON); test_api_->SetIdleBehavior(PowerHandler::IdleBehavior::DISPLAY_OFF_SLEEP); - EXPECT_EQ(-1, GetIntPref(prefs::kPowerAcIdleAction)); - EXPECT_EQ(-1, GetIntPref(prefs::kPowerAcScreenDimDelayMs)); - EXPECT_EQ(-1, GetIntPref(prefs::kPowerAcScreenOffDelayMs)); - EXPECT_EQ(-1, GetIntPref(prefs::kPowerAcScreenLockDelayMs)); - EXPECT_EQ(-1, GetIntPref(prefs::kPowerBatteryIdleAction)); - EXPECT_EQ(-1, GetIntPref(prefs::kPowerBatteryScreenDimDelayMs)); - EXPECT_EQ(-1, GetIntPref(prefs::kPowerBatteryScreenOffDelayMs)); - EXPECT_EQ(-1, GetIntPref(prefs::kPowerBatteryScreenLockDelayMs)); + EXPECT_EQ(-1, GetIntPref(ash::prefs::kPowerAcIdleAction)); + EXPECT_EQ(-1, GetIntPref(ash::prefs::kPowerAcScreenDimDelayMs)); + EXPECT_EQ(-1, GetIntPref(ash::prefs::kPowerAcScreenOffDelayMs)); + EXPECT_EQ(-1, GetIntPref(ash::prefs::kPowerAcScreenLockDelayMs)); + EXPECT_EQ(-1, GetIntPref(ash::prefs::kPowerBatteryIdleAction)); + EXPECT_EQ(-1, GetIntPref(ash::prefs::kPowerBatteryScreenDimDelayMs)); + EXPECT_EQ(-1, GetIntPref(ash::prefs::kPowerBatteryScreenOffDelayMs)); + EXPECT_EQ(-1, GetIntPref(ash::prefs::kPowerBatteryScreenLockDelayMs)); } // Verifies that requests from WebUI to change the lid behavior update the pref. -TEST_F(PowerHandlerTest, SetLidBehavior) { +IN_PROC_BROWSER_TEST_F(PowerHandlerTest, SetLidBehavior) { // The "do nothing" setting should update the pref. test_api_->SetLidClosedBehavior(PowerPolicyController::ACTION_DO_NOTHING); EXPECT_EQ(PowerPolicyController::ACTION_DO_NOTHING, - GetIntPref(prefs::kPowerLidClosedAction)); + GetIntPref(ash::prefs::kPowerLidClosedAction)); // Selecting the "suspend" setting should just clear the pref. test_api_->SetLidClosedBehavior(PowerPolicyController::ACTION_SUSPEND); - EXPECT_EQ(-1, GetIntPref(prefs::kPowerLidClosedAction)); + EXPECT_EQ(-1, GetIntPref(ash::prefs::kPowerLidClosedAction)); } } // namespace settings 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 4ff2b1c8713..04fe8449120 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 @@ -84,20 +84,19 @@ void StorageHandler::RegisterMessages() { web_ui()->RegisterMessageCallback( "updateStorageInfo", - base::Bind(&StorageHandler::HandleUpdateStorageInfo, - base::Unretained(this))); + base::BindRepeating(&StorageHandler::HandleUpdateStorageInfo, + base::Unretained(this))); web_ui()->RegisterMessageCallback( - "openDownloads", - base::Bind(&StorageHandler::HandleOpenDownloads, - base::Unretained(this))); + "openDownloads", base::BindRepeating(&StorageHandler::HandleOpenDownloads, + base::Unretained(this))); web_ui()->RegisterMessageCallback( "openArcStorage", - base::Bind(&StorageHandler::HandleOpenArcStorage, - base::Unretained(this))); + base::BindRepeating(&StorageHandler::HandleOpenArcStorage, + base::Unretained(this))); web_ui()->RegisterMessageCallback( "clearDriveCache", - base::Bind(&StorageHandler::HandleClearDriveCache, - base::Unretained(this))); + base::BindRepeating(&StorageHandler::HandleClearDriveCache, + base::Unretained(this))); } void StorageHandler::HandleUpdateStorageInfo(const base::ListValue* args) { diff --git a/chromium/chrome/browser/ui/webui/settings/chromeos/device_stylus_handler.cc b/chromium/chrome/browser/ui/webui/settings/chromeos/device_stylus_handler.cc index 61283919498..e2891671dcb 100644 --- a/chromium/chrome/browser/ui/webui/settings/chromeos/device_stylus_handler.cc +++ b/chromium/chrome/browser/ui/webui/settings/chromeos/device_stylus_handler.cc @@ -40,22 +40,25 @@ void StylusHandler::RegisterMessages() { // added. web_ui()->RegisterMessageCallback( "initializeStylusSettings", - base::Bind(&StylusHandler::HandleInitialize, base::Unretained(this))); + base::BindRepeating(&StylusHandler::HandleInitialize, + base::Unretained(this))); web_ui()->RegisterMessageCallback( "requestNoteTakingApps", - base::Bind(&StylusHandler::HandleRequestApps, base::Unretained(this))); + base::BindRepeating(&StylusHandler::HandleRequestApps, + base::Unretained(this))); web_ui()->RegisterMessageCallback( "setPreferredNoteTakingApp", - base::Bind(&StylusHandler::HandleSetPreferredNoteTakingApp, - base::Unretained(this))); + base::BindRepeating(&StylusHandler::HandleSetPreferredNoteTakingApp, + base::Unretained(this))); web_ui()->RegisterMessageCallback( "setPreferredNoteTakingAppEnabledOnLockScreen", - base::Bind( + base::BindRepeating( &StylusHandler::HandleSetPreferredNoteTakingAppEnabledOnLockScreen, base::Unretained(this))); web_ui()->RegisterMessageCallback( - "showPlayStoreApps", base::Bind(&StylusHandler::HandleShowPlayStoreApps, - base::Unretained(this))); + "showPlayStoreApps", + base::BindRepeating(&StylusHandler::HandleShowPlayStoreApps, + base::Unretained(this))); } void StylusHandler::OnJavascriptAllowed() { diff --git a/chromium/chrome/browser/ui/webui/settings/chromeos/easy_unlock_settings_handler.cc b/chromium/chrome/browser/ui/webui/settings/chromeos/easy_unlock_settings_handler.cc index d19dc511e04..2735420c270 100644 --- a/chromium/chrome/browser/ui/webui/settings/chromeos/easy_unlock_settings_handler.cc +++ b/chromium/chrome/browser/ui/webui/settings/chromeos/easy_unlock_settings_handler.cc @@ -10,10 +10,10 @@ #include "base/command_line.h" #include "base/macros.h" #include "base/values.h" +#include "chrome/browser/chromeos/login/easy_unlock/easy_unlock_service.h" #include "chrome/browser/profiles/profile.h" -#include "chrome/browser/signin/easy_unlock_service.h" #include "chrome/common/pref_names.h" -#include "components/proximity_auth/switches.h" +#include "chromeos/components/proximity_auth/switches.h" #include "content/public/browser/web_ui.h" #include "content/public/browser/web_ui_data_source.h" @@ -50,24 +50,25 @@ EasyUnlockSettingsHandler* EasyUnlockSettingsHandler::Create( void EasyUnlockSettingsHandler::RegisterMessages() { web_ui()->RegisterMessageCallback( "easyUnlockGetEnabledStatus", - base::Bind(&EasyUnlockSettingsHandler::HandleGetEnabledStatus, - base::Unretained(this))); + base::BindRepeating(&EasyUnlockSettingsHandler::HandleGetEnabledStatus, + base::Unretained(this))); web_ui()->RegisterMessageCallback( "easyUnlockStartTurnOnFlow", - base::Bind(&EasyUnlockSettingsHandler::HandleStartTurnOnFlow, - base::Unretained(this))); + base::BindRepeating(&EasyUnlockSettingsHandler::HandleStartTurnOnFlow, + base::Unretained(this))); web_ui()->RegisterMessageCallback( "easyUnlockGetTurnOffFlowStatus", - base::Bind(&EasyUnlockSettingsHandler::HandleGetTurnOffFlowStatus, - base::Unretained(this))); + base::BindRepeating( + &EasyUnlockSettingsHandler::HandleGetTurnOffFlowStatus, + base::Unretained(this))); web_ui()->RegisterMessageCallback( "easyUnlockStartTurnOffFlow", - base::Bind(&EasyUnlockSettingsHandler::HandleStartTurnOffFlow, - base::Unretained(this))); + base::BindRepeating(&EasyUnlockSettingsHandler::HandleStartTurnOffFlow, + base::Unretained(this))); web_ui()->RegisterMessageCallback( "easyUnlockCancelTurnOffFlow", - base::Bind(&EasyUnlockSettingsHandler::HandleCancelTurnOffFlow, - base::Unretained(this))); + base::BindRepeating(&EasyUnlockSettingsHandler::HandleCancelTurnOffFlow, + base::Unretained(this))); } void EasyUnlockSettingsHandler::OnJavascriptAllowed() { diff --git a/chromium/chrome/browser/ui/webui/settings/chromeos/easy_unlock_settings_handler.h b/chromium/chrome/browser/ui/webui/settings/chromeos/easy_unlock_settings_handler.h index 3fb3706c524..e4509d75036 100644 --- a/chromium/chrome/browser/ui/webui/settings/chromeos/easy_unlock_settings_handler.h +++ b/chromium/chrome/browser/ui/webui/settings/chromeos/easy_unlock_settings_handler.h @@ -6,7 +6,7 @@ #define CHROME_BROWSER_UI_WEBUI_SETTINGS_CHROMEOS_EASY_UNLOCK_SETTINGS_HANDLER_H_ #include "base/macros.h" -#include "chrome/browser/signin/easy_unlock_service_observer.h" +#include "chrome/browser/chromeos/login/easy_unlock/easy_unlock_service_observer.h" #include "chrome/browser/ui/webui/settings/settings_page_ui_handler.h" #include "components/prefs/pref_change_registrar.h" 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 862267270ce..ea6babfcfad 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 @@ -6,8 +6,8 @@ #include <memory> -#include "chrome/browser/signin/easy_unlock_service.h" -#include "chrome/browser/signin/easy_unlock_service_factory.h" +#include "chrome/browser/chromeos/login/easy_unlock/easy_unlock_service.h" +#include "chrome/browser/chromeos/login/easy_unlock/easy_unlock_service_factory.h" #include "chrome/test/base/testing_profile.h" #include "content/public/browser/web_ui_data_source.h" #include "content/public/test/test_browser_thread_bundle.h" @@ -56,10 +56,6 @@ class FakeEasyUnlockService : public EasyUnlockService { Type GetType() const override { return TYPE_REGULAR; } AccountId GetAccountId() const override { return EmptyAccountId(); } void LaunchSetup() override {} - const base::DictionaryValue* GetPermitAccess() const override { - return nullptr; - } - void SetPermitAccess(const base::DictionaryValue& permit) override {} void ClearPermitAccess() override {} const base::ListValue* GetRemoteDevices() const override { return nullptr; } @@ -71,8 +67,6 @@ class FakeEasyUnlockService : public EasyUnlockService { void RecordEasySignInOutcome(const AccountId& account_id, bool success) const override {} void RecordPasswordLoginEvent(const AccountId& account_id) const override {} - void StartAutoPairing(const AutoPairingResultCallback& callback) override {} - void SetAutoPairingResult(bool success, const std::string& error) override {} void InitializeInternal() override {} void ShutdownInternal() override {} diff --git a/chromium/chrome/browser/ui/webui/settings/chromeos/fingerprint_handler.cc b/chromium/chrome/browser/ui/webui/settings/chromeos/fingerprint_handler.cc index a97d004c949..bd4ef59c956 100644 --- a/chromium/chrome/browser/ui/webui/settings/chromeos/fingerprint_handler.cc +++ b/chromium/chrome/browser/ui/webui/settings/chromeos/fingerprint_handler.cc @@ -72,40 +72,39 @@ void FingerprintHandler::RegisterMessages() { // Note: getFingerprintsList must be called before observers will be added. web_ui()->RegisterMessageCallback( "getFingerprintsList", - base::Bind(&FingerprintHandler::HandleGetFingerprintsList, - base::Unretained(this))); + base::BindRepeating(&FingerprintHandler::HandleGetFingerprintsList, + base::Unretained(this))); web_ui()->RegisterMessageCallback( "getNumFingerprints", - base::Bind(&FingerprintHandler::HandleGetNumFingerprints, - base::Unretained(this))); + base::BindRepeating(&FingerprintHandler::HandleGetNumFingerprints, + base::Unretained(this))); web_ui()->RegisterMessageCallback( - "startEnroll", - base::Bind(&FingerprintHandler::HandleStartEnroll, - base::Unretained(this))); + "startEnroll", base::BindRepeating(&FingerprintHandler::HandleStartEnroll, + base::Unretained(this))); web_ui()->RegisterMessageCallback( "cancelCurrentEnroll", - base::Bind(&FingerprintHandler::HandleCancelCurrentEnroll, - base::Unretained(this))); + base::BindRepeating(&FingerprintHandler::HandleCancelCurrentEnroll, + base::Unretained(this))); web_ui()->RegisterMessageCallback( "getEnrollmentLabel", - base::Bind(&FingerprintHandler::HandleGetEnrollmentLabel, - base::Unretained(this))); + base::BindRepeating(&FingerprintHandler::HandleGetEnrollmentLabel, + base::Unretained(this))); web_ui()->RegisterMessageCallback( "removeEnrollment", - base::Bind(&FingerprintHandler::HandleRemoveEnrollment, - base::Unretained(this))); + base::BindRepeating(&FingerprintHandler::HandleRemoveEnrollment, + base::Unretained(this))); web_ui()->RegisterMessageCallback( "changeEnrollmentLabel", - base::Bind(&FingerprintHandler::HandleChangeEnrollmentLabel, - base::Unretained(this))); + base::BindRepeating(&FingerprintHandler::HandleChangeEnrollmentLabel, + base::Unretained(this))); web_ui()->RegisterMessageCallback( "startAuthentication", - base::Bind(&FingerprintHandler::HandleStartAuthentication, - base::Unretained(this))); + base::BindRepeating(&FingerprintHandler::HandleStartAuthentication, + base::Unretained(this))); web_ui()->RegisterMessageCallback( "endCurrentAuthentication", - base::Bind(&FingerprintHandler::HandleEndCurrentAuthentication, - base::Unretained(this))); + base::BindRepeating(&FingerprintHandler::HandleEndCurrentAuthentication, + base::Unretained(this))); } void FingerprintHandler::OnJavascriptAllowed() { diff --git a/chromium/chrome/browser/ui/webui/settings/chromeos/google_assistant_handler.cc b/chromium/chrome/browser/ui/webui/settings/chromeos/google_assistant_handler.cc index a6ddb49d02e..f9263067b4a 100644 --- a/chromium/chrome/browser/ui/webui/settings/chromeos/google_assistant_handler.cc +++ b/chromium/chrome/browser/ui/webui/settings/chromeos/google_assistant_handler.cc @@ -27,21 +27,23 @@ void GoogleAssistantHandler::OnJavascriptDisallowed() {} void GoogleAssistantHandler::RegisterMessages() { web_ui()->RegisterMessageCallback( "setGoogleAssistantEnabled", - base::Bind(&GoogleAssistantHandler::HandleSetGoogleAssistantEnabled, - base::Unretained(this))); + base::BindRepeating( + &GoogleAssistantHandler::HandleSetGoogleAssistantEnabled, + base::Unretained(this))); web_ui()->RegisterMessageCallback( "setGoogleAssistantContextEnabled", - base::Bind( + base::BindRepeating( &GoogleAssistantHandler::HandleSetGoogleAssistantContextEnabled, base::Unretained(this))); web_ui()->RegisterMessageCallback( "showGoogleAssistantSettings", - base::Bind(&GoogleAssistantHandler::HandleShowGoogleAssistantSettings, - base::Unretained(this))); + base::BindRepeating( + &GoogleAssistantHandler::HandleShowGoogleAssistantSettings, + base::Unretained(this))); web_ui()->RegisterMessageCallback( "turnOnGoogleAssistant", - base::Bind(&GoogleAssistantHandler::HandleTurnOnGoogleAssistant, - base::Unretained(this))); + base::BindRepeating(&GoogleAssistantHandler::HandleTurnOnGoogleAssistant, + base::Unretained(this))); } void GoogleAssistantHandler::HandleSetGoogleAssistantEnabled( 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 38e54c5a8e3..8367559e562 100644 --- a/chromium/chrome/browser/ui/webui/settings/chromeos/internet_handler.cc +++ b/chromium/chrome/browser/ui/webui/settings/chromeos/internet_handler.cc @@ -96,18 +96,19 @@ void InternetHandler::RegisterMessages() { // TODO(stevenjb): Eliminate once network configuration UI is integrated // into settings. web_ui()->RegisterMessageCallback( - kAddNetworkMessage, - base::Bind(&InternetHandler::AddNetwork, base::Unretained(this))); + kAddNetworkMessage, base::BindRepeating(&InternetHandler::AddNetwork, + base::Unretained(this))); web_ui()->RegisterMessageCallback( kConfigureNetworkMessage, - base::Bind(&InternetHandler::ConfigureNetwork, base::Unretained(this))); + base::BindRepeating(&InternetHandler::ConfigureNetwork, + base::Unretained(this))); web_ui()->RegisterMessageCallback( kRequestArcVpnProviders, - base::Bind(&InternetHandler::RequestArcVpnProviders, - base::Unretained(this))); + base::BindRepeating(&InternetHandler::RequestArcVpnProviders, + base::Unretained(this))); web_ui()->RegisterMessageCallback( kRequestGmsCoreNotificationsDisabledDeviceNames, - base::Bind( + base::BindRepeating( &InternetHandler::RequestGmsCoreNotificationsDisabledDeviceNames, base::Unretained(this))); } diff --git a/chromium/chrome/browser/ui/webui/settings/chromeos/smb_handler.cc b/chromium/chrome/browser/ui/webui/settings/chromeos/smb_handler.cc new file mode 100644 index 00000000000..5c6c73a6477 --- /dev/null +++ b/chromium/chrome/browser/ui/webui/settings/chromeos/smb_handler.cc @@ -0,0 +1,52 @@ +// 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/smb_handler.h" + +#include <string> +#include <utility> + +#include "base/bind.h" +#include "base/values.h" +#include "chrome/browser/chromeos/file_system_provider/provided_file_system_info.h" +#include "chrome/browser/chromeos/smb_client/smb_service.h" +#include "chrome/browser/profiles/profile.h" + +namespace { +void DoNothingCallback(base::File::Error error) { + return; +} +} // namespace + +namespace chromeos { +namespace settings { + +SmbHandler::SmbHandler(Profile* profile) : profile_(profile) {} + +SmbHandler::~SmbHandler() = default; + +void SmbHandler::RegisterMessages() { + web_ui()->RegisterMessageCallback( + "smbMount", + base::BindRepeating(&SmbHandler::HandleSmbMount, base::Unretained(this))); +} + +void SmbHandler::HandleSmbMount(const base::ListValue* args) { + CHECK_EQ(1U, args->GetSize()); + std::string mountUrl; + CHECK(args->GetString(0, &mountUrl)); + + chromeos::smb_client::SmbService* const service = + chromeos::smb_client::SmbService::Get(profile_); + + chromeos::file_system_provider::MountOptions mo; + mo.display_name = mountUrl; + mo.writable = true; + + service->Mount(mo, base::FilePath(mountUrl), + base::BindOnce(&DoNothingCallback)); +} + +} // namespace settings +} // namespace chromeos diff --git a/chromium/chrome/browser/ui/webui/settings/chromeos/smb_handler.h b/chromium/chrome/browser/ui/webui/settings/chromeos/smb_handler.h new file mode 100644 index 00000000000..fc7e14637c4 --- /dev/null +++ b/chromium/chrome/browser/ui/webui/settings/chromeos/smb_handler.h @@ -0,0 +1,37 @@ +// 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_SMB_HANDLER_H_ +#define CHROME_BROWSER_UI_WEBUI_SETTINGS_CHROMEOS_SMB_HANDLER_H_ + +#include "base/macros.h" +#include "chrome/browser/ui/webui/settings/settings_page_ui_handler.h" + +class Profile; + +namespace chromeos { +namespace settings { + +class SmbHandler : public ::settings::SettingsPageUIHandler { + public: + explicit SmbHandler(Profile* profile); + ~SmbHandler() override; + + void RegisterMessages() override; + void OnJavascriptAllowed() override {} + void OnJavascriptDisallowed() override {} + + private: + // WebUI call to mount an Smb Filesystem. + void HandleSmbMount(const base::ListValue* args); + + Profile* const profile_; + + DISALLOW_COPY_AND_ASSIGN(SmbHandler); +}; + +} // namespace settings +} // namespace chromeos + +#endif // CHROME_BROWSER_UI_WEBUI_SETTINGS_CHROMEOS_SMB_HANDLER_H_ diff --git a/chromium/chrome/browser/ui/webui/settings/downloads_handler.cc b/chromium/chrome/browser/ui/webui/settings/downloads_handler.cc index b5ab983a438..4e45994d152 100644 --- a/chromium/chrome/browser/ui/webui/settings/downloads_handler.cc +++ b/chromium/chrome/browser/ui/webui/settings/downloads_handler.cc @@ -34,15 +34,16 @@ DownloadsHandler::~DownloadsHandler() { void DownloadsHandler::RegisterMessages() { web_ui()->RegisterMessageCallback( "initializeDownloads", - base::Bind(&DownloadsHandler::HandleInitialize, base::Unretained(this))); + base::BindRepeating(&DownloadsHandler::HandleInitialize, + base::Unretained(this))); web_ui()->RegisterMessageCallback( "resetAutoOpenFileTypes", - base::Bind(&DownloadsHandler::HandleResetAutoOpenFileTypes, - base::Unretained(this))); + base::BindRepeating(&DownloadsHandler::HandleResetAutoOpenFileTypes, + base::Unretained(this))); web_ui()->RegisterMessageCallback( "selectDownloadLocation", - base::Bind(&DownloadsHandler::HandleSelectDownloadLocation, - base::Unretained(this))); + base::BindRepeating(&DownloadsHandler::HandleSelectDownloadLocation, + base::Unretained(this))); } void DownloadsHandler::OnJavascriptAllowed() { 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 a7c9d72622c..7f5a1b27042 100644 --- a/chromium/chrome/browser/ui/webui/settings/extension_control_handler.cc +++ b/chromium/chrome/browser/ui/webui/settings/extension_control_handler.cc @@ -19,9 +19,10 @@ ExtensionControlHandler::ExtensionControlHandler() {} ExtensionControlHandler::~ExtensionControlHandler() {} void ExtensionControlHandler::RegisterMessages() { - web_ui()->RegisterMessageCallback("disableExtension", - base::Bind(&ExtensionControlHandler::HandleDisableExtension, - base::Unretained(this))); + web_ui()->RegisterMessageCallback( + "disableExtension", + base::BindRepeating(&ExtensionControlHandler::HandleDisableExtension, + base::Unretained(this))); } void ExtensionControlHandler::HandleDisableExtension( diff --git a/chromium/chrome/browser/ui/webui/settings/font_handler.cc b/chromium/chrome/browser/ui/webui/settings/font_handler.cc index abd118e6a53..037d0a5b3a4 100644 --- a/chromium/chrome/browser/ui/webui/settings/font_handler.cc +++ b/chromium/chrome/browser/ui/webui/settings/font_handler.cc @@ -51,16 +51,17 @@ FontHandler::~FontHandler() {} void FontHandler::RegisterMessages() { web_ui()->RegisterMessageCallback( - "fetchFontsData", base::Bind(&FontHandler::HandleFetchFontsData, - base::Unretained(this))); + "fetchFontsData", base::BindRepeating(&FontHandler::HandleFetchFontsData, + base::Unretained(this))); web_ui()->RegisterMessageCallback( "observeAdvancedFontExtensionAvailable", - base::Bind(&FontHandler::HandleObserveAdvancedFontExtensionAvailable, - base::Unretained(this))); + base::BindRepeating( + &FontHandler::HandleObserveAdvancedFontExtensionAvailable, + base::Unretained(this))); web_ui()->RegisterMessageCallback( "openAdvancedFontSettings", - base::Bind(&FontHandler::HandleOpenAdvancedFontSettings, - base::Unretained(this))); + base::BindRepeating(&FontHandler::HandleOpenAdvancedFontSettings, + base::Unretained(this))); } void FontHandler::OnJavascriptAllowed() { diff --git a/chromium/chrome/browser/ui/webui/settings/incompatible_applications_handler_win.cc b/chromium/chrome/browser/ui/webui/settings/incompatible_applications_handler_win.cc index af1646f42db..4772084b860 100644 --- a/chromium/chrome/browser/ui/webui/settings/incompatible_applications_handler_win.cc +++ b/chromium/chrome/browser/ui/webui/settings/incompatible_applications_handler_win.cc @@ -148,7 +148,7 @@ void IncompatibleApplicationsHandler::GetPluralString( const base::Value& callback_id = args->GetList()[0]; int num_applications = args->GetList()[1].GetInt(); - DCHECK_GT(0, num_applications); + DCHECK_GT(num_applications, 0); ResolveJavascriptCallback( callback_id, diff --git a/chromium/chrome/browser/ui/webui/settings/languages_handler.cc b/chromium/chrome/browser/ui/webui/settings/languages_handler.cc index 2f98827ad2d..b36e7442a2d 100644 --- a/chromium/chrome/browser/ui/webui/settings/languages_handler.cc +++ b/chromium/chrome/browser/ui/webui/settings/languages_handler.cc @@ -31,12 +31,12 @@ LanguagesHandler::~LanguagesHandler() { void LanguagesHandler::RegisterMessages() { web_ui()->RegisterMessageCallback( "getProspectiveUILanguage", - base::Bind(&LanguagesHandler::HandleGetProspectiveUILanguage, - base::Unretained(this))); + base::BindRepeating(&LanguagesHandler::HandleGetProspectiveUILanguage, + base::Unretained(this))); web_ui()->RegisterMessageCallback( "setProspectiveUILanguage", - base::Bind(&LanguagesHandler::HandleSetProspectiveUILanguage, - base::Unretained(this))); + base::BindRepeating(&LanguagesHandler::HandleSetProspectiveUILanguage, + base::Unretained(this))); } void LanguagesHandler::HandleGetProspectiveUILanguage( 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 1c76ec475ac..1d14df0f557 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 @@ -29,10 +29,11 @@ #include "components/google/core/browser/google_util.h" #include "components/password_manager/core/browser/password_manager_constants.h" #include "components/safe_browsing/common/safe_browsing_prefs.h" -#include "components/signin/core/browser/signin_features.h" +#include "components/signin/core/browser/signin_buildflags.h" #include "components/strings/grit/components_strings.h" #include "components/subresource_filter/core/browser/subresource_filter_features.h" #include "content/public/browser/web_ui_data_source.h" +#include "content/public/common/content_features.h" #include "services/device/public/cpp/device_features.h" #include "ui/base/l10n/l10n_util.h" @@ -128,6 +129,7 @@ void AddCommonStrings(content::WebUIDataSource* html_source, Profile* profile) { {"moreActions", IDS_SETTINGS_MORE_ACTIONS}, {"ok", IDS_OK}, {"restart", IDS_SETTINGS_RESTART}, + {"retry", IDS_SETTINGS_RETRY}, {"save", IDS_SAVE}, {"settings", IDS_SETTINGS_SETTINGS}, {"toggleOn", IDS_SETTINGS_TOGGLE_ON}, @@ -151,18 +153,6 @@ void AddCommonStrings(content::WebUIDataSource* html_source, Profile* profile) { } void AddA11yStrings(content::WebUIDataSource* html_source) { -#if defined(OS_CHROMEOS) - // The content description for select to speak is dependent on a flag - // until a feature launch. - // TODO(katie): When the feature is approved, remove this variable and - // callback. The feature will be always enabled. - int selectToSpeakDescription = - (base::CommandLine::ForCurrentProcess()->HasSwitch( - chromeos::switches::kEnableExperimentalAccessibilityFeatures)) - ? IDS_SETTINGS_ACCESSIBILITY_SELECT_TO_SPEAK_DESCRIPTION_FLAGS - : IDS_SETTINGS_ACCESSIBILITY_SELECT_TO_SPEAK_DESCRIPTION; -#endif - LocalizedString localized_strings[] = { {"a11yPageTitle", IDS_SETTINGS_ACCESSIBILITY}, {"a11yWebStore", IDS_SETTINGS_ACCESSIBILITY_WEB_STORE}, @@ -214,7 +204,8 @@ void AddA11yStrings(content::WebUIDataSource* html_source) { {"focusHighlightLabel", IDS_SETTINGS_ACCESSIBILITY_FOCUS_HIGHLIGHT_DESCRIPTION}, {"selectToSpeakTitle", IDS_SETTINGS_ACCESSIBILITY_SELECT_TO_SPEAK_TITLE}, - {"selectToSpeakDescription", selectToSpeakDescription}, + {"selectToSpeakDescription", + IDS_SETTINGS_ACCESSIBILITY_SELECT_TO_SPEAK_DESCRIPTION}, {"selectToSpeakOptionsLabel", IDS_SETTINGS_ACCESSIBILITY_SELECT_TO_SPEAK_OPTIONS_LABEL}, {"switchAccessLabel", IDS_SETTINGS_ACCESSIBILITY_SWITCH_ACCESS_DESCRIPTION}, @@ -244,15 +235,33 @@ void AddA11yStrings(content::WebUIDataSource* html_source) { {"audioHeading", IDS_SETTINGS_ACCESSIBILITY_AUDIO_HEADING}, {"additionalFeaturesTitle", IDS_SETTINGS_ACCESSIBILITY_ADDITIONAL_FEATURES_TITLE}, + {"manageTtsSettings", IDS_SETTINGS_MANAGE_TTS_SETTINGS}, + {"ttsSettingsLinkDescription", IDS_SETTINGS_TTS_LINK_DESCRIPTION}, + {"textToSpeechVoices", IDS_SETTINGS_TEXT_TO_SPEECH_VOICES}, + {"textToSpeechProperties", IDS_SETTINGS_TEXT_TO_SPEECH_PROPERTIES}, + {"textToSpeechRate", IDS_SETTINGS_TEXT_TO_SPEECH_RATE}, + {"textToSpeechPitch", IDS_SETTINGS_TEXT_TO_SPEECH_PITCH}, + {"textToSpeechPreviewHeading", IDS_SETTINGS_TEXT_TO_SPEECH_PREVIEW_HEADING}, + {"textToSpeechPreviewInputLabel", + IDS_SETTINGS_TEXT_TO_SPEECH_PREVIEW_INPUT_LABEL}, + {"textToSpeechPreviewInput", IDS_SETTINGS_TEXT_TO_SPEECH_PREVIEW_INPUT}, + {"textToSpeechPreviewPlay", IDS_SETTINGS_TEXT_TO_SPEECH_PREVIEW_PLAY}, + {"textToSpeechEngines", IDS_SETTINGS_TEXT_TO_SPEECH_ENGINES}, + {"textToSpeechInstallEngines", IDS_SETTINGS_TEXT_TO_SPEECH_INSTALL_ENGINES}, + {"manageGoogleTtsEngineSettings", + IDS_SETTINGS_MANAGE_GOOGLE_TTS_ENGINE_SETTINGS}, + {"googleTtsEngineSettingsLinkDescription", + IDS_SETTINGS_GOOGLE_TTS_ENGINE_LINK_DESCRIPTION}, + {"googleTextToSpeechSettings", IDS_SETTINGS_GOOGLE_TTS_ENGINE_TITLE}, + {"enableTtsVoiceLabel", IDS_SETTINGS_ENABLE_TTS_VOICE_LABEL}, #endif }; AddLocalizedStringsBulk(html_source, localized_strings, arraysize(localized_strings)); #if defined(OS_CHROMEOS) - html_source->AddString( - "a11yLearnMoreUrl", - GetHelpUrlWithBoard(chrome::kChromeAccessibilityHelpURL)); + html_source->AddString("a11yLearnMoreUrl", + chrome::kChromeAccessibilityHelpURL); html_source->AddBoolean( "showExperimentalA11yFeatures", @@ -466,7 +475,7 @@ void AddChangePasswordStrings(content::WebUIDataSource* html_source) { arraysize(localized_strings)); const std::string icon_id = - show_softer_warning ? "settings:security" : "cr:warning"; + show_softer_warning ? "cr:security" : "cr:warning"; html_source->AddString("changePasswordPageIcon", icon_id); #endif } @@ -672,7 +681,13 @@ void AddDeviceStrings(content::WebUIDataSource* html_source) { {"displayResolutionTextBest", IDS_SETTINGS_DISPLAY_RESOLUTION_TEXT_BEST}, {"displayResolutionTextNative", IDS_SETTINGS_DISPLAY_RESOLUTION_TEXT_NATIVE}, + {"displayResolutionSublabel", IDS_SETTINGS_DISPLAY_RESOLUTION_SUBLABEL}, + {"displayResolutionMenuItem", IDS_SETTINGS_DISPLAY_RESOLUTION_MENU_ITEM}, + {"displayZoomTitle", IDS_SETTINGS_DISPLAY_ZOOM_TITLE}, + {"displayZoomSublabel", IDS_SETTINGS_DISPLAY_ZOOM_SUBLABEL}, {"displayZoomValue", IDS_SETTINGS_DISPLAY_ZOOM_VALUE}, + {"displaySizeSliderMinLabel", IDS_SETTINGS_DISPLAY_ZOOM_SLIDER_MINIMUM}, + {"displaySizeSliderMaxLabel", IDS_SETTINGS_DISPLAY_ZOOM_SLIDER_MAXIMUM}, {"displayScreenTitle", IDS_SETTINGS_DISPLAY_SCREEN}, {"displayScreenExtended", IDS_SETTINGS_DISPLAY_SCREEN_EXTENDED}, {"displayScreenPrimary", IDS_SETTINGS_DISPLAY_SCREEN_PRIMARY}, @@ -705,8 +720,7 @@ void AddDeviceStrings(content::WebUIDataSource* html_source) { chromeos::switches::kEnableTouchCalibrationSetting)); html_source->AddBoolean("enableDisplayZoomSetting", - base::CommandLine::ForCurrentProcess()->HasSwitch( - chromeos::switches::kEnableDisplayZoomSetting)); + features::IsDisplayZoomSettingEnabled()); html_source->AddBoolean("hasExternalTouchDevice", display::HasExternalTouchscreenDevice()); @@ -772,15 +786,27 @@ void AddDeviceStrings(content::WebUIDataSource* html_source) { void AddDownloadsStrings(content::WebUIDataSource* html_source) { LocalizedString localized_strings[] = { - {"downloadsPageTitle", IDS_SETTINGS_DOWNLOADS}, - {"downloadLocation", IDS_SETTINGS_DOWNLOAD_LOCATION}, - {"changeDownloadLocation", IDS_SETTINGS_CHANGE_DOWNLOAD_LOCATION}, - {"promptForDownload", IDS_SETTINGS_PROMPT_FOR_DOWNLOAD}, - {"disconnectGoogleDriveAccount", IDS_SETTINGS_DISCONNECT_GOOGLE_DRIVE}, - {"openFileTypesAutomatically", - IDS_SETTINGS_OPEN_FILE_TYPES_AUTOMATICALLY}}; + {"downloadsPageTitle", IDS_SETTINGS_DOWNLOADS}, + {"downloadLocation", IDS_SETTINGS_DOWNLOAD_LOCATION}, + {"changeDownloadLocation", IDS_SETTINGS_CHANGE_DOWNLOAD_LOCATION}, + {"promptForDownload", IDS_SETTINGS_PROMPT_FOR_DOWNLOAD}, + {"disconnectGoogleDriveAccount", IDS_SETTINGS_DISCONNECT_GOOGLE_DRIVE}, + {"openFileTypesAutomatically", IDS_SETTINGS_OPEN_FILE_TYPES_AUTOMATICALLY}, +#if defined(OS_CHROMEOS) + {"smbSharesTitle", IDS_SETTINGS_DOWNLOADS_SMB_SHARES}, + {"smbSharesLearnMoreLabel", + IDS_SETTINGS_DOWNLOADS_SMB_SHARES_LEARN_MORE_LABEL}, + {"addSmbShare", IDS_SETTINGS_DOWNLOADS_SMB_SHARES_ADD_SHARE}, + {"smbShareUrl", IDS_SETTINGS_DOWNLOADS_ADD_SHARE_URL}, +#endif + }; AddLocalizedStringsBulk(html_source, localized_strings, arraysize(localized_strings)); + +#if defined(OS_CHROMEOS) + html_source->AddBoolean("enableNativeSmbSetting", + base::FeatureList::IsEnabled(features::kNativeSmb)); +#endif } #if defined(OS_WIN) && defined(GOOGLE_CHROME_BUILD) @@ -805,7 +831,11 @@ void AddChromeCleanupStrings(content::WebUIDataSource* html_source) { {"chromeCleanupExplanationPermissionsNeeded", IDS_SETTINGS_RESET_CLEANUP_EXPLANATION_PERMISSIONS_NEEDED}, {"chromeCleanupExplanationRemove", - IDS_SETTINGS_RESET_CLEANUP_EXPLANATION_REMOVE}, + // Note: removal explanation should be the same as used in the prompt + // dialog. Reusing the string to ensure they will not diverge. + IDS_CHROME_CLEANUP_PROMPT_EXPLANATION}, + {"chromeCleanupExplanationRemoving", + IDS_SETTINGS_RESET_CLEANUP_EXPLANATION_CURRENTLY_REMOVING}, {"chromeCleanupExplanationScanError", IDS_SETTINGS_RESET_CLEANUP_EXPLANATION_SCAN_ERROR}, {"chromeCleanupFindButtonLable", @@ -905,14 +935,12 @@ void AddResetStrings(content::WebUIDataSource* html_source) { #else {"resetPageTitle", IDS_SETTINGS_RESET}, #endif - {"resetTrigger", IDS_SETTINGS_RESET}, - {"resetTriggerDescription", - IDS_SETTINGS_RESET_PROFILE_SETTINGS_DESCRIPTION}, + {"resetTrigger", IDS_SETTINGS_RESET_SETTINGS_TRIGGER}, {"resetPageExplanation", IDS_RESET_PROFILE_SETTINGS_EXPLANATION}, {"triggeredResetPageExplanation", IDS_TRIGGERED_RESET_PROFILE_SETTINGS_EXPLANATION}, {"triggeredResetPageTitle", IDS_TRIGGERED_RESET_PROFILE_SETTINGS_TITLE}, - {"resetPageCommit", IDS_RESET_PROFILE_SETTINGS_COMMIT_BUTTON}, + {"resetDialogCommit", IDS_SETTINGS_RESET}, {"resetPageFeedback", IDS_SETTINGS_RESET_PROFILE_FEEDBACK}, #if defined(OS_CHROMEOS) {"powerwashTitle", IDS_SETTINGS_FACTORY_RESET}, @@ -1015,7 +1043,6 @@ void AddEasyUnlockStrings(content::WebUIDataSource* html_source) { IDS_SETTINGS_EASY_UNLOCK_TURN_OFF_ERROR_TITLE}, {"easyUnlockTurnOffErrorMessage", IDS_SETTINGS_EASY_UNLOCK_TURN_OFF_ERROR_MESSAGE}, - {"easyUnlockTurnOffRetryButton", IDS_SETTINGS_EASY_UNLOCK_TURN_OFF_RETRY}, {"easyUnlockAllowSignInLabel", IDS_SETTINGS_EASY_UNLOCK_ALLOW_SIGN_IN_LABEL}, {"easyUnlockProximityThresholdLabel", @@ -1244,6 +1271,10 @@ void AddLanguagesStrings(content::WebUIDataSource* html_source) { {"noCustomDictionaryWordsFound", IDS_SETTINGS_LANGUAGES_DICTIONARY_WORDS_NONE}, {"spellCheckDisabled", IDS_SETTINGS_LANGUAGES_SPELL_CHECK_DISABLED}, + {"languagesDictionaryDownloadError", + IDS_SETTINGS_LANGUAGES_DICTIONARY_DOWNLOAD_FAILED}, + {"languagesDictionaryDownloadErrorHelp", + IDS_SETTINGS_LANGUAGES_DICTIONARY_DOWNLOAD_FAILED_HELP}, #endif }; AddLocalizedStringsBulk(html_source, localized_strings, @@ -1361,6 +1392,9 @@ void AddPasswordsAndFormsStrings(content::WebUIDataSource* html_source) { {"exportMenuItem", IDS_SETTINGS_PASSWORDS_EXPORT_MENU_ITEM}, {"undoRemovePassword", IDS_SETTINGS_PASSWORD_UNDO}, {"passwordDeleted", IDS_SETTINGS_PASSWORD_DELETED_PASSWORD}, + {"passwordRowMoreActionsButton", IDS_SETTINGS_PASSWORD_ROW_MORE_ACTIONS}, + {"passwordRowFederatedMoreActionsButton", + IDS_SETTINGS_PASSWORD_ROW_FEDERATED_MORE_ACTIONS}, {"exportPasswordsTitle", IDS_SETTINGS_PASSWORDS_EXPORT_TITLE}, {"exportPasswordsDescription", IDS_SETTINGS_PASSWORDS_EXPORT_DESCRIPTION}, {"exportPasswords", IDS_SETTINGS_PASSWORDS_EXPORT}, @@ -1452,7 +1486,7 @@ void AddPeopleStrings(content::WebUIDataSource* html_source, Profile* profile) { IDS_SETTINGS_PEOPLE_LOCK_SCREEN_FINGERPRINT_SUBPAGE_TITLE}, {"lockScreenFingerprintWarning", IDS_SETTINGS_PEOPLE_LOCK_SCREEN_FINGERPRINT_LESS_SECURE}, - {"lockScreenOptions", IDS_SETTINGS_PEOPLE_LOCK_SCREEN_OPTIONS}, + {"lockScreenOptions", IDS_SETTINGS_PEOPLE_LOCK_SCREEN_OPTIONS_LOCK}, {"lockScreenPasswordOnly", IDS_SETTINGS_PEOPLE_LOCK_SCREEN_PASSWORD_ONLY}, {"lockScreenPinOrPassword", IDS_SETTINGS_PEOPLE_LOCK_SCREEN_PIN_OR_PASSWORD}, @@ -1460,9 +1494,9 @@ void AddPeopleStrings(content::WebUIDataSource* html_source, Profile* profile) { IDS_SETTINGS_PEOPLE_LOCK_SCREEN_REGISTERED_FINGERPRINTS_LABEL}, {"lockScreenSetupPinButton", IDS_SETTINGS_PEOPLE_LOCK_SCREEN_SETUP_PIN_BUTTON}, - {"lockScreenTitle", IDS_SETTINGS_PEOPLE_LOCK_SCREEN_TITLE}, + {"lockScreenTitle", IDS_SETTINGS_PEOPLE_LOCK_SCREEN_TITLE_LOCK}, {"passwordPromptEnterPassword", - IDS_SETTINGS_PEOPLE_PASSWORD_PROMPT_ENTER_PASSWORD}, + IDS_SETTINGS_PEOPLE_PASSWORD_PROMPT_ENTER_PASSWORD_LOCK}, {"passwordPromptInvalidPassword", IDS_SETTINGS_PEOPLE_PASSWORD_PROMPT_INVALID_PASSWORD}, {"passwordPromptPasswordLabel", @@ -1494,6 +1528,9 @@ void AddPeopleStrings(content::WebUIDataSource* html_source, Profile* profile) { {"editPerson", IDS_SETTINGS_EDIT_PERSON}, {"profileNameAndPicture", IDS_SETTINGS_PROFILE_NAME_AND_PICTURE}, {"showShortcutLabel", IDS_SETTINGS_PROFILE_SHORTCUT_TOGGLE_LABEL}, + {"syncWillStart", IDS_SETTINGS_SYNC_WILL_START}, + {"syncSettingsSavedToast", IDS_SETTINGS_SYNC_SETTINGS_SAVED_TOAST_LABEL}, + {"cancelSync", IDS_SETTINGS_SYNC_SETTINGS_CANCEL_SYNC}, #endif // defined(OS_CHROMEOS) #if BUILDFLAG(ENABLE_DICE_SUPPORT) {"peopleSignIn", IDS_SETTINGS_PEOPLE_SIGN_IN}, @@ -1502,8 +1539,12 @@ void AddPeopleStrings(content::WebUIDataSource* html_source, Profile* profile) { IDS_SETTINGS_PEOPLE_SIGN_IN_PROMPT_SECONDARY}, {"useAnotherAccount", IDS_SETTINGS_PEOPLE_SYNC_ANOTHER_ACCOUNT}, {"syncAsName", IDS_SETTINGS_PEOPLE_SYNC_AS_NAME}, - {"syncedToName", IDS_SETTINGS_PEOPLE_SYNCED_AS_NAME}, + {"syncingTo", IDS_SETTINGS_PEOPLE_SYNCING_TO_ACCOUNT}, {"turnOffSync", IDS_SETTINGS_PEOPLE_SYNC_TURN_OFF}, + {"syncNotWorking", IDS_SETTINGS_PEOPLE_SYNC_NOT_WORKING}, + {"syncPaused", IDS_SETTINGS_PEOPLE_SYNC_PAUSED}, + {"syncSignInPrompt", IDS_SETTINGS_SYNC_SIGN_IN_PROMPT}, + {"syncSignInPromptSecondary", IDS_SETTINGS_SYNC_SIGN_IN_PROMPT_SECONDARY}, #endif {"syncOverview", IDS_SETTINGS_SYNC_OVERVIEW}, {"syncDisabledByAdministrator", @@ -1524,6 +1565,9 @@ void AddPeopleStrings(content::WebUIDataSource* html_source, Profile* profile) { {"syncDisconnectExplanation", IDS_SETTINGS_SYNC_DISCONNECT_EXPLANATION}, {"syncDisconnectConfirm", IDS_SETTINGS_SYNC_DISCONNECT_CONFIRM}, {"sync", IDS_SETTINGS_SYNC}, + {"syncDescription", IDS_SETTINGS_SYNC_DESCRIPTION}, + {"syncExpandA11yLabel", IDS_SETTINGS_SYNC_SECTION_ACCESSIBILITY_LABEL}, + {"syncAndPersonalization", IDS_SETTINGS_SYNC_SYNC_AND_PERSONALIZATION}, {"syncPageTitle", IDS_SETTINGS_SYNC_PAGE_TITLE}, {"syncLoading", IDS_SETTINGS_SYNC_LOADING}, {"syncTimeout", IDS_SETTINGS_SYNC_TIMEOUT}, @@ -2041,6 +2085,11 @@ void AddSiteSettingsStrings(content::WebUIDataSource* html_source, {"siteSettingsMidiDevicesBlock", IDS_SETTINGS_SITE_SETTINGS_MIDI_DEVICES_BLOCK}, {"siteSettingsUsbDevices", IDS_SETTINGS_SITE_SETTINGS_USB_DEVICES}, + {"siteSettingsUsbDevicesAsk", IDS_SETTINGS_SITE_SETTINGS_USB_DEVICES_ASK}, + {"siteSettingsUsbDevicesAskRecommended", + IDS_SETTINGS_SITE_SETTINGS_USB_DEVICES_ASK_RECOMMENDED}, + {"siteSettingsUsbDevicesBlock", + IDS_SETTINGS_SITE_SETTINGS_USB_DEVICES_BLOCK}, {"siteSettingsRemoveZoomLevel", IDS_SETTINGS_SITE_SETTINGS_REMOVE_ZOOM_LEVEL}, {"siteSettingsZoomLevels", IDS_SETTINGS_SITE_SETTINGS_ZOOM_LEVELS}, @@ -2179,6 +2228,13 @@ void AddSiteSettingsStrings(content::WebUIDataSource* html_source, {"siteSettingsAdsBlock", IDS_SETTINGS_SITE_SETTINGS_ADS_BLOCK}, {"siteSettingsAdsBlockRecommended", IDS_SETTINGS_SITE_SETTINGS_ADS_BLOCK_RECOMMENDED}, + {"siteSettingsPaymentHandler", IDS_SETTINGS_SITE_SETTINGS_PAYMENT_HANDLER}, + {"siteSettingsPaymentHandlerAllow", + IDS_SETTINGS_SITE_SETTINGS_PAYMENT_HANDLER_ALLOW}, + {"siteSettingsPaymentHandlerAllowRecommended", + IDS_SETTINGS_SITE_SETTINGS_PAYMENT_HANDLER_ALLOW_RECOMMENDED}, + {"siteSettingsPaymentHandlerBlock", + IDS_SETTINGS_SITE_SETTINGS_PAYMENT_HANDLER_BLOCK}, }; AddLocalizedStringsBulk(html_source, localized_strings, arraysize(localized_strings)); @@ -2203,6 +2259,10 @@ void AddSiteSettingsStrings(content::WebUIDataSource* html_source, "enableSensorsContentSetting", base::FeatureList::IsEnabled(features::kGenericSensorExtraClasses)); + html_source->AddBoolean( + "enablePaymentHandlerContentSetting", + base::FeatureList::IsEnabled(features::kServiceWorkerPaymentApps)); + if (PluginUtils::ShouldPreferHtmlOverPlugins( HostContentSettingsMapFactory::GetForProfile(profile))) { LocalizedString flash_strings[] = { @@ -2307,6 +2367,11 @@ void AddMultideviceStrings(content::WebUIDataSource* html_source) { } #endif +void AddExtensionsStrings(content::WebUIDataSource* html_source) { + html_source->AddLocalizedString("extensionsPageTitle", + IDS_SETTINGS_EXTENSIONS_CHECKBOX_LABEL); +} + } // namespace void AddLocalizedStrings(content::WebUIDataSource* html_source, @@ -2355,6 +2420,7 @@ void AddLocalizedStrings(content::WebUIDataSource* html_source, AddImportDataStrings(html_source); AddSystemStrings(html_source); #endif + AddExtensionsStrings(html_source); #if defined(USE_NSS_CERTS) certificate_manager::AddLocalizedStrings(html_source); 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 c3d1a1d2812..f8e4ae44148 100644 --- a/chromium/chrome/browser/ui/webui/settings/md_settings_ui.cc +++ b/chromium/chrome/browser/ui/webui/settings/md_settings_ui.cc @@ -14,6 +14,7 @@ #include "base/memory/ptr_util.h" #include "base/metrics/histogram_macros.h" #include "chrome/browser/profiles/profile.h" +#include "chrome/browser/signin/unified_consent_helper.h" #include "chrome/browser/ui/webui/metrics_handler.h" #include "chrome/browser/ui/webui/settings/about_handler.h" #include "chrome/browser/ui/webui/settings/appearance_handler.h" @@ -47,7 +48,7 @@ #include "content/public/browser/web_contents.h" #include "content/public/browser/web_ui.h" #include "content/public/browser/web_ui_data_source.h" -#include "printing/features/features.h" +#include "printing/buildflags/buildflags.h" #if defined(OS_WIN) #include "chrome/browser/safe_browsing/chrome_cleaner/chrome_cleaner_controller_win.h" @@ -63,6 +64,7 @@ #if defined(OS_WIN) || defined(OS_CHROMEOS) #include "chrome/browser/ui/webui/settings/languages_handler.h" +#include "chrome/browser/ui/webui/settings/tts_handler.h" #endif // defined(OS_WIN) || defined(OS_CHROMEOS) #if defined(OS_CHROMEOS) @@ -84,6 +86,7 @@ #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/smb_handler.h" #include "chrome/common/chrome_switches.h" #include "chromeos/chromeos_switches.h" #include "components/arc/arc_util.h" @@ -185,11 +188,14 @@ MdSettingsUI::MdSettingsUI(content::WebUI* web_ui) AddSettingsPageUIHandler( std::make_unique<chromeos::settings::PointerHandler>()); AddSettingsPageUIHandler( + std::make_unique<chromeos::settings::SmbHandler>(profile)); + AddSettingsPageUIHandler( std::make_unique<chromeos::settings::StorageHandler>()); AddSettingsPageUIHandler( std::make_unique<chromeos::settings::StylusHandler>()); AddSettingsPageUIHandler( std::make_unique<chromeos::settings::InternetHandler>(profile)); + AddSettingsPageUIHandler(std::make_unique<TtsHandler>()); #else AddSettingsPageUIHandler(std::make_unique<DefaultBrowserHandler>(web_ui)); AddSettingsPageUIHandler(std::make_unique<ManageProfileHandler>(profile)); @@ -302,6 +308,9 @@ MdSettingsUI::MdSettingsUI(content::WebUI* web_ui) signin::IsDiceEnabledForProfile(profile->GetPrefs())); #endif // defined(OS_CHROMEOS) + html_source->AddBoolean("unifiedConsentEnabled", + IsUnifiedConsentEnabled(profile)); + html_source->AddBoolean("showExportPasswords", base::FeatureList::IsEnabled( password_manager::features::kPasswordExport)); diff --git a/chromium/chrome/browser/ui/webui/settings/metrics_reporting_handler.cc b/chromium/chrome/browser/ui/webui/settings/metrics_reporting_handler.cc index def21ea78e0..7d8fb6922a8 100644 --- a/chromium/chrome/browser/ui/webui/settings/metrics_reporting_handler.cc +++ b/chromium/chrome/browser/ui/webui/settings/metrics_reporting_handler.cc @@ -23,12 +23,15 @@ MetricsReportingHandler::MetricsReportingHandler() {} MetricsReportingHandler::~MetricsReportingHandler() {} void MetricsReportingHandler::RegisterMessages() { - web_ui()->RegisterMessageCallback("getMetricsReporting", - base::Bind(&MetricsReportingHandler::HandleGetMetricsReporting, - base::Unretained(this))); - web_ui()->RegisterMessageCallback("setMetricsReportingEnabled", - base::Bind(&MetricsReportingHandler::HandleSetMetricsReportingEnabled, - base::Unretained(this))); + web_ui()->RegisterMessageCallback( + "getMetricsReporting", + base::BindRepeating(&MetricsReportingHandler::HandleGetMetricsReporting, + base::Unretained(this))); + web_ui()->RegisterMessageCallback( + "setMetricsReportingEnabled", + base::BindRepeating( + &MetricsReportingHandler::HandleSetMetricsReportingEnabled, + base::Unretained(this))); } void MetricsReportingHandler::OnJavascriptAllowed() { diff --git a/chromium/chrome/browser/ui/webui/settings/native_certificates_handler.cc b/chromium/chrome/browser/ui/webui/settings/native_certificates_handler.cc index 4661e32a12a..63776d6187a 100644 --- a/chromium/chrome/browser/ui/webui/settings/native_certificates_handler.cc +++ b/chromium/chrome/browser/ui/webui/settings/native_certificates_handler.cc @@ -19,8 +19,9 @@ NativeCertificatesHandler::~NativeCertificatesHandler() {} void NativeCertificatesHandler::RegisterMessages() { web_ui()->RegisterMessageCallback( "showManageSSLCertificates", - base::Bind(&NativeCertificatesHandler::HandleShowManageSSLCertificates, - base::Unretained(this))); + base::BindRepeating( + &NativeCertificatesHandler::HandleShowManageSSLCertificates, + base::Unretained(this))); } void NativeCertificatesHandler::HandleShowManageSSLCertificates( diff --git a/chromium/chrome/browser/ui/webui/settings/on_startup_handler.cc b/chromium/chrome/browser/ui/webui/settings/on_startup_handler.cc index fe50a556468..48ae4623565 100644 --- a/chromium/chrome/browser/ui/webui/settings/on_startup_handler.cc +++ b/chromium/chrome/browser/ui/webui/settings/on_startup_handler.cc @@ -41,12 +41,13 @@ void OnStartupHandler::OnJavascriptDisallowed() { void OnStartupHandler::RegisterMessages() { web_ui()->RegisterMessageCallback( - "getNtpExtension", base::Bind(&OnStartupHandler::HandleGetNtpExtension, - base::Unretained(this))); + "getNtpExtension", + base::BindRepeating(&OnStartupHandler::HandleGetNtpExtension, + base::Unretained(this))); web_ui()->RegisterMessageCallback( "validateStartupPage", - base::Bind(&OnStartupHandler::HandleValidateStartupPage, - base::Unretained(this))); + base::BindRepeating(&OnStartupHandler::HandleValidateStartupPage, + base::Unretained(this))); } void OnStartupHandler::OnExtensionUnloaded( diff --git a/chromium/chrome/browser/ui/webui/settings/people_handler.cc b/chromium/chrome/browser/ui/webui/settings/people_handler.cc index 8c8cddf5897..23e8d1044e0 100644 --- a/chromium/chrome/browser/ui/webui/settings/people_handler.cc +++ b/chromium/chrome/browser/ui/webui/settings/people_handler.cc @@ -25,6 +25,7 @@ #include "chrome/browser/signin/signin_manager_factory.h" #include "chrome/browser/signin/signin_promo.h" #include "chrome/browser/signin/signin_ui_util.h" +#include "chrome/browser/signin/unified_consent_helper.h" #include "chrome/browser/sync/profile_sync_service_factory.h" #include "chrome/browser/sync/sync_ui_util.h" #include "chrome/browser/ui/browser_finder.h" @@ -207,7 +208,8 @@ PeopleHandler::~PeopleHandler() { if (!web_ui()) return; - // This case is hit when the user performs a back navigation. + // Note that if the user left the sync page by closing the tab, refresh, + // or via the back navigation, it would first go through OnDidClosePage(). CloseSyncSetup(); } @@ -215,35 +217,46 @@ void PeopleHandler::RegisterMessages() { InitializeSyncBlocker(); web_ui()->RegisterMessageCallback( "SyncSetupDidClosePage", - base::Bind(&PeopleHandler::OnDidClosePage, base::Unretained(this))); + base::BindRepeating(&PeopleHandler::OnDidClosePage, + base::Unretained(this))); web_ui()->RegisterMessageCallback( "SyncSetupSetDatatypes", - base::Bind(&PeopleHandler::HandleSetDatatypes, base::Unretained(this))); + base::BindRepeating(&PeopleHandler::HandleSetDatatypes, + base::Unretained(this))); + web_ui()->RegisterMessageCallback( + "SyncSetupSetSyncEverything", + base::BindRepeating(&PeopleHandler::HandleSetSyncEverything, + base::Unretained(this))); web_ui()->RegisterMessageCallback( "SyncSetupSetEncryption", - base::Bind(&PeopleHandler::HandleSetEncryption, base::Unretained(this))); + base::BindRepeating(&PeopleHandler::HandleSetEncryption, + base::Unretained(this))); web_ui()->RegisterMessageCallback( "SyncSetupShowSetupUI", - base::Bind(&PeopleHandler::HandleShowSetupUI, base::Unretained(this))); + base::BindRepeating(&PeopleHandler::HandleShowSetupUI, + base::Unretained(this))); web_ui()->RegisterMessageCallback( "SyncSetupGetSyncStatus", - base::Bind(&PeopleHandler::HandleGetSyncStatus, base::Unretained(this))); + base::BindRepeating(&PeopleHandler::HandleGetSyncStatus, + base::Unretained(this))); web_ui()->RegisterMessageCallback( "SyncSetupManageOtherPeople", - base::Bind(&PeopleHandler::HandleManageOtherPeople, - base::Unretained(this))); + base::BindRepeating(&PeopleHandler::HandleManageOtherPeople, + base::Unretained(this))); #if defined(OS_CHROMEOS) web_ui()->RegisterMessageCallback( "AttemptUserExit", - base::Bind(&PeopleHandler::HandleAttemptUserExit, - base::Unretained(this))); + base::BindRepeating(&PeopleHandler::HandleAttemptUserExit, + base::Unretained(this))); #else web_ui()->RegisterMessageCallback( "SyncSetupStopSyncing", - base::Bind(&PeopleHandler::HandleStopSyncing, base::Unretained(this))); + base::BindRepeating(&PeopleHandler::HandleStopSyncing, + base::Unretained(this))); web_ui()->RegisterMessageCallback( "SyncSetupStartSignIn", - base::Bind(&PeopleHandler::HandleStartSignin, base::Unretained(this))); + base::BindRepeating(&PeopleHandler::HandleStartSignin, + base::Unretained(this))); #endif #if BUILDFLAG(ENABLE_DICE_SUPPORT) web_ui()->RegisterMessageCallback( @@ -269,6 +282,8 @@ void PeopleHandler::OnJavascriptAllowed() { if (signin_manager) signin_observer_.Add(signin_manager); + // This is intentionally not using GetSyncService(), to go around the + // Profile::IsSyncAllowed() check. ProfileSyncService* sync_service( ProfileSyncServiceFactory::GetInstance()->GetForProfile(profile_)); if (sync_service) @@ -376,7 +391,12 @@ void PeopleHandler::DisplayTimeout() { } void PeopleHandler::OnDidClosePage(const base::ListValue* args) { - MarkFirstSetupComplete(); + // Don't mark setup as complete if "didAbort" is true, or if authentication + // is still needed. + if (!args->GetList()[0].GetBool() && !IsProfileAuthNeededOrHasErrors()) { + MarkFirstSetupComplete(); + } + CloseSyncSetup(); } @@ -441,6 +461,30 @@ void PeopleHandler::HandleSetDatatypes(const base::ListValue* args) { ProfileMetrics::LogProfileSyncInfo(ProfileMetrics::SYNC_CHOOSE); } +// This function is different from HandleSetDatatypes, in that it only sets +// the syncAllDatatypes without overriding other prefs' on-disk values. +void PeopleHandler::HandleSetSyncEverything(const base::ListValue* args) { + DCHECK(!sync_startup_tracker_); + + CHECK_EQ(2U, args->GetSize()); + const base::Value& callback_id = args->GetList()[0]; + bool sync_everything = args->GetList()[1].GetBool(); + + ProfileSyncService* service = GetSyncService(); + // If the sync engine has shutdown for some reason, just close the sync + // dialog. + if (!service || !service->IsEngineInitialized()) { + CloseSyncSetup(); + ResolveJavascriptCallback(callback_id, base::Value(kDonePageStatus)); + return; + } + + service->OnUserChangedSyncEverythingOnly(sync_everything); + ResolveJavascriptCallback(callback_id, base::Value(kConfigurePageStatus)); + + ProfileMetrics::LogProfileSyncInfo(ProfileMetrics::SYNC_CUSTOMIZE); +} + #if BUILDFLAG(ENABLE_DICE_SUPPORT) void PeopleHandler::HandleGetStoredAccounts(const base::ListValue* args) { CHECK_EQ(1U, args->GetSize()); @@ -488,7 +532,9 @@ std::unique_ptr<base::ListValue> PeopleHandler::GetStoredAccountsList() { void PeopleHandler::HandleStartSyncingWithEmail(const base::ListValue* args) { const base::Value* email; + const base::Value* is_default_promo_account; CHECK(args->Get(0, &email)); + CHECK(args->Get(1, &is_default_promo_account)); Browser* browser = chrome::FindBrowserWithWebContents(web_ui()->GetWebContents()); @@ -497,9 +543,9 @@ void PeopleHandler::HandleStartSyncingWithEmail(const base::ListValue* args) { AccountTrackerServiceFactory::GetForProfile(profile_); AccountInfo account = account_tracker->FindAccountInfoByEmail(email->GetString()); - - signin_ui_util::EnableSync( - browser, account, signin_metrics::AccessPoint::ACCESS_POINT_SETTINGS); + signin_ui_util::EnableSyncFromPromo( + browser, account, signin_metrics::AccessPoint::ACCESS_POINT_SETTINGS, + is_default_promo_account->GetBool()); } #endif @@ -583,13 +629,28 @@ void PeopleHandler::HandleSetEncryption(const base::ListValue* args) { void PeopleHandler::HandleShowSetupUI(const base::ListValue* args) { AllowJavascript(); - if (!GetSyncService()) { + ProfileSyncService* service = GetSyncService(); + + // Just let the page open for now, even when the user's not signed in. + // TODO(scottchen): finish the UI for signed-out users + // (https://crbug.com/800972). + if (IsUnifiedConsentEnabled(profile_) && IsProfileAuthNeededOrHasErrors()) { + if (service && !sync_blocker_) + sync_blocker_ = service->GetSetupInProgressHandle(); + + FireWebUIListener("sync-prefs-changed", base::DictionaryValue()); + return; + } + + if (!service) { CloseUI(); return; } - SigninManagerBase* signin = SigninManagerFactory::GetForProfile(profile_); - if (!signin->IsAuthenticated()) { + // This if-statement is not using IsProfileAuthNeededOrHasErrors(), because + // in some error cases (e.g. "confirmSyncSettings") the UI still needs to + // show. + if (!SigninManagerFactory::GetForProfile(profile_)->IsAuthenticated()) { // For web-based signin, the signin page is not displayed in an overlay // on the settings page. So if we get here, it must be due to the user // cancelling signin (by reloading the sync settings page during initial @@ -600,7 +661,38 @@ void PeopleHandler::HandleShowSetupUI(const base::ListValue* args) { return; } - OpenSyncSetup(); + // Notify services that login UI is now active. + GetLoginUIService()->SetLoginUI(this); + + if (!sync_blocker_) + sync_blocker_ = service->GetSetupInProgressHandle(); + + // Early exit if there is already a preferences push pending sync startup. + if (sync_startup_tracker_) + return; + + if (!service->IsEngineInitialized()) { + // Requesting the sync service to start may trigger call to PushSyncPrefs. + // Setting up the startup tracker beforehand correctly signals the + // re-entrant call to early exit. + sync_startup_tracker_.reset(new SyncStartupTracker(profile_, this)); + service->RequestStart(); + + // See if it's even possible to bring up the sync engine - if not + // (unrecoverable error?), don't bother displaying a spinner that will be + // immediately closed because this leads to some ugly infinite UI loop (see + // http://crbug.com/244769). + if (SyncStartupTracker::GetSyncServiceState(profile_) != + SyncStartupTracker::SYNC_STARTUP_ERROR) { + DisplaySpinner(); + } + return; + } + + // User is already logged in. They must have brought up the config wizard + // via the "Advanced..." button or through One-Click signin (cases 4-6), or + // they are re-enabling sync after having disabled it (case 7). + PushSyncPrefs(); } #if defined(OS_CHROMEOS) @@ -618,10 +710,9 @@ void PeopleHandler::HandleStartSignin(const base::ListValue* args) { // Should only be called if the user is not already signed in or has an auth // error. - DCHECK(!SigninManagerFactory::GetForProfile(profile_)->IsAuthenticated() || - SigninErrorControllerFactory::GetForProfile(profile_)->HasError()); + DCHECK(IsProfileAuthNeededOrHasErrors()); - OpenSyncSetup(); + DisplayGaiaLogin(signin_metrics::AccessPoint::ACCESS_POINT_SETTINGS); } void PeopleHandler::HandleStopSyncing(const base::ListValue* args) { @@ -698,7 +789,6 @@ void PeopleHandler::CloseSyncSetup() { #if !defined(OS_CHROMEOS) // Sign out the user on desktop Chrome if they click cancel during // initial setup. - // TODO(rsimha): Revisit this for M30. See http://crbug.com/252049. if (sync_service->IsFirstSetupInProgress()) { SigninManagerFactory::GetForProfile(profile_) ->SignOut(signin_metrics::ABORT_SIGNIN, @@ -720,72 +810,6 @@ void PeopleHandler::CloseSyncSetup() { configuring_sync_ = false; } -void PeopleHandler::OpenSyncSetup() { - // Notify services that login UI is now active. - GetLoginUIService()->SetLoginUI(this); - - ProfileSyncService* service = GetSyncService(); - if (service && !sync_blocker_) - sync_blocker_ = service->GetSetupInProgressHandle(); - - // There are several different UI flows that can bring the user here: - // 1) Signin promo. - // 2) Normal signin through settings page (IsAuthenticated() is false). - // 3) Previously working credentials have expired. - // 4) User is signed in, but has stopped sync via the google dashboard, and - // signout is prohibited by policy so we need to force a re-auth. - // 5) User clicks [Advanced Settings] button on options page while already - // logged in. - // 6) One-click signin (credentials are already available, so should display - // sync configure UI, not login UI). - // 7) User re-enables sync after disabling it via advanced settings. -#if !defined(OS_CHROMEOS) - if (!SigninManagerFactory::GetForProfile(profile_)->IsAuthenticated() || - SigninErrorControllerFactory::GetForProfile(profile_)->HasError()) { - // User is not logged in (cases 1-2), or login has been specially requested - // because previously working credentials have expired (case 3). Close sync - // setup including any visible overlays, and display the gaia auth page. - // Control will be returned to the sync settings page once auth is complete. - CloseUI(); - DisplayGaiaLogin(signin_metrics::AccessPoint::ACCESS_POINT_SETTINGS); - return; - } -#endif - if (!service) { - // This can happen if the user directly navigates to /settings/syncSetup. - DLOG(WARNING) << "Cannot display sync UI when sync is disabled"; - CloseUI(); - return; - } - - // Early exit if there is already a preferences push pending sync startup. - if (sync_startup_tracker_) - return; - - if (!service->IsEngineInitialized()) { - // Requesting the sync service to start may trigger call to PushSyncPrefs. - // Setting up the startup tracker beforehand correctly signals the - // re-entrant call to early exit. - sync_startup_tracker_.reset(new SyncStartupTracker(profile_, this)); - service->RequestStart(); - - // See if it's even possible to bring up the sync engine - if not - // (unrecoverable error?), don't bother displaying a spinner that will be - // immediately closed because this leads to some ugly infinite UI loop (see - // http://crbug.com/244769). - if (SyncStartupTracker::GetSyncServiceState(profile_) != - SyncStartupTracker::SYNC_STARTUP_ERROR) { - DisplaySpinner(); - } - return; - } - - // User is already logged in. They must have brought up the config wizard - // via the "Advanced..." button or through One-Click signin (cases 4-6), or - // they are re-enabling sync after having disabled it (case 7). - PushSyncPrefs(); -} - void PeopleHandler::InitializeSyncBlocker() { if (!web_ui()) return; @@ -855,13 +879,17 @@ PeopleHandler::GetSyncStatusDictionary() { } #endif + // This is intentionally not using GetSyncService(), in order to access more + // nuanced information, since GetSyncService() returns nullptr if anything + // makes Profile::IsSyncAllowed() false. ProfileSyncService* service = ProfileSyncServiceFactory::GetInstance()->GetForProfile(profile_); sync_status->SetBoolean("signinAllowed", signin->IsSigninAllowed()); sync_status->SetBoolean("syncSystemEnabled", (service != nullptr)); - sync_status->SetBoolean( - "setupInProgress", - service && !service->IsManaged() && service->IsFirstSetupInProgress()); + sync_status->SetBoolean("setupInProgress", + service && !service->IsManaged() && + service->IsFirstSetupInProgress() && + signin->IsAuthenticated()); base::string16 status_label; base::string16 link_label; @@ -887,10 +915,8 @@ PeopleHandler::GetSyncStatusDictionary() { void PeopleHandler::PushSyncPrefs() { #if !defined(OS_CHROMEOS) // Early exit if the user has not signed in yet. - if (!SigninManagerFactory::GetForProfile(profile_)->IsAuthenticated() || - SigninErrorControllerFactory::GetForProfile(profile_)->HasError()) { + if (IsProfileAuthNeededOrHasErrors()) return; - } #endif ProfileSyncService* service = GetSyncService(); @@ -1017,6 +1043,12 @@ void PeopleHandler::MarkFirstSetupComplete() { // start syncing. sync_blocker_.reset(); service->SetFirstSetupComplete(); + FireWebUIListener("sync-settings-saved"); +} + +bool PeopleHandler::IsProfileAuthNeededOrHasErrors() { + return !SigninManagerFactory::GetForProfile(profile_)->IsAuthenticated() || + SigninErrorControllerFactory::GetForProfile(profile_)->HasError(); } } // namespace settings diff --git a/chromium/chrome/browser/ui/webui/settings/people_handler.h b/chromium/chrome/browser/ui/webui/settings/people_handler.h index 0ea976fa175..392f0d92475 100644 --- a/chromium/chrome/browser/ui/webui/settings/people_handler.h +++ b/chromium/chrome/browser/ui/webui/settings/people_handler.h @@ -19,7 +19,7 @@ #include "chrome/browser/ui/webui/settings/settings_page_ui_handler.h" #include "chrome/browser/ui/webui/signin/login_ui_service.h" #include "components/prefs/pref_change_registrar.h" -#include "components/signin/core/browser/signin_features.h" +#include "components/signin/core/browser/signin_buildflags.h" #include "components/signin/core/browser/signin_manager_base.h" #include "components/sync/driver/sync_service_observer.h" @@ -68,9 +68,6 @@ class PeopleHandler : public SettingsPageUIHandler, explicit PeopleHandler(Profile* profile); ~PeopleHandler() override; - // Initializes the sync setup flow and shows the setup UI. - void OpenSyncSetup(); - // Terminates the sync setup flow. void CloseSyncSetup(); @@ -83,9 +80,26 @@ class PeopleHandler : public SettingsPageUIHandler, DisplayConfigureWithEngineDisabledAndCancel); FRIEND_TEST_ALL_PREFIXES( PeopleHandlerTest, + DisplayConfigureWithEngineDisabledAndCancelAfterSigninSuccess); + FRIEND_TEST_ALL_PREFIXES(PeopleHandlerTest, + DisplayConfigureWithEngineDisabledAndSigninFailed); + FRIEND_TEST_ALL_PREFIXES( + PeopleHandlerTest, DisplayConfigureWithEngineDisabledAndSyncStartupCompleted); FRIEND_TEST_ALL_PREFIXES(PeopleHandlerTest, HandleSetupUIWhenSyncDisabled); FRIEND_TEST_ALL_PREFIXES(PeopleHandlerTest, SelectCustomEncryption); + FRIEND_TEST_ALL_PREFIXES(PeopleHandlerTest, + ShowSetupCustomPassphraseRequired); + FRIEND_TEST_ALL_PREFIXES(PeopleHandlerTest, ShowSetupEncryptAll); + FRIEND_TEST_ALL_PREFIXES(PeopleHandlerTest, ShowSetupEncryptAllDisallowed); + FRIEND_TEST_ALL_PREFIXES(PeopleHandlerTest, ShowSetupManuallySyncAll); + FRIEND_TEST_ALL_PREFIXES(PeopleHandlerTest, + ShowSetupOldGaiaPassphraseRequired); + FRIEND_TEST_ALL_PREFIXES(PeopleHandlerTest, ShowSetupSyncEverything); + FRIEND_TEST_ALL_PREFIXES(PeopleHandlerTest, + ShowSetupSyncForAllTypesIndividually); + FRIEND_TEST_ALL_PREFIXES(PeopleHandlerTest, ShowSigninOnAuthError); + FRIEND_TEST_ALL_PREFIXES(PeopleHandlerTest, ShowSyncSetup); FRIEND_TEST_ALL_PREFIXES(PeopleHandlerTest, ShowSyncSetupWhenNotSignedIn); FRIEND_TEST_ALL_PREFIXES(PeopleHandlerTest, SuccessfullySetPassphrase); FRIEND_TEST_ALL_PREFIXES(PeopleHandlerTest, TestSyncEverything); @@ -153,6 +167,7 @@ class PeopleHandler : public SettingsPageUIHandler, void OnDidClosePage(const base::ListValue* args); void HandleSetDatatypes(const base::ListValue* args); void HandleSetEncryption(const base::ListValue* args); + void HandleSetSyncEverything(const base::ListValue* args); void HandleShowSetupUI(const base::ListValue* args); void HandleAttemptUserExit(const base::ListValue* args); void HandleStartSignin(const base::ListValue* args); @@ -197,6 +212,9 @@ class PeopleHandler : public SettingsPageUIHandler, // Suppresses any further signin promos, since the user has signed in once. void MarkFirstSetupComplete(); + // True if profile needs authentication before sync can run. + bool IsProfileAuthNeededOrHasErrors(); + // If we're directly loading the sync setup page, we acquire a // SetupInProgressHandle early in order to prevent a lapse in // ProfileSyncService's "SetupInProgress" status. This lapse previously 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 13312118858..8964c907cb6 100644 --- a/chromium/chrome/browser/ui/webui/settings/people_handler_unittest.cc +++ b/chromium/chrome/browser/ui/webui/settings/people_handler_unittest.cc @@ -358,7 +358,7 @@ TEST_F(PeopleHandlerFirstSigninTest, DisplayBasicLogin) { TEST_F(PeopleHandlerTest, ShowSyncSetupWhenNotSignedIn) { EXPECT_CALL(*mock_pss_, CanSyncStart()).WillRepeatedly(Return(false)); EXPECT_CALL(*mock_pss_, IsFirstSetupComplete()).WillRepeatedly(Return(false)); - handler_->HandleShowSetupUI(NULL); + handler_->HandleShowSetupUI(nullptr); ExpectPageStatusChanged(PeopleHandler::kDonePageStatus); @@ -373,7 +373,7 @@ TEST_F(PeopleHandlerTest, ShowSyncSetupWhenNotSignedIn) { // sync is disabled. TEST_F(PeopleHandlerTest, HandleSetupUIWhenSyncDisabled) { EXPECT_CALL(*mock_pss_, IsManaged()).WillRepeatedly(Return(true)); - handler_->HandleShowSetupUI(NULL); + handler_->HandleShowSetupUI(nullptr); // Sync setup is closed when sync is disabled. EXPECT_EQ( @@ -396,7 +396,7 @@ TEST_F(PeopleHandlerTest, DisplayConfigureWithEngineDisabledAndCancel) { // engine will try to download control data types (e.g encryption info), but // that won't finish for this test as we're simulating cancelling while the // spinner is showing. - handler_->HandleShowSetupUI(NULL); + handler_->HandleShowSetupUI(nullptr); EXPECT_EQ( handler_.get(), @@ -417,7 +417,7 @@ TEST_F(PeopleHandlerTest, EXPECT_CALL(*mock_pss_, RequestStart()); SetDefaultExpectationsForConfigPage(); - handler_->OpenSyncSetup(); + handler_->HandleShowSetupUI(nullptr); EXPECT_EQ(1U, web_ui_.call_data().size()); ExpectPageStatusChanged(PeopleHandler::kSpinnerPageStatus); @@ -454,7 +454,7 @@ TEST_F(PeopleHandlerTest, .WillRepeatedly(Return(true)); EXPECT_CALL(*mock_pss_, RequestStart()); SetDefaultExpectationsForConfigPage(); - handler_->OpenSyncSetup(); + handler_->HandleShowSetupUI(nullptr); // It's important to tell sync the user cancelled the setup flow before we // tell it we're through with the setup progress. @@ -475,7 +475,7 @@ TEST_F(PeopleHandlerTest, DisplayConfigureWithEngineDisabledAndSigninFailed) { EXPECT_CALL(*mock_pss_, IsEngineInitialized()).WillRepeatedly(Return(false)); EXPECT_CALL(*mock_pss_, RequestStart()); - handler_->OpenSyncSetup(); + handler_->HandleShowSetupUI(nullptr); ExpectPageStatusChanged(PeopleHandler::kSpinnerPageStatus); Mock::VerifyAndClearExpectations(mock_pss_); error_ = GoogleServiceAuthError( @@ -532,7 +532,7 @@ TEST_F(PeopleHandlerNonCrosTest, HandleGaiaAuthFailure) { .WillRepeatedly(Return(false)); EXPECT_CALL(*mock_pss_, IsFirstSetupComplete()).WillRepeatedly(Return(false)); // Open the web UI. - handler_->OpenSyncSetup(); + handler_->HandleShowSetupUI(nullptr); ASSERT_FALSE(handler_->is_configuring_sync()); } @@ -542,7 +542,7 @@ TEST_F(PeopleHandlerNonCrosTest, UnrecoverableErrorInitializingSync) { EXPECT_CALL(*mock_pss_, CanSyncStart()).WillRepeatedly(Return(false)); EXPECT_CALL(*mock_pss_, IsFirstSetupComplete()).WillRepeatedly(Return(false)); // Open the web UI. - handler_->OpenSyncSetup(); + handler_->HandleShowSetupUI(nullptr); ASSERT_FALSE(handler_->is_configuring_sync()); } @@ -551,7 +551,7 @@ TEST_F(PeopleHandlerNonCrosTest, GaiaErrorInitializingSync) { EXPECT_CALL(*mock_pss_, CanSyncStart()).WillRepeatedly(Return(false)); EXPECT_CALL(*mock_pss_, IsFirstSetupComplete()).WillRepeatedly(Return(false)); // Open the web UI. - handler_->OpenSyncSetup(); + handler_->HandleShowSetupUI(nullptr); ASSERT_FALSE(handler_->is_configuring_sync()); } @@ -751,7 +751,7 @@ TEST_F(PeopleHandlerTest, ShowSyncSetup) { SetupInitializedProfileSyncService(); // This should display the sync setup dialog (not login). SetDefaultExpectationsForConfigPage(); - handler_->OpenSyncSetup(); + handler_->HandleShowSetupUI(nullptr); ExpectSyncPrefsChanged(); } @@ -787,7 +787,7 @@ TEST_F(PeopleHandlerTest, ShowSigninOnAuthError) { // On ChromeOS, this should display the spinner while we try to startup the // sync engine, and on desktop this displays the login dialog. - handler_->OpenSyncSetup(); + handler_->HandleShowSetupUI(nullptr); // Sync setup is closed when re-auth is in progress. EXPECT_EQ( @@ -806,7 +806,7 @@ TEST_F(PeopleHandlerTest, ShowSetupSyncEverything) { SetupInitializedProfileSyncService(); SetDefaultExpectationsForConfigPage(); // This should display the sync setup dialog (not login). - handler_->OpenSyncSetup(); + handler_->HandleShowSetupUI(nullptr); const base::DictionaryValue* dictionary = ExpectSyncPrefsChanged(); CheckBool(dictionary, "syncAllDataTypes", true); @@ -836,7 +836,7 @@ TEST_F(PeopleHandlerTest, ShowSetupManuallySyncAll) { sync_prefs.SetKeepEverythingSynced(false); SetDefaultExpectationsForConfigPage(); // This should display the sync setup dialog (not login). - handler_->OpenSyncSetup(); + handler_->HandleShowSetupUI(nullptr); const base::DictionaryValue* dictionary = ExpectSyncPrefsChanged(); CheckConfigDataTypeArguments(dictionary, CHOOSE_WHAT_TO_SYNC, GetAllTypes()); @@ -860,7 +860,7 @@ TEST_F(PeopleHandlerTest, ShowSetupSyncForAllTypesIndividually) { WillRepeatedly(Return(types)); // This should display the sync setup dialog (not login). - handler_->OpenSyncSetup(); + handler_->HandleShowSetupUI(nullptr); // Close the config overlay. LoginUIServiceFactory::GetForProfile(profile())->LoginUIClosed( @@ -884,7 +884,7 @@ TEST_F(PeopleHandlerTest, ShowSetupOldGaiaPassphraseRequired) { SetDefaultExpectationsForConfigPage(); // This should display the sync setup dialog (not login). - handler_->OpenSyncSetup(); + handler_->HandleShowSetupUI(nullptr); const base::DictionaryValue* dictionary = ExpectSyncPrefsChanged(); CheckBool(dictionary, "passphraseRequired", true); @@ -900,7 +900,7 @@ TEST_F(PeopleHandlerTest, ShowSetupCustomPassphraseRequired) { SetDefaultExpectationsForConfigPage(); // This should display the sync setup dialog (not login). - handler_->OpenSyncSetup(); + handler_->HandleShowSetupUI(nullptr); const base::DictionaryValue* dictionary = ExpectSyncPrefsChanged(); CheckBool(dictionary, "passphraseRequired", true); @@ -918,7 +918,7 @@ TEST_F(PeopleHandlerTest, ShowSetupEncryptAll) { .WillRepeatedly(Return(true)); // This should display the sync setup dialog (not login). - handler_->OpenSyncSetup(); + handler_->HandleShowSetupUI(nullptr); const base::DictionaryValue* dictionary = ExpectSyncPrefsChanged(); CheckBool(dictionary, "encryptAllData", true); @@ -935,7 +935,7 @@ TEST_F(PeopleHandlerTest, ShowSetupEncryptAllDisallowed) { .WillRepeatedly(Return(false)); // This should display the sync setup dialog (not login). - handler_->OpenSyncSetup(); + handler_->HandleShowSetupUI(nullptr); const base::DictionaryValue* dictionary = ExpectSyncPrefsChanged(); CheckBool(dictionary, "encryptAllData", false); diff --git a/chromium/chrome/browser/ui/webui/settings/printing_handler.cc b/chromium/chrome/browser/ui/webui/settings/printing_handler.cc index 45644030eb2..8647b2daf9e 100644 --- a/chromium/chrome/browser/ui/webui/settings/printing_handler.cc +++ b/chromium/chrome/browser/ui/webui/settings/printing_handler.cc @@ -18,8 +18,8 @@ PrintingHandler::~PrintingHandler() {} void PrintingHandler::RegisterMessages() { web_ui()->RegisterMessageCallback( "openSystemPrintDialog", - base::Bind(&PrintingHandler::HandleOpenSystemPrintDialog, - base::Unretained(this))); + base::BindRepeating(&PrintingHandler::HandleOpenSystemPrintDialog, + base::Unretained(this))); } void PrintingHandler::OnJavascriptAllowed() {} diff --git a/chromium/chrome/browser/ui/webui/settings/printing_handler.h b/chromium/chrome/browser/ui/webui/settings/printing_handler.h index 5759261d684..6f993475678 100644 --- a/chromium/chrome/browser/ui/webui/settings/printing_handler.h +++ b/chromium/chrome/browser/ui/webui/settings/printing_handler.h @@ -8,7 +8,7 @@ #include "base/macros.h" #include "build/build_config.h" #include "chrome/browser/ui/webui/settings/settings_page_ui_handler.h" -#include "printing/features/features.h" +#include "printing/buildflags/buildflags.h" #if defined(OS_CHROMEOS) #error "Not for use on ChromeOS" diff --git a/chromium/chrome/browser/ui/webui/settings/profile_info_handler.cc b/chromium/chrome/browser/ui/webui/settings/profile_info_handler.cc index 299d6fe9a8d..e7c647fe122 100644 --- a/chromium/chrome/browser/ui/webui/settings/profile_info_handler.cc +++ b/chromium/chrome/browser/ui/webui/settings/profile_info_handler.cc @@ -52,13 +52,14 @@ ProfileInfoHandler::~ProfileInfoHandler() {} void ProfileInfoHandler::RegisterMessages() { web_ui()->RegisterMessageCallback( - "getProfileInfo", base::Bind(&ProfileInfoHandler::HandleGetProfileInfo, - base::Unretained(this))); + "getProfileInfo", + base::BindRepeating(&ProfileInfoHandler::HandleGetProfileInfo, + base::Unretained(this))); #if !defined(OS_CHROMEOS) web_ui()->RegisterMessageCallback( "getProfileStatsCount", - base::Bind(&ProfileInfoHandler::HandleGetProfileStats, - base::Unretained(this))); + base::BindRepeating(&ProfileInfoHandler::HandleGetProfileStats, + base::Unretained(this))); #endif } diff --git a/chromium/chrome/browser/ui/webui/settings/protocol_handlers_handler.cc b/chromium/chrome/browser/ui/webui/settings/protocol_handlers_handler.cc index 3b1453e6170..1f486d9b882 100644 --- a/chromium/chrome/browser/ui/webui/settings/protocol_handlers_handler.cc +++ b/chromium/chrome/browser/ui/webui/settings/protocol_handlers_handler.cc @@ -40,22 +40,28 @@ void ProtocolHandlersHandler::OnJavascriptDisallowed() { } void ProtocolHandlersHandler::RegisterMessages() { - web_ui()->RegisterMessageCallback("observeProtocolHandlers", - base::Bind(&ProtocolHandlersHandler::HandleObserveProtocolHandlers, - base::Unretained(this))); - web_ui()->RegisterMessageCallback("observeProtocolHandlersEnabledState", - base::Bind( + web_ui()->RegisterMessageCallback( + "observeProtocolHandlers", + base::BindRepeating( + &ProtocolHandlersHandler::HandleObserveProtocolHandlers, + base::Unretained(this))); + web_ui()->RegisterMessageCallback( + "observeProtocolHandlersEnabledState", + base::BindRepeating( &ProtocolHandlersHandler::HandleObserveProtocolHandlersEnabledState, base::Unretained(this))); - web_ui()->RegisterMessageCallback("removeHandler", - base::Bind(&ProtocolHandlersHandler::HandleRemoveHandler, - base::Unretained(this))); - web_ui()->RegisterMessageCallback("setHandlersEnabled", - base::Bind(&ProtocolHandlersHandler::HandleSetHandlersEnabled, - base::Unretained(this))); - web_ui()->RegisterMessageCallback("setDefault", - base::Bind(&ProtocolHandlersHandler::HandleSetDefault, - base::Unretained(this))); + web_ui()->RegisterMessageCallback( + "removeHandler", + base::BindRepeating(&ProtocolHandlersHandler::HandleRemoveHandler, + base::Unretained(this))); + web_ui()->RegisterMessageCallback( + "setHandlersEnabled", + base::BindRepeating(&ProtocolHandlersHandler::HandleSetHandlersEnabled, + base::Unretained(this))); + web_ui()->RegisterMessageCallback( + "setDefault", + base::BindRepeating(&ProtocolHandlersHandler::HandleSetDefault, + base::Unretained(this))); } ProtocolHandlerRegistry* ProtocolHandlersHandler::GetProtocolHandlerRegistry() { @@ -71,6 +77,8 @@ static void GetHandlersAsListValue( for (handler = handlers.begin(); handler != handlers.end(); ++handler) { std::unique_ptr<base::DictionaryValue> handler_value( new base::DictionaryValue()); + handler_value->SetString("protocol_display_name", + handler->GetProtocolDisplayName()); handler_value->SetString("protocol", handler->protocol()); handler_value->SetString("spec", handler->url().spec()); handler_value->SetString("host", handler->url().host()); @@ -83,6 +91,8 @@ void ProtocolHandlersHandler::GetHandlersForProtocol( const std::string& protocol, base::DictionaryValue* handlers_value) { ProtocolHandlerRegistry* registry = GetProtocolHandlerRegistry(); + handlers_value->SetString("protocol_display_name", + ProtocolHandler::GetProtocolDisplayName(protocol)); handlers_value->SetString("protocol", protocol); auto handlers_list = std::make_unique<base::ListValue>(); diff --git a/chromium/chrome/browser/ui/webui/settings/reset_settings_handler.cc b/chromium/chrome/browser/ui/webui/settings/reset_settings_handler.cc index 6ecd5cc170d..4cc1ff9e229 100644 --- a/chromium/chrome/browser/ui/webui/settings/reset_settings_handler.cc +++ b/chromium/chrome/browser/ui/webui/settings/reset_settings_handler.cc @@ -105,30 +105,36 @@ void ResetSettingsHandler::OnJavascriptDisallowed() { } void ResetSettingsHandler::RegisterMessages() { - web_ui()->RegisterMessageCallback("performResetProfileSettings", - base::Bind(&ResetSettingsHandler::HandleResetProfileSettings, - base::Unretained(this))); - web_ui()->RegisterMessageCallback("onShowResetProfileDialog", - base::Bind(&ResetSettingsHandler::OnShowResetProfileDialog, - base::Unretained(this))); - web_ui()->RegisterMessageCallback("getReportedSettings", - base::Bind(&ResetSettingsHandler::HandleGetReportedSettings, - base::Unretained(this))); - web_ui()->RegisterMessageCallback("onHideResetProfileDialog", - base::Bind(&ResetSettingsHandler::OnHideResetProfileDialog, - base::Unretained(this))); - web_ui()->RegisterMessageCallback("onHideResetProfileBanner", - base::Bind(&ResetSettingsHandler::OnHideResetProfileBanner, - base::Unretained(this))); + web_ui()->RegisterMessageCallback( + "performResetProfileSettings", + base::BindRepeating(&ResetSettingsHandler::HandleResetProfileSettings, + base::Unretained(this))); + web_ui()->RegisterMessageCallback( + "onShowResetProfileDialog", + base::BindRepeating(&ResetSettingsHandler::OnShowResetProfileDialog, + base::Unretained(this))); + web_ui()->RegisterMessageCallback( + "getReportedSettings", + base::BindRepeating(&ResetSettingsHandler::HandleGetReportedSettings, + base::Unretained(this))); + web_ui()->RegisterMessageCallback( + "onHideResetProfileDialog", + base::BindRepeating(&ResetSettingsHandler::OnHideResetProfileDialog, + base::Unretained(this))); + web_ui()->RegisterMessageCallback( + "onHideResetProfileBanner", + base::BindRepeating(&ResetSettingsHandler::OnHideResetProfileBanner, + base::Unretained(this))); web_ui()->RegisterMessageCallback( "getTriggeredResetToolName", - base::Bind(&ResetSettingsHandler::HandleGetTriggeredResetToolName, - base::Unretained(this))); + base::BindRepeating( + &ResetSettingsHandler::HandleGetTriggeredResetToolName, + base::Unretained(this))); #if defined(OS_CHROMEOS) web_ui()->RegisterMessageCallback( - "onPowerwashDialogShow", - base::Bind(&ResetSettingsHandler::OnShowPowerwashDialog, - base::Unretained(this))); + "onPowerwashDialogShow", + base::BindRepeating(&ResetSettingsHandler::OnShowPowerwashDialog, + base::Unretained(this))); #endif // defined(OS_CHROMEOS) } 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 f017287acdf..d43930fb1e8 100644 --- a/chromium/chrome/browser/ui/webui/settings/safe_browsing_handler.cc +++ b/chromium/chrome/browser/ui/webui/settings/safe_browsing_handler.cc @@ -13,17 +13,33 @@ namespace settings { +namespace { + +base::DictionaryValue GetSberStateDictionaryValue(const PrefService& prefs) { + base::DictionaryValue dict; + dict.SetBoolean("enabled", safe_browsing::IsExtendedReportingEnabled(prefs)); + // TODO(crbug.com/813107): SBEROIA policy is being deprecated, revisit this + // after it is removed. + dict.SetBoolean("managed", + !safe_browsing::IsExtendedReportingOptInAllowed(prefs) || + safe_browsing::IsExtendedReportingPolicyManaged(prefs)); + return dict; +} + +} // namespace + SafeBrowsingHandler::SafeBrowsingHandler(PrefService* prefs) : prefs_(prefs) {} SafeBrowsingHandler::~SafeBrowsingHandler() {} void SafeBrowsingHandler::RegisterMessages() { web_ui()->RegisterMessageCallback( "getSafeBrowsingExtendedReporting", - base::Bind(&SafeBrowsingHandler::HandleGetSafeBrowsingExtendedReporting, - base::Unretained(this))); + base::BindRepeating( + &SafeBrowsingHandler::HandleGetSafeBrowsingExtendedReporting, + base::Unretained(this))); web_ui()->RegisterMessageCallback( "setSafeBrowsingExtendedReportingEnabled", - base::Bind( + base::BindRepeating( &SafeBrowsingHandler::HandleSetSafeBrowsingExtendedReportingEnabled, base::Unretained(this))); } @@ -48,16 +64,7 @@ void SafeBrowsingHandler::HandleGetSafeBrowsingExtendedReporting( const base::Value* callback_id; CHECK(args->Get(0, &callback_id)); - base::DictionaryValue dict; - dict.SetBoolean("enabled", - safe_browsing::IsExtendedReportingEnabled(*prefs_)); - // TODO(crbug.com/813107): SBEROIA policy is being deprecated, revisit this - // after it is removed. - dict.SetBoolean("managed", - !safe_browsing::IsExtendedReportingOptInAllowed(*prefs_) || - safe_browsing::IsExtendedReportingPolicyManaged(*prefs_)); - - ResolveJavascriptCallback(*callback_id, dict); + ResolveJavascriptCallback(*callback_id, GetSberStateDictionaryValue(*prefs_)); } void SafeBrowsingHandler::HandleSetSafeBrowsingExtendedReportingEnabled( @@ -72,8 +79,8 @@ void SafeBrowsingHandler::OnPrefChanged(const std::string& pref_name) { DCHECK(pref_name == prefs::kSafeBrowsingExtendedReportingEnabled || pref_name == prefs::kSafeBrowsingScoutReportingEnabled); - base::Value is_enabled(safe_browsing::IsExtendedReportingEnabled(*prefs_)); - FireWebUIListener("safe-browsing-extended-reporting-change", is_enabled); + FireWebUIListener("safe-browsing-extended-reporting-change", + GetSberStateDictionaryValue(*prefs_)); } } // namespace settings 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 136df4229c4..bf98d178d56 100644 --- a/chromium/chrome/browser/ui/webui/settings/search_engines_handler.cc +++ b/chromium/chrome/browser/ui/webui/settings/search_engines_handler.cc @@ -61,32 +61,35 @@ SearchEnginesHandler::~SearchEnginesHandler() { void SearchEnginesHandler::RegisterMessages() { web_ui()->RegisterMessageCallback( "getSearchEnginesList", - base::Bind(&SearchEnginesHandler::HandleGetSearchEnginesList, - base::Unretained(this))); + base::BindRepeating(&SearchEnginesHandler::HandleGetSearchEnginesList, + base::Unretained(this))); web_ui()->RegisterMessageCallback( "setDefaultSearchEngine", - base::Bind(&SearchEnginesHandler::HandleSetDefaultSearchEngine, - base::Unretained(this))); + base::BindRepeating(&SearchEnginesHandler::HandleSetDefaultSearchEngine, + base::Unretained(this))); web_ui()->RegisterMessageCallback( "removeSearchEngine", - base::Bind(&SearchEnginesHandler::HandleRemoveSearchEngine, - base::Unretained(this))); + base::BindRepeating(&SearchEnginesHandler::HandleRemoveSearchEngine, + base::Unretained(this))); web_ui()->RegisterMessageCallback( "validateSearchEngineInput", - base::Bind(&SearchEnginesHandler::HandleValidateSearchEngineInput, - base::Unretained(this))); + base::BindRepeating( + &SearchEnginesHandler::HandleValidateSearchEngineInput, + base::Unretained(this))); web_ui()->RegisterMessageCallback( "searchEngineEditStarted", - base::Bind(&SearchEnginesHandler::HandleSearchEngineEditStarted, - base::Unretained(this))); + base::BindRepeating(&SearchEnginesHandler::HandleSearchEngineEditStarted, + base::Unretained(this))); web_ui()->RegisterMessageCallback( "searchEngineEditCancelled", - base::Bind(&SearchEnginesHandler::HandleSearchEngineEditCancelled, - base::Unretained(this))); + base::BindRepeating( + &SearchEnginesHandler::HandleSearchEngineEditCancelled, + base::Unretained(this))); web_ui()->RegisterMessageCallback( "searchEngineEditCompleted", - base::Bind(&SearchEnginesHandler::HandleSearchEngineEditCompleted, - base::Unretained(this))); + base::BindRepeating( + &SearchEnginesHandler::HandleSearchEngineEditCompleted, + base::Unretained(this))); } void SearchEnginesHandler::OnJavascriptAllowed() { @@ -111,6 +114,10 @@ SearchEnginesHandler::GetSearchEnginesList() { std::make_unique<base::ListValue>(); int last_default_engine_index = list_controller_.table_model()->last_search_engine_index(); + + // Sanity check for https://crbug.com/781703. + CHECK_GE(last_default_engine_index, 0); + for (int i = 0; i < last_default_engine_index; ++i) { // Third argument is false, as the engine is not from an extension. defaults->Append(CreateDictionaryForEngine(i, i == default_index)); @@ -120,6 +127,10 @@ SearchEnginesHandler::GetSearchEnginesList() { std::unique_ptr<base::ListValue> others = std::make_unique<base::ListValue>(); int last_other_engine_index = list_controller_.table_model()->last_other_engine_index(); + + // Sanity check for https://crbug.com/781703. + CHECK_LE(last_default_engine_index, last_other_engine_index); + for (int i = std::max(last_default_engine_index, 0); i < last_other_engine_index; ++i) { others->Append(CreateDictionaryForEngine(i, i == default_index)); @@ -129,6 +140,10 @@ SearchEnginesHandler::GetSearchEnginesList() { std::unique_ptr<base::ListValue> extensions = std::make_unique<base::ListValue>(); int engine_count = list_controller_.table_model()->RowCount(); + + // Sanity check for https://crbug.com/781703. + CHECK_LE(last_other_engine_index, engine_count); + for (int i = std::max(last_other_engine_index, 0); i < engine_count; ++i) { extensions->Append(CreateDictionaryForEngine(i, i == default_index)); } @@ -163,6 +178,11 @@ SearchEnginesHandler::CreateDictionaryForEngine(int index, bool is_default) { TemplateURLTableModel* table_model = list_controller_.table_model(); const TemplateURL* template_url = list_controller_.GetTemplateURL(index); + // Sanity check for https://crbug.com/781703. + CHECK_GE(index, 0); + CHECK_LT(index, table_model->RowCount()); + CHECK(template_url); + // The items which are to be written into |dict| are also described in // chrome/browser/resources/settings/search_engines_page/ // in @typedef for SearchEngine. Please update it whenever you add or remove 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 b4c04a907d9..f6e53a16445 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 @@ -93,18 +93,18 @@ ClearBrowsingDataHandler::~ClearBrowsingDataHandler() { void ClearBrowsingDataHandler::RegisterMessages() { web_ui()->RegisterMessageCallback( "clearBrowsingData", - base::Bind(&ClearBrowsingDataHandler::HandleClearBrowsingData, - base::Unretained(this))); + base::BindRepeating(&ClearBrowsingDataHandler::HandleClearBrowsingData, + base::Unretained(this))); web_ui()->RegisterMessageCallback( "getImportantSites", - base::Bind(&ClearBrowsingDataHandler::HandleGetImportantSites, - base::Unretained(this))); + base::BindRepeating(&ClearBrowsingDataHandler::HandleGetImportantSites, + base::Unretained(this))); web_ui()->RegisterMessageCallback( "initializeClearBrowsingData", - base::Bind(&ClearBrowsingDataHandler::HandleInitialize, - base::Unretained(this))); + base::BindRepeating(&ClearBrowsingDataHandler::HandleInitialize, + base::Unretained(this))); } void ClearBrowsingDataHandler::OnJavascriptAllowed() { 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 b10325705f8..2017d6c1fee 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 @@ -160,28 +160,32 @@ void CookiesViewHandler::RegisterMessages() { web_ui()->RegisterMessageCallback( "localData.getDisplayList", - base::Bind(&CookiesViewHandler::HandleGetDisplayList, - base::Unretained(this))); + base::BindRepeating(&CookiesViewHandler::HandleGetDisplayList, + base::Unretained(this))); web_ui()->RegisterMessageCallback( "localData.removeAll", - base::Bind(&CookiesViewHandler::HandleRemoveAll, base::Unretained(this))); + base::BindRepeating(&CookiesViewHandler::HandleRemoveAll, + base::Unretained(this))); web_ui()->RegisterMessageCallback( "localData.removeShownItems", - base::Bind(&CookiesViewHandler::HandleRemoveShownItems, - base::Unretained(this))); + base::BindRepeating(&CookiesViewHandler::HandleRemoveShownItems, + base::Unretained(this))); web_ui()->RegisterMessageCallback( - "localData.removeItem", base::Bind(&CookiesViewHandler::HandleRemoveItem, - base::Unretained(this))); + "localData.removeItem", + base::BindRepeating(&CookiesViewHandler::HandleRemoveItem, + base::Unretained(this))); web_ui()->RegisterMessageCallback( "localData.getCookieDetails", - base::Bind(&CookiesViewHandler::HandleGetCookieDetails, - base::Unretained(this))); + base::BindRepeating(&CookiesViewHandler::HandleGetCookieDetails, + base::Unretained(this))); web_ui()->RegisterMessageCallback( "localData.removeCookie", - base::Bind(&CookiesViewHandler::HandleRemove, base::Unretained(this))); + base::BindRepeating(&CookiesViewHandler::HandleRemove, + base::Unretained(this))); web_ui()->RegisterMessageCallback( - "localData.reload", base::Bind(&CookiesViewHandler::HandleReloadCookies, - base::Unretained(this))); + "localData.reload", + base::BindRepeating(&CookiesViewHandler::HandleReloadCookies, + base::Unretained(this))); } void CookiesViewHandler::TreeNodesAdded(ui::TreeModel* model, @@ -333,6 +337,7 @@ void CookiesViewHandler::HandleReloadCookies(const base::ListValue* args) { AllowJavascript(); cookies_tree_model_.reset(); + filter_.clear(); sorted_sites_.clear(); EnsureCookiesTreeModelCreated(); } diff --git a/chromium/chrome/browser/ui/webui/settings/settings_default_browser_handler.cc b/chromium/chrome/browser/ui/webui/settings/settings_default_browser_handler.cc index 66932e563b6..bc66616f991 100644 --- a/chromium/chrome/browser/ui/webui/settings/settings_default_browser_handler.cc +++ b/chromium/chrome/browser/ui/webui/settings/settings_default_browser_handler.cc @@ -39,12 +39,12 @@ DefaultBrowserHandler::~DefaultBrowserHandler() {} void DefaultBrowserHandler::RegisterMessages() { web_ui()->RegisterMessageCallback( "SettingsDefaultBrowser.requestDefaultBrowserState", - base::Bind(&DefaultBrowserHandler::RequestDefaultBrowserState, - base::Unretained(this))); + base::BindRepeating(&DefaultBrowserHandler::RequestDefaultBrowserState, + base::Unretained(this))); web_ui()->RegisterMessageCallback( "SettingsDefaultBrowser.setAsDefaultBrowser", - base::Bind(&DefaultBrowserHandler::SetAsDefaultBrowser, - base::Unretained(this))); + base::BindRepeating(&DefaultBrowserHandler::SetAsDefaultBrowser, + base::Unretained(this))); } void DefaultBrowserHandler::OnJavascriptAllowed() { diff --git a/chromium/chrome/browser/ui/webui/settings/settings_import_data_handler.cc b/chromium/chrome/browser/ui/webui/settings/settings_import_data_handler.cc index 4a019494a6d..32deebd14fb 100644 --- a/chromium/chrome/browser/ui/webui/settings/settings_import_data_handler.cc +++ b/chromium/chrome/browser/ui/webui/settings/settings_import_data_handler.cc @@ -60,14 +60,15 @@ void ImportDataHandler::RegisterMessages() { web_ui()->RegisterMessageCallback( "initializeImportDialog", - base::Bind(&ImportDataHandler::InitializeDialog, base::Unretained(this))); + base::BindRepeating(&ImportDataHandler::InitializeDialog, + base::Unretained(this))); web_ui()->RegisterMessageCallback( - "importData", - base::Bind(&ImportDataHandler::ImportData, base::Unretained(this))); + "importData", base::BindRepeating(&ImportDataHandler::ImportData, + base::Unretained(this))); web_ui()->RegisterMessageCallback( "importFromBookmarksFile", - base::Bind(&ImportDataHandler::HandleChooseBookmarksFile, - base::Unretained(this))); + base::BindRepeating(&ImportDataHandler::HandleChooseBookmarksFile, + base::Unretained(this))); } void ImportDataHandler::OnJavascriptDisallowed() { 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 37fc2ac17b3..5a68d2419c3 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 @@ -58,31 +58,35 @@ ManageProfileHandler::~ManageProfileHandler() {} void ManageProfileHandler::RegisterMessages() { web_ui()->RegisterMessageCallback( "getAvailableIcons", - base::Bind(&ManageProfileHandler::HandleGetAvailableIcons, - base::Unretained(this))); + base::BindRepeating(&ManageProfileHandler::HandleGetAvailableIcons, + base::Unretained(this))); web_ui()->RegisterMessageCallback( "setProfileIconToGaiaAvatar", - base::Bind(&ManageProfileHandler::HandleSetProfileIconToGaiaAvatar, - base::Unretained(this))); + base::BindRepeating( + &ManageProfileHandler::HandleSetProfileIconToGaiaAvatar, + base::Unretained(this))); web_ui()->RegisterMessageCallback( "setProfileIconToDefaultAvatar", - base::Bind(&ManageProfileHandler::HandleSetProfileIconToDefaultAvatar, - base::Unretained(this))); + base::BindRepeating( + &ManageProfileHandler::HandleSetProfileIconToDefaultAvatar, + base::Unretained(this))); web_ui()->RegisterMessageCallback( - "setProfileName", base::Bind(&ManageProfileHandler::HandleSetProfileName, - base::Unretained(this))); + "setProfileName", + base::BindRepeating(&ManageProfileHandler::HandleSetProfileName, + base::Unretained(this))); web_ui()->RegisterMessageCallback( "requestProfileShortcutStatus", - base::Bind(&ManageProfileHandler::HandleRequestProfileShortcutStatus, - base::Unretained(this))); + base::BindRepeating( + &ManageProfileHandler::HandleRequestProfileShortcutStatus, + base::Unretained(this))); web_ui()->RegisterMessageCallback( "addProfileShortcut", - base::Bind(&ManageProfileHandler::HandleAddProfileShortcut, - base::Unretained(this))); + base::BindRepeating(&ManageProfileHandler::HandleAddProfileShortcut, + base::Unretained(this))); web_ui()->RegisterMessageCallback( "removeProfileShortcut", - base::Bind(&ManageProfileHandler::HandleRemoveProfileShortcut, - base::Unretained(this))); + base::BindRepeating(&ManageProfileHandler::HandleRemoveProfileShortcut, + base::Unretained(this))); } void ManageProfileHandler::OnJavascriptAllowed() { @@ -94,6 +98,12 @@ void ManageProfileHandler::OnJavascriptDisallowed() { observer_.RemoveAll(); } +void ManageProfileHandler::OnProfileHighResAvatarLoaded( + const base::FilePath& profile_path) { + // GAIA image is loaded asynchronously. + FireWebUIListener("available-icons-changed", *GetAvailableIcons()); +} + void ManageProfileHandler::OnProfileAvatarChanged( const base::FilePath& profile_path) { // This is necessary to send the potentially updated GAIA photo. @@ -113,9 +123,20 @@ void ManageProfileHandler::HandleGetAvailableIcons( } std::unique_ptr<base::ListValue> ManageProfileHandler::GetAvailableIcons() { - std::unique_ptr<base::ListValue> image_url_list( + std::unique_ptr<base::ListValue> avatars( profiles::GetDefaultProfileAvatarIconsAndLabels()); + PrefService* pref_service = profile_->GetPrefs(); + bool using_gaia = pref_service->GetBoolean(prefs::kProfileUsingGAIAAvatar); + + // Select the avatar from the default set. + if (!using_gaia) { + size_t index = pref_service->GetInteger(prefs::kProfileAvatarIndex); + base::DictionaryValue* avatar = nullptr; + if (avatars->GetDictionary(index, &avatar)) + avatar->SetBoolean("selected", true); + } + // Add the GAIA picture to the beginning of the list if it is available. ProfileAttributesEntry* entry; if (g_browser_process->profile_manager()->GetProfileAttributesStorage(). @@ -130,11 +151,13 @@ std::unique_ptr<base::ListValue> ManageProfileHandler::GetAvailableIcons() { "label", l10n_util::GetStringUTF16(IDS_SETTINGS_CHANGE_PICTURE_PROFILE_PHOTO)); gaia_picture_info->SetBoolean("isGaiaAvatar", true); - image_url_list->Insert(0, std::move(gaia_picture_info)); + if (using_gaia) + gaia_picture_info->SetBoolean("selected", true); + avatars->Insert(0, std::move(gaia_picture_info)); } } - return image_url_list; + return avatars; } void ManageProfileHandler::HandleSetProfileIconToGaiaAvatar( diff --git a/chromium/chrome/browser/ui/webui/settings/settings_manage_profile_handler.h b/chromium/chrome/browser/ui/webui/settings/settings_manage_profile_handler.h index 0929d3db294..659ef79b1f8 100644 --- a/chromium/chrome/browser/ui/webui/settings/settings_manage_profile_handler.h +++ b/chromium/chrome/browser/ui/webui/settings/settings_manage_profile_handler.h @@ -32,6 +32,10 @@ class ManageProfileHandler : public settings::SettingsPageUIHandler, // ProfileAttributesStorage::Observer: void OnProfileAvatarChanged(const base::FilePath& profile_path) override; + // ProfileAttributesStorage::Observer: + void OnProfileHighResAvatarLoaded( + const base::FilePath& profile_path) override; + private: FRIEND_TEST_ALL_PREFIXES(ManageProfileHandlerTest, HandleSetProfileIconToGaiaAvatar); @@ -39,6 +43,8 @@ class ManageProfileHandler : public settings::SettingsPageUIHandler, HandleSetProfileIconToDefaultAvatar); FRIEND_TEST_ALL_PREFIXES(ManageProfileHandlerTest, HandleSetProfileName); FRIEND_TEST_ALL_PREFIXES(ManageProfileHandlerTest, HandleGetAvailableIcons); + FRIEND_TEST_ALL_PREFIXES(ManageProfileHandlerTest, + HandleGetAvailableIconsGaiaAvatarSelected); // Callback for the "getAvailableIcons" message. // Sends the array of default profile icon URLs and profile names to WebUI. diff --git a/chromium/chrome/browser/ui/webui/settings/settings_manage_profile_handler_unittest.cc b/chromium/chrome/browser/ui/webui/settings/settings_manage_profile_handler_unittest.cc index 5a2e216865b..d981468902e 100644 --- a/chromium/chrome/browser/ui/webui/settings/settings_manage_profile_handler_unittest.cc +++ b/chromium/chrome/browser/ui/webui/settings/settings_manage_profile_handler_unittest.cc @@ -45,7 +45,30 @@ class ManageProfileHandlerTest : public testing::Test { web_ui()->ClearTrackedCalls(); } - void VerifyIconList(const base::Value* value) { + void VerifyIconListWithNoneSelected(const base::Value* value) { + VerifyIconList(value, 0 /* ignored */, true); + } + + void VerifyIconListWithSingleSelection(const base::Value* value, + size_t selected_index) { + VerifyIconList(value, selected_index, false); + } + + content::TestWebUI* web_ui() { return &web_ui_; } + Profile* profile() const { return profile_; } + TestManageProfileHandler* handler() const { return handler_.get(); } + + private: + content::TestBrowserThreadBundle thread_bundle_; + TestingProfileManager profile_manager_; + content::TestWebUI web_ui_; + + Profile* profile_; + std::unique_ptr<TestManageProfileHandler> handler_; + + void VerifyIconList(const base::Value* value, + size_t selected_index, + bool all_not_selected) { const base::ListValue* icons = nullptr; ASSERT_TRUE(value->GetAsList(&icons)); @@ -61,20 +84,16 @@ class ManageProfileHandlerTest : public testing::Test { std::string icon_label; EXPECT_TRUE(icon->GetString("label", &icon_label)); EXPECT_FALSE(icon_label.empty()); + bool icon_selected; + bool has_icon_selected = icon->GetBoolean("selected", &icon_selected); + if (all_not_selected) { + EXPECT_FALSE(has_icon_selected); + } else if (selected_index == i) { + EXPECT_TRUE(has_icon_selected); + EXPECT_TRUE(icon_selected); + } } } - - content::TestWebUI* web_ui() { return &web_ui_; } - Profile* profile() const { return profile_; } - TestManageProfileHandler* handler() const { return handler_.get(); } - - private: - content::TestBrowserThreadBundle thread_bundle_; - TestingProfileManager profile_manager_; - content::TestWebUI web_ui_; - - Profile* profile_; - std::unique_ptr<TestManageProfileHandler> handler_; }; TEST_F(ManageProfileHandlerTest, HandleSetProfileIconToGaiaAvatar) { @@ -106,6 +125,30 @@ TEST_F(ManageProfileHandlerTest, HandleSetProfileName) { } TEST_F(ManageProfileHandlerTest, HandleGetAvailableIcons) { + PrefService* pref_service = profile()->GetPrefs(); + pref_service->SetInteger(prefs::kProfileAvatarIndex, 7); + + base::ListValue list_args_1; + list_args_1.AppendString("get-icons-callback-id"); + handler()->HandleGetAvailableIcons(&list_args_1); + + EXPECT_EQ(1U, web_ui()->call_data().size()); + + const content::TestWebUI::CallData& data_1 = *web_ui()->call_data().back(); + EXPECT_EQ("cr.webUIResponse", data_1.function_name()); + + std::string callback_id_1; + ASSERT_TRUE(data_1.arg1()->GetAsString(&callback_id_1)); + EXPECT_EQ("get-icons-callback-id", callback_id_1); + + VerifyIconListWithSingleSelection(data_1.arg3(), 7); +} + +TEST_F(ManageProfileHandlerTest, HandleGetAvailableIconsGaiaAvatarSelected) { + PrefService* pref_service = profile()->GetPrefs(); + pref_service->SetInteger(prefs::kProfileAvatarIndex, 7); + pref_service->SetBoolean(prefs::kProfileUsingGAIAAvatar, true); + base::ListValue list_args; list_args.AppendString("get-icons-callback-id"); handler()->HandleGetAvailableIcons(&list_args); @@ -119,10 +162,13 @@ TEST_F(ManageProfileHandlerTest, HandleGetAvailableIcons) { ASSERT_TRUE(data.arg1()->GetAsString(&callback_id)); EXPECT_EQ("get-icons-callback-id", callback_id); - VerifyIconList(data.arg3()); + VerifyIconListWithNoneSelected(data.arg3()); } TEST_F(ManageProfileHandlerTest, ProfileAvatarChangedWebUIEvent) { + PrefService* pref_service = profile()->GetPrefs(); + pref_service->SetInteger(prefs::kProfileAvatarIndex, 12); + handler()->OnProfileAvatarChanged(base::FilePath()); EXPECT_EQ(1U, web_ui()->call_data().size()); @@ -133,8 +179,7 @@ TEST_F(ManageProfileHandlerTest, ProfileAvatarChangedWebUIEvent) { std::string event_id; ASSERT_TRUE(data.arg1()->GetAsString(&event_id)); EXPECT_EQ("available-icons-changed", event_id); - - VerifyIconList(data.arg2()); + VerifyIconListWithSingleSelection(data.arg2(), 12); } } // namespace settings diff --git a/chromium/chrome/browser/ui/webui/settings/settings_media_devices_selection_handler.cc b/chromium/chrome/browser/ui/webui/settings/settings_media_devices_selection_handler.cc index 17987af0a56..9c91e087592 100644 --- a/chromium/chrome/browser/ui/webui/settings/settings_media_devices_selection_handler.cc +++ b/chromium/chrome/browser/ui/webui/settings/settings_media_devices_selection_handler.cc @@ -46,12 +46,16 @@ void MediaDevicesSelectionHandler::OnJavascriptDisallowed() { } void MediaDevicesSelectionHandler::RegisterMessages() { - web_ui()->RegisterMessageCallback("getDefaultCaptureDevices", - base::Bind(&MediaDevicesSelectionHandler::GetDefaultCaptureDevices, - base::Unretained(this))); - web_ui()->RegisterMessageCallback("setDefaultCaptureDevice", - base::Bind(&MediaDevicesSelectionHandler::SetDefaultCaptureDevice, - base::Unretained(this))); + web_ui()->RegisterMessageCallback( + "getDefaultCaptureDevices", + base::BindRepeating( + &MediaDevicesSelectionHandler::GetDefaultCaptureDevices, + base::Unretained(this))); + web_ui()->RegisterMessageCallback( + "setDefaultCaptureDevice", + base::BindRepeating( + &MediaDevicesSelectionHandler::SetDefaultCaptureDevice, + base::Unretained(this))); } void MediaDevicesSelectionHandler::OnUpdateAudioDevices( diff --git a/chromium/chrome/browser/ui/webui/settings/settings_startup_pages_handler.cc b/chromium/chrome/browser/ui/webui/settings/settings_startup_pages_handler.cc index 4b128752b02..36037ef3dc4 100644 --- a/chromium/chrome/browser/ui/webui/settings/settings_startup_pages_handler.cc +++ b/chromium/chrome/browser/ui/webui/settings/settings_startup_pages_handler.cc @@ -29,21 +29,27 @@ void StartupPagesHandler::RegisterMessages() { if (Profile::FromWebUI(web_ui())->IsOffTheRecord()) return; - web_ui()->RegisterMessageCallback("addStartupPage", - base::Bind(&StartupPagesHandler::HandleAddStartupPage, - base::Unretained(this))); - web_ui()->RegisterMessageCallback("editStartupPage", - base::Bind(&StartupPagesHandler::HandleEditStartupPage, - base::Unretained(this))); - web_ui()->RegisterMessageCallback("onStartupPrefsPageLoad", - base::Bind(&StartupPagesHandler::HandleOnStartupPrefsPageLoad, - base::Unretained(this))); - web_ui()->RegisterMessageCallback("removeStartupPage", - base::Bind(&StartupPagesHandler::HandleRemoveStartupPage, - base::Unretained(this))); - web_ui()->RegisterMessageCallback("setStartupPagesToCurrentPages", - base::Bind(&StartupPagesHandler::HandleSetStartupPagesToCurrentPages, - base::Unretained(this))); + web_ui()->RegisterMessageCallback( + "addStartupPage", + base::BindRepeating(&StartupPagesHandler::HandleAddStartupPage, + base::Unretained(this))); + web_ui()->RegisterMessageCallback( + "editStartupPage", + base::BindRepeating(&StartupPagesHandler::HandleEditStartupPage, + base::Unretained(this))); + web_ui()->RegisterMessageCallback( + "onStartupPrefsPageLoad", + base::BindRepeating(&StartupPagesHandler::HandleOnStartupPrefsPageLoad, + base::Unretained(this))); + web_ui()->RegisterMessageCallback( + "removeStartupPage", + base::BindRepeating(&StartupPagesHandler::HandleRemoveStartupPage, + base::Unretained(this))); + web_ui()->RegisterMessageCallback( + "setStartupPagesToCurrentPages", + base::BindRepeating( + &StartupPagesHandler::HandleSetStartupPagesToCurrentPages, + base::Unretained(this))); } void StartupPagesHandler::OnJavascriptAllowed() { 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 c413d8569ab..10862aa2adc 100644 --- a/chromium/chrome/browser/ui/webui/settings/site_settings_handler.cc +++ b/chromium/chrome/browser/ui/webui/settings/site_settings_handler.cc @@ -46,7 +46,7 @@ #include "extensions/common/permissions/api_permission.h" #include "extensions/common/permissions/permissions_data.h" #include "storage/browser/quota/quota_manager.h" -#include "third_party/WebKit/public/mojom/quota/quota_types.mojom.h" +#include "third_party/blink/public/mojom/quota/quota_types.mojom.h" #include "ui/base/l10n/l10n_util.h" #include "ui/base/text/bytes_formatting.h" @@ -125,70 +125,75 @@ SiteSettingsHandler::~SiteSettingsHandler() { void SiteSettingsHandler::RegisterMessages() { web_ui()->RegisterMessageCallback( "fetchUsageTotal", - base::Bind(&SiteSettingsHandler::HandleFetchUsageTotal, - base::Unretained(this))); + base::BindRepeating(&SiteSettingsHandler::HandleFetchUsageTotal, + base::Unretained(this))); web_ui()->RegisterMessageCallback( - "clearUsage", - base::Bind(&SiteSettingsHandler::HandleClearUsage, - base::Unretained(this))); + "clearUsage", base::BindRepeating(&SiteSettingsHandler::HandleClearUsage, + base::Unretained(this))); web_ui()->RegisterMessageCallback( "fetchUsbDevices", - base::Bind(&SiteSettingsHandler::HandleFetchUsbDevices, - base::Unretained(this))); + base::BindRepeating(&SiteSettingsHandler::HandleFetchUsbDevices, + base::Unretained(this))); web_ui()->RegisterMessageCallback( "removeUsbDevice", - base::Bind(&SiteSettingsHandler::HandleRemoveUsbDevice, - base::Unretained(this))); + base::BindRepeating(&SiteSettingsHandler::HandleRemoveUsbDevice, + base::Unretained(this))); web_ui()->RegisterMessageCallback( "setDefaultValueForContentType", - base::Bind(&SiteSettingsHandler::HandleSetDefaultValueForContentType, - base::Unretained(this))); + base::BindRepeating( + &SiteSettingsHandler::HandleSetDefaultValueForContentType, + base::Unretained(this))); web_ui()->RegisterMessageCallback( "getDefaultValueForContentType", - base::Bind(&SiteSettingsHandler::HandleGetDefaultValueForContentType, - base::Unretained(this))); + base::BindRepeating( + &SiteSettingsHandler::HandleGetDefaultValueForContentType, + base::Unretained(this))); web_ui()->RegisterMessageCallback( "getExceptionList", - base::Bind(&SiteSettingsHandler::HandleGetExceptionList, - base::Unretained(this))); + base::BindRepeating(&SiteSettingsHandler::HandleGetExceptionList, + base::Unretained(this))); web_ui()->RegisterMessageCallback( "getOriginPermissions", - base::Bind(&SiteSettingsHandler::HandleGetOriginPermissions, - base::Unretained(this))); + base::BindRepeating(&SiteSettingsHandler::HandleGetOriginPermissions, + base::Unretained(this))); web_ui()->RegisterMessageCallback( "setOriginPermissions", - base::Bind(&SiteSettingsHandler::HandleSetOriginPermissions, - base::Unretained(this))); + base::BindRepeating(&SiteSettingsHandler::HandleSetOriginPermissions, + base::Unretained(this))); web_ui()->RegisterMessageCallback( - "clearFlashPref", base::Bind(&SiteSettingsHandler::HandleClearFlashPref, - base::Unretained(this))); + "clearFlashPref", + base::BindRepeating(&SiteSettingsHandler::HandleClearFlashPref, + base::Unretained(this))); web_ui()->RegisterMessageCallback( "resetCategoryPermissionForPattern", - base::Bind(&SiteSettingsHandler::HandleResetCategoryPermissionForPattern, - base::Unretained(this))); + base::BindRepeating( + &SiteSettingsHandler::HandleResetCategoryPermissionForPattern, + base::Unretained(this))); web_ui()->RegisterMessageCallback( "setCategoryPermissionForPattern", - base::Bind(&SiteSettingsHandler::HandleSetCategoryPermissionForPattern, - base::Unretained(this))); + base::BindRepeating( + &SiteSettingsHandler::HandleSetCategoryPermissionForPattern, + base::Unretained(this))); web_ui()->RegisterMessageCallback( - "isOriginValid", base::Bind(&SiteSettingsHandler::HandleIsOriginValid, - base::Unretained(this))); + "isOriginValid", + base::BindRepeating(&SiteSettingsHandler::HandleIsOriginValid, + base::Unretained(this))); web_ui()->RegisterMessageCallback( "isPatternValid", - base::Bind(&SiteSettingsHandler::HandleIsPatternValid, - base::Unretained(this))); + base::BindRepeating(&SiteSettingsHandler::HandleIsPatternValid, + base::Unretained(this))); web_ui()->RegisterMessageCallback( "updateIncognitoStatus", - base::Bind(&SiteSettingsHandler::HandleUpdateIncognitoStatus, - base::Unretained(this))); + base::BindRepeating(&SiteSettingsHandler::HandleUpdateIncognitoStatus, + base::Unretained(this))); web_ui()->RegisterMessageCallback( "fetchZoomLevels", - base::Bind(&SiteSettingsHandler::HandleFetchZoomLevels, - base::Unretained(this))); + base::BindRepeating(&SiteSettingsHandler::HandleFetchZoomLevels, + base::Unretained(this))); web_ui()->RegisterMessageCallback( "removeZoomLevel", - base::Bind(&SiteSettingsHandler::HandleRemoveZoomLevel, - base::Unretained(this))); + base::BindRepeating(&SiteSettingsHandler::HandleRemoveZoomLevel, + base::Unretained(this))); } void SiteSettingsHandler::OnJavascriptAllowed() { @@ -780,6 +785,7 @@ void SiteSettingsHandler::HandleIsOriginValid(const base::ListValue* args) { void SiteSettingsHandler::HandleIsPatternValid( const base::ListValue* args) { + AllowJavascript(); CHECK_EQ(2U, args->GetSize()); const base::Value* callback_id; CHECK(args->Get(0, &callback_id)); 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 01be8c4849d..9c78d451b85 100644 --- a/chromium/chrome/browser/ui/webui/settings/site_settings_handler.h +++ b/chromium/chrome/browser/ui/webui/settings/site_settings_handler.h @@ -16,8 +16,8 @@ #include "content/public/browser/host_zoom_map.h" #include "content/public/browser/notification_observer.h" #include "content/public/browser/notification_registrar.h" -#include "ppapi/features/features.h" -#include "third_party/WebKit/public/mojom/quota/quota_types.mojom.h" +#include "ppapi/buildflags/buildflags.h" +#include "third_party/blink/public/mojom/quota/quota_types.mojom.h" class HostContentSettingsMap; class Profile; 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 7e40e5e5081..6efafe49981 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 @@ -31,7 +31,7 @@ #include "content/public/test/test_web_ui.h" #include "extensions/browser/extension_registry.h" #include "extensions/common/extension_builder.h" -#include "ppapi/features/features.h" +#include "ppapi/buildflags/buildflags.h" #include "testing/gtest/include/gtest/gtest.h" #if defined(OS_CHROMEOS) diff --git a/chromium/chrome/browser/ui/webui/settings/system_handler.cc b/chromium/chrome/browser/ui/webui/settings/system_handler.cc index c87ab9fe623..7c7082779b9 100644 --- a/chromium/chrome/browser/ui/webui/settings/system_handler.cc +++ b/chromium/chrome/browser/ui/webui/settings/system_handler.cc @@ -28,8 +28,9 @@ void SystemHandler::AddLoadTimeData(content::WebUIDataSource* data_source) { void SystemHandler::RegisterMessages() { web_ui()->RegisterMessageCallback( - "showProxySettings", base::Bind(&SystemHandler::HandleShowProxySettings, - base::Unretained(this))); + "showProxySettings", + base::BindRepeating(&SystemHandler::HandleShowProxySettings, + base::Unretained(this))); } void SystemHandler::HandleShowProxySettings(const base::ListValue* /*args*/) { diff --git a/chromium/chrome/browser/ui/webui/settings/tts_handler.cc b/chromium/chrome/browser/ui/webui/settings/tts_handler.cc new file mode 100644 index 00000000000..fcb19846e6a --- /dev/null +++ b/chromium/chrome/browser/ui/webui/settings/tts_handler.cc @@ -0,0 +1,52 @@ +// 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/tts_handler.h" + +#include "base/bind.h" +#include "base/values.h" +#include "chrome/browser/browser_process.h" +#include "chrome/browser/profiles/profile.h" +#include "chrome/browser/speech/tts_controller_impl.h" +#include "chrome/common/extensions/extension_constants.h" +#include "content/public/browser/web_ui.h" +#include "ui/base/l10n/l10n_util.h" + +namespace settings { + +void TtsHandler::HandleGetGoogleTtsVoiceData(const base::ListValue* args) { + OnVoicesChanged(); +} + +void TtsHandler::OnVoicesChanged() { + TtsControllerImpl* impl = TtsControllerImpl::GetInstance(); + std::vector<VoiceData> voices; + impl->GetVoices(Profile::FromWebUI(web_ui()), &voices); + base::ListValue responses; + for (const auto& voice : voices) { + if (voice.extension_id != extension_misc::kSpeechSynthesisExtensionId) + continue; + + base::DictionaryValue response; + response.SetPath({"name"}, base::Value(voice.name)); + response.SetPath( + {"language"}, + base::Value(l10n_util::GetDisplayNameForLocale( + voice.lang, g_browser_process->GetApplicationLocale(), true))); + response.SetPath({"builtIn"}, base::Value(true)); + responses.GetList().push_back(std::move(response)); + } + AllowJavascript(); + CallJavascriptFunction("cr.webUIListenerCallback", + base::Value("google-voice-data-updated"), responses); +} + +void TtsHandler::RegisterMessages() { + web_ui()->RegisterMessageCallback( + "getGoogleTtsVoiceData", + base::BindRepeating(&TtsHandler::HandleGetGoogleTtsVoiceData, + base::Unretained(this))); +} + +} // namespace settings diff --git a/chromium/chrome/browser/ui/webui/settings/tts_handler.h b/chromium/chrome/browser/ui/webui/settings/tts_handler.h new file mode 100644 index 00000000000..36e76c5a592 --- /dev/null +++ b/chromium/chrome/browser/ui/webui/settings/tts_handler.h @@ -0,0 +1,35 @@ +// 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_TTS_HANDLER_H_ +#define CHROME_BROWSER_UI_WEBUI_SETTINGS_TTS_HANDLER_H_ + +#include "chrome/browser/speech/tts_controller.h" +#include "chrome/browser/ui/webui/settings/settings_page_ui_handler.h" + +namespace settings { + +// Chrome "/manageAccessibility/tts/*" settings page UI handler. +class TtsHandler : public SettingsPageUIHandler, public VoicesChangedDelegate { + public: + TtsHandler() = default; + ~TtsHandler() override = default; + + void HandleGetGoogleTtsVoiceData(const base::ListValue* args); + + // SettingsPageUIHandler implementation. + void RegisterMessages() override; + void OnJavascriptAllowed() override {} + void OnJavascriptDisallowed() override {} + + // VoicesChangedDelegate implementation. + void OnVoicesChanged() override; + + private: + DISALLOW_COPY_AND_ASSIGN(TtsHandler); +}; + +} // namespace settings + +#endif // CHROME_BROWSER_UI_WEBUI_SETTINGS_TTS_HANDLER_H_ |