summaryrefslogtreecommitdiff
path: root/chromium/content/utility
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2021-09-03 13:32:17 +0200
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2021-10-01 14:31:55 +0200
commit21ba0c5d4bf8fba15dddd97cd693bad2358b77fd (patch)
tree91be119f694044dfc1ff9fdc054459e925de9df0 /chromium/content/utility
parent03c549e0392f92c02536d3f86d5e1d8dfa3435ac (diff)
downloadqtwebengine-chromium-21ba0c5d4bf8fba15dddd97cd693bad2358b77fd.tar.gz
BASELINE: Update Chromium to 92.0.4515.166
Change-Id: I42a050486714e9e54fc271f2a8939223a02ae364
Diffstat (limited to 'chromium/content/utility')
-rw-r--r--chromium/content/utility/BUILD.gn12
-rw-r--r--chromium/content/utility/DEPS2
-rw-r--r--chromium/content/utility/services.cc28
-rw-r--r--chromium/content/utility/utility_main.cc79
-rw-r--r--chromium/content/utility/utility_thread_impl.cc6
5 files changed, 93 insertions, 34 deletions
diff --git a/chromium/content/utility/BUILD.gn b/chromium/content/utility/BUILD.gn
index 7dfdad2ccd0..4b6a6cd4edb 100644
--- a/chromium/content/utility/BUILD.gn
+++ b/chromium/content/utility/BUILD.gn
@@ -3,8 +3,10 @@
# found in the LICENSE file.
import("//build/config/chromeos/ui_mode.gni")
+import("//chromeos/assistant/assistant.gni")
import("//device/vr/buildflags/buildflags.gni")
import("//media/media_options.gni")
+import("//printing/buildflags/buildflags.gni")
source_set("utility") {
# Only the public target should depend on this. All other targets (even
@@ -48,6 +50,7 @@ source_set("utility") {
"//media:media_buildflags",
"//mojo/public/cpp/bindings",
"//net",
+ "//printing/buildflags",
"//sandbox",
"//services/audio",
"//services/data_decoder:lib",
@@ -77,6 +80,7 @@ source_set("utility") {
if (is_chromeos_ash) {
deps += [
+ "//chromeos/assistant:buildflags",
"//chromeos/services/ime:sandbox_hook",
"//chromeos/services/tts:sandbox_hook",
]
@@ -89,6 +93,10 @@ source_set("utility") {
]
}
+ if (enable_libassistant_sandbox) {
+ deps += [ "//chromeos/services/libassistant:sandbox_hook" ]
+ }
+
# PAC execution is done in process on Android.
if (!is_android) {
deps += [ "//services/proxy_resolver:lib" ]
@@ -97,9 +105,11 @@ source_set("utility") {
if (is_linux || is_chromeos) {
deps += [
"//content/utility/speech:speech_recognition_sandbox_hook",
- "//printing:printing_sandbox_hook",
"//services/network:network_sandbox_hook",
]
+ if (enable_basic_printing) {
+ deps += [ "//printing:printing_sandbox_hook" ]
+ }
}
if (enable_vr && !is_android) {
diff --git a/chromium/content/utility/DEPS b/chromium/content/utility/DEPS
index 5c7055e1876..fdacbc89939 100644
--- a/chromium/content/utility/DEPS
+++ b/chromium/content/utility/DEPS
@@ -3,7 +3,9 @@ include_rules = [
"+content/child",
"+content/public/utility",
"+content/services",
+ "+chromeos/assistant/buildflags.h",
"+chromeos/services/ime",
+ "+chromeos/services/libassistant",
"+chromeos/services/tts",
"+device/vr/buildflags",
"+device/vr/public",
diff --git a/chromium/content/utility/services.cc b/chromium/content/utility/services.cc
index 8cdfa199335..8ceadc6001b 100644
--- a/chromium/content/utility/services.cc
+++ b/chromium/content/utility/services.cc
@@ -49,6 +49,7 @@
#if BUILDFLAG(ENABLE_CDM_HOST_VERIFICATION)
#include "media/cdm/cdm_host_file.h"
#endif // BUILDFLAG(ENABLE_CDM_HOST_VERIFICATION)
+#endif // BUILDFLAG(ENABLE_LIBRARY_CDMS)
#if BUILDFLAG(ENABLE_VR) && !defined(OS_ANDROID)
#include "content/services/isolated_xr_device/xr_device_service.h" // nogncheck
@@ -60,7 +61,6 @@
#include "sandbox/win/src/sandbox.h"
extern sandbox::TargetServices* g_utility_target_services;
#endif // defined(OS_WIN)
-#endif // BUILDFLAG(ENABLE_LIBRARY_CDMS)
#if defined(OS_LINUX) || defined(OS_CHROMEOS)
#include "sandbox/linux/services/libc_interceptor.h"
@@ -81,8 +81,15 @@ namespace content {
namespace {
-#if BUILDFLAG(ENABLE_LIBRARY_CDMS)
+#if defined(OS_WIN)
+void EnsureSandboxedWin() {
+ // |g_utility_target_services| can be null if --no-sandbox is specified.
+ if (g_utility_target_services)
+ g_utility_target_services->LowerToken();
+}
+#endif // defined(OS_WIN)
+#if BUILDFLAG(ENABLE_LIBRARY_CDMS)
std::unique_ptr<media::CdmAuxiliaryHelper> CreateCdmHelper(
media::mojom::FrameInterfaceFactory* interface_provider) {
return std::make_unique<media::MojoCdmHelper>(interface_provider);
@@ -95,9 +102,7 @@ class ContentCdmServiceClient final : public media::CdmService::Client {
void EnsureSandboxed() override {
#if defined(OS_WIN)
- // |g_utility_target_services| can be null if --no-sandbox is specified.
- if (g_utility_target_services)
- g_utility_target_services->LowerToken();
+ EnsureSandboxedWin();
#endif
}
@@ -130,7 +135,7 @@ class UtilityThreadVideoCaptureServiceImpl final
#if defined(OS_WIN)
base::win::ScopedCOMInitializer com_initializer_{
base::win::ScopedCOMInitializer::kMTA};
-#endif
+#endif // defined(OS_WIN)
};
auto RunNetworkService(
@@ -224,9 +229,16 @@ auto RunDataDecoder(
}
#if defined(OS_WIN)
-auto RunMediaFoundationService(
+std::unique_ptr<media::MediaFoundationService> RunMediaFoundationService(
mojo::PendingReceiver<media::mojom::MediaFoundationService> receiver) {
- return std::make_unique<media::MediaFoundationService>(std::move(receiver));
+ base::FilePath user_data;
+ if (!GetContentClient()->utility()->GetDefaultUserDataDirectory(&user_data)) {
+ receiver.ResetWithReason(0, "Cannot get user data directory!");
+ return nullptr;
+ }
+
+ return std::make_unique<media::MediaFoundationService>(
+ std::move(receiver), user_data, base::BindOnce(&EnsureSandboxedWin));
}
#endif // defined(OS_WIN)
diff --git a/chromium/content/utility/utility_main.cc b/chromium/content/utility/utility_main.cc
index 4dcb9d3f4d9..4b30d8f0ac7 100644
--- a/chromium/content/utility/utility_main.cc
+++ b/chromium/content/utility/utility_main.cc
@@ -6,7 +6,6 @@
#include "base/command_line.h"
#include "base/debug/leak_annotations.h"
#include "base/message_loop/message_pump_type.h"
-#include "base/optional.h"
#include "base/power_monitor/power_monitor.h"
#include "base/run_loop.h"
#include "base/task/single_thread_task_executor.h"
@@ -23,20 +22,31 @@
#include "content/public/common/sandbox_init.h"
#include "content/public/utility/content_utility_client.h"
#include "content/utility/utility_thread_impl.h"
+#include "printing/buildflags/buildflags.h"
#include "sandbox/policy/sandbox.h"
#include "services/tracing/public/cpp/trace_startup.h"
+#include "third_party/abseil-cpp/absl/types/optional.h"
+#include "third_party/icu/source/common/unicode/unistr.h"
+#include "third_party/icu/source/i18n/unicode/timezone.h"
#if defined(OS_LINUX) || defined(OS_CHROMEOS)
#include "content/utility/speech/speech_recognition_sandbox_hook_linux.h"
+#if BUILDFLAG(ENABLE_PRINTING)
#include "printing/sandbox/print_backend_sandbox_hook_linux.h"
+#endif
#include "sandbox/policy/linux/sandbox_linux.h"
#include "services/audio/audio_sandbox_hook_linux.h"
#include "services/network/network_sandbox_hook_linux.h"
#endif
#if BUILDFLAG(IS_CHROMEOS_ASH)
+#include "chromeos/assistant/buildflags.h"
#include "chromeos/services/ime/ime_sandbox_hook.h"
#include "chromeos/services/tts/tts_sandbox_hook.h"
+
+#if BUILDFLAG(ENABLE_LIBASSISTANT_SANDBOX)
+#include "chromeos/services/libassistant/libassistant_sandbox_hook.h" // nogncheck
+#endif // BUILDFLAG(ENABLE_LIBASSISTANT_SANDBOX)
#endif
#if defined(OS_MAC)
@@ -82,12 +92,26 @@ int UtilityMain(const MainFunctionParams& parameters) {
message_pump_type = base::MessagePumpType::IO;
#endif // defined(OS_FUCHSIA)
+ if (parameters.command_line.HasSwitch(switches::kTimeZoneForTesting)) {
+ std::string time_zone = parameters.command_line.GetSwitchValueASCII(
+ switches::kTimeZoneForTesting);
+ icu::TimeZone::adoptDefault(
+ icu::TimeZone::createTimeZone(icu::UnicodeString(time_zone.c_str())));
+ }
+
// The main task executor of the utility process.
base::SingleThreadTaskExecutor main_thread_task_executor(message_pump_type);
base::PlatformThread::SetName("CrUtilityMain");
- if (parameters.command_line.HasSwitch(switches::kUtilityStartupDialog))
- WaitForDebugger("Utility");
+ if (parameters.command_line.HasSwitch(switches::kUtilityStartupDialog)) {
+ auto dialog_match = parameters.command_line.GetSwitchValueASCII(
+ switches::kUtilityStartupDialog);
+ auto sub_type =
+ parameters.command_line.GetSwitchValueASCII(switches::kUtilitySubType);
+ if (dialog_match.empty() || dialog_match == sub_type) {
+ WaitForDebugger(sub_type.empty() ? "Utility" : sub_type);
+ }
+ }
#if defined(OS_LINUX) || defined(OS_CHROMEOS)
// Initializes the sandbox before any threads are created.
@@ -95,32 +119,41 @@ int UtilityMain(const MainFunctionParams& parameters) {
// Seccomp-BPF policy.
auto sandbox_type =
sandbox::policy::SandboxTypeFromCommandLine(parameters.command_line);
- if (parameters.zygote_child ||
- sandbox_type == sandbox::policy::SandboxType::kNetwork ||
-#if BUILDFLAG(IS_CHROMEOS_ASH)
- sandbox_type == sandbox::policy::SandboxType::kIme ||
- sandbox_type == sandbox::policy::SandboxType::kTts ||
-#endif // BUILDFLAG(IS_CHROMEOS_ASH)
- sandbox_type == sandbox::policy::SandboxType::kPrintBackend ||
- sandbox_type == sandbox::policy::SandboxType::kAudio ||
- sandbox_type == sandbox::policy::SandboxType::kSpeechRecognition) {
- sandbox::policy::SandboxLinux::PreSandboxHook pre_sandbox_hook;
- if (sandbox_type == sandbox::policy::SandboxType::kNetwork)
+ sandbox::policy::SandboxLinux::PreSandboxHook pre_sandbox_hook;
+ switch (sandbox_type) {
+ case sandbox::policy::SandboxType::kNetwork:
pre_sandbox_hook = base::BindOnce(&network::NetworkPreSandboxHook);
- else if (sandbox_type == sandbox::policy::SandboxType::kPrintBackend)
+ break;
+#if BUILDFLAG(ENABLE_PRINTING)
+ case sandbox::policy::SandboxType::kPrintBackend:
pre_sandbox_hook = base::BindOnce(&printing::PrintBackendPreSandboxHook);
- else if (sandbox_type == sandbox::policy::SandboxType::kAudio)
+ break;
+#endif // BUILDFLAG(ENABLE_PRINTING)
+ case sandbox::policy::SandboxType::kAudio:
pre_sandbox_hook = base::BindOnce(&audio::AudioPreSandboxHook);
- else if (sandbox_type == sandbox::policy::SandboxType::kSpeechRecognition)
+ break;
+ case sandbox::policy::SandboxType::kSpeechRecognition:
pre_sandbox_hook =
base::BindOnce(&speech::SpeechRecognitionPreSandboxHook);
+ break;
#if BUILDFLAG(IS_CHROMEOS_ASH)
- else if (sandbox_type == sandbox::policy::SandboxType::kIme)
+ case sandbox::policy::SandboxType::kIme:
pre_sandbox_hook = base::BindOnce(&chromeos::ime::ImePreSandboxHook);
- else if (sandbox_type == sandbox::policy::SandboxType::kTts)
+ break;
+ case sandbox::policy::SandboxType::kTts:
pre_sandbox_hook = base::BindOnce(&chromeos::tts::TtsPreSandboxHook);
+ break;
+#if BUILDFLAG(ENABLE_LIBASSISTANT_SANDBOX)
+ case sandbox::policy::SandboxType::kLibassistant:
+ pre_sandbox_hook =
+ base::BindOnce(&chromeos::libassistant::LibassistantPreSandboxHook);
+ break;
+#endif // BUILDFLAG(ENABLE_LIBASSISTANT_SANDBOX)
#endif // BUILDFLAG(IS_CHROMEOS_ASH)
-
+ default:
+ break;
+ }
+ if (parameters.zygote_child || !pre_sandbox_hook.is_null()) {
sandbox::policy::Sandbox::Initialize(
sandbox_type, std::move(pre_sandbox_hook),
sandbox::policy::SandboxLinux::Options());
@@ -157,7 +190,7 @@ int UtilityMain(const MainFunctionParams& parameters) {
// TODO(leonhsl): Once http://crbug.com/646833 got resolved, re-enable
// base::HighResolutionTimerManager here for future possible usage of high
// resolution timer in service utility process.
- base::Optional<base::HighResolutionTimerManager> hi_res_timer_manager;
+ absl::optional<base::HighResolutionTimerManager> hi_res_timer_manager;
if (base::PowerMonitor::IsInitialized()) {
hi_res_timer_manager.emplace();
}
@@ -165,6 +198,7 @@ int UtilityMain(const MainFunctionParams& parameters) {
#if defined(OS_WIN)
auto sandbox_type =
sandbox::policy::SandboxTypeFromCommandLine(parameters.command_line);
+ DVLOG(1) << "Sandbox type: " << static_cast<int>(sandbox_type);
// https://crbug.com/1076771 https://crbug.com/1075487 Premature unload of
// shell32 caused process to crash during process shutdown.
@@ -172,7 +206,8 @@ int UtilityMain(const MainFunctionParams& parameters) {
UNREFERENCED_PARAMETER(shell32_pin);
if (!sandbox::policy::IsUnsandboxedSandboxType(sandbox_type) &&
- sandbox_type != sandbox::policy::SandboxType::kCdm) {
+ sandbox_type != sandbox::policy::SandboxType::kCdm &&
+ sandbox_type != sandbox::policy::SandboxType::kMediaFoundationCdm) {
if (!g_utility_target_services)
return false;
char buffer;
diff --git a/chromium/content/utility/utility_thread_impl.cc b/chromium/content/utility/utility_thread_impl.cc
index ae7584f9e76..363574f595f 100644
--- a/chromium/content/utility/utility_thread_impl.cc
+++ b/chromium/content/utility/utility_thread_impl.cc
@@ -16,7 +16,6 @@
#include "base/memory/scoped_refptr.h"
#include "base/memory/weak_ptr.h"
#include "base/no_destructor.h"
-#include "base/optional.h"
#include "base/sequenced_task_runner.h"
#include "base/trace_event/trace_log.h"
#include "build/build_config.h"
@@ -30,6 +29,7 @@
#include "mojo/public/cpp/bindings/binder_map.h"
#include "mojo/public/cpp/bindings/pending_receiver.h"
#include "mojo/public/cpp/bindings/service_factory.h"
+#include "third_party/abseil-cpp/absl/types/optional.h"
namespace content {
@@ -85,8 +85,8 @@ class ServiceBinderImpl {
std::move(*receiver), std::move(termination_callback)));
}
- static base::Optional<ServiceBinderImpl>& GetInstanceStorage() {
- static base::NoDestructor<base::Optional<ServiceBinderImpl>> storage;
+ static absl::optional<ServiceBinderImpl>& GetInstanceStorage() {
+ static base::NoDestructor<absl::optional<ServiceBinderImpl>> storage;
return *storage;
}