// 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 "fuchsia/engine/context_provider_main.h" #include #include #include "base/command_line.h" #include "base/fuchsia/process_context.h" #include "base/fuchsia/scoped_service_binding.h" #include "base/logging.h" #include "base/message_loop/message_pump_type.h" #include "base/run_loop.h" #include "base/task/single_thread_task_executor.h" #include "components/version_info/version_info.h" #include "fuchsia/base/feedback_registration.h" #include "fuchsia/base/init_logging.h" #include "fuchsia/base/inspect.h" #include "fuchsia/base/lifecycle_impl.h" #include "fuchsia/engine/context_provider_impl.h" namespace { constexpr char kFeedbackAnnotationsNamespace[] = "web-engine"; constexpr char kCrashProductName[] = "FuchsiaWebEngine"; // TODO(https://fxbug.dev/51490): Use a programmatic mechanism to obtain this. constexpr char kComponentUrl[] = "fuchsia-pkg://fuchsia.com/web_engine#meta/context_provider.cmx"; std::string GetVersionString() { std::string version_string = version_info::GetVersionNumber(); #if !defined(OFFICIAL_BUILD) version_string += " (built at " + version_info::GetLastChange() + ")"; #endif // !defined(OFFICIAL_BUILD) return version_string; } } // namespace int ContextProviderMain() { base::SingleThreadTaskExecutor main_task_executor(base::MessagePumpType::UI); cr_fuchsia::RegisterProductDataForCrashReporting(kComponentUrl, kCrashProductName); if (!cr_fuchsia::InitLoggingFromCommandLine( *base::CommandLine::ForCurrentProcess())) { return 1; } // Populate feedback annotations for this component. // TODO(crbug.com/1010222): Add annotations at Context startup, once Contexts // are moved out to run in their own components. cr_fuchsia::RegisterProductDataForFeedback(kFeedbackAnnotationsNamespace); LOG(INFO) << "Starting WebEngine " << GetVersionString(); ContextProviderImpl context_provider; // Publish the ContextProvider and Debug services. sys::OutgoingDirectory* const directory = base::ComponentContextForProcess()->outgoing().get(); base::fuchsia::ScopedServiceBinding binding( directory, &context_provider); base::fuchsia::ScopedServiceBinding debug_binding( directory->debug_dir(), &context_provider); // Publish version information for this component to Inspect. cr_fuchsia::PublishVersionInfoToInspect(base::ComponentInspectorForProcess()); // Publish the Lifecycle service, used by the framework to request that the // service terminate. base::RunLoop run_loop; cr_fuchsia::LifecycleImpl lifecycle(directory, run_loop.QuitClosure()); // Serve outgoing directory only after publishing all services. directory->ServeFromStartupInfo(); run_loop.Run(); return 0; }