diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2019-02-13 16:23:34 +0100 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2019-02-14 10:37:21 +0000 |
commit | 38a9a29f4f9436cace7f0e7abf9c586057df8a4e (patch) | |
tree | c4e8c458dc595bc0ddb435708fa2229edfd00bd4 /chromium/content/utility | |
parent | e684a3455bcc29a6e3e66a004e352dea4e1141e7 (diff) | |
download | qtwebengine-chromium-38a9a29f4f9436cace7f0e7abf9c586057df8a4e.tar.gz |
BASELINE: Update Chromium to 73.0.3683.37
Change-Id: I08c9af2948b645f671e5d933aca1f7a90ea372f2
Reviewed-by: Michael BrĂ¼ning <michael.bruning@qt.io>
Diffstat (limited to 'chromium/content/utility')
-rw-r--r-- | chromium/content/utility/BUILD.gn | 10 | ||||
-rw-r--r-- | chromium/content/utility/DEPS | 3 | ||||
-rw-r--r-- | chromium/content/utility/OWNERS | 3 | ||||
-rw-r--r-- | chromium/content/utility/utility_blink_platform_with_sandbox_support_impl.cc | 94 | ||||
-rw-r--r-- | chromium/content/utility/utility_blink_platform_with_sandbox_support_impl.h | 1 | ||||
-rw-r--r-- | chromium/content/utility/utility_main.cc | 11 | ||||
-rw-r--r-- | chromium/content/utility/utility_service_factory.cc | 85 | ||||
-rw-r--r-- | chromium/content/utility/utility_service_factory.h | 9 |
8 files changed, 38 insertions, 178 deletions
diff --git a/chromium/content/utility/BUILD.gn b/chromium/content/utility/BUILD.gn index d8da671ee09..6bfa5ee44b7 100644 --- a/chromium/content/utility/BUILD.gn +++ b/chromium/content/utility/BUILD.gn @@ -3,7 +3,6 @@ # found in the LICENSE file. import("//build/config/jumbo.gni") -import("//chromeos/assistant/assistant.gni") import("//media/media_options.gni") jumbo_source_set("utility") { @@ -69,14 +68,7 @@ jumbo_source_set("utility") { } if (is_chromeos) { - deps += [ "//chromeos/assistant:buildflags" ] - } - - if (enable_cros_libassistant) { - deps += [ - "//chromeos/services/assistant/audio_decoder:lib", - "//chromeos/services/assistant/public/mojom", - ] + deps += [ "//chromeos/services/ime:sandbox_hook" ] } } diff --git a/chromium/content/utility/DEPS b/chromium/content/utility/DEPS index 98f68268225..08ff3b047bc 100644 --- a/chromium/content/utility/DEPS +++ b/chromium/content/utility/DEPS @@ -1,8 +1,7 @@ include_rules = [ "+content/child", "+content/public/utility", - "+chromeos/assistant/buildflags.h", - "+chromeos/services/assistant", + "+chromeos/services/ime", "+services/audio", "+services/data_decoder", "+services/network", diff --git a/chromium/content/utility/OWNERS b/chromium/content/utility/OWNERS index a628238dc0f..651168dfc77 100644 --- a/chromium/content/utility/OWNERS +++ b/chromium/content/utility/OWNERS @@ -1,3 +1,6 @@ # Mac Sandbox profiles. per-file *.sb=set noparent per-file *.sb=rsesek@chromium.org + +# For service-related code +per-file utility_service_factory.*=rockot@google.com diff --git a/chromium/content/utility/utility_blink_platform_with_sandbox_support_impl.cc b/chromium/content/utility/utility_blink_platform_with_sandbox_support_impl.cc index f5a34a533b7..032220900f8 100644 --- a/chromium/content/utility/utility_blink_platform_with_sandbox_support_impl.cc +++ b/chromium/content/utility/utility_blink_platform_with_sandbox_support_impl.cc @@ -7,67 +7,20 @@ #include "build/build_config.h" #if defined(OS_MACOSX) -#include "base/mac/foundation_util.h" #include "content/child/child_process_sandbox_support_impl_mac.h" #elif defined(OS_LINUX) -#include "base/synchronization/lock.h" #include "content/child/child_process_sandbox_support_impl_linux.h" -#include "content/child/child_thread_impl.h" -#include "services/service_manager/public/cpp/connector.h" -#include "third_party/blink/public/platform/linux/out_of_process_font.h" -#include "third_party/blink/public/platform/linux/web_sandbox_support.h" #endif -namespace blink { -class WebSandboxSupport; -struct OutOfProcessFont; -struct WebFontRenderStyle; -} // namespace blink - namespace content { -#if defined(OS_LINUX) - -class UtilityBlinkPlatformWithSandboxSupportImpl::SandboxSupport - : public blink::WebSandboxSupport { - public: - explicit SandboxSupport(sk_sp<font_service::FontLoader> font_loader) - : font_loader_(std::move(font_loader)) {} - ~SandboxSupport() override {} - - void GetFallbackFontForCharacter( - blink::WebUChar32 character, - const char* preferred_locale, - blink::OutOfProcessFont* fallbackFont) override; - void MatchFontByPostscriptNameOrFullFontName( - const char* font_unique_name, - blink::OutOfProcessFont* uniquely_matched_font) override; - void GetWebFontRenderStyleForStrike(const char* family, - int size, - bool is_bold, - bool is_italic, - float device_scale_factor, - blink::WebFontRenderStyle* out) override; - - private: - // WebKit likes to ask us for the correct font family to use for a set of - // unicode code points. It needs this information frequently so we cache it - // here. - base::Lock unicode_font_families_mutex_; - // Maps unicode chars to their fallback fonts. - std::map<int32_t, blink::OutOfProcessFont> unicode_font_families_; - sk_sp<font_service::FontLoader> font_loader_; -}; - -#endif // defined(OS_LINUX) - UtilityBlinkPlatformWithSandboxSupportImpl:: UtilityBlinkPlatformWithSandboxSupportImpl( service_manager::Connector* connector) { #if defined(OS_LINUX) font_loader_ = sk_make_sp<font_service::FontLoader>(connector); SkFontConfigInterface::SetGlobal(font_loader_); - sandbox_support_ = std::make_unique<SandboxSupport>(font_loader_); + sandbox_support_ = std::make_unique<WebSandboxSupportLinux>(font_loader_); #elif defined(OS_MACOSX) sandbox_support_ = std::make_unique<WebSandboxSupportMac>(connector); #endif @@ -85,49 +38,4 @@ UtilityBlinkPlatformWithSandboxSupportImpl::GetSandboxSupport() { #endif } -#if defined(OS_LINUX) - -void UtilityBlinkPlatformWithSandboxSupportImpl::SandboxSupport:: - GetFallbackFontForCharacter(blink::WebUChar32 character, - const char* preferred_locale, - blink::OutOfProcessFont* fallback_font) { - base::AutoLock lock(unicode_font_families_mutex_); - const std::map<int32_t, blink::OutOfProcessFont>::const_iterator iter = - unicode_font_families_.find(character); - if (iter != unicode_font_families_.end()) { - fallback_font->name = iter->second.name; - fallback_font->filename = iter->second.filename; - fallback_font->fontconfig_interface_id = - iter->second.fontconfig_interface_id; - fallback_font->ttc_index = iter->second.ttc_index; - fallback_font->is_bold = iter->second.is_bold; - fallback_font->is_italic = iter->second.is_italic; - return; - } - content::GetFallbackFontForCharacter(font_loader_, character, - preferred_locale, fallback_font); - unicode_font_families_.emplace(character, *fallback_font); -} - -void UtilityBlinkPlatformWithSandboxSupportImpl::SandboxSupport:: - GetWebFontRenderStyleForStrike(const char* family, - int size, - bool is_bold, - bool is_italic, - float device_scale_factor, - blink::WebFontRenderStyle* out) { - GetRenderStyleForStrike(font_loader_, family, size, is_bold, is_italic, - device_scale_factor, out); -} - -void UtilityBlinkPlatformWithSandboxSupportImpl::SandboxSupport:: - MatchFontByPostscriptNameOrFullFontName( - const char* font_unique_name, - blink::OutOfProcessFont* uniquely_matched_font) { - content::MatchFontByPostscriptNameOrFullFontName( - font_loader_, font_unique_name, uniquely_matched_font); -} - -#endif - } // namespace content diff --git a/chromium/content/utility/utility_blink_platform_with_sandbox_support_impl.h b/chromium/content/utility/utility_blink_platform_with_sandbox_support_impl.h index 29fe2de8839..2dbbd2465cc 100644 --- a/chromium/content/utility/utility_blink_platform_with_sandbox_support_impl.h +++ b/chromium/content/utility/utility_blink_platform_with_sandbox_support_impl.h @@ -43,7 +43,6 @@ class UtilityBlinkPlatformWithSandboxSupportImpl : public blink::Platform { std::unique_ptr<blink::WebSandboxSupport> sandbox_support_; #endif #if defined(OS_LINUX) - class SandboxSupport; sk_sp<font_service::FontLoader> font_loader_; #endif diff --git a/chromium/content/utility/utility_main.cc b/chromium/content/utility/utility_main.cc index c32aa0ed6dd..e01f888782f 100644 --- a/chromium/content/utility/utility_main.cc +++ b/chromium/content/utility/utility_main.cc @@ -25,6 +25,10 @@ #include "services/service_manager/sandbox/linux/sandbox_linux.h" #endif +#if defined(OS_CHROMEOS) +#include "chromeos/services/ime/ime_sandbox_hook.h" +#endif + #if defined(OS_MACOSX) #include "base/message_loop/message_pump_mac.h" #endif @@ -73,12 +77,19 @@ int UtilityMain(const MainFunctionParams& parameters) { service_manager::SandboxTypeFromCommandLine(parameters.command_line); if (parameters.zygote_child || sandbox_type == service_manager::SANDBOX_TYPE_NETWORK || +#if defined(OS_CHROMEOS) + sandbox_type == service_manager::SANDBOX_TYPE_IME || +#endif // OS_CHROMEOS sandbox_type == service_manager::SANDBOX_TYPE_AUDIO) { service_manager::SandboxLinux::PreSandboxHook pre_sandbox_hook; if (sandbox_type == service_manager::SANDBOX_TYPE_NETWORK) pre_sandbox_hook = base::BindOnce(&network::NetworkPreSandboxHook); else if (sandbox_type == service_manager::SANDBOX_TYPE_AUDIO) pre_sandbox_hook = base::BindOnce(&audio::AudioPreSandboxHook); +#if defined(OS_CHROMEOS) + else if (sandbox_type == service_manager::SANDBOX_TYPE_IME) + pre_sandbox_hook = base::BindOnce(&chromeos::ime::ImePreSandboxHook); +#endif // OS_CHROMEOS service_manager::Sandbox::Initialize( sandbox_type, std::move(pre_sandbox_hook), diff --git a/chromium/content/utility/utility_service_factory.cc b/chromium/content/utility/utility_service_factory.cc index 009d8605091..4450cc71177 100644 --- a/chromium/content/utility/utility_service_factory.cc +++ b/chromium/content/utility/utility_service_factory.cc @@ -56,14 +56,6 @@ extern sandbox::TargetServices* g_utility_target_services; #endif -#if defined(OS_CHROMEOS) -#include "chromeos/assistant/buildflags.h" // nogncheck -#if BUILDFLAG(ENABLE_CROS_LIBASSISTANT) -#include "chromeos/services/assistant/audio_decoder/assistant_audio_decoder_service.h" // nogncheck -#include "chromeos/services/assistant/public/mojom/constants.mojom.h" // nogncheck -#endif // BUILDFLAG(ENABLE_CROS_LIBASSISTANT) -#endif - namespace content { namespace { @@ -109,22 +101,19 @@ class ContentCdmServiceClient final : public media::CdmService::Client { #endif // BUILDFLAG(ENABLE_LIBRARY_CDMS) -std::unique_ptr<service_manager::Service> CreateVizService() { - return std::make_unique<viz::Service>(); -} - } // namespace UtilityServiceFactory::UtilityServiceFactory() : network_registry_(std::make_unique<service_manager::BinderRegistry>()), - audio_registry_(std::make_unique<service_manager::BinderRegistry>()) {} + audio_registry_(std::make_unique<service_manager::BinderRegistry>()) { + GetContentClient()->utility()->RegisterAudioBinders(audio_registry_.get()); +} UtilityServiceFactory::~UtilityServiceFactory() {} -void UtilityServiceFactory::CreateService( - service_manager::mojom::ServiceRequest request, +bool UtilityServiceFactory::HandleServiceRequest( const std::string& name, - service_manager::mojom::PIDReceiverPtr pid_receiver) { + service_manager::mojom::ServiceRequest request) { auto* trace_log = base::trace_event::TraceLog::GetInstance(); if (trace_log->IsProcessNameEmpty()) trace_log->set_process_name("Service: " + name); @@ -133,40 +122,12 @@ void UtilityServiceFactory::CreateService( "service-name", base::debug::CrashKeySize::Size32); base::debug::SetCrashKeyString(service_name, name); - ServiceFactory::CreateService(std::move(request), name, - std::move(pid_receiver)); -} - -void UtilityServiceFactory::RegisterServices(ServiceMap* services) { - GetContentClient()->utility()->RegisterServices(services); - - GetContentClient()->utility()->RegisterAudioBinders(audio_registry_.get()); - -#if defined(OS_CHROMEOS) -#if BUILDFLAG(ENABLE_CROS_LIBASSISTANT) - { - service_manager::EmbeddedServiceInfo assistant_audio_decoder_info; - assistant_audio_decoder_info.factory = base::BindRepeating( - &chromeos::assistant::AssistantAudioDecoderService::CreateService); - services->emplace(chromeos::assistant::mojom::kAudioDecoderServiceName, - assistant_audio_decoder_info); - } -#endif // BUILDFLAG(ENABLE_CROS_LIBASSISTANT) -#endif - - service_manager::EmbeddedServiceInfo viz_info; - viz_info.factory = base::Bind(&CreateVizService); - services->insert(std::make_pair(viz::mojom::kVizServiceName, viz_info)); -} - -bool UtilityServiceFactory::HandleServiceRequest( - const std::string& name, - service_manager::mojom::ServiceRequest request) { + std::unique_ptr<service_manager::Service> service; if (name == audio::mojom::kServiceName) { - running_service_ = CreateAudioService(std::move(request)); + service = CreateAudioService(std::move(request)); } else if (name == data_decoder::mojom::kServiceName) { content::UtilityThread::Get()->EnsureBlinkInitialized(); - running_service_ = + service = std::make_unique<data_decoder::DataDecoderService>(std::move(request)); } else if (name == mojom::kNetworkServiceName && base::FeatureList::IsEnabled(network::features::kNetworkService)) { @@ -181,34 +142,28 @@ bool UtilityServiceFactory::HandleServiceRequest( base::SequencedTaskRunnerHandle::Get())); return true; } else if (name == video_capture::mojom::kServiceName) { - running_service_ = - std::make_unique<video_capture::ServiceImpl>(std::move(request)); + service = std::make_unique<video_capture::ServiceImpl>( + std::move(request), base::ThreadTaskRunnerHandle::Get()); + } else if (name == viz::mojom::kVizServiceName) { + service = std::make_unique<viz::Service>(std::move(request)); } #if BUILDFLAG(ENABLE_LIBRARY_CDMS) else if (name == media::mojom::kCdmServiceName) { - running_service_ = std::make_unique<media::CdmService>( + service = std::make_unique<media::CdmService>( std::make_unique<ContentCdmServiceClient>(), std::move(request)); } #endif // BUILDFLAG(ENABLE_LIBRARY_CDMS) - if (!running_service_) { - running_service_ = GetContentClient()->utility()->HandleServiceRequest( - name, std::move(request)); - } - - if (running_service_) { - // If we actually started a service for this request, make sure its - // self-termination results in full process termination. - running_service_->set_termination_closure( - base::BindOnce(&TerminateThisProcess)); + if (service) { + service_manager::Service::RunAsyncUntilTermination( + std::move(service), + base::BindOnce(&UtilityThread::ReleaseProcess, + base::Unretained(UtilityThread::Get()))); return true; } - return false; -} - -void UtilityServiceFactory::OnServiceQuit() { - TerminateThisProcess(); + return GetContentClient()->utility()->HandleServiceRequest( + name, std::move(request)); } void UtilityServiceFactory::OnLoadFailed() { diff --git a/chromium/content/utility/utility_service_factory.h b/chromium/content/utility/utility_service_factory.h index 5bc9bcaac4c..6faa61e90b5 100644 --- a/chromium/content/utility/utility_service_factory.h +++ b/chromium/content/utility/utility_service_factory.h @@ -13,6 +13,7 @@ #include "base/sequenced_task_runner.h" #include "content/child/service_factory.h" #include "services/service_manager/public/cpp/binder_registry.h" +#include "services/service_manager/public/cpp/service.h" #include "services/service_manager/public/mojom/service.mojom.h" namespace content { @@ -25,15 +26,9 @@ class UtilityServiceFactory : public ServiceFactory { ~UtilityServiceFactory() override; // ServiceFactory overrides: - void CreateService( - service_manager::mojom::ServiceRequest request, - const std::string& name, - service_manager::mojom::PIDReceiverPtr pid_receiver) override; - void RegisterServices(ServiceMap* services) override; bool HandleServiceRequest( const std::string& name, service_manager::mojom::ServiceRequest request) override; - void OnServiceQuit() override; private: void OnLoadFailed() override; @@ -49,8 +44,6 @@ class UtilityServiceFactory : public ServiceFactory { std::unique_ptr<service_manager::BinderRegistry> network_registry_; std::unique_ptr<service_manager::BinderRegistry> audio_registry_; - std::unique_ptr<service_manager::Service> running_service_; - DISALLOW_COPY_AND_ASSIGN(UtilityServiceFactory); }; |