Commit 54fab028 authored by Ken Rockot's avatar Ken Rockot Committed by Commit Bot

Convert audio service manifests to C++

JSON manifests are deprecated.

Also removes unnecessary use of test catalogs in favor of inline
test service manifests.

Bug: 895616
Change-Id: I1fb3263c351c01a4edc56238d65cffa3e6dd68d3
Reviewed-on: https://chromium-review.googlesource.com/c/1436696Reviewed-by: default avatarTom Sepez <tsepez@chromium.org>
Commit-Queue: Ken Rockot <rockot@google.com>
Cr-Commit-Position: refs/heads/master@{#626113}
parent 0e57c1cf
......@@ -227,7 +227,7 @@ source_set("content_packaged_services_manifest") {
"//content/public/common:service_names",
"//media/mojo/services:cdm_manifest",
"//media/mojo/services:media_manifest",
"//services/audio:manifest",
"//services/audio/public/cpp:manifest",
"//services/data_decoder:manifest",
"//services/device:manifest",
"//services/media_session:manifest",
......
......@@ -5,6 +5,7 @@ include_rules = [
"+content/public/renderer/content_renderer_client.h",
"+content/public/utility/content_utility_client.h",
"+services/service_manager",
"+services/audio/public",
]
specific_include_rules = {
......@@ -19,7 +20,6 @@ specific_include_rules = {
"+components/services/heap_profiling/manifest.h",
"+media/mojo/services/cdm_manifest.h",
"+media/mojo/services/media_manifest.h",
"+services/audio/manifest.h",
"+services/data_decoder/manifest.h",
"+services/device/manifest.h",
"+services/media_session/manifest.h",
......
......@@ -10,7 +10,7 @@
#include "content/public/common/service_names.mojom.h"
#include "media/mojo/services/cdm_manifest.h"
#include "media/mojo/services/media_manifest.h"
#include "services/audio/manifest.h"
#include "services/audio/public/cpp/manifest.h"
#include "services/data_decoder/manifest.h"
#include "services/device/manifest.h"
#include "services/media_session/manifest.h"
......
......@@ -4,9 +4,7 @@
import("//build/config/chromecast_build.gni")
import("//media/webrtc/audio_processing.gni")
import("//services/catalog/public/tools/catalog.gni")
import("//services/service_manager/public/cpp/service_executable.gni")
import("//services/service_manager/public/service_manifest.gni")
import("//testing/test.gni")
# Currently standalone service binaries are not supported on Android or iOS.
......@@ -24,11 +22,6 @@ service_executable("audio") {
]
}
service_manifest("manifest") {
name = "audio"
source = "manifest.json"
}
source_set("lib") {
sources = [
"debug_recording.cc",
......@@ -177,62 +170,25 @@ source_set("tests") {
deps = [
":audio",
":lib",
":tests_catalog_source",
"//base/test:test_support",
"//media:test_support",
"//mojo/core/embedder",
"//services/audio/public/cpp",
"//services/audio/public/cpp:manifest",
"//services/audio/public/cpp:test_support",
"//services/audio/public/mojom",
"//services/service_manager/public/cpp",
"//services/service_manager/public/cpp/test:test_support",
"//services/service_manager/public/mojom",
"//testing/gmock",
"//testing/gtest",
]
if (standalone_supported) {
sources += [ "test/standalone_service_test.cc" ]
deps += [ ":standalone_unittest_catalog_source" ]
}
data_deps = [
":audio",
]
}
# Embedded tests support.
service_manifest("unittest_manifest") {
name = "audio_unittests"
source = "test/service_unittest_manifest.json"
packaged_services = [ ":manifest" ]
}
catalog("tests_catalog") {
testonly = true
embedded_services = [ ":unittest_manifest" ]
}
catalog_cpp_source("tests_catalog_source") {
testonly = true
catalog = ":tests_catalog"
generated_function_name = "audio::CreateUnittestCatalog"
}
# Standalone tests support.
if (standalone_supported) {
service_manifest("standalone_unittest_manifest") {
name = "audio_unittests"
source = "test/service_unittest_manifest.json"
generated_namespace = "standalone_audio_unittest"
}
catalog("standalone_unittest_catalog") {
embedded_services = [ ":standalone_unittest_manifest" ]
standalone_services = [ ":manifest" ]
}
catalog_cpp_source("standalone_unittest_catalog_source") {
catalog = ":standalone_unittest_catalog"
generated_function_name = "audio::CreateStandaloneUnittestCatalog"
}
}
......@@ -3,9 +3,6 @@ maxmorin@chromium.org
dalecurtis@chromium.org
miu@chromium.org
per-file manifest.json=set noparent
per-file manifest.json=file://ipc/SECURITY_OWNERS
per-file audio_sandbox_hook_linux.*=file://sandbox/linux/OWNERS
per-file audio_sandbox_win.*=file://sandbox/win/OWNERS
......
{
"name": "audio",
"display_name": "Audio",
"sandbox_type": "audio",
"options" : {
"instance_sharing" : "shared_instance_across_users"
},
"interface_provider_specs": {
"service_manager:connector": {
"provides": {
"info": [ "audio.mojom.SystemInfo" ],
"debug_recording": [ "audio.mojom.DebugRecording" ],
"stream_factory": [ "audio.mojom.StreamFactory" ],
"device_notifier": [ "audio.mojom.DeviceNotifier" ],
"log_factory_manager": [ "audio.mojom.LogFactoryManager" ],
"testing_api": [ "audio.mojom.TestingApi" ]
}
}
}
}
......@@ -30,6 +30,18 @@ source_set("cpp") {
]
}
source_set("manifest") {
sources = [
"manifest.cc",
"manifest.h",
]
deps = [
"//base",
"//services/audio/public/mojom",
"//services/service_manager/public/cpp",
]
}
source_set("test_support") {
testonly = true
......
per-file manifest.cc=set noparent
per-file manifest.cc=file://ipc/SECURITY_OWNERS
per-file manifest.h=set noparent
per-file manifest.h=file://ipc/SECURITY_OWNERS
per-file *_mojom_traits*.*=set noparent
per-file *_mojom_traits*.*=file://ipc/SECURITY_OWNERS
per-file *.typemap=set noparent
......
// Copyright 2019 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 "services/audio/public/cpp/manifest.h"
#include "base/no_destructor.h"
#include "services/audio/public/mojom/constants.mojom.h"
#include "services/audio/public/mojom/debug_recording.mojom.h"
#include "services/audio/public/mojom/device_notifications.mojom.h"
#include "services/audio/public/mojom/log_factory_manager.mojom.h"
#include "services/audio/public/mojom/stream_factory.mojom.h"
#include "services/audio/public/mojom/system_info.mojom.h"
#include "services/audio/public/mojom/testing_api.mojom.h"
#include "services/service_manager/public/cpp/manifest_builder.h"
namespace audio {
const service_manager::Manifest& GetManifest() {
static base::NoDestructor<service_manager::Manifest> manifest{
service_manager::ManifestBuilder()
.WithServiceName(mojom::kServiceName)
.WithDisplayName("Audio")
.WithOptions(service_manager::ManifestOptionsBuilder()
.WithSandboxType("audio")
.WithInstanceSharingPolicy(
service_manager::Manifest::
InstanceSharingPolicy::kSharedAcrossGroups)
.Build())
.ExposeCapability(
"debug_recording",
service_manager::Manifest::InterfaceList<mojom::DebugRecording>())
.ExposeCapability(
"device_notifier",
service_manager::Manifest::InterfaceList<mojom::DeviceNotifier>())
.ExposeCapability(
"info",
service_manager::Manifest::InterfaceList<mojom::SystemInfo>())
.ExposeCapability("log_factory_manager",
service_manager::Manifest::InterfaceList<
mojom::LogFactoryManager>())
.ExposeCapability(
"stream_factory",
service_manager::Manifest::InterfaceList<mojom::StreamFactory>())
.ExposeCapability(
"testing_api",
service_manager::Manifest::InterfaceList<mojom::TestingApi>())
.Build()};
return *manifest;
}
} // namespace audio
// Copyright 2019 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.
#ifndef SERVICES_AUDIO_PUBLIC_CPP_MANIFEST_H_
#define SERVICES_AUDIO_PUBLIC_CPP_MANIFEST_H_
#include "services/service_manager/public/cpp/manifest.h"
namespace audio {
const service_manager::Manifest& GetManifest();
} // namespace audio
#endif // SERVICES_AUDIO_PUBLIC_CPP_MANIFEST_H_
per-file service_unittest_manifest.json=set noparent
per-file service_unittest_manifest.json=file://ipc/SECURITY_OWNERS
......@@ -11,14 +11,16 @@
#include "services/audio/in_process_audio_manager_accessor.h"
#include "services/audio/public/cpp/audio_system_to_service_adapter.h"
#include "services/audio/public/cpp/fake_system_info.h"
#include "services/audio/public/cpp/manifest.h"
#include "services/audio/public/mojom/constants.mojom.h"
#include "services/audio/service.h"
#include "services/audio/test/service_lifetime_test_template.h"
#include "services/audio/tests_catalog_source.h"
#include "services/service_manager/public/cpp/binder_registry.h"
#include "services/service_manager/public/cpp/manifest_builder.h"
#include "services/service_manager/public/cpp/service.h"
#include "services/service_manager/public/cpp/service_binding.h"
#include "services/service_manager/public/cpp/test/test_service_manager.h"
#include "services/service_manager/public/mojom/constants.mojom.h"
#include "services/service_manager/public/mojom/service_factory.mojom.h"
#include "testing/gtest/include/gtest/gtest.h"
......@@ -128,6 +130,8 @@ class ServiceTestHelper : public service_manager::Service,
DISALLOW_COPY_AND_ASSIGN(ServiceTestHelper);
};
const char kTestServiceName[] = "audio_unittests";
// if |use_audio_thread| is true, AudioManager has a dedicated audio thread and
// Audio service lives on it; otherwise audio thread is the main thread of the
// test fixture, and that's where Service lives. So in the former case the
......@@ -138,13 +142,24 @@ template <bool use_audio_thread>
class InProcessServiceTest : public testing::Test {
public:
explicit InProcessServiceTest(base::TimeDelta service_quit_timeout)
: test_service_manager_(CreateUnittestCatalog()),
: test_service_manager_(
{service_manager::ManifestBuilder()
.WithServiceName(kTestServiceName)
.ExposeCapability(
"service_manager:service_factory",
service_manager::Manifest::InterfaceList<
service_manager::mojom::ServiceFactory>())
.RequireCapability(mojom::kServiceName, "info")
.RequireCapability(service_manager::mojom::kServiceName,
"service_manager:service_manager")
.PackageService(GetManifest())
.Build()}),
audio_manager_(
std::make_unique<media::TestAudioThread>(use_audio_thread)),
helper_(std::make_unique<ServiceTestHelper>(
&audio_manager_,
service_quit_timeout,
test_service_manager_.RegisterTestInstance("audio_unittests"))),
test_service_manager_.RegisterTestInstance(kTestServiceName))),
audio_system_(std::make_unique<AudioSystemToServiceAdapter>(
connector()->Clone())) {}
......
{
"name": "audio_unittests",
"display_name": "Audio Unittests",
"interface_provider_specs": {
"service_manager:connector": {
"provides": {
"service_manager:service_factory": [
"service_manager.mojom.ServiceFactory"
]
},
"requires": {
"audio": [ "info" ],
"service_manager": [ "service_manager:service_manager" ]
}
}
}
}
......@@ -6,19 +6,31 @@
#include "base/strings/string_number_conversions.h"
#include "base/test/scoped_task_environment.h"
#include "media/base/media_switches.h"
#include "services/audio/public/cpp/manifest.h"
#include "services/audio/public/mojom/constants.mojom.h"
#include "services/audio/service.h"
#include "services/audio/standalone_unittest_catalog_source.h"
#include "services/audio/test/service_lifetime_test_template.h"
#include "services/service_manager/public/cpp/manifest_builder.h"
#include "services/service_manager/public/cpp/test/test_service.h"
#include "services/service_manager/public/cpp/test/test_service_manager.h"
#include "services/service_manager/public/mojom/constants.mojom.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace audio {
const char kTestServiceName[] = "audio_unittests";
class StandaloneAudioServiceTest : public testing::Test {
public:
StandaloneAudioServiceTest()
: test_service_manager_(CreateStandaloneUnittestCatalog()),
: test_service_manager_(
{GetManifest(),
service_manager::ManifestBuilder()
.WithServiceName(kTestServiceName)
.RequireCapability(mojom::kServiceName, "info")
.RequireCapability(service_manager::mojom::kServiceName,
"service_manager:service_manager")
.Build()}),
test_service_(
test_service_manager_.RegisterTestInstance("audio_unittests")) {}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment