summaryrefslogtreecommitdiffstats
path: root/chromium/chrome/browser/ui/webui/settings
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2018-05-03 13:42:47 +0200
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2018-05-15 10:27:51 +0000
commit8c5c43c7b138c9b4b0bf56d946e61d3bbc111bec (patch)
treed29d987c4d7b173cf853279b79a51598f104b403 /chromium/chrome/browser/ui/webui/settings
parent830c9e163d31a9180fadca926b3e1d7dfffb5021 (diff)
BASELINE: Update Chromium to 66.0.3359.156
Change-Id: I0c9831ad39911a086b6377b16f995ad75a51e441 Reviewed-by: Michal Klocek <michal.klocek@qt.io>
Diffstat (limited to 'chromium/chrome/browser/ui/webui/settings')
-rw-r--r--chromium/chrome/browser/ui/webui/settings/about_handler.cc3
-rw-r--r--chromium/chrome/browser/ui/webui/settings/appearance_handler.cc55
-rw-r--r--chromium/chrome/browser/ui/webui/settings/appearance_handler.h8
-rw-r--r--chromium/chrome/browser/ui/webui/settings/browser_lifetime_handler.cc2
-rw-r--r--chromium/chrome/browser/ui/webui/settings/change_password_handler.cc3
-rw-r--r--chromium/chrome/browser/ui/webui/settings/chromeos/cups_printers_handler.cc149
-rw-r--r--chromium/chrome/browser/ui/webui/settings/chromeos/cups_printers_handler.h7
-rw-r--r--chromium/chrome/browser/ui/webui/settings/chromeos/device_storage_handler.cc15
-rw-r--r--chromium/chrome/browser/ui/webui/settings/chromeos/device_storage_handler.h4
-rw-r--r--chromium/chrome/browser/ui/webui/settings/chromeos/fingerprint_handler.cc2
-rw-r--r--chromium/chrome/browser/ui/webui/settings/chromeos/fingerprint_handler.h2
-rw-r--r--chromium/chrome/browser/ui/webui/settings/downloads_handler_unittest.cc21
-rw-r--r--chromium/chrome/browser/ui/webui/settings/incompatible_applications_handler_win.cc168
-rw-r--r--chromium/chrome/browser/ui/webui/settings/incompatible_applications_handler_win.h58
-rw-r--r--chromium/chrome/browser/ui/webui/settings/md_settings_localized_strings_provider.cc167
-rw-r--r--chromium/chrome/browser/ui/webui/settings/md_settings_ui.cc23
-rw-r--r--chromium/chrome/browser/ui/webui/settings/metrics_reporting_handler.cc3
-rw-r--r--chromium/chrome/browser/ui/webui/settings/people_handler.cc108
-rw-r--r--chromium/chrome/browser/ui/webui/settings/people_handler.h26
-rw-r--r--chromium/chrome/browser/ui/webui/settings/people_handler_unittest.cc10
-rw-r--r--chromium/chrome/browser/ui/webui/settings/profile_info_handler.cc41
-rw-r--r--chromium/chrome/browser/ui/webui/settings/profile_info_handler.h15
-rw-r--r--chromium/chrome/browser/ui/webui/settings/profile_info_handler_unittest.cc49
-rw-r--r--chromium/chrome/browser/ui/webui/settings/protocol_handlers_handler.cc52
-rw-r--r--chromium/chrome/browser/ui/webui/settings/protocol_handlers_handler.h12
-rw-r--r--chromium/chrome/browser/ui/webui/settings/safe_browsing_handler.cc13
-rw-r--r--chromium/chrome/browser/ui/webui/settings/settings_clear_browsing_data_handler.cc82
-rw-r--r--chromium/chrome/browser/ui/webui/settings/settings_clear_browsing_data_handler.h9
-rw-r--r--chromium/chrome/browser/ui/webui/settings/site_settings_handler.cc45
-rw-r--r--chromium/chrome/browser/ui/webui/settings/site_settings_handler.h15
-rw-r--r--chromium/chrome/browser/ui/webui/settings/site_settings_handler_unittest.cc94
31 files changed, 825 insertions, 436 deletions
diff --git a/chromium/chrome/browser/ui/webui/settings/about_handler.cc b/chromium/chrome/browser/ui/webui/settings/about_handler.cc
index 11da4972a25..0e22bfc93e3 100644
--- a/chromium/chrome/browser/ui/webui/settings/about_handler.cc
+++ b/chromium/chrome/browser/ui/webui/settings/about_handler.cc
@@ -602,7 +602,8 @@ void AboutHandler::HandleRefreshTPMFirmwareUpdateStatus(
const base::ListValue* args) {
chromeos::tpm_firmware_update::ShouldOfferUpdateViaPowerwash(
base::Bind(&AboutHandler::RefreshTPMFirmwareUpdateStatus,
- weak_factory_.GetWeakPtr()));
+ weak_factory_.GetWeakPtr()),
+ base::TimeDelta());
}
void AboutHandler::RefreshTPMFirmwareUpdateStatus(bool update_available) {
diff --git a/chromium/chrome/browser/ui/webui/settings/appearance_handler.cc b/chromium/chrome/browser/ui/webui/settings/appearance_handler.cc
index 128c7f1efd1..3e9bb1a4d96 100644
--- a/chromium/chrome/browser/ui/webui/settings/appearance_handler.cc
+++ b/chromium/chrome/browser/ui/webui/settings/appearance_handler.cc
@@ -13,17 +13,13 @@
#include "content/public/browser/web_ui.h"
#if defined(OS_CHROMEOS)
-#include "chrome/browser/chromeos/login/users/wallpaper/wallpaper_manager.h"
#include "chrome/browser/ui/ash/wallpaper_controller_client.h"
-#include "chromeos/login/login_state.h"
-#include "components/user_manager/user_manager.h"
#endif
namespace settings {
AppearanceHandler::AppearanceHandler(content::WebUI* webui)
- : profile_(Profile::FromWebUI(webui)) {
-}
+ : profile_(Profile::FromWebUI(webui)), weak_ptr_factory_(this) {}
AppearanceHandler::~AppearanceHandler() {}
@@ -75,49 +71,28 @@ void AppearanceHandler::HandleUseSystemTheme(const base::ListValue* args) {
#if defined(OS_CHROMEOS)
void AppearanceHandler::IsWallpaperSettingVisible(const base::ListValue* args) {
CHECK_EQ(args->GetSize(), 1U);
- const base::Value* callback_id;
- CHECK(args->Get(0, &callback_id));
- AllowJavascript();
-
- bool is_wallpaper_visible = false;
- const chromeos::LoginState* login_state = chromeos::LoginState::Get();
- const chromeos::LoginState::LoggedInUserType user_type =
- login_state->GetLoggedInUserType();
- const user_manager::User* user =
- user_manager::UserManager::Get()->GetActiveUser();
-
- // Only login, whitelist types and active users are allowed to change
- // their wallpaper. Then show the wallpaper setting row for them.
- if (login_state->IsUserLoggedIn() && user &&
- (user_type == chromeos::LoginState::LOGGED_IN_USER_REGULAR ||
- user_type == chromeos::LoginState::LOGGED_IN_USER_OWNER ||
- user_type == chromeos::LoginState::LOGGED_IN_USER_PUBLIC_ACCOUNT ||
- user_type == chromeos::LoginState::LOGGED_IN_USER_SUPERVISED)) {
- is_wallpaper_visible = true;
- }
-
- ResolveJavascriptCallback(*callback_id, base::Value(is_wallpaper_visible));
+ WallpaperControllerClient::Get()->ShouldShowWallpaperSetting(
+ base::Bind(&AppearanceHandler::ResolveCallback,
+ weak_ptr_factory_.GetWeakPtr(), args->GetList()[0].Clone()));
}
void AppearanceHandler::IsWallpaperPolicyControlled(
const base::ListValue* args) {
CHECK_EQ(args->GetSize(), 1U);
- const base::Value* callback_id;
- CHECK(args->Get(0, &callback_id));
- AllowJavascript();
-
- ResolveJavascriptCallback(
- *callback_id,
- base::Value(chromeos::WallpaperManager::Get()->IsPolicyControlled(
- user_manager::UserManager::Get()->GetActiveUser()->GetAccountId())));
+ WallpaperControllerClient::Get()->IsActiveUserWallpaperControlledByPolicy(
+ base::Bind(&AppearanceHandler::ResolveCallback,
+ weak_ptr_factory_.GetWeakPtr(), args->GetList()[0].Clone()));
}
void AppearanceHandler::HandleOpenWallpaperManager(
- const base::ListValue* /*args*/) {
- if (!chromeos::WallpaperManager::Get()->IsPolicyControlled(
- user_manager::UserManager::Get()->GetActiveUser()->GetAccountId())) {
- WallpaperControllerClient::Get()->OpenWallpaperPicker();
- }
+ const base::ListValue* args) {
+ WallpaperControllerClient::Get()->OpenWallpaperPickerIfAllowed();
+}
+
+void AppearanceHandler::ResolveCallback(const base::Value& callback_id,
+ bool result) {
+ AllowJavascript();
+ ResolveJavascriptCallback(callback_id, base::Value(result));
}
#endif
diff --git a/chromium/chrome/browser/ui/webui/settings/appearance_handler.h b/chromium/chrome/browser/ui/webui/settings/appearance_handler.h
index d31af5aa186..3acb6d567f4 100644
--- a/chromium/chrome/browser/ui/webui/settings/appearance_handler.h
+++ b/chromium/chrome/browser/ui/webui/settings/appearance_handler.h
@@ -6,6 +6,7 @@
#define CHROME_BROWSER_UI_WEBUI_SETTINGS_APPEARANCE_HANDLER_H_
#include "base/macros.h"
+#include "base/memory/weak_ptr.h"
#include "chrome/browser/ui/webui/settings/settings_page_ui_handler.h"
namespace base {
@@ -41,7 +42,7 @@ class AppearanceHandler : public SettingsPageUIHandler {
#endif
#if defined(OS_CHROMEOS)
- // Whether should show the wallpaper setting row.
+ // Whether the wallpaper setting should be shown.
void IsWallpaperSettingVisible(const base::ListValue* args);
// Whether the wallpaper is policy controlled.
@@ -49,10 +50,15 @@ class AppearanceHandler : public SettingsPageUIHandler {
// Open the wallpaper manager app.
void HandleOpenWallpaperManager(const base::ListValue* args);
+
+ // Helper function to resolve the Javascript callback.
+ void ResolveCallback(const base::Value& callback_id, bool result);
#endif
Profile* profile_; // Weak pointer.
+ base::WeakPtrFactory<AppearanceHandler> weak_ptr_factory_;
+
DISALLOW_COPY_AND_ASSIGN(AppearanceHandler);
};
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 d8fce5d42bb..551123b58ae 100644
--- a/chromium/chrome/browser/ui/webui/settings/browser_lifetime_handler.cc
+++ b/chromium/chrome/browser/ui/webui/settings/browser_lifetime_handler.cc
@@ -75,7 +75,7 @@ void BrowserLifetimeHandler::HandleFactoryReset(
true);
prefs->CommitPendingWrite();
chrome::AttemptRelaunch();
- }));
+ }), base::TimeDelta());
return;
}
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 1590e25bf22..a077bd75bd2 100644
--- a/chromium/chrome/browser/ui/webui/settings/change_password_handler.cc
+++ b/chromium/chrome/browser/ui/webui/settings/change_password_handler.cc
@@ -60,7 +60,8 @@ void ChangePasswordHandler::HandleChangePassword(const base::ListValue* args) {
void ChangePasswordHandler::UpdateChangePasswordCardVisibility() {
FireWebUIListener(
"change-password-visibility",
- base::Value(safe_browsing::ChromePasswordProtectionService::
+ base::Value(service_->IsWarningEnabled() &&
+ safe_browsing::ChromePasswordProtectionService::
ShouldShowChangePasswordSettingUI(profile_)));
}
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 6d0cf18456f..a535d490d14 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
@@ -8,12 +8,14 @@
#include "base/bind.h"
#include "base/bind_helpers.h"
+#include "base/containers/flat_map.h"
#include "base/files/file_util.h"
#include "base/json/json_string_value_serializer.h"
#include "base/logging.h"
#include "base/metrics/histogram_macros.h"
#include "base/path_service.h"
#include "base/strings/string_util.h"
+#include "base/task_scheduler/post_task.h"
#include "base/threading/sequenced_task_runner_handle.h"
#include "base/values.h"
#include "chrome/browser/browser_process.h"
@@ -32,7 +34,11 @@
#include "chromeos/dbus/dbus_thread_manager.h"
#include "chromeos/dbus/debug_daemon_client.h"
#include "chromeos/printing/ppd_cache.h"
+#include "chromeos/printing/ppd_line_reader.h"
#include "chromeos/printing/ppd_provider.h"
+#include "chromeos/printing/printer_configuration.h"
+#include "chromeos/printing/printing_constants.h"
+#include "chromeos/printing/uri_components.h"
#include "content/public/browser/browser_context.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/web_ui.h"
@@ -40,33 +46,17 @@
#include "net/base/filename_util.h"
#include "net/url_request/url_request_context_getter.h"
#include "printing/backend/print_backend.h"
-#include "url/third_party/mozilla/url_parse.h"
namespace chromeos {
namespace settings {
namespace {
-constexpr char kIppScheme[] = "ipp";
-constexpr char kIppsScheme[] = "ipps";
-
-constexpr int kIppPort = 631;
-// IPPS commonly uses the HTTPS port despite the spec saying it should use the
-// IPP port.
-constexpr int kIppsPort = 443;
-
// These values are written to logs. New enum values can be added, but existing
// enums must never be renumbered or deleted and reused.
enum PpdSourceForHistogram { kUser = 0, kScs = 1, kPpdSourceMax };
-// A parsed representation of a printer uri.
-struct PrinterUri {
- bool encrypted = false;
- std::string scheme;
- std::string host;
- int port = url::SpecialPort::PORT_INVALID;
- std::string path;
-};
+constexpr int kPpdMaxLineLength = 255;
void RecordPpdSource(const PpdSourceForHistogram& source) {
UMA_HISTOGRAM_ENUMERATION("Printing.CUPS.PpdSource", source, kPpdSourceMax);
@@ -82,43 +72,6 @@ void RecordIppQuerySuccess(bool success) {
UMA_HISTOGRAM_BOOLEAN("Printing.CUPS.IppAttributesSuccess", success);
}
-// Parses |printer_uri| into its components and written into |uri|. Returns
-// true if the uri was parsed successfully, returns false otherwise. No changes
-// are made to |uri| if this function returns false.
-bool ParseUri(const std::string& printer_uri, PrinterUri* uri) {
- DCHECK(uri);
- const char* uri_ptr = printer_uri.c_str();
- url::Parsed parsed;
- url::ParseStandardURL(uri_ptr, printer_uri.length(), &parsed);
- if (!parsed.scheme.is_valid() || !parsed.host.is_valid() ||
- !parsed.path.is_valid()) {
- return false;
- }
- base::StringPiece scheme(&uri_ptr[parsed.scheme.begin], parsed.scheme.len);
- base::StringPiece host(&uri_ptr[parsed.host.begin], parsed.host.len);
- base::StringPiece path(&uri_ptr[parsed.path.begin], parsed.path.len);
-
- bool encrypted = scheme != kIppScheme;
- int port = ParsePort(uri_ptr, parsed.port);
- // Port not specified.
- if (port == url::SpecialPort::PORT_UNSPECIFIED ||
- port == url::SpecialPort::PORT_INVALID) {
- if (scheme == kIppScheme) {
- port = kIppPort;
- } else if (scheme == kIppsScheme) {
- port = kIppsPort;
- }
- }
-
- uri->encrypted = encrypted;
- uri->scheme = scheme.as_string();
- uri->host = host.as_string();
- uri->port = port;
- uri->path = path.as_string();
-
- return true;
-}
-
// Returns true if |printer_uri| is an IPP uri.
bool IsIppUri(base::StringPiece printer_uri) {
base::StringPiece::size_type separator_location =
@@ -136,15 +89,17 @@ bool IsIppUri(base::StringPiece printer_uri) {
// error to attempt this with a non-IPP printer.
void QueryAutoconf(const std::string& printer_uri,
const PrinterInfoCallback& callback) {
- PrinterUri uri;
+ auto optional = ParseUri(printer_uri);
// Behavior for querying a non-IPP uri is undefined and disallowed.
- if (!IsIppUri(printer_uri) || !ParseUri(printer_uri, &uri)) {
+ if (!IsIppUri(printer_uri) || !optional.has_value()) {
LOG(WARNING) << "Printer uri is invalid: " << printer_uri;
callback.Run(false, "", "", "", false);
return;
}
- QueryIppPrinter(uri.host, uri.port, uri.path, uri.encrypted, callback);
+ UriComponents uri = optional.value();
+ QueryIppPrinter(uri.host(), uri.port(), uri.path(), uri.encrypted(),
+ callback);
}
// Create an empty CupsPrinterInfo dictionary value. It should be consistent
@@ -193,8 +148,8 @@ std::unique_ptr<base::DictionaryValue> GetPrinterInfo(const Printer& printer) {
printer_info->SetString("printerModel", printer.model());
printer_info->SetString("printerMakeAndModel", printer.make_and_model());
- PrinterUri uri;
- if (!ParseUri(printer.uri(), &uri)) {
+ 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", "");
@@ -204,7 +159,9 @@ std::unique_ptr<base::DictionaryValue> GetPrinterInfo(const Printer& printer) {
return printer_info;
}
- if (base::ToLowerASCII(uri.scheme) == "usb") {
+ 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
@@ -213,12 +170,12 @@ std::unique_ptr<base::DictionaryValue> GetPrinterInfo(const Printer& printer) {
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));
+ 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));
+ printer_info->SetString("printerProtocol", base::ToLowerASCII(uri.scheme()));
return printer_info;
}
@@ -284,6 +241,16 @@ std::unique_ptr<chromeos::Printer> DictToPrinter(
return printer;
}
+std::string ReadFileToStringWithMaxSize(const base::FilePath& path,
+ int max_size) {
+ std::string contents;
+ // This call can fail, but it doesn't matter for our purposes. If it fails,
+ // we simply return an empty string for the contents, and it will be rejected
+ // as an invalid PPD.
+ base::ReadFileToStringWithMaxSize(path, &contents, max_size);
+ return contents;
+}
+
} // namespace
CupsPrintersHandler::CupsPrintersHandler(content::WebUI* webui)
@@ -348,7 +315,6 @@ void CupsPrintersHandler::RegisterMessages() {
void CupsPrintersHandler::OnJavascriptAllowed() {
printers_manager_->AddObserver(this);
- printers_manager_->Start();
}
void CupsPrintersHandler::OnJavascriptDisallowed() {
@@ -412,9 +378,8 @@ void CupsPrintersHandler::HandleRemoveCupsPrinter(const base::ListValue* args) {
printers_manager_->RemoveConfiguredPrinter(printer_id);
DebugDaemonClient* client = DBusThreadManager::Get()->GetDebugDaemonClient();
- client->CupsRemovePrinter(printer_name,
- base::Bind(&OnRemovedPrinter, protocol),
- base::Bind(&base::DoNothing));
+ client->CupsRemovePrinter(
+ printer_name, base::Bind(&OnRemovedPrinter, protocol), base::DoNothing());
}
void CupsPrintersHandler::HandleGetPrinterInfo(const base::ListValue* args) {
@@ -532,9 +497,17 @@ void CupsPrintersHandler::HandleAddCupsPrinter(const base::ListValue* args) {
CHECK(args->GetDictionary(0, &printer_dict));
std::unique_ptr<Printer> printer = DictToPrinter(*printer_dict);
- PrinterUri uri;
- if (!printer || !ParseUri(printer->uri(), &uri)) {
- LOG(ERROR) << "Failed to parse printer";
+ if (!printer) {
+ LOG(ERROR) << "Failed to parse printer URI";
+ OnAddPrinterError(PrinterSetupResult::kFatalError);
+ return;
+ }
+
+ auto optional = printer->GetUriComponents();
+ if (!optional.has_value()) {
+ // If the returned optional does not contain a value then it means that the
+ // printer's uri was not able to be parsed successfully.
+ LOG(ERROR) << "Failed to parse printer URI";
OnAddPrinterError(PrinterSetupResult::kFatalError);
return;
}
@@ -761,8 +734,26 @@ void CupsPrintersHandler::FileSelected(const base::FilePath& path,
int index,
void* params) {
DCHECK(!webui_callback_id_.empty());
+
+ // Load the beggining contents of the file located at |path| and callback into
+ // VerifyPpdContents() in order to determine whether the file appears to be a
+ // PPD file. The task's priority is USER_BLOCKING because the this task
+ // updates the UI as a result of a direct user action.
+ base::PostTaskWithTraitsAndReplyWithResult(
+ FROM_HERE, {base::MayBlock(), base::TaskPriority::USER_BLOCKING},
+ base::BindOnce(&ReadFileToStringWithMaxSize, path, kPpdMaxLineLength),
+ base::BindOnce(&CupsPrintersHandler::VerifyPpdContents,
+ weak_factory_.GetWeakPtr(), path));
+}
+
+void CupsPrintersHandler::VerifyPpdContents(const base::FilePath& path,
+ const std::string& contents) {
+ std::string result = "";
+ if (PpdLineReader::ContainsMagicNumber(contents, kPpdMaxLineLength))
+ result = path.value();
+
ResolveJavascriptCallback(base::Value(webui_callback_id_),
- base::Value(path.value()));
+ base::Value(result));
webui_callback_id_.clear();
}
@@ -837,11 +828,17 @@ void CupsPrintersHandler::HandleAddDiscoveredPrinter(
CHECK(args->GetString(0, &printer_id));
std::unique_ptr<Printer> printer = printers_manager_->GetPrinter(printer_id);
- PrinterUri uri;
- if (printer == nullptr || !ParseUri(printer->uri(), &uri)) {
+ if (printer == nullptr) {
// Printer disappeared, so we don't have information about it anymore and
- // can't really do much. Or the printer uri was not parsed successfully.
- // Fail the add.
+ // can't really do much. Fail the add.
+ FireWebUIListener("on-add-cups-printer", base::Value(false),
+ base::Value(printer_id));
+ return;
+ }
+
+ auto optional = printer->GetUriComponents();
+ if (!optional.has_value()) {
+ // The printer uri was not parsed successfully. Fail the add.
FireWebUIListener("on-add-cups-printer", base::Value(false),
base::Value(printer_id));
return;
diff --git a/chromium/chrome/browser/ui/webui/settings/chromeos/cups_printers_handler.h b/chromium/chrome/browser/ui/webui/settings/chromeos/cups_printers_handler.h
index f3541827eed..0f9452af13e 100644
--- a/chromium/chrome/browser/ui/webui/settings/chromeos/cups_printers_handler.h
+++ b/chromium/chrome/browser/ui/webui/settings/chromeos/cups_printers_handler.h
@@ -145,6 +145,13 @@ class CupsPrintersHandler : public ::settings::SettingsPageUIHandler,
int index,
void* params) override;
+ // Used by FileSelected() in order to verify whether the beginning contents of
+ // the selected file contain the magic number present in all PPD files. |path|
+ // is used for display in the UI as this function calls back into javascript
+ // with |path| as the result.
+ void VerifyPpdContents(const base::FilePath& path,
+ const std::string& contents);
+
Profile* profile_;
// Discovery support. discovery_active_ tracks whether or not the UI
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 f4176c34c2d..4ff2b1c8713 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
@@ -29,7 +29,9 @@
#include "chrome/browser/platform_util.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/grit/generated_resources.h"
-#include "chromeos/cryptohome/homedir_methods.h"
+#include "chromeos/cryptohome/cryptohome_util.h"
+#include "chromeos/dbus/cryptohome_client.h"
+#include "chromeos/dbus/dbus_thread_manager.h"
#include "components/arc/arc_util.h"
#include "components/browsing_data/content/conditional_cache_counting_helper.h"
#include "components/drive/chromeos/file_system_interface.h"
@@ -300,10 +302,10 @@ void StorageHandler::UpdateOtherUsersSize() {
if (user->is_active())
continue;
other_users_.push_back(user);
- cryptohome::HomedirMethods::GetInstance()->GetAccountDiskUsage(
+ DBusThreadManager::Get()->GetCryptohomeClient()->GetAccountDiskUsage(
cryptohome::Identification(user->GetAccountId()),
- base::Bind(&StorageHandler::OnGetOtherUserSize,
- weak_ptr_factory_.GetWeakPtr()));
+ base::BindOnce(&StorageHandler::OnGetOtherUserSize,
+ weak_ptr_factory_.GetWeakPtr()));
}
// We should show "0 B" if there is no other user.
if (other_users_.empty()) {
@@ -313,8 +315,9 @@ void StorageHandler::UpdateOtherUsersSize() {
}
}
-void StorageHandler::OnGetOtherUserSize(bool success, int64_t size) {
- user_sizes_.push_back(success ? size : -1);
+void StorageHandler::OnGetOtherUserSize(
+ base::Optional<cryptohome::BaseReply> reply) {
+ user_sizes_.push_back(cryptohome::AccountDiskUsageReplyToUsageSize(reply));
if (user_sizes_.size() == other_users_.size()) {
base::string16 size_string;
// If all the requests succeed, shows the total bytes in the UI.
diff --git a/chromium/chrome/browser/ui/webui/settings/chromeos/device_storage_handler.h b/chromium/chrome/browser/ui/webui/settings/chromeos/device_storage_handler.h
index 9da1d5d437b..48f3d5b5875 100644
--- a/chromium/chrome/browser/ui/webui/settings/chromeos/device_storage_handler.h
+++ b/chromium/chrome/browser/ui/webui/settings/chromeos/device_storage_handler.h
@@ -12,8 +12,10 @@
#include "base/macros.h"
#include "base/memory/weak_ptr.h"
+#include "base/optional.h"
#include "chrome/browser/browsing_data/site_data_size_collector.h"
#include "chrome/browser/ui/webui/settings/settings_page_ui_handler.h"
+#include "chromeos/dbus/cryptohome/rpc.pb.h"
#include "components/arc/storage_manager/arc_storage_manager.h"
#include "components/user_manager/user.h"
@@ -76,7 +78,7 @@ class StorageHandler : public ::settings::SettingsPageUIHandler {
void UpdateOtherUsersSize();
// Callback to save the fetched user sizes and update the UI.
- void OnGetOtherUserSize(bool success, int64_t size);
+ void OnGetOtherUserSize(base::Optional<cryptohome::BaseReply> reply);
// Requests updating the space size used by Android apps and cache.
void UpdateAndroidSize();
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 45d050cc78c..a97d004c949 100644
--- a/chromium/chrome/browser/ui/webui/settings/chromeos/fingerprint_handler.cc
+++ b/chromium/chrome/browser/ui/webui/settings/chromeos/fingerprint_handler.cc
@@ -19,7 +19,7 @@
#include "components/prefs/pref_service.h"
#include "components/session_manager/core/session_manager.h"
#include "content/public/common/service_manager_connection.h"
-#include "services/device/public/interfaces/constants.mojom.h"
+#include "services/device/public/mojom/constants.mojom.h"
#include "services/service_manager/public/cpp/connector.h"
#include "ui/base/l10n/l10n_util.h"
diff --git a/chromium/chrome/browser/ui/webui/settings/chromeos/fingerprint_handler.h b/chromium/chrome/browser/ui/webui/settings/chromeos/fingerprint_handler.h
index 5c296d69fe7..f63ea22d163 100644
--- a/chromium/chrome/browser/ui/webui/settings/chromeos/fingerprint_handler.h
+++ b/chromium/chrome/browser/ui/webui/settings/chromeos/fingerprint_handler.h
@@ -10,7 +10,7 @@
#include "chrome/browser/ui/webui/settings/settings_page_ui_handler.h"
#include "components/session_manager/core/session_manager_observer.h"
#include "mojo/public/cpp/bindings/binding.h"
-#include "services/device/public/interfaces/fingerprint.mojom.h"
+#include "services/device/public/mojom/fingerprint.mojom.h"
class Profile;
diff --git a/chromium/chrome/browser/ui/webui/settings/downloads_handler_unittest.cc b/chromium/chrome/browser/ui/webui/settings/downloads_handler_unittest.cc
index c20ca4db582..7e7628fb021 100644
--- a/chromium/chrome/browser/ui/webui/settings/downloads_handler_unittest.cc
+++ b/chromium/chrome/browser/ui/webui/settings/downloads_handler_unittest.cc
@@ -6,6 +6,8 @@
#include "base/memory/ptr_util.h"
#include "chrome/browser/download/chrome_download_manager_delegate.h"
+#include "chrome/browser/download/download_core_service_factory.h"
+#include "chrome/browser/download/download_core_service_impl.h"
#include "chrome/browser/download/download_prefs.h"
#include "chrome/common/pref_names.h"
#include "chrome/test/base/testing_profile.h"
@@ -22,15 +24,17 @@ class DownloadsHandlerTest : public testing::Test {
public:
DownloadsHandlerTest()
: download_manager_(new content::MockDownloadManager()),
- chrome_download_manager_delegate_(&profile_),
handler_(&profile_) {
content::BrowserContext::SetDownloadManagerForTesting(
&profile_, base::WrapUnique(download_manager_));
- EXPECT_EQ(download_manager_,
- content::BrowserContext::GetDownloadManager(&profile_));
-
- EXPECT_CALL(*download_manager_, GetDelegate())
- .WillRepeatedly(testing::Return(&chrome_download_manager_delegate_));
+ std::unique_ptr<ChromeDownloadManagerDelegate> delegate =
+ std::make_unique<ChromeDownloadManagerDelegate>(&profile_);
+ chrome_download_manager_delegate_ = delegate.get();
+ service_ = DownloadCoreServiceFactory::GetForBrowserContext(&profile_);
+ service_->SetDownloadManagerDelegateForTesting(std::move(delegate));
+
+ EXPECT_CALL(*download_manager_, GetBrowserContext())
+ .WillRepeatedly(testing::Return(&profile_));
EXPECT_CALL(*download_manager_, Shutdown());
handler_.set_web_ui(&test_web_ui_);
@@ -49,7 +53,7 @@ class DownloadsHandlerTest : public testing::Test {
}
void TearDown() override {
- chrome_download_manager_delegate_.Shutdown();
+ service_->SetDownloadManagerDelegateForTesting(nullptr);
testing::Test::TearDown();
}
@@ -74,8 +78,9 @@ class DownloadsHandlerTest : public testing::Test {
content::TestWebUI test_web_ui_;
TestingProfile profile_;
+ DownloadCoreService* service_;
content::MockDownloadManager* download_manager_; // Owned by |profile_|.
- ChromeDownloadManagerDelegate chrome_download_manager_delegate_;
+ ChromeDownloadManagerDelegate* chrome_download_manager_delegate_;
DownloadsHandler handler_;
};
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
new file mode 100644
index 00000000000..af1646f42db
--- /dev/null
+++ b/chromium/chrome/browser/ui/webui/settings/incompatible_applications_handler_win.cc
@@ -0,0 +1,168 @@
+// 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/incompatible_applications_handler_win.h"
+
+#include <string>
+#include <utility>
+#include <vector>
+
+#include "base/bind.h"
+#include "base/logging.h"
+#include "base/metrics/histogram_macros.h"
+#include "base/metrics/user_metrics.h"
+#include "base/strings/utf_string_conversions.h"
+#include "base/values.h"
+#include "base/win/registry.h"
+#include "chrome/browser/conflicts/problematic_programs_updater_win.h"
+#include "chrome/browser/conflicts/registry_key_watcher_win.h"
+#include "chrome/browser/conflicts/uninstall_application_win.h"
+#include "chrome/grit/generated_resources.h"
+#include "ui/base/l10n/l10n_util.h"
+
+namespace settings {
+
+IncompatibleApplicationsHandler::IncompatibleApplicationsHandler() = default;
+
+IncompatibleApplicationsHandler::~IncompatibleApplicationsHandler() = default;
+
+void IncompatibleApplicationsHandler::RegisterMessages() {
+ web_ui()->RegisterMessageCallback(
+ "requestIncompatibleApplicationsList",
+ base::BindRepeating(&IncompatibleApplicationsHandler::
+ HandleRequestIncompatibleApplicationsList,
+ base::Unretained(this)));
+ web_ui()->RegisterMessageCallback(
+ "startProgramUninstallation",
+ base::BindRepeating(
+ &IncompatibleApplicationsHandler::HandleStartProgramUninstallation,
+ base::Unretained(this)));
+ web_ui()->RegisterMessageCallback(
+ "getSubtitlePluralString",
+ base::BindRepeating(
+ &IncompatibleApplicationsHandler::HandleGetSubtitlePluralString,
+ base::Unretained(this)));
+ web_ui()->RegisterMessageCallback(
+ "getSubtitleNoAdminRightsPluralString",
+ base::BindRepeating(&IncompatibleApplicationsHandler::
+ HandleGetSubtitleNoAdminRightsPluralString,
+ base::Unretained(this)));
+ web_ui()->RegisterMessageCallback(
+ "getListTitlePluralString",
+ base::BindRepeating(
+ &IncompatibleApplicationsHandler::HandleGetListTitlePluralString,
+ base::Unretained(this)));
+}
+
+void IncompatibleApplicationsHandler::OnJavascriptAllowed() {}
+
+void IncompatibleApplicationsHandler::OnJavascriptDisallowed() {
+ registry_key_watchers_.clear();
+}
+
+void IncompatibleApplicationsHandler::HandleRequestIncompatibleApplicationsList(
+ const base::ListValue* args) {
+ CHECK_EQ(1u, args->GetList().size());
+
+ AllowJavascript();
+
+ // Reset the registry watchers, to correctly handle repeated calls to
+ // requestIncompatibleApplicationsList().
+ registry_key_watchers_.clear();
+
+ std::vector<ProblematicProgramsUpdater::ProblematicProgram>
+ problematic_programs = ProblematicProgramsUpdater::GetCachedPrograms();
+
+ base::Value application_list(base::Value::Type::LIST);
+ application_list.GetList().reserve(problematic_programs.size());
+
+ for (const auto& program : problematic_programs) {
+ // Set up a registry watcher for each problem application.
+ // Since this instance owns the watcher, it is safe to use
+ // base::Unretained() because the callback won't be invoked when the watcher
+ // gets deleted.
+ auto registry_key_watcher = RegistryKeyWatcher::Create(
+ program.info.registry_root, program.info.registry_key_path.c_str(),
+ program.info.registry_wow64_access,
+ base::BindOnce(&IncompatibleApplicationsHandler::OnApplicationRemoved,
+ base::Unretained(this), program.info));
+
+ // Only keep the watcher if it was successfully initialized. A failure here
+ // is unlikely, but the worst that can happen is that the |program| will not
+ // get removed from the list automatically in the Incompatible Applications
+ // subpage.
+ if (registry_key_watcher) {
+ registry_key_watchers_.insert(
+ {program.info, std::move(registry_key_watcher)});
+ }
+
+ // Also add the application to the list that is passed to the javascript.
+ base::Value dict(base::Value::Type::DICTIONARY);
+ dict.SetKey("name", base::Value(program.info.name));
+ dict.SetKey("type", base::Value(program.blacklist_action->message_type()));
+ dict.SetKey("url", base::Value(program.blacklist_action->message_url()));
+ application_list.GetList().push_back(std::move(dict));
+ }
+
+ UMA_HISTOGRAM_COUNTS_100("IncompatibleApplicationsPage.NumApplications",
+ problematic_programs.size());
+
+ const base::Value& callback_id = args->GetList().front();
+ ResolveJavascriptCallback(callback_id, application_list);
+}
+
+void IncompatibleApplicationsHandler::HandleStartProgramUninstallation(
+ const base::ListValue* args) {
+ CHECK_EQ(1u, args->GetList().size());
+ base::RecordAction(base::UserMetricsAction(
+ "IncompatibleApplicationsPage.UninstallationStarted"));
+
+ // Open the Apps & Settings page with the program name highlighted.
+ uninstall_application::LaunchUninstallFlow(
+ base::UTF8ToUTF16(args->GetList()[0].GetString()));
+}
+
+void IncompatibleApplicationsHandler::HandleGetSubtitlePluralString(
+ const base::ListValue* args) {
+ GetPluralString(IDS_SETTINGS_INCOMPATIBLE_APPLICATIONS_SUBPAGE_SUBTITLE,
+ args);
+}
+
+void IncompatibleApplicationsHandler::
+ HandleGetSubtitleNoAdminRightsPluralString(const base::ListValue* args) {
+ GetPluralString(
+ IDS_SETTINGS_INCOMPATIBLE_APPLICATIONS_SUBPAGE_SUBTITLE_NO_ADMIN_RIGHTS,
+ args);
+}
+
+void IncompatibleApplicationsHandler::HandleGetListTitlePluralString(
+ const base::ListValue* args) {
+ GetPluralString(IDS_SETTINGS_INCOMPATIBLE_APPLICATIONS_LIST_TITLE, args);
+}
+
+void IncompatibleApplicationsHandler::GetPluralString(
+ int id,
+ const base::ListValue* args) {
+ CHECK_EQ(2U, args->GetList().size());
+
+ const base::Value& callback_id = args->GetList()[0];
+ int num_applications = args->GetList()[1].GetInt();
+ DCHECK_GT(0, num_applications);
+
+ ResolveJavascriptCallback(
+ callback_id,
+ base::Value(l10n_util::GetPluralStringFUTF16(id, num_applications)));
+}
+
+void IncompatibleApplicationsHandler::OnApplicationRemoved(
+ const InstalledPrograms::ProgramInfo& program) {
+ base::RecordAction(base::UserMetricsAction(
+ "IncompatibleApplicationsPage.ApplicationRemoved"));
+
+ registry_key_watchers_.erase(program);
+ FireWebUIListener("incompatible-application-removed",
+ base::Value(program.name));
+}
+
+} // namespace settings
diff --git a/chromium/chrome/browser/ui/webui/settings/incompatible_applications_handler_win.h b/chromium/chrome/browser/ui/webui/settings/incompatible_applications_handler_win.h
new file mode 100644
index 00000000000..b7518f69a45
--- /dev/null
+++ b/chromium/chrome/browser/ui/webui/settings/incompatible_applications_handler_win.h
@@ -0,0 +1,58 @@
+// 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_INCOMPATIBLE_APPLICATIONS_HANDLER_WIN_H_
+#define CHROME_BROWSER_UI_WEBUI_SETTINGS_INCOMPATIBLE_APPLICATIONS_HANDLER_WIN_H_
+
+#include <map>
+#include <memory>
+
+#include "base/macros.h"
+#include "chrome/browser/conflicts/installed_programs_win.h"
+#include "chrome/browser/ui/webui/settings/settings_page_ui_handler.h"
+
+class RegistryKeyWatcher;
+
+namespace base {
+class ListValue;
+}
+
+namespace settings {
+
+// Incompatible Applications settings page UI handler.
+class IncompatibleApplicationsHandler : public SettingsPageUIHandler {
+ public:
+ IncompatibleApplicationsHandler();
+ ~IncompatibleApplicationsHandler() override;
+
+ // SettingsPageUIHandler:
+ void RegisterMessages() override;
+ void OnJavascriptAllowed() override;
+ void OnJavascriptDisallowed() override;
+
+ private:
+ // Sends the list of incompatible applications to the caller via a promise.
+ void HandleRequestIncompatibleApplicationsList(const base::ListValue* args);
+
+ // Initiates the uninstallation of the program passed using |args|.
+ void HandleStartProgramUninstallation(const base::ListValue* args);
+
+ void HandleGetSubtitlePluralString(const base::ListValue* args);
+ void HandleGetSubtitleNoAdminRightsPluralString(const base::ListValue* args);
+ void HandleGetListTitlePluralString(const base::ListValue* args);
+ void GetPluralString(int id, const base::ListValue* args);
+
+ // Callback for the registry key watchers.
+ void OnApplicationRemoved(const InstalledPrograms::ProgramInfo& program);
+
+ // Container for the watchers.
+ std::map<InstalledPrograms::ProgramInfo, std::unique_ptr<RegistryKeyWatcher>>
+ registry_key_watchers_;
+
+ DISALLOW_COPY_AND_ASSIGN(IncompatibleApplicationsHandler);
+};
+
+} // namespace settings
+
+#endif // CHROME_BROWSER_UI_WEBUI_SETTINGS_INCOMPATIBLE_APPLICATIONS_HANDLER_WIN_H_
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 906dbf0f698..1c76ec475ac 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
@@ -11,6 +11,7 @@
#include "base/strings/string_number_conversions.h"
#include "base/strings/utf_string_conversions.h"
#include "build/build_config.h"
+#include "build/buildflag.h"
#include "chrome/browser/browser_process.h"
#include "chrome/browser/content_settings/host_content_settings_map_factory.h"
#include "chrome/browser/plugins/plugin_utils.h"
@@ -28,12 +29,15 @@
#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/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 "services/device/public/cpp/device_features.h"
#include "ui/base/l10n/l10n_util.h"
#if defined(OS_CHROMEOS)
+#include "ash/public/cpp/ash_features.h"
#include "ash/public/cpp/ash_switches.h"
#include "ash/public/interfaces/voice_interaction_controller.mojom.h"
#include "ash/strings/grit/ash_strings.h"
@@ -43,6 +47,7 @@
#include "chrome/browser/chromeos/ownership/owner_settings_service_chromeos_factory.h"
#include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h"
#include "chrome/browser/chromeos/profiles/profile_helper.h"
+#include "chrome/browser/signin/account_consistency_mode_manager.h"
#include "chrome/browser/ui/webui/chromeos/bluetooth_dialog_localized_strings_provider.h"
#include "chrome/browser/ui/webui/chromeos/network_element_localized_strings_provider.h"
#include "chromeos/chromeos_switches.h"
@@ -54,6 +59,7 @@
#include "ui/display/manager/chromeos/touch_device_manager.h"
#else
#include "chrome/browser/ui/webui/settings/system_handler.h"
+#include "components/signin/core/browser/profile_management_switches.h"
#endif
#if defined(OS_WIN)
@@ -176,6 +182,19 @@ void AddA11yStrings(content::WebUIDataSource* html_source) {
{"chromeVoxLabel", IDS_SETTINGS_CHROMEVOX_LABEL},
{"chromeVoxOptionsLabel", IDS_SETTINGS_CHROMEVOX_OPTIONS_LABEL},
{"screenMagnifierLabel", IDS_SETTINGS_SCREEN_MAGNIFIER_LABEL},
+ {"screenMagnifierZoomLabel", IDS_SETTINGS_SCREEN_MAGNIFIER_ZOOM_LABEL},
+ {"dockedMagnifierLabel", IDS_SETTINGS_DOCKED_MAGNIFIER_LABEL},
+ {"dockedMagnifierZoomLabel", IDS_SETTINGS_DOCKED_MAGNIFIER_ZOOM_LABEL},
+ {"screenMagnifierZoom2x", IDS_SETTINGS_SCREEN_MAGNIFIER_ZOOM_2_X},
+ {"screenMagnifierZoom4x", IDS_SETTINGS_SCREEN_MAGNIFIER_ZOOM_4_X},
+ {"screenMagnifierZoom6x", IDS_SETTINGS_SCREEN_MAGNIFIER_ZOOM_6_X},
+ {"screenMagnifierZoom8x", IDS_SETTINGS_SCREEN_MAGNIFIER_ZOOM_8_X},
+ {"screenMagnifierZoom10x", IDS_SETTINGS_SCREEN_MAGNIFIER_ZOOM_10_X},
+ {"screenMagnifierZoom12x", IDS_SETTINGS_SCREEN_MAGNIFIER_ZOOM_12_X},
+ {"screenMagnifierZoom14x", IDS_SETTINGS_SCREEN_MAGNIFIER_ZOOM_14_X},
+ {"screenMagnifierZoom16x", IDS_SETTINGS_SCREEN_MAGNIFIER_ZOOM_16_X},
+ {"screenMagnifierZoom18x", IDS_SETTINGS_SCREEN_MAGNIFIER_ZOOM_18_X},
+ {"screenMagnifierZoom20x", IDS_SETTINGS_SCREEN_MAGNIFIER_ZOOM_20_X},
{"tapDraggingLabel", IDS_SETTINGS_TAP_DRAGGING_LABEL},
{"clickOnStopLabel", IDS_SETTINGS_CLICK_ON_STOP_LABEL},
{"delayBeforeClickLabel", IDS_SETTINGS_DELAY_BEFORE_CLICK_LABEL},
@@ -231,13 +250,17 @@ void AddA11yStrings(content::WebUIDataSource* html_source) {
arraysize(localized_strings));
#if defined(OS_CHROMEOS)
- html_source->AddString("a11yLearnMoreUrl",
- chrome::kChromeAccessibilityHelpURL);
+ html_source->AddString(
+ "a11yLearnMoreUrl",
+ GetHelpUrlWithBoard(chrome::kChromeAccessibilityHelpURL));
html_source->AddBoolean(
"showExperimentalA11yFeatures",
base::CommandLine::ForCurrentProcess()->HasSwitch(
chromeos::switches::kEnableExperimentalAccessibilityFeatures));
+
+ html_source->AddBoolean("dockedMagnifierFeatureEnabled",
+ ash::features::IsDockedMagnifierEnabled());
#endif
}
@@ -448,22 +471,24 @@ void AddChangePasswordStrings(content::WebUIDataSource* html_source) {
#endif
}
-void AddClearBrowsingDataStrings(content::WebUIDataSource* html_source) {
+void AddClearBrowsingDataStrings(content::WebUIDataSource* html_source,
+ Profile* profile) {
int clear_cookies_summary_msg_id =
IDS_SETTINGS_CLEAR_COOKIES_AND_SITE_DATA_SUMMARY_BASIC;
#if defined(OS_CHROMEOS)
- // Mirror account reconciliation behavior is turned on for child accounts on
- // Chrome OS.
- if (user_manager::UserManager::Get()->GetPrimaryUser()->GetType() ==
- user_manager::USER_TYPE_CHILD) {
+ if (AccountConsistencyModeManager::IsMirrorEnabledForProfile(profile)) {
+ clear_cookies_summary_msg_id =
+ IDS_SETTINGS_CLEAR_COOKIES_AND_SITE_DATA_SUMMARY_BASIC_WITH_EXCEPTION;
+ }
+#else // !defined(OS_CHROMEOS)
+ if (signin::IsDiceEnabledForProfile(profile->GetPrefs())) {
clear_cookies_summary_msg_id =
- IDS_SETTINGS_CLEAR_COOKIES_AND_SITE_DATA_MIRROR_SUMMARY_BASIC;
+ IDS_SETTINGS_CLEAR_COOKIES_AND_SITE_DATA_SUMMARY_BASIC_WITH_EXCEPTION;
}
#endif
LocalizedString localized_strings[] = {
- {"clearFollowingItemsFrom", IDS_SETTINGS_CLEAR_FOLLOWING_ITEMS_FROM},
{"clearTimeRange", IDS_SETTINGS_CLEAR_PERIOD_TITLE},
{"clearBrowsingHistory", IDS_SETTINGS_CLEAR_BROWSING_HISTORY},
{"clearBrowsingHistorySummary",
@@ -478,19 +503,11 @@ void AddClearBrowsingDataStrings(content::WebUIDataSource* html_source) {
{"clearFormData", IDS_SETTINGS_CLEAR_FORM_DATA},
{"clearHostedAppData", IDS_SETTINGS_CLEAR_HOSTED_APP_DATA},
{"clearMediaLicenses", IDS_SETTINGS_CLEAR_MEDIA_LICENSES},
- {"clearDataHour", IDS_SETTINGS_CLEAR_DATA_HOUR},
- {"clearDataDay", IDS_SETTINGS_CLEAR_DATA_DAY},
- {"clearDataWeek", IDS_SETTINGS_CLEAR_DATA_WEEK},
- {"clearData4Weeks", IDS_SETTINGS_CLEAR_DATA_4WEEKS},
- {"clearDataEverything", IDS_SETTINGS_CLEAR_DATA_EVERYTHING},
{"clearPeriodHour", IDS_SETTINGS_CLEAR_PERIOD_HOUR},
{"clearPeriod24Hours", IDS_SETTINGS_CLEAR_PERIOD_24_HOURS},
{"clearPeriod7Days", IDS_SETTINGS_CLEAR_PERIOD_7_DAYS},
{"clearPeriod4Weeks", IDS_SETTINGS_CLEAR_PERIOD_FOUR_WEEKS},
{"clearPeriodEverything", IDS_SETTINGS_CLEAR_PERIOD_EVERYTHING},
- {"warnAboutNonClearedData", IDS_SETTINGS_CLEAR_DATA_SOME_STUFF_REMAINS},
- {"clearsSyncedData", IDS_SETTINGS_CLEAR_DATA_CLEARS_SYNCED_DATA},
- {"clearBrowsingDataLearnMoreUrl", IDS_SETTINGS_CLEAR_DATA_LEARN_MORE_URL},
{"historyDeletionDialogTitle",
IDS_CLEAR_BROWSING_DATA_HISTORY_NOTICE_TITLE},
{"historyDeletionDialogOK", IDS_CLEAR_BROWSING_DATA_HISTORY_NOTICE_OK},
@@ -513,12 +530,6 @@ void AddClearBrowsingDataStrings(content::WebUIDataSource* html_source) {
IDS_SETTINGS_CLEAR_BROWSING_HISTORY_SUMMARY_SYNCED,
base::ASCIIToUTF16(chrome::kMyActivityUrlInClearBrowsingData)));
html_source->AddString(
- "otherFormsOfBrowsingHistory",
- l10n_util::GetStringFUTF16(
- IDS_CLEAR_BROWSING_DATA_HISTORY_FOOTER,
- l10n_util::GetStringUTF16(
- IDS_SETTINGS_CLEAR_DATA_WEB_HISTORY_URL_IN_FOOTER)));
- html_source->AddString(
"historyDeletionDialogBody",
l10n_util::GetStringFUTF16(
IDS_CLEAR_BROWSING_DATA_HISTORY_NOTICE,
@@ -552,7 +563,7 @@ void AddDeviceStrings(content::WebUIDataSource* html_source) {
{"scrollLabel", IDS_SETTINGS_SCROLL_LABEL},
{"traditionalScrollLabel", IDS_SETTINGS_TRADITIONAL_SCROLL_LABEL},
{"naturalScrollLabel", IDS_SETTINGS_NATURAL_SCROLL_LABEL},
- {"naturalScrollLearnMore", IDS_SETTINGS_NATURAL_SCROLL_LEARN_MORE},
+ {"naturalScrollLearnMore", IDS_LEARN_MORE},
};
AddLocalizedStringsBulk(html_source, device_strings,
arraysize(device_strings));
@@ -785,8 +796,6 @@ void AddChromeCleanupStrings(content::WebUIDataSource* html_source) {
IDS_SETTINGS_RESET_CLEANUP_DETAILS_FILES_AND_PROGRAMS},
{"chromeCleanupDetailsRegistryEntries",
IDS_SETTINGS_RESET_CLEANUP_DETAILS_REGISTRY_ENTRIES},
- {"chromeCleanupDoneButtonLabel",
- IDS_SETTINGS_RESET_CLEANUP_DONE_BUTTON_LABEL},
{"chromeCleanupExplanationCleanupError",
IDS_SETTINGS_RESET_CLEANUP_EXPLANATION_CLEANUP_ERROR},
{"chromeCleanupExplanationFindAndRemove",
@@ -858,6 +867,33 @@ void AddChromeCleanupStrings(content::WebUIDataSource* html_source) {
html_source->AddString("chromeCleanupDetailsExplanation",
cleanup_details_explanation);
}
+
+void AddIncompatibleApplicationsStrings(content::WebUIDataSource* html_source) {
+ LocalizedString localized_strings[] = {
+ {"incompatibleApplicationsResetCardTitle",
+ IDS_SETTINGS_INCOMPATIBLE_APPLICATIONS_RESET_CARD_TITLE},
+ {"incompatibleApplicationsSubpageSubtitle",
+ IDS_SETTINGS_INCOMPATIBLE_APPLICATIONS_SUBPAGE_SUBTITLE},
+ {"incompatibleApplicationsSubpageSubtitleNoAdminRights",
+ IDS_SETTINGS_INCOMPATIBLE_APPLICATIONS_SUBPAGE_SUBTITLE_NO_ADMIN_RIGHTS},
+ {"incompatibleApplicationsListTitle",
+ IDS_SETTINGS_INCOMPATIBLE_APPLICATIONS_LIST_TITLE},
+ {"incompatibleApplicationsRemoveButton",
+ IDS_SETTINGS_INCOMPATIBLE_APPLICATIONS_REMOVE_BUTTON},
+ {"incompatibleApplicationsUpdateButton",
+ IDS_SETTINGS_INCOMPATIBLE_APPLICATIONS_UPDATE_BUTTON},
+ {"incompatibleApplicationsDone",
+ IDS_SETTINGS_INCOMPATIBLE_APPLICATIONS_DONE},
+ };
+ AddLocalizedStringsBulk(html_source, localized_strings,
+ arraysize(localized_strings));
+ // TODO(pmonette): Add the help URL when available.
+ base::string16 learn_how_text = l10n_util::GetStringFUTF16(
+ IDS_SETTINGS_INCOMPATIBLE_APPLICATIONS_SUBPAGE_LEARN_HOW,
+ base::ASCIIToUTF16("chrome://placeholder"));
+ html_source->AddString("incompatibleApplicationsSubpageLearnHow",
+ learn_how_text);
+}
#endif // defined(OS_WIN) && defined(GOOGLE_CHROME_BUILD)
void AddResetStrings(content::WebUIDataSource* html_source) {
@@ -892,8 +928,6 @@ void AddResetStrings(content::WebUIDataSource* html_source) {
#if defined(OS_WIN) && defined(GOOGLE_CHROME_BUILD)
{"resetCleanupComputerTrigger",
IDS_SETTINGS_RESET_CLEAN_UP_COMPUTER_TRIGGER},
- {"resetCleanupComputerTriggerDescription",
- IDS_SETTINGS_RESET_CLEAN_UP_COMPUTER_TRIGGER_DESCRIPTION},
#endif
};
AddLocalizedStringsBulk(html_source, localized_strings,
@@ -1078,8 +1112,7 @@ void AddInternetStrings(content::WebUIDataSource* html_source) {
{"networkConnectNotAllowed", IDS_SETTINGS_INTERNET_CONNECT_NOT_ALLOWED},
{"networkIPAddress", IDS_SETTINGS_INTERNET_NETWORK_IP_ADDRESS},
{"networkIPConfigAuto", IDS_SETTINGS_INTERNET_NETWORK_IP_CONFIG_AUTO},
- {"networkNameserversLearnMore",
- IDS_SETTINGS_INTERNET_NETWORK_NAMESERVERS_LEARN_MORE},
+ {"networkNameserversLearnMore", IDS_LEARN_MORE},
{"networkPrefer", IDS_SETTINGS_INTERNET_NETWORK_PREFER},
{"networkPrimaryUserControlled",
IDS_SETTINGS_INTERNET_NETWORK_PRIMARY_USER_CONTROLLED},
@@ -1112,6 +1145,8 @@ void AddInternetStrings(content::WebUIDataSource* html_source) {
IDS_SETTINGS_INTERNET_GMSCORE_NOTIFICATIONS_SECOND_STEP},
{"gmscoreNotificationsThirdStep",
IDS_SETTINGS_INTERNET_GMSCORE_NOTIFICATIONS_THIRD_STEP},
+ {"gmscoreNotificationsFourthStep",
+ IDS_SETTINGS_INTERNET_GMSCORE_NOTIFICATIONS_FOURTH_STEP},
{"tetherConnectionDialogTitle",
IDS_SETTINGS_INTERNET_TETHER_CONNECTION_DIALOG_TITLE},
{"tetherConnectionAvailableDeviceTitle",
@@ -1276,6 +1311,7 @@ void AddPasswordsAndFormsStrings(content::WebUIDataSource* html_source) {
{"autofill", IDS_SETTINGS_AUTOFILL},
{"googlePayments", IDS_SETTINGS_GOOGLE_PAYMENTS},
{"googlePaymentsCached", IDS_SETTINGS_GOOGLE_PAYMENTS_CACHED},
+ {"autofillFormsLabel", IDS_SETTINGS_AUTOFILL_TOGGLE_LABEL},
{"addresses", IDS_SETTINGS_AUTOFILL_ADDRESSES_HEADING},
{"addAddressTitle", IDS_SETTINGS_AUTOFILL_ADDRESSES_ADD_TITLE},
{"editAddressTitle", IDS_SETTINGS_AUTOFILL_ADDRESSES_EDIT_TITLE},
@@ -1297,6 +1333,8 @@ void AddPasswordsAndFormsStrings(content::WebUIDataSource* html_source) {
{"addCreditCardTitle", IDS_SETTINGS_ADD_CREDIT_CARD_TITLE},
{"autofillDetail", IDS_SETTINGS_AUTOFILL_DETAIL},
{"passwords", IDS_SETTINGS_PASSWORDS},
+ {"passwordsSavePasswordsLabel",
+ IDS_SETTINGS_PASSWORDS_SAVE_PASSWORDS_TOGGLE_LABEL},
{"passwordsAutosigninLabel",
IDS_SETTINGS_PASSWORDS_AUTOSIGNIN_CHECKBOX_LABEL},
{"passwordsAutosigninDescription",
@@ -1305,7 +1343,6 @@ void AddPasswordsAndFormsStrings(content::WebUIDataSource* html_source) {
{"savedPasswordsHeading", IDS_SETTINGS_PASSWORDS_SAVED_HEADING},
{"passwordExceptionsHeading", IDS_SETTINGS_PASSWORDS_EXCEPTIONS_HEADING},
{"deletePasswordException", IDS_SETTINGS_PASSWORDS_DELETE_EXCEPTION},
- {"passwordsDone", IDS_SETTINGS_PASSWORD_DONE},
{"removePassword", IDS_SETTINGS_PASSWORD_REMOVE},
{"searchPasswords", IDS_SETTINGS_PASSWORD_SEARCH},
{"showPassword", IDS_SETTINGS_PASSWORD_SHOW},
@@ -1321,12 +1358,22 @@ void AddPasswordsAndFormsStrings(content::WebUIDataSource* html_source) {
{"noPasswordsFound", IDS_SETTINGS_PASSWORDS_NONE},
{"noExceptionsFound", IDS_SETTINGS_PASSWORDS_EXCEPTIONS_NONE},
{"import", IDS_PASSWORD_MANAGER_IMPORT_BUTTON},
- {"export", IDS_PASSWORD_MANAGER_EXPORT_BUTTON},
+ {"exportMenuItem", IDS_SETTINGS_PASSWORDS_EXPORT_MENU_ITEM},
{"undoRemovePassword", IDS_SETTINGS_PASSWORD_UNDO},
{"passwordDeleted", IDS_SETTINGS_PASSWORD_DELETED_PASSWORD},
{"exportPasswordsTitle", IDS_SETTINGS_PASSWORDS_EXPORT_TITLE},
{"exportPasswordsDescription", IDS_SETTINGS_PASSWORDS_EXPORT_DESCRIPTION},
- {"exportPasswords", IDS_SETTINGS_PASSWORDS_EXPORT}};
+ {"exportPasswords", IDS_SETTINGS_PASSWORDS_EXPORT},
+ {"exportingPasswordsTitle", IDS_SETTINGS_PASSWORDS_EXPORTING_TITLE},
+ {"exportPasswordsTryAgain", IDS_SETTINGS_PASSWORDS_EXPORT_TRY_AGAIN},
+ {"exportPasswordsFailTitle",
+ IDS_SETTINGS_PASSWORDS_EXPORTING_FAILURE_TITLE},
+ {"exportPasswordsFailTips",
+ IDS_SETTINGS_PASSWORDS_EXPORTING_FAILURE_TIPS},
+ {"exportPasswordsFailTipsEnoughSpace",
+ IDS_SETTINGS_PASSWORDS_EXPORTING_FAILURE_TIP_ENOUGH_SPACE},
+ {"exportPasswordsFailTipsAnotherFolder",
+ IDS_SETTINGS_PASSWORDS_EXPORTING_FAILURE_TIP_ANOTHER_FOLDER}};
html_source->AddString(
"managePasswordsLabel",
@@ -1345,11 +1392,10 @@ void AddPasswordsAndFormsStrings(content::WebUIDataSource* html_source) {
arraysize(localized_strings));
}
-void AddPeopleStrings(content::WebUIDataSource* html_source) {
+void AddPeopleStrings(content::WebUIDataSource* html_source, Profile* profile) {
LocalizedString localized_strings[] = {
{"peoplePageTitle", IDS_SETTINGS_PEOPLE},
{"manageOtherPeople", IDS_SETTINGS_PEOPLE_MANAGE_OTHER_PEOPLE},
- {"manageSupervisedUsers", IDS_SETTINGS_PEOPLE_MANAGE_SUPERVISED_USERS},
#if defined(OS_CHROMEOS)
{"configureFingerprintTitle", IDS_SETTINGS_ADD_FINGERPRINT_DIALOG_TITLE},
{"configureFingerprintInstructionLocateScannerStep",
@@ -1372,8 +1418,6 @@ void AddPeopleStrings(content::WebUIDataSource* html_source) {
IDS_SETTINGS_ADD_FINGERPRINT_DIALOG_FINGER_TOO_FAST},
{"configureFingerprintImmobile",
IDS_SETTINGS_ADD_FINGERPRINT_DIALOG_FINGER_IMMOBILE},
- {"configureFingerprintDoneButton",
- IDS_SETTINGS_ADD_FINGERPRINT_DIALOG_DONE_BUTTON},
{"configureFingerprintAddAnotherButton",
IDS_SETTINGS_ADD_FINGERPRINT_DIALOG_ADD_ANOTHER_BUTTON},
{"configurePinChoosePinTitle",
@@ -1448,8 +1492,19 @@ void AddPeopleStrings(content::WebUIDataSource* html_source) {
#else // !defined(OS_CHROMEOS)
{"domainManagedProfile", IDS_SETTINGS_PEOPLE_DOMAIN_MANAGED_PROFILE},
{"editPerson", IDS_SETTINGS_EDIT_PERSON},
+ {"profileNameAndPicture", IDS_SETTINGS_PROFILE_NAME_AND_PICTURE},
{"showShortcutLabel", IDS_SETTINGS_PROFILE_SHORTCUT_TOGGLE_LABEL},
#endif // defined(OS_CHROMEOS)
+#if BUILDFLAG(ENABLE_DICE_SUPPORT)
+ {"peopleSignIn", IDS_SETTINGS_PEOPLE_SIGN_IN},
+ {"peopleSignInPrompt", IDS_SETTINGS_PEOPLE_SIGN_IN_PROMPT},
+ {"peopleSignInPromptSecondary",
+ 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},
+ {"turnOffSync", IDS_SETTINGS_PEOPLE_SYNC_TURN_OFF},
+#endif
{"syncOverview", IDS_SETTINGS_SYNC_OVERVIEW},
{"syncDisabledByAdministrator",
IDS_SETTINGS_SYNC_DISABLED_BY_ADMINISTRATOR},
@@ -1563,6 +1618,20 @@ void AddPeopleStrings(content::WebUIDataSource* html_source) {
IDS_SETTINGS_SYNC_DISCONNECT_MANAGED_PROFILE_EXPLANATION,
base::ASCIIToUTF16("$1"),
base::ASCIIToUTF16(sync_dashboard_url)));
+
+ // The syncDisconnect text differs depending on Dice-enabledness.
+ if (signin::IsDiceEnabledForProfile(profile->GetPrefs())) {
+ LocalizedString sync_disconnect_strings[] = {
+ {"syncDisconnect", IDS_SETTINGS_TURN_OFF_SYNC_DIALOG_CONFIRM},
+ {"syncDisconnectTitle", IDS_SETTINGS_TURN_OFF_SYNC_DIALOG_TITLE},
+ {"syncDisconnectDeleteProfile",
+ IDS_SETTINGS_TURN_OFF_SYNC_DIALOG_CHECKBOX},
+ {"syncDisconnectConfirm",
+ IDS_SETTINGS_TURN_OFF_SYNC_DIALOG_MANAGED_CONFIRM},
+ };
+ AddLocalizedStringsBulk(html_source, sync_disconnect_strings,
+ arraysize(sync_disconnect_strings));
+ }
#endif
html_source->AddString("syncErrorHelpUrl", chrome::kSyncErrorsHelpURL);
@@ -1595,6 +1664,7 @@ void AddPrintingStrings(content::WebUIDataSource* html_source) {
{"editPrinter", IDS_SETTINGS_PRINTING_CUPS_PRINTERS_EDIT},
{"removePrinter", IDS_SETTINGS_PRINTING_CUPS_PRINTERS_REMOVE},
{"searchLabel", IDS_SETTINGS_PRINTING_CUPS_SEARCH_LABEL},
+ {"noSearchResults", IDS_SEARCH_NO_RESULTS},
{"printerDetailsTitle", IDS_SETTINGS_PRINTING_CUPS_PRINTER_DETAILS_TITLE},
{"printerName", IDS_SETTINGS_PRINTING_CUPS_PRINTER_DETAILS_NAME},
{"printerModel", IDS_SETTINGS_PRINTING_CUPS_PRINTER_DETAILS_MODEL},
@@ -1626,13 +1696,12 @@ void AddPrintingStrings(content::WebUIDataSource* html_source) {
{"printerProtocolUsb", IDS_SETTINGS_PRINTING_CUPS_PRINTER_PROTOCOL_USB},
{"printerConfiguringMessage",
IDS_SETTINGS_PRINTING_CUPS_PRINTER_CONFIGURING_MESSAGE},
- {"searchingPrinter", IDS_SETTINGS_PRINTING_CUPS_PRINTER_SEARCHING_PRINTER},
- {"printerNotFound", IDS_SETTINGS_PRINTING_CUPS_PRINTER_NOT_FOUND_PRINTER},
- {"printerFound", IDS_SETTINGS_PRINTING_CUPS_PRINTER_FOUND_PRINTER},
{"printerManufacturer", IDS_SETTINGS_PRINTING_CUPS_PRINTER_MANUFACTURER},
{"selectDriver", IDS_SETTINGS_PRINTING_CUPS_PRINTER_SELECT_DRIVER},
{"selectDriverButtonText",
IDS_SETTINGS_PRINTING_CUPS_PRINTER_BUTTON_SELECT_DRIVER},
+ {"selectDriverErrorMessage",
+ IDS_SETTINGS_PRINTING_CUPS_PRINTER_INVALID_DRIVER},
{"printerAddedSuccessfulMessage",
IDS_SETTINGS_PRINTING_CUPS_PRINTER_ADDED_PRINTER_DONE_MESSAGE},
{"noPrinterNearbyMessage",
@@ -1711,9 +1780,6 @@ void AddPrivacyStrings(content::WebUIDataSource* html_source,
AddLocalizedStringsBulk(html_source, localized_strings,
arraysize(localized_strings));
- html_source->AddBoolean("tabsInCbd",
- base::FeatureList::IsEnabled(features::kTabsInCbd));
-
html_source->AddBoolean(
"importantSitesInCbd",
base::FeatureList::IsEnabled(features::kImportantSitesInCbd));
@@ -1946,6 +2012,9 @@ void AddSiteSettingsStrings(content::WebUIDataSource* html_source,
{"siteSettingsSoundAllowRecommended",
IDS_SETTINGS_SITE_SETTINGS_SOUND_ALLOW_RECOMMENDED},
{"siteSettingsSoundBlock", IDS_SETTINGS_SITE_SETTINGS_SOUND_BLOCK},
+ {"siteSettingsSensors", IDS_SETTINGS_SITE_SETTINGS_SENSORS},
+ {"siteSettingsSensorsAllow", IDS_SETTINGS_SITE_SETTINGS_SENSORS_ALLOW},
+ {"siteSettingsSensorsBlock", IDS_SETTINGS_SITE_SETTINGS_SENSORS_BLOCK},
{"siteSettingsFlash", IDS_SETTINGS_SITE_SETTINGS_FLASH},
{"siteSettingsPdfDocuments", IDS_SETTINGS_SITE_SETTINGS_PDF_DOCUMENTS},
{"siteSettingsPdfDownloadPdfs",
@@ -2101,7 +2170,7 @@ void AddSiteSettingsStrings(content::WebUIDataSource* html_source,
{"handlerSetDefault", IDS_SETTINGS_SITE_SETTINGS_HANDLER_SET_DEFAULT},
{"handlerRemove", IDS_SETTINGS_SITE_SETTINGS_REMOVE},
{"adobeFlashStorage", IDS_SETTINGS_SITE_SETTINGS_ADOBE_FLASH_SETTINGS},
- {"learnMore", IDS_SETTINGS_SITE_SETTINGS_LEARN_MORE},
+ {"learnMore", IDS_LEARN_MORE},
{"incognitoSite", IDS_SETTINGS_SITE_SETTINGS_INCOGNITO},
{"incognitoSiteOnly", IDS_SETTINGS_SITE_SETTINGS_INCOGNITO_ONLY},
{"embeddedIncognitoSite", IDS_SETTINGS_SITE_SETTINGS_INCOGNITO_EMBEDDED},
@@ -2130,6 +2199,10 @@ void AddSiteSettingsStrings(content::WebUIDataSource* html_source,
"enableClipboardContentSetting",
base::FeatureList::IsEnabled(features::kClipboardContentSetting));
+ html_source->AddBoolean(
+ "enableSensorsContentSetting",
+ base::FeatureList::IsEnabled(features::kGenericSensorExtraClasses));
+
if (PluginUtils::ShouldPreferHtmlOverPlugins(
HostContentSettingsMapFactory::GetForProfile(profile))) {
LocalizedString flash_strings[] = {
@@ -2157,7 +2230,6 @@ void AddUsersStrings(content::WebUIDataSource* html_source) {
{"usersModifiedByOwnerLabel", IDS_SETTINGS_USERS_MODIFIED_BY_OWNER_LABEL},
{"guestBrowsingLabel", IDS_SETTINGS_USERS_GUEST_BROWSING_LABEL},
{"settingsManagedLabel", IDS_SETTINGS_USERS_MANAGED_LABEL},
- {"supervisedUsersLabel", IDS_SETTINGS_USERS_SUPERVISED_USERS_LABEL},
{"showOnSigninLabel", IDS_SETTINGS_USERS_SHOW_ON_SIGNIN_LABEL},
{"restrictSigninLabel", IDS_SETTINGS_USERS_RESTRICT_SIGNIN_LABEL},
{"deviceOwnerLabel", IDS_SETTINGS_USERS_DEVICE_OWNER_LABEL},
@@ -2245,16 +2317,17 @@ void AddLocalizedStrings(content::WebUIDataSource* html_source,
#if defined(OS_WIN) && defined(GOOGLE_CHROME_BUILD)
AddChromeCleanupStrings(html_source);
+ AddIncompatibleApplicationsStrings(html_source);
#endif // defined(OS_WIN) && defined(GOOGLE_CHROME_BUILD)
AddChangePasswordStrings(html_source);
- AddClearBrowsingDataStrings(html_source);
+ AddClearBrowsingDataStrings(html_source, profile);
AddCommonStrings(html_source, profile);
AddDownloadsStrings(html_source);
AddLanguagesStrings(html_source);
AddOnStartupStrings(html_source);
AddPasswordsAndFormsStrings(html_source);
- AddPeopleStrings(html_source);
+ AddPeopleStrings(html_source, profile);
AddPrintingStrings(html_source);
AddPrivacyStrings(html_source, profile);
AddResetStrings(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 30779acd938..c3d1a1d2812 100644
--- a/chromium/chrome/browser/ui/webui/settings/md_settings_ui.cc
+++ b/chromium/chrome/browser/ui/webui/settings/md_settings_ui.cc
@@ -54,6 +54,9 @@
#include "chrome/browser/safe_browsing/chrome_cleaner/srt_field_trial_win.h"
#include "chrome/browser/ui/webui/settings/chrome_cleanup_handler.h"
#if defined(GOOGLE_CHROME_BUILD)
+#include "chrome/browser/conflicts/problematic_programs_updater_win.h"
+#include "chrome/browser/conflicts/token_util_win.h"
+#include "chrome/browser/ui/webui/settings/incompatible_applications_handler_win.h"
#include "chrome/grit/chrome_unscaled_resources.h"
#endif
#endif // defined(OS_WIN)
@@ -88,6 +91,7 @@
#include "chrome/browser/ui/webui/settings/settings_default_browser_handler.h"
#include "chrome/browser/ui/webui/settings/settings_manage_profile_handler.h"
#include "chrome/browser/ui/webui/settings/system_handler.h"
+#include "components/signin/core/browser/profile_management_switches.h"
#endif // defined(OS_CHROMEOS)
#if defined(USE_NSS_CERTS)
@@ -222,9 +226,21 @@ MdSettingsUI::MdSettingsUI(content::WebUI* web_ui)
// should never change while Chrome is open.
html_source->AddBoolean("userInitiatedCleanupsEnabled",
userInitiatedCleanupsEnabled);
-
#endif // defined(OS_WIN)
+#if defined(OS_WIN) && defined(GOOGLE_CHROME_BUILD)
+ bool has_incompatible_applications =
+ ProblematicProgramsUpdater::IsIncompatibleApplicationsWarningEnabled() &&
+ ProblematicProgramsUpdater::HasCachedPrograms();
+ html_source->AddBoolean("showIncompatibleApplications",
+ has_incompatible_applications);
+ html_source->AddBoolean("hasAdminRights", HasAdminRights());
+
+ if (has_incompatible_applications)
+ AddSettingsPageUIHandler(
+ std::make_unique<IncompatibleApplicationsHandler>());
+#endif // OS_WIN && defined(GOOGLE_CHROME_BUILD)
+
bool password_protection_available = false;
#if defined(SAFE_BROWSING_DB_LOCAL)
safe_browsing::ChromePasswordProtectionService* password_protection =
@@ -281,7 +297,10 @@ MdSettingsUI::MdSettingsUI(content::WebUI* web_ui)
AddSettingsPageUIHandler(std::make_unique<chromeos::settings::PowerHandler>(
profile->GetPrefs()));
}
-#endif
+#else // !defined(OS_CHROMEOS)
+ html_source->AddBoolean("diceEnabled",
+ signin::IsDiceEnabledForProfile(profile->GetPrefs()));
+#endif // defined(OS_CHROMEOS)
html_source->AddBoolean("showExportPasswords",
base::FeatureList::IsEnabled(
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 60d70778592..def21ea78e0 100644
--- a/chromium/chrome/browser/ui/webui/settings/metrics_reporting_handler.cc
+++ b/chromium/chrome/browser/ui/webui/settings/metrics_reporting_handler.cc
@@ -63,7 +63,8 @@ std::unique_ptr<base::DictionaryValue>
MetricsReportingHandler::CreateMetricsReportingDict() {
std::unique_ptr<base::DictionaryValue> dict(
std::make_unique<base::DictionaryValue>());
- dict->SetBoolean("enabled",
+ dict->SetBoolean(
+ "enabled",
ChromeMetricsServiceAccessor::IsMetricsAndCrashReportingEnabled());
dict->SetBoolean("managed", IsMetricsReportingPolicyManaged());
return dict;
diff --git a/chromium/chrome/browser/ui/webui/settings/people_handler.cc b/chromium/chrome/browser/ui/webui/settings/people_handler.cc
index 170db11ae9c..8c8cddf5897 100644
--- a/chromium/chrome/browser/ui/webui/settings/people_handler.cc
+++ b/chromium/chrome/browser/ui/webui/settings/people_handler.cc
@@ -31,8 +31,6 @@
#include "chrome/browser/ui/browser_window.h"
#include "chrome/browser/ui/chrome_pages.h"
#include "chrome/browser/ui/singleton_tabs.h"
-#include "chrome/browser/ui/user_manager.h"
-#include "chrome/browser/ui/webui/profile_helper.h"
#include "chrome/browser/ui/webui/signin/login_ui_service.h"
#include "chrome/browser/ui/webui/signin/login_ui_service_factory.h"
#include "chrome/common/chrome_switches.h"
@@ -62,8 +60,17 @@
#if defined(OS_CHROMEOS)
#include "components/signin/core/browser/signin_manager_base.h"
#else
+#include "chrome/browser/ui/user_manager.h"
+#include "chrome/browser/ui/webui/profile_helper.h"
#include "components/signin/core/browser/signin_manager.h"
#endif
+#if BUILDFLAG(ENABLE_DICE_SUPPORT)
+#include "chrome/browser/profiles/profile_avatar_icon_util.h"
+#include "chrome/browser/signin/account_tracker_service_factory.h"
+#include "components/signin/core/browser/account_tracker_service.h"
+#include "third_party/skia/include/core/SkBitmap.h"
+#include "ui/gfx/image/image.h"
+#endif
using browser_sync::ProfileSyncService;
using content::WebContents;
@@ -186,7 +193,14 @@ PeopleHandler::PeopleHandler(Profile* profile)
: profile_(profile),
configuring_sync_(false),
signin_observer_(this),
- sync_service_observer_(this) {}
+#if BUILDFLAG(ENABLE_DICE_SUPPORT)
+ sync_service_observer_(this),
+ account_tracker_observer_(this) {
+}
+#else
+ sync_service_observer_(this) {
+}
+#endif
PeopleHandler::~PeopleHandler() {
// Early exit if running unit tests (no actual WebUI is attached).
@@ -231,6 +245,16 @@ void PeopleHandler::RegisterMessages() {
"SyncSetupStartSignIn",
base::Bind(&PeopleHandler::HandleStartSignin, base::Unretained(this)));
#endif
+#if BUILDFLAG(ENABLE_DICE_SUPPORT)
+ web_ui()->RegisterMessageCallback(
+ "SyncSetupGetStoredAccounts",
+ base::BindRepeating(&PeopleHandler::HandleGetStoredAccounts,
+ base::Unretained(this)));
+ web_ui()->RegisterMessageCallback(
+ "SyncSetupStartSyncingWithEmail",
+ base::BindRepeating(&PeopleHandler::HandleStartSyncingWithEmail,
+ base::Unretained(this)));
+#endif
}
void PeopleHandler::OnJavascriptAllowed() {
@@ -249,12 +273,22 @@ void PeopleHandler::OnJavascriptAllowed() {
ProfileSyncServiceFactory::GetInstance()->GetForProfile(profile_));
if (sync_service)
sync_service_observer_.Add(sync_service);
+
+#if BUILDFLAG(ENABLE_DICE_SUPPORT)
+ AccountTrackerService* account_tracker(
+ AccountTrackerServiceFactory::GetForProfile(profile_));
+ if (account_tracker)
+ account_tracker_observer_.Add(account_tracker);
+#endif
}
void PeopleHandler::OnJavascriptDisallowed() {
profile_pref_registrar_.RemoveAll();
signin_observer_.RemoveAll();
sync_service_observer_.RemoveAll();
+#if BUILDFLAG(ENABLE_DICE_SUPPORT)
+ account_tracker_observer_.RemoveAll();
+#endif
}
#if !defined(OS_CHROMEOS)
@@ -407,6 +441,68 @@ void PeopleHandler::HandleSetDatatypes(const base::ListValue* args) {
ProfileMetrics::LogProfileSyncInfo(ProfileMetrics::SYNC_CHOOSE);
}
+#if BUILDFLAG(ENABLE_DICE_SUPPORT)
+void PeopleHandler::HandleGetStoredAccounts(const base::ListValue* args) {
+ CHECK_EQ(1U, args->GetSize());
+ const base::Value* callback_id;
+ CHECK(args->Get(0, &callback_id));
+
+ ResolveJavascriptCallback(*callback_id, *GetStoredAccountsList());
+}
+
+void PeopleHandler::OnAccountUpdated(const AccountInfo& info) {
+ FireWebUIListener("stored-accounts-updated", *GetStoredAccountsList());
+}
+
+void PeopleHandler::OnAccountRemoved(const AccountInfo& info) {
+ FireWebUIListener("stored-accounts-updated", *GetStoredAccountsList());
+}
+
+std::unique_ptr<base::ListValue> PeopleHandler::GetStoredAccountsList() {
+ std::vector<AccountInfo> accounts =
+ signin_ui_util::GetAccountsForDicePromos(profile_);
+
+ AccountTrackerService* account_tracker =
+ AccountTrackerServiceFactory::GetForProfile(profile_);
+ std::unique_ptr<base::ListValue> accounts_list(new base::ListValue);
+ accounts_list->Reserve(accounts.size());
+
+ for (auto const& account : accounts) {
+ accounts_list->GetList().push_back(
+ base::Value(base::Value::Type::DICTIONARY));
+ base::Value& acc = accounts_list->GetList().back();
+ acc.SetKey("email", base::Value(account.email));
+ acc.SetKey("fullName", base::Value(account.full_name));
+ acc.SetKey("givenName", base::Value(account.given_name));
+ const gfx::Image& account_image =
+ account_tracker->GetAccountImage(account.account_id);
+ if (!account_image.IsEmpty()) {
+ acc.SetKey(
+ "avatarImage",
+ base::Value(webui::GetBitmapDataUrl(account_image.AsBitmap())));
+ }
+ }
+
+ return accounts_list;
+}
+
+void PeopleHandler::HandleStartSyncingWithEmail(const base::ListValue* args) {
+ const base::Value* email;
+ CHECK(args->Get(0, &email));
+
+ Browser* browser =
+ chrome::FindBrowserWithWebContents(web_ui()->GetWebContents());
+
+ AccountTrackerService* account_tracker =
+ AccountTrackerServiceFactory::GetForProfile(profile_);
+ AccountInfo account =
+ account_tracker->FindAccountInfoByEmail(email->GetString());
+
+ signin_ui_util::EnableSync(
+ browser, account, signin_metrics::AccessPoint::ACCESS_POINT_SETTINGS);
+}
+#endif
+
void PeopleHandler::HandleSetEncryption(const base::ListValue* args) {
DCHECK(!sync_startup_tracker_);
@@ -545,7 +641,6 @@ void PeopleHandler::HandleStopSyncing(const base::ListValue* args) {
if (delete_profile) {
webui::DeleteProfileAtPath(profile_->GetPath(),
- web_ui(),
ProfileMetrics::DELETE_PROFILE_SETTINGS);
}
}
@@ -562,8 +657,10 @@ void PeopleHandler::HandleGetSyncStatus(const base::ListValue* args) {
}
void PeopleHandler::HandleManageOtherPeople(const base::ListValue* /* args */) {
+#if !defined(OS_CHROMEOS)
UserManager::Show(base::FilePath(),
profiles::USER_MANAGER_SELECT_PROFILE_NO_ACTION);
+#endif // !defined(OS_CHROMEOS)
}
void PeopleHandler::CloseSyncSetup() {
@@ -762,8 +859,6 @@ PeopleHandler::GetSyncStatusDictionary() {
ProfileSyncServiceFactory::GetInstance()->GetForProfile(profile_);
sync_status->SetBoolean("signinAllowed", signin->IsSigninAllowed());
sync_status->SetBoolean("syncSystemEnabled", (service != nullptr));
- sync_status->SetBoolean("setupCompleted",
- service && service->IsFirstSetupComplete());
sync_status->SetBoolean(
"setupInProgress",
service && !service->IsManaged() && service->IsFirstSetupInProgress());
@@ -786,7 +881,6 @@ PeopleHandler::GetSyncStatusDictionary() {
signin_ui_util::GetAuthenticatedUsername(signin));
sync_status->SetBoolean("hasUnrecoverableError",
service && service->HasUnrecoverableError());
-
return sync_status;
}
diff --git a/chromium/chrome/browser/ui/webui/settings/people_handler.h b/chromium/chrome/browser/ui/webui/settings/people_handler.h
index be8ab4ea3a4..0ea976fa175 100644
--- a/chromium/chrome/browser/ui/webui/settings/people_handler.h
+++ b/chromium/chrome/browser/ui/webui/settings/people_handler.h
@@ -14,13 +14,19 @@
#include "base/strings/utf_string_conversions.h"
#include "base/timer/timer.h"
#include "build/build_config.h"
+#include "build/buildflag.h"
#include "chrome/browser/sync/sync_startup_tracker.h"
#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_manager_base.h"
#include "components/sync/driver/sync_service_observer.h"
+#if BUILDFLAG(ENABLE_DICE_SUPPORT)
+#include "components/signin/core/browser/account_tracker_service.h"
+#endif
+
class LoginUIService;
class SigninManagerBase;
@@ -45,6 +51,9 @@ namespace settings {
class PeopleHandler : public SettingsPageUIHandler,
public SigninManagerBase::Observer,
public SyncStartupTracker::Observer,
+#if BUILDFLAG(ENABLE_DICE_SUPPORT)
+ public AccountTrackerService::Observer,
+#endif
public LoginUIService::LoginUI,
public syncer::SyncServiceObserver {
public:
@@ -122,6 +131,12 @@ class PeopleHandler : public SettingsPageUIHandler,
// syncer::SyncServiceObserver implementation.
void OnStateChanged(syncer::SyncService* sync) override;
+#if BUILDFLAG(ENABLE_DICE_SUPPORT)
+ // AccountTrackerService::Observer implementation.
+ void OnAccountUpdated(const AccountInfo& info) override;
+ void OnAccountRemoved(const AccountInfo& info) override;
+#endif
+
// Returns a newly created dictionary with a number of properties that
// correspond to the status of sync.
std::unique_ptr<base::DictionaryValue> GetSyncStatusDictionary();
@@ -155,6 +170,12 @@ class PeopleHandler : public SettingsPageUIHandler,
signin_metrics::AccessPoint access_point);
#endif
+#if BUILDFLAG(ENABLE_DICE_SUPPORT)
+ void HandleGetStoredAccounts(const base::ListValue* args);
+ void HandleStartSyncingWithEmail(const base::ListValue* args);
+ std::unique_ptr<base::ListValue> GetStoredAccountsList();
+#endif
+
// Displays spinner-only UI indicating that something is going on in the
// background.
// TODO(kochi): better to show some message that the user can understand what
@@ -211,6 +232,11 @@ class PeopleHandler : public SettingsPageUIHandler,
ScopedObserver<browser_sync::ProfileSyncService, PeopleHandler>
sync_service_observer_;
+#if BUILDFLAG(ENABLE_DICE_SUPPORT)
+ ScopedObserver<AccountTrackerService, PeopleHandler>
+ account_tracker_observer_;
+#endif
+
DISALLOW_COPY_AND_ASSIGN(PeopleHandler);
};
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 ec5442d0d1b..13312118858 100644
--- a/chromium/chrome/browser/ui/webui/settings/people_handler_unittest.cc
+++ b/chromium/chrome/browser/ui/webui/settings/people_handler_unittest.cc
@@ -47,6 +47,7 @@
#include "ui/base/layout.h"
using ::testing::_;
+using ::testing::Invoke;
using ::testing::Mock;
using ::testing::Return;
using ::testing::ReturnRef;
@@ -197,8 +198,7 @@ class PeopleHandlerTest : public ChromeRenderViewHostTestHarness {
error_ = GoogleServiceAuthError::AuthErrorNone();
// Sign in the user.
- mock_signin_ = static_cast<SigninManagerBase*>(
- SigninManagerFactory::GetForProfile(profile()));
+ mock_signin_ = SigninManagerFactory::GetForProfile(profile());
std::string username = GetTestUser();
if (!username.empty())
mock_signin_->SetAuthenticatedAccountInfo(username, username);
@@ -213,6 +213,10 @@ class PeopleHandlerTest : public ChromeRenderViewHostTestHarness {
Return(base::Time()));
ON_CALL(*mock_pss_, GetRegisteredDataTypes())
.WillByDefault(Return(syncer::ModelTypeSet()));
+ ON_CALL(*mock_pss_, GetSetupInProgressHandle())
+ .WillByDefault(
+ Invoke(mock_pss_,
+ &ProfileSyncServiceMock::GetSetupInProgressHandleConcrete));
mock_pss_->Initialize();
@@ -332,7 +336,7 @@ TEST_F(PeopleHandlerFirstSigninTest, DisplayBasicLogin) {
EXPECT_CALL(*mock_pss_, CanSyncStart()).WillRepeatedly(Return(false));
EXPECT_CALL(*mock_pss_, IsFirstSetupComplete()).WillRepeatedly(Return(false));
// Ensure that the user is not signed in before calling |HandleStartSignin()|.
- SigninManager* manager = static_cast<SigninManager*>(mock_signin_);
+ SigninManager* manager = SigninManager::FromSigninManagerBase(mock_signin_);
manager->SignOut(signin_metrics::SIGNOUT_TEST,
signin_metrics::SignoutDelete::IGNORE_METRIC);
base::ListValue list_args;
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 6261f7f9c28..299d6fe9a8d 100644
--- a/chromium/chrome/browser/ui/webui/settings/profile_info_handler.cc
+++ b/chromium/chrome/browser/ui/webui/settings/profile_info_handler.cc
@@ -9,7 +9,7 @@
#include "chrome/browser/browser_process.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/profiles/profile_attributes_entry.h"
-#include "chrome/browser/ui/user_manager.h"
+#include "chrome/browser/profiles/profile_manager.h"
#include "chrome/common/pref_names.h"
#include "ui/base/webui/web_ui_util.h"
@@ -32,9 +32,6 @@ namespace settings {
// static
const char ProfileInfoHandler::kProfileInfoChangedEventName[] =
"profile-info-changed";
-const char
- ProfileInfoHandler::kProfileManagesSupervisedUsersChangedEventName[] =
- "profile-manages-supervised-users-changed";
const char ProfileInfoHandler::kProfileStatsCountReadyEventName[] =
"profile-stats-count-ready";
@@ -63,23 +60,12 @@ void ProfileInfoHandler::RegisterMessages() {
base::Bind(&ProfileInfoHandler::HandleGetProfileStats,
base::Unretained(this)));
#endif
- web_ui()->RegisterMessageCallback(
- "getProfileManagesSupervisedUsers",
- base::Bind(&ProfileInfoHandler::HandleGetProfileManagesSupervisedUsers,
- base::Unretained(this)));
}
void ProfileInfoHandler::OnJavascriptAllowed() {
profile_observer_.Add(
&g_browser_process->profile_manager()->GetProfileAttributesStorage());
- PrefService* prefs = profile_->GetPrefs();
- profile_pref_registrar_.Init(prefs);
- profile_pref_registrar_.Add(
- prefs::kSupervisedUsers,
- base::Bind(&ProfileInfoHandler::PushProfileManagesSupervisedUsersStatus,
- base::Unretained(this)));
-
#if defined(OS_CHROMEOS)
user_manager_observer_.Add(user_manager::UserManager::Get());
#endif
@@ -91,8 +77,6 @@ void ProfileInfoHandler::OnJavascriptDisallowed() {
profile_observer_.Remove(
&g_browser_process->profile_manager()->GetProfileAttributesStorage());
- profile_pref_registrar_.RemoveAll();
-
#if defined(OS_CHROMEOS)
user_manager_observer_.Remove(user_manager::UserManager::Get());
#endif
@@ -147,29 +131,10 @@ void ProfileInfoHandler::PushProfileStatsCount(
}
#endif
-void ProfileInfoHandler::HandleGetProfileManagesSupervisedUsers(
- const base::ListValue* args) {
- AllowJavascript();
-
- CHECK_EQ(1U, args->GetSize());
- const base::Value* callback_id;
- CHECK(args->Get(0, &callback_id));
-
- ResolveJavascriptCallback(*callback_id,
- base::Value(IsProfileManagingSupervisedUsers()));
-}
-
void ProfileInfoHandler::PushProfileInfo() {
FireWebUIListener(kProfileInfoChangedEventName, *GetAccountNameAndIcon());
}
-void ProfileInfoHandler::PushProfileManagesSupervisedUsersStatus() {
- CallJavascriptFunction(
- "cr.webUIListenerCallback",
- base::Value(kProfileManagesSupervisedUsersChangedEventName),
- base::Value(IsProfileManagingSupervisedUsers()));
-}
-
std::unique_ptr<base::DictionaryValue>
ProfileInfoHandler::GetAccountNameAndIcon() const {
std::string name;
@@ -208,8 +173,4 @@ ProfileInfoHandler::GetAccountNameAndIcon() const {
return response;
}
-bool ProfileInfoHandler::IsProfileManagingSupervisedUsers() const {
- return !profile_->GetPrefs()->GetDictionary(prefs::kSupervisedUsers)->empty();
-}
-
} // namespace settings
diff --git a/chromium/chrome/browser/ui/webui/settings/profile_info_handler.h b/chromium/chrome/browser/ui/webui/settings/profile_info_handler.h
index 5d8386beace..0d7d986709c 100644
--- a/chromium/chrome/browser/ui/webui/settings/profile_info_handler.h
+++ b/chromium/chrome/browser/ui/webui/settings/profile_info_handler.h
@@ -32,7 +32,6 @@ class ProfileInfoHandler : public SettingsPageUIHandler,
public ProfileAttributesStorage::Observer {
public:
static const char kProfileInfoChangedEventName[];
- static const char kProfileManagesSupervisedUsersChangedEventName[];
static const char kProfileStatsCountReadyEventName[];
explicit ProfileInfoHandler(Profile* profile);
@@ -56,14 +55,9 @@ class ProfileInfoHandler : public SettingsPageUIHandler,
private:
FRIEND_TEST_ALL_PREFIXES(ProfileInfoHandlerTest, GetProfileInfo);
FRIEND_TEST_ALL_PREFIXES(ProfileInfoHandlerTest, PushProfileInfo);
- FRIEND_TEST_ALL_PREFIXES(ProfileInfoHandlerTest,
- GetProfileManagesSupervisedUsers);
- FRIEND_TEST_ALL_PREFIXES(ProfileInfoHandlerTest,
- PushProfileManagesSupervisedUsers);
// Callbacks from the page.
void HandleGetProfileInfo(const base::ListValue* args);
- void HandleGetProfileManagesSupervisedUsers(const base::ListValue* args);
void PushProfileInfo();
#if !defined(OS_CHROMEOS)
@@ -74,12 +68,6 @@ class ProfileInfoHandler : public SettingsPageUIHandler,
void PushProfileStatsCount(profiles::ProfileCategoryStats stats);
#endif
- // Pushes whether the current profile manages supervised users to JavaScript.
- void PushProfileManagesSupervisedUsersStatus();
-
- // Returns true if this profile manages supervised users.
- bool IsProfileManagingSupervisedUsers() const;
-
std::unique_ptr<base::DictionaryValue> GetAccountNameAndIcon() const;
// Weak pointer.
@@ -93,9 +81,6 @@ class ProfileInfoHandler : public SettingsPageUIHandler,
ScopedObserver<ProfileAttributesStorage, ProfileInfoHandler>
profile_observer_;
- // Used to listen for changes in the list of managed supervised users.
- PrefChangeRegistrar profile_pref_registrar_;
-
// Used to cancel callbacks when JavaScript becomes disallowed.
base::WeakPtrFactory<ProfileInfoHandler> callback_weak_ptr_factory_;
diff --git a/chromium/chrome/browser/ui/webui/settings/profile_info_handler_unittest.cc b/chromium/chrome/browser/ui/webui/settings/profile_info_handler_unittest.cc
index 734d9b70fe2..a5229444221 100644
--- a/chromium/chrome/browser/ui/webui/settings/profile_info_handler_unittest.cc
+++ b/chromium/chrome/browser/ui/webui/settings/profile_info_handler_unittest.cc
@@ -151,53 +151,4 @@ TEST_F(ProfileInfoHandlerTest, PushProfileInfo) {
VerifyProfileInfo(data.arg2());
}
-TEST_F(ProfileInfoHandlerTest, GetProfileManagesSupervisedUsers) {
- base::ListValue list_args;
- list_args.AppendString("get-profile-manages-supervised-users-callback-id");
- handler()->HandleGetProfileManagesSupervisedUsers(&list_args);
-
- EXPECT_EQ(1U, web_ui()->call_data().size());
-
- const content::TestWebUI::CallData& data = *web_ui()->call_data().back();
- EXPECT_EQ("cr.webUIResponse", data.function_name());
-
- std::string callback_id;
- ASSERT_TRUE(data.arg1()->GetAsString(&callback_id));
- EXPECT_EQ("get-profile-manages-supervised-users-callback-id", callback_id);
-
- bool success = false;
- ASSERT_TRUE(data.arg2()->GetAsBoolean(&success));
- EXPECT_TRUE(success);
-
- bool has_supervised_users = false;
- ASSERT_TRUE(data.arg3()->GetAsBoolean(&has_supervised_users));
- EXPECT_FALSE(has_supervised_users);
-}
-
-TEST_F(ProfileInfoHandlerTest, PushProfileManagesSupervisedUsers) {
- handler()->AllowJavascript();
-
- // The handler is notified of the change after |update| is destroyed.
- std::unique_ptr<DictionaryPrefUpdate> update(
- new DictionaryPrefUpdate(profile()->GetPrefs(), prefs::kSupervisedUsers));
- base::DictionaryValue* dict = update->Get();
- dict->SetWithoutPathExpansion("supervised-user-id",
- std::make_unique<base::DictionaryValue>());
- update.reset();
-
- EXPECT_EQ(1U, web_ui()->call_data().size());
-
- const content::TestWebUI::CallData& data = *web_ui()->call_data().back();
- EXPECT_EQ("cr.webUIListenerCallback", data.function_name());
-
- std::string event_id;
- ASSERT_TRUE(data.arg1()->GetAsString(&event_id));
- EXPECT_EQ(ProfileInfoHandler::kProfileManagesSupervisedUsersChangedEventName,
- event_id);
-
- bool has_supervised_users = false;
- ASSERT_TRUE(data.arg2()->GetAsBoolean(&has_supervised_users));
- EXPECT_TRUE(has_supervised_users);
-}
-
} // namespace settings
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 062d170c0c7..3b1453e6170 100644
--- a/chromium/chrome/browser/ui/webui/settings/protocol_handlers_handler.cc
+++ b/chromium/chrome/browser/ui/webui/settings/protocol_handlers_handler.cc
@@ -47,9 +47,6 @@ void ProtocolHandlersHandler::RegisterMessages() {
base::Bind(
&ProtocolHandlersHandler::HandleObserveProtocolHandlersEnabledState,
base::Unretained(this)));
- web_ui()->RegisterMessageCallback("clearDefault",
- base::Bind(&ProtocolHandlersHandler::HandleClearDefault,
- base::Unretained(this)));
web_ui()->RegisterMessageCallback("removeHandler",
base::Bind(&ProtocolHandlersHandler::HandleRemoveHandler,
base::Unretained(this)));
@@ -59,9 +56,6 @@ void ProtocolHandlersHandler::RegisterMessages() {
web_ui()->RegisterMessageCallback("setDefault",
base::Bind(&ProtocolHandlersHandler::HandleSetDefault,
base::Unretained(this)));
- web_ui()->RegisterMessageCallback("removeIgnoredHandler",
- base::Bind(&ProtocolHandlersHandler::HandleRemoveIgnoredHandler,
- base::Unretained(this)));
}
ProtocolHandlerRegistry* ProtocolHandlersHandler::GetProtocolHandlerRegistry() {
@@ -70,6 +64,7 @@ ProtocolHandlerRegistry* ProtocolHandlersHandler::GetProtocolHandlerRegistry() {
}
static void GetHandlersAsListValue(
+ const ProtocolHandlerRegistry& registry,
const ProtocolHandlerRegistry::ProtocolHandlerList& handlers,
base::ListValue* handler_list) {
ProtocolHandlerRegistry::ProtocolHandlerList::const_iterator handler;
@@ -79,6 +74,7 @@ static void GetHandlersAsListValue(
handler_value->SetString("protocol", handler->protocol());
handler_value->SetString("spec", handler->url().spec());
handler_value->SetString("host", handler->url().host());
+ handler_value->SetBoolean("is_default", registry.IsDefault(*handler));
handler_list->Append(std::move(handler_value));
}
}
@@ -88,16 +84,9 @@ void ProtocolHandlersHandler::GetHandlersForProtocol(
base::DictionaryValue* handlers_value) {
ProtocolHandlerRegistry* registry = GetProtocolHandlerRegistry();
handlers_value->SetString("protocol", protocol);
- handlers_value->SetInteger("default_handler",
- registry->GetHandlerIndex(protocol));
- handlers_value->SetBoolean(
- "is_default_handler_set_by_user",
- registry->IsRegisteredByUser(registry->GetHandlerFor(protocol)));
- handlers_value->SetBoolean("has_policy_recommendations",
- registry->HasPolicyRegisteredHandler(protocol));
auto handlers_list = std::make_unique<base::ListValue>();
- GetHandlersAsListValue(registry->GetHandlersFor(protocol),
+ GetHandlersAsListValue(*registry, registry->GetHandlersFor(protocol),
handlers_list.get());
handlers_value->Set("handlers", std::move(handlers_list));
}
@@ -106,7 +95,7 @@ void ProtocolHandlersHandler::GetIgnoredHandlers(base::ListValue* handlers) {
ProtocolHandlerRegistry* registry = GetProtocolHandlerRegistry();
ProtocolHandlerRegistry::ProtocolHandlerList ignored_handlers =
registry->GetIgnoredHandlers();
- return GetHandlersAsListValue(ignored_handlers, handlers);
+ return GetHandlersAsListValue(*registry, ignored_handlers, handlers);
}
void ProtocolHandlersHandler::UpdateHandlerList() {
@@ -148,13 +137,8 @@ void ProtocolHandlersHandler::SendHandlersEnabledValue() {
}
void ProtocolHandlersHandler::HandleRemoveHandler(const base::ListValue* args) {
- const base::ListValue* list;
- if (!args->GetList(0, &list)) {
- NOTREACHED();
- return;
- }
-
- ProtocolHandler handler(ParseHandlerFromArgs(list));
+ ProtocolHandler handler(ParseHandlerFromArgs(args));
+ CHECK(!handler.IsEmpty());
GetProtocolHandlerRegistry()->RemoveHandler(handler);
// No need to call UpdateHandlerList() - we should receive a notification
@@ -162,18 +146,6 @@ void ProtocolHandlersHandler::HandleRemoveHandler(const base::ListValue* args) {
// then.
}
-void ProtocolHandlersHandler::HandleRemoveIgnoredHandler(
- const base::ListValue* args) {
- const base::ListValue* list;
- if (!args->GetList(0, &list)) {
- NOTREACHED();
- return;
- }
-
- ProtocolHandler handler(ParseHandlerFromArgs(list));
- GetProtocolHandlerRegistry()->RemoveIgnoredHandler(handler);
-}
-
void ProtocolHandlersHandler::HandleSetHandlersEnabled(
const base::ListValue* args) {
bool enabled = true;
@@ -184,18 +156,8 @@ void ProtocolHandlersHandler::HandleSetHandlersEnabled(
GetProtocolHandlerRegistry()->Disable();
}
-void ProtocolHandlersHandler::HandleClearDefault(const base::ListValue* args) {
- const base::Value* value;
- CHECK(args->Get(0, &value));
- std::string protocol_to_clear;
- CHECK(value->GetAsString(&protocol_to_clear));
- GetProtocolHandlerRegistry()->ClearDefault(protocol_to_clear);
-}
-
void ProtocolHandlersHandler::HandleSetDefault(const base::ListValue* args) {
- const base::ListValue* list;
- CHECK(args->GetList(0, &list));
- const ProtocolHandler& handler(ParseHandlerFromArgs(list));
+ const ProtocolHandler& handler(ParseHandlerFromArgs(args));
CHECK(!handler.IsEmpty());
GetProtocolHandlerRegistry()->OnAcceptRegisterProtocolHandler(handler);
}
diff --git a/chromium/chrome/browser/ui/webui/settings/protocol_handlers_handler.h b/chromium/chrome/browser/ui/webui/settings/protocol_handlers_handler.h
index 269f27f6061..cf5094ad895 100644
--- a/chromium/chrome/browser/ui/webui/settings/protocol_handlers_handler.h
+++ b/chromium/chrome/browser/ui/webui/settings/protocol_handlers_handler.h
@@ -63,12 +63,8 @@ class ProtocolHandlersHandler : public SettingsPageUIHandler,
// Called when the user sets a new default handler for a protocol.
void HandleSetDefault(const base::ListValue* args);
- // Called when the user clears the default handler for a protocol.
- // |args| is the string name of the protocol to clear.
- void HandleClearDefault(const base::ListValue* args);
-
// Parses a ProtocolHandler out of the arguments passed back from the view.
- // |args| is a list of [protocol, url, title].
+ // |args| is a list of [protocol, url].
ProtocolHandler ParseHandlerFromArgs(const base::ListValue* args) const;
// Returns a JSON object describing the set of protocol handlers for the
@@ -83,13 +79,9 @@ class ProtocolHandlersHandler : public SettingsPageUIHandler,
void UpdateHandlerList();
// Remove a handler.
- // |args| is a list of [protocol, url, title].
+ // |args| is a list of [protocol, url].
void HandleRemoveHandler(const base::ListValue* args);
- // Remove an ignored handler.
- // |args| is a list of [protocol, url, title].
- void HandleRemoveIgnoredHandler(const base::ListValue* args);
-
ProtocolHandlerRegistry* GetProtocolHandlerRegistry();
content::NotificationRegistrar notification_registrar_;
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 e42d983ce75..f017287acdf 100644
--- a/chromium/chrome/browser/ui/webui/settings/safe_browsing_handler.cc
+++ b/chromium/chrome/browser/ui/webui/settings/safe_browsing_handler.cc
@@ -47,8 +47,17 @@ void SafeBrowsingHandler::HandleGetSafeBrowsingExtendedReporting(
AllowJavascript();
const base::Value* callback_id;
CHECK(args->Get(0, &callback_id));
- base::Value is_enabled(safe_browsing::IsExtendedReportingEnabled(*prefs_));
- ResolveJavascriptCallback(*callback_id, is_enabled);
+
+ 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);
}
void SafeBrowsingHandler::HandleSetSafeBrowsingExtendedReportingEnabled(
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 49cd2fb9f4e..b4c04a907d9 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
@@ -27,7 +27,7 @@
#include "chrome/common/pref_names.h"
#include "components/browsing_data/core/history_notice_utils.h"
#include "components/browsing_data/core/pref_names.h"
-#include "components/feature_engagement/features.h"
+#include "components/feature_engagement/buildflags.h"
#include "components/prefs/pref_member.h"
#include "components/prefs/pref_service.h"
#include "components/signin/core/browser/signin_manager.h"
@@ -50,26 +50,23 @@ namespace {
const int kMaxTimesHistoryNoticeShown = 1;
// TODO(msramek): Get the list of deletion preferences from the JS side.
-const char* kCounterPrefs[] = {
+const char* kCounterPrefsAdvanced[] = {
browsing_data::prefs::kDeleteBrowsingHistory,
browsing_data::prefs::kDeleteCache,
+ browsing_data::prefs::kDeleteCookies,
browsing_data::prefs::kDeleteDownloadHistory,
browsing_data::prefs::kDeleteFormData,
browsing_data::prefs::kDeleteHostedAppsData,
browsing_data::prefs::kDeleteMediaLicenses,
browsing_data::prefs::kDeletePasswords,
+ browsing_data::prefs::kDeleteSiteSettings,
};
-// Additional counters for the tabbed ui.
+// Additional counters for the basic tab of CBD.
const char* kCounterPrefsBasic[] = {
browsing_data::prefs::kDeleteCacheBasic,
};
-const char* kCounterPrefsAdvanced[] = {
- browsing_data::prefs::kDeleteCookies,
- browsing_data::prefs::kDeleteSiteSettings,
-};
-
const char kRegisterableDomainField[] = "registerableDomain";
const char kReasonBitField[] = "reasonBitfield";
const char kExampleOriginField[] = "exampleOrigin";
@@ -87,13 +84,8 @@ ClearBrowsingDataHandler::ClearBrowsingDataHandler(content::WebUI* webui)
: profile_(Profile::FromWebUI(webui)),
sync_service_(ProfileSyncServiceFactory::GetForProfile(profile_)),
sync_service_observer_(this),
- show_history_footer_(false),
show_history_deletion_dialog_(false),
- weak_ptr_factory_(this) {
- if (base::FeatureList::IsEnabled(features::kTabsInCbd)) {
- browsing_data::MigratePreferencesToBasic(profile_->GetPrefs());
- }
-}
+ weak_ptr_factory_(this) {}
ClearBrowsingDataHandler::~ClearBrowsingDataHandler() {
}
@@ -120,32 +112,25 @@ void ClearBrowsingDataHandler::OnJavascriptAllowed() {
sync_service_observer_.Add(sync_service_);
DCHECK(counters_.empty());
- for (const std::string& pref : kCounterPrefs) {
+ for (const std::string& pref : kCounterPrefsBasic) {
AddCounter(BrowsingDataCounterFactory::GetForProfileAndPref(profile_, pref),
- browsing_data::ClearBrowsingDataTab::ADVANCED);
+ browsing_data::ClearBrowsingDataTab::BASIC);
}
- if (base::FeatureList::IsEnabled(features::kTabsInCbd)) {
- for (const std::string& pref : kCounterPrefsBasic) {
- AddCounter(
- BrowsingDataCounterFactory::GetForProfileAndPref(profile_, pref),
- browsing_data::ClearBrowsingDataTab::BASIC);
- }
- for (const std::string& pref : kCounterPrefsAdvanced) {
- AddCounter(
- BrowsingDataCounterFactory::GetForProfileAndPref(profile_, pref),
- browsing_data::ClearBrowsingDataTab::ADVANCED);
- }
- PrefService* prefs = profile_->GetPrefs();
- period_ = std::make_unique<IntegerPrefMember>();
- period_->Init(browsing_data::prefs::kDeleteTimePeriod, prefs,
- base::Bind(&ClearBrowsingDataHandler::HandleTimePeriodChanged,
- base::Unretained(this)));
- periodBasic_ = std::make_unique<IntegerPrefMember>();
- periodBasic_->Init(
- browsing_data::prefs::kDeleteTimePeriodBasic, prefs,
- base::Bind(&ClearBrowsingDataHandler::HandleTimePeriodChanged,
- base::Unretained(this)));
+ for (const std::string& pref : kCounterPrefsAdvanced) {
+ AddCounter(BrowsingDataCounterFactory::GetForProfileAndPref(profile_, pref),
+ browsing_data::ClearBrowsingDataTab::ADVANCED);
}
+ PrefService* prefs = profile_->GetPrefs();
+ period_ = std::make_unique<IntegerPrefMember>();
+ period_->Init(
+ browsing_data::prefs::kDeleteTimePeriod, prefs,
+ base::BindRepeating(&ClearBrowsingDataHandler::HandleTimePeriodChanged,
+ base::Unretained(this)));
+ periodBasic_ = std::make_unique<IntegerPrefMember>();
+ periodBasic_->Init(
+ browsing_data::prefs::kDeleteTimePeriodBasic, prefs,
+ base::BindRepeating(&ClearBrowsingDataHandler::HandleTimePeriodChanged,
+ base::Unretained(this)));
}
void ClearBrowsingDataHandler::OnJavascriptDisallowed() {
@@ -239,8 +224,10 @@ void ClearBrowsingDataHandler::HandleClearBrowsingData(
case BrowsingDataType::BOOKMARKS:
// Only implemented on Android.
NOTREACHED();
+ break;
case BrowsingDataType::NUM_TYPES:
NOTREACHED();
+ break;
}
}
@@ -455,25 +442,15 @@ void ClearBrowsingDataHandler::OnStateChanged(syncer::SyncService* sync) {
void ClearBrowsingDataHandler::UpdateSyncState() {
auto* signin_manager = SigninManagerFactory::GetForProfile(profile_);
- // TODO(dullweber): Remove "show_history_footer" attribute when the new UI
- // is launched as it doesn't have this footer anymore. Instead the
- // myactivity.google.com link is shown when a user is signed in or syncing.
CallJavascriptFunction(
"cr.webUIListenerCallback", base::Value("update-sync-state"),
base::Value(signin_manager && signin_manager->IsAuthenticated()),
base::Value(sync_service_ && sync_service_->IsSyncActive() &&
sync_service_->GetActiveDataTypes().Has(
- syncer::HISTORY_DELETE_DIRECTIVES)),
- base::Value(show_history_footer_));
+ syncer::HISTORY_DELETE_DIRECTIVES)));
}
void ClearBrowsingDataHandler::RefreshHistoryNotice() {
- browsing_data::ShouldShowNoticeAboutOtherFormsOfBrowsingHistory(
- sync_service_,
- WebHistoryServiceFactory::GetForProfile(profile_),
- base::Bind(&ClearBrowsingDataHandler::UpdateHistoryNotice,
- weak_ptr_factory_.GetWeakPtr()));
-
// If the dialog with history notice has been shown less than
// |kMaxTimesHistoryNoticeShown| times, we might have to show it when the
// user deletes history. Find out if the conditions are met.
@@ -490,15 +467,6 @@ void ClearBrowsingDataHandler::RefreshHistoryNotice() {
}
}
-void ClearBrowsingDataHandler::UpdateHistoryNotice(bool show) {
- show_history_footer_ = show;
- UpdateSyncState();
-
- UMA_HISTOGRAM_BOOLEAN(
- "History.ClearBrowsingData.HistoryNoticeShownInFooterWhenUpdated",
- show_history_footer_);
-}
-
void ClearBrowsingDataHandler::UpdateHistoryDeletionDialog(bool show) {
// This is used by OnClearingTaskFinished (when the deletion finishes).
show_history_deletion_dialog_ = show;
diff --git a/chromium/chrome/browser/ui/webui/settings/settings_clear_browsing_data_handler.h b/chromium/chrome/browser/ui/webui/settings/settings_clear_browsing_data_handler.h
index 1cbd4ea698a..f135b0172af 100644
--- a/chromium/chrome/browser/ui/webui/settings/settings_clear_browsing_data_handler.h
+++ b/chromium/chrome/browser/ui/webui/settings/settings_clear_browsing_data_handler.h
@@ -80,10 +80,6 @@ class ClearBrowsingDataHandler : public SettingsPageUIHandler,
// in user's account.
void RefreshHistoryNotice();
- // Called as an asynchronous response to |RefreshHistoryNotice()|. Shows or
- // hides the footer about other forms of history stored in user's account.
- void UpdateHistoryNotice(bool show);
-
// Called as an asynchronous response to |RefreshHistoryNotice()|. Enables or
// disables the dialog about other forms of history stored in user's account
// that is shown when the history deletion is finished.
@@ -111,11 +107,6 @@ class ClearBrowsingDataHandler : public SettingsPageUIHandler,
ScopedObserver<browser_sync::ProfileSyncService, syncer::SyncServiceObserver>
sync_service_observer_;
- // Whether the sentence about other forms of history stored in user's account
- // should be displayed in the footer. This value is retrieved asynchronously,
- // so we cache it here.
- bool show_history_footer_;
-
// Whether we should show a dialog informing the user about other forms of
// history stored in their account after the history deletion is finished.
bool show_history_deletion_dialog_;
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 0a4b4442f20..c413d8569ab 100644
--- a/chromium/chrome/browser/ui/webui/settings/site_settings_handler.cc
+++ b/chromium/chrome/browser/ui/webui/settings/site_settings_handler.cc
@@ -9,6 +9,7 @@
#include <string>
#include <utility>
+#include "base/barrier_closure.h"
#include "base/bind.h"
#include "base/i18n/number_formatting.h"
#include "base/macros.h"
@@ -45,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/common/quota/quota_types.mojom.h"
+#include "third_party/WebKit/public/mojom/quota/quota_types.mojom.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/base/text/bytes_formatting.h"
@@ -92,7 +93,7 @@ void AddExceptionsGrantedByHostedApps(content::BrowserContext* context,
!(*extension)->permissions_data()->HasAPIPermission(permission))
continue;
- extensions::URLPatternSet web_extent = (*extension)->web_extent();
+ const extensions::URLPatternSet& web_extent = (*extension)->web_extent();
// Add patterns from web extent.
for (extensions::URLPatternSet::const_iterator pattern = web_extent.begin();
pattern != web_extent.end(); ++pattern) {
@@ -159,6 +160,9 @@ void SiteSettingsHandler::RegisterMessages() {
base::Bind(&SiteSettingsHandler::HandleSetOriginPermissions,
base::Unretained(this)));
web_ui()->RegisterMessageCallback(
+ "clearFlashPref", base::Bind(&SiteSettingsHandler::HandleClearFlashPref,
+ base::Unretained(this)));
+ web_ui()->RegisterMessageCallback(
"resetCategoryPermissionForPattern",
base::Bind(&SiteSettingsHandler::HandleResetCategoryPermissionForPattern,
base::Unretained(this)));
@@ -248,14 +252,18 @@ void SiteSettingsHandler::OnGetUsageInfo(
}
}
-void SiteSettingsHandler::OnUsageInfoCleared(
- blink::mojom::QuotaStatusCode code) {
+void SiteSettingsHandler::OnStorageCleared(base::OnceClosure callback,
+ blink::mojom::QuotaStatusCode code) {
if (code == blink::mojom::QuotaStatusCode::kOk) {
- CallJavascriptFunction("settings.WebsiteUsagePrivateApi.onUsageCleared",
- base::Value(clearing_origin_));
+ std::move(callback).Run();
}
}
+void SiteSettingsHandler::OnUsageCleared() {
+ CallJavascriptFunction("settings.WebsiteUsagePrivateApi.onUsageCleared",
+ base::Value(clearing_origin_));
+}
+
#if defined(OS_CHROMEOS)
void SiteSettingsHandler::OnPrefEnableDrmChanged() {
CallJavascriptFunction("cr.webUIListenerCallback",
@@ -355,19 +363,25 @@ void SiteSettingsHandler::HandleClearUsage(
if (url.is_valid()) {
clearing_origin_ = origin;
+ // Call OnUsageCleared when StorageInfoFetcher::ClearStorage and
+ // BrowsingDataLocalStorageHelper::DeleteOrigin are done.
+ base::RepeatingClosure barrier = base::BarrierClosure(
+ 2, base::BindOnce(&SiteSettingsHandler::OnUsageCleared,
+ base::Unretained(this)));
+
// Start by clearing the storage data asynchronously.
scoped_refptr<StorageInfoFetcher> storage_info_fetcher
= new StorageInfoFetcher(profile_);
storage_info_fetcher->ClearStorage(
url.host(),
static_cast<blink::mojom::StorageType>(static_cast<int>(storage_type)),
- base::Bind(&SiteSettingsHandler::OnUsageInfoCleared,
- base::Unretained(this)));
+ base::BindRepeating(&SiteSettingsHandler::OnStorageCleared,
+ base::Unretained(this), barrier));
// Also clear the *local* storage data.
scoped_refptr<BrowsingDataLocalStorageHelper> local_storage_helper =
new BrowsingDataLocalStorageHelper(profile_);
- local_storage_helper->DeleteOrigin(url);
+ local_storage_helper->DeleteOrigin(url, barrier);
}
}
@@ -621,6 +635,19 @@ void SiteSettingsHandler::HandleSetOriginPermissions(
}
}
+void SiteSettingsHandler::HandleClearFlashPref(const base::ListValue* args) {
+ CHECK_EQ(1U, args->GetSize());
+ std::string origin_string;
+ CHECK(args->GetString(0, &origin_string));
+
+ HostContentSettingsMap* map =
+ HostContentSettingsMapFactory::GetForProfile(profile_);
+ const GURL origin(origin_string);
+ map->SetWebsiteSettingDefaultScope(origin, origin,
+ CONTENT_SETTINGS_TYPE_PLUGINS_DATA,
+ std::string(), nullptr);
+}
+
void SiteSettingsHandler::HandleResetCategoryPermissionForPattern(
const base::ListValue* args) {
CHECK_EQ(4U, args->GetSize());
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 63fa495c22e..01be8c4849d 100644
--- a/chromium/chrome/browser/ui/webui/settings/site_settings_handler.h
+++ b/chromium/chrome/browser/ui/webui/settings/site_settings_handler.h
@@ -16,7 +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 "third_party/WebKit/common/quota/quota_types.mojom.h"
+#include "ppapi/features/features.h"
+#include "third_party/WebKit/public/mojom/quota/quota_types.mojom.h"
class HostContentSettingsMap;
class Profile;
@@ -46,7 +47,9 @@ class SiteSettingsHandler : public SettingsPageUIHandler,
// Usage info.
void OnGetUsageInfo(const storage::UsageInfoEntries& entries);
- void OnUsageInfoCleared(blink::mojom::QuotaStatusCode code);
+ void OnStorageCleared(base::OnceClosure callback,
+ blink::mojom::QuotaStatusCode code);
+ void OnUsageCleared();
#if defined(OS_CHROMEOS)
// Alert the Javascript that the |kEnableDRM| pref has changed.
@@ -70,6 +73,10 @@ class SiteSettingsHandler : public SettingsPageUIHandler,
private:
friend class SiteSettingsHandlerTest;
friend class SiteSettingsHandlerInfobarTest;
+#if BUILDFLAG(ENABLE_PLUGINS)
+ FRIEND_TEST_ALL_PREFIXES(SiteSettingsHandlerTest,
+ ChangingFlashSettingForSiteIsRemembered);
+#endif
FRIEND_TEST_ALL_PREFIXES(SiteSettingsHandlerTest, DefaultSettingSource);
FRIEND_TEST_ALL_PREFIXES(SiteSettingsHandlerTest, ExceptionHelpers);
FRIEND_TEST_ALL_PREFIXES(SiteSettingsHandlerTest, ExtensionDisplayName);
@@ -110,6 +117,10 @@ class SiteSettingsHandler : public SettingsPageUIHandler,
void HandleGetOriginPermissions(const base::ListValue* args);
void HandleSetOriginPermissions(const base::ListValue* args);
+ // Clears the Flash data setting used to remember if the user has changed the
+ // Flash permission for an origin.
+ void HandleClearFlashPref(const base::ListValue* args);
+
// Handles setting and resetting an origin permission.
void HandleResetCategoryPermissionForPattern(const base::ListValue* args);
void HandleSetCategoryPermissionForPattern(const base::ListValue* args);
diff --git a/chromium/chrome/browser/ui/webui/settings/site_settings_handler_unittest.cc b/chromium/chrome/browser/ui/webui/settings/site_settings_handler_unittest.cc
index 434947cf2a6..7e40e5e5081 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,6 +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 "testing/gtest/include/gtest/gtest.h"
#if defined(OS_CHROMEOS)
@@ -38,6 +39,10 @@
#include "components/user_manager/scoped_user_manager.h"
#endif
+#if BUILDFLAG(ENABLE_PLUGINS)
+#include "chrome/browser/plugins/chrome_plugin_service_filter.h"
+#endif
+
namespace {
constexpr char kCallbackId[] = "test-callback-id";
@@ -45,7 +50,41 @@ constexpr char kSetting[] = "setting";
constexpr char kSource[] = "source";
constexpr char kExtensionName[] = "Test Extension";
-}
+#if BUILDFLAG(ENABLE_PLUGINS)
+// Waits until a change is observed in content settings.
+class FlashContentSettingsChangeWaiter : public content_settings::Observer {
+ public:
+ explicit FlashContentSettingsChangeWaiter(Profile* profile)
+ : profile_(profile) {
+ HostContentSettingsMapFactory::GetForProfile(profile)->AddObserver(this);
+ }
+ ~FlashContentSettingsChangeWaiter() override {
+ HostContentSettingsMapFactory::GetForProfile(profile_)->RemoveObserver(
+ this);
+ }
+
+ // content_settings::Observer:
+ void OnContentSettingChanged(const ContentSettingsPattern& primary_pattern,
+ const ContentSettingsPattern& secondary_pattern,
+ ContentSettingsType content_type,
+ std::string resource_identifier) override {
+ if (content_type == CONTENT_SETTINGS_TYPE_PLUGINS)
+ Proceed();
+ }
+
+ void Wait() { run_loop_.Run(); }
+
+ private:
+ void Proceed() { run_loop_.Quit(); }
+
+ Profile* profile_;
+ base::RunLoop run_loop_;
+
+ DISALLOW_COPY_AND_ASSIGN(FlashContentSettingsChangeWaiter);
+};
+#endif
+
+} // namespace
namespace settings {
@@ -90,6 +129,8 @@ class SiteSettingsHandlerTest : public testing::Test {
CONTENT_SETTINGS_TYPE_NOTIFICATIONS)),
kCookies(site_settings::ContentSettingsTypeToGroupName(
CONTENT_SETTINGS_TYPE_COOKIES)),
+ kFlash(site_settings::ContentSettingsTypeToGroupName(
+ CONTENT_SETTINGS_TYPE_PLUGINS)),
handler_(&profile_) {
#if defined(OS_CHROMEOS)
user_manager_enabler_ = std::make_unique<user_manager::ScopedUserManager>(
@@ -277,6 +318,7 @@ class SiteSettingsHandlerTest : public testing::Test {
// Content setting group name for the relevant ContentSettingsType.
const std::string kNotifications;
const std::string kCookies;
+ const std::string kFlash;
private:
content::TestBrowserThreadBundle thread_bundle_;
@@ -476,6 +518,56 @@ TEST_F(SiteSettingsHandlerTest, GetAndSetOriginPermissions) {
site_settings::SiteSettingSource::kDefault, 4U);
}
+#if BUILDFLAG(ENABLE_PLUGINS)
+TEST_F(SiteSettingsHandlerTest, ChangingFlashSettingForSiteIsRemembered) {
+ ChromePluginServiceFilter::GetInstance()->RegisterResourceContext(
+ profile(), profile()->GetResourceContext());
+ FlashContentSettingsChangeWaiter waiter(profile());
+
+ const std::string origin_with_port("https://www.example.com:443");
+ // The display name won't show the port if it's default for that scheme.
+ const std::string origin("https://www.example.com");
+ base::ListValue get_args;
+ get_args.AppendString(kCallbackId);
+ get_args.AppendString(origin_with_port);
+ const GURL url(origin_with_port);
+
+ HostContentSettingsMap* map =
+ HostContentSettingsMapFactory::GetForProfile(profile());
+ // Make sure the site being tested doesn't already have this marker set.
+ EXPECT_EQ(nullptr,
+ map->GetWebsiteSetting(url, url, CONTENT_SETTINGS_TYPE_PLUGINS_DATA,
+ std::string(), nullptr));
+
+ // Change the Flash setting.
+ base::ListValue set_args;
+ set_args.AppendString(origin_with_port);
+ {
+ auto category_list = std::make_unique<base::ListValue>();
+ category_list->AppendString(kFlash);
+ set_args.Append(std::move(category_list));
+ }
+ set_args.AppendString(
+ content_settings::ContentSettingToString(CONTENT_SETTING_BLOCK));
+ handler()->HandleSetOriginPermissions(&set_args);
+ EXPECT_EQ(1U, web_ui()->call_data().size());
+ waiter.Wait();
+
+ // Check that this site has now been marked for displaying Flash always, then
+ // clear it and check this works.
+ EXPECT_NE(nullptr,
+ map->GetWebsiteSetting(url, url, CONTENT_SETTINGS_TYPE_PLUGINS_DATA,
+ std::string(), nullptr));
+ base::ListValue clear_args;
+ clear_args.AppendString(origin_with_port);
+ handler()->HandleSetOriginPermissions(&set_args);
+ handler()->HandleClearFlashPref(&clear_args);
+ EXPECT_EQ(nullptr,
+ map->GetWebsiteSetting(url, url, CONTENT_SETTINGS_TYPE_PLUGINS_DATA,
+ std::string(), nullptr));
+}
+#endif
+
TEST_F(SiteSettingsHandlerTest, GetAndSetForInvalidURLs) {
const std::string origin("arbitrary string");
EXPECT_FALSE(GURL(origin).is_valid());