diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2021-09-03 13:32:17 +0200 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2021-10-01 14:31:55 +0200 |
commit | 21ba0c5d4bf8fba15dddd97cd693bad2358b77fd (patch) | |
tree | 91be119f694044dfc1ff9fdc054459e925de9df0 /chromium/content/utility | |
parent | 03c549e0392f92c02536d3f86d5e1d8dfa3435ac (diff) | |
download | qtwebengine-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.gn | 12 | ||||
-rw-r--r-- | chromium/content/utility/DEPS | 2 | ||||
-rw-r--r-- | chromium/content/utility/services.cc | 28 | ||||
-rw-r--r-- | chromium/content/utility/utility_main.cc | 79 | ||||
-rw-r--r-- | chromium/content/utility/utility_thread_impl.cc | 6 |
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; } |