| // Copyright 2017 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/utility/mash_service_factory.h" |
| |
| #include <memory> |
| |
| #include "ash/ash_service.h" |
| #include "ash/components/shortcut_viewer/public/mojom/shortcut_viewer.mojom.h" |
| #include "ash/components/shortcut_viewer/shortcut_viewer_application.h" |
| #include "ash/components/tap_visualizer/public/mojom/tap_visualizer.mojom.h" |
| #include "ash/components/tap_visualizer/tap_visualizer_app.h" |
| #include "ash/public/interfaces/constants.mojom.h" |
| #include "base/bind.h" |
| #include "base/logging.h" |
| #include "base/metrics/histogram_macros.h" |
| #include "build/build_config.h" |
| |
| namespace { |
| |
| // These values are persisted to logs. Entries should not be renumbered and |
| // numeric values should never be reused. |
| enum class MashService { |
| kAsh = 0, |
| kAutoclickDeprecated = 1, // Deleted Aug 2018, https://crbug.com/876115 |
| kQuickLaunchDeprecated = 2, // Deleted Feb 2019. |
| kShortcutViewer = 3, |
| kTapVisualizer = 4, |
| kFontDeprecated = 5, // Font Service is not in use for mash, but run |
| // in-process in the browser |
| // process. https://crbug.com/862553 |
| kMaxValue = kFontDeprecated, |
| }; |
| |
| // Wrapper function so we only have one copy of histogram macro generated code. |
| void RecordMashServiceLaunch(MashService service) { |
| UMA_HISTOGRAM_ENUMERATION("Launch.MashService", service); |
| } |
| |
| std::unique_ptr<service_manager::Service> CreateAshService( |
| service_manager::mojom::ServiceRequest request) { |
| RecordMashServiceLaunch(MashService::kAsh); |
| logging::SetLogPrefix("ash"); |
| return std::make_unique<ash::AshService>(std::move(request)); |
| } |
| |
| std::unique_ptr<service_manager::Service> CreateShortcutViewerApp( |
| service_manager::mojom::ServiceRequest request) { |
| RecordMashServiceLaunch(MashService::kShortcutViewer); |
| logging::SetLogPrefix("shortcut"); |
| return std::make_unique<keyboard_shortcut_viewer::ShortcutViewerApplication>( |
| std::move(request)); |
| } |
| |
| std::unique_ptr<service_manager::Service> CreateTapVisualizerApp( |
| service_manager::mojom::ServiceRequest request) { |
| RecordMashServiceLaunch(MashService::kTapVisualizer); |
| logging::SetLogPrefix("tap"); |
| return std::make_unique<tap_visualizer::TapVisualizerApp>(std::move(request)); |
| } |
| |
| } // namespace |
| |
| MashServiceFactory::MashServiceFactory() = default; |
| |
| MashServiceFactory::~MashServiceFactory() = default; |
| |
| std::unique_ptr<service_manager::Service> |
| MashServiceFactory::HandleServiceRequest( |
| const std::string& service_name, |
| service_manager::mojom::ServiceRequest request) { |
| if (service_name == ash::mojom::kServiceName) |
| return CreateAshService(std::move(request)); |
| if (service_name == shortcut_viewer::mojom::kServiceName) { |
| keyboard_shortcut_viewer::ShortcutViewerApplication :: |
| RegisterForTraceEvents(); |
| return CreateShortcutViewerApp(std::move(request)); |
| } |
| if (service_name == tap_visualizer::mojom::kServiceName) |
| return CreateTapVisualizerApp(std::move(request)); |
| |
| return nullptr; |
| } |