Migrate remaining services to ServiceBinding
This completes the migration from ServiceContext to ServiceBinding, with
the exception of internal Service Manager code and tests which will be
migrated in a follow-up CL.
This also eliminates the last usage of EmbeddedServiceInfo and
EmbeddedServiceRunner, so all that code is deleted here too. Yaaay.
Bug: 891780
Change-Id: Ide3c84d8e1cd60757418f98c0e0cbcdfaf2c45f5
Reviewed-on: https://chromium-review.googlesource.com/c/1357721
Reviewed-by: John Abd-El-Malek <[email protected]>
Reviewed-by: Marijn Kruisselbrink <[email protected]>
Reviewed-by: Becca Hughes <[email protected]>
Commit-Queue: Ken Rockot <[email protected]>
Cr-Commit-Position: refs/heads/master@{#613448}
diff --git a/content/browser/browser_context.cc b/content/browser/browser_context.cc
index 10fde11..8d2a83f 100644
--- a/content/browser/browser_context.cc
+++ b/content/browser/browser_context.cc
@@ -100,6 +100,52 @@
DISALLOW_COPY_AND_ASSIGN(ServiceInstanceGroupHolder);
};
+// The file service runs on the IO thread but we want to limit its lifetime to
+// that of the BrowserContext which creates it. This provides thread-safe access
+// to the relevant state on the IO thread.
+class FileServiceIOThreadState
+ : public base::RefCountedThreadSafe<FileServiceIOThreadState> {
+ public:
+ explicit FileServiceIOThreadState(
+ scoped_refptr<base::SingleThreadTaskRunner> io_task_runner)
+ : io_task_runner_(std::move(io_task_runner)) {}
+
+ void StartOnIOThread(service_manager::mojom::ServiceRequest request) {
+ DCHECK(io_task_runner_->RunsTasksInCurrentSequence());
+ file_service_ = std::make_unique<file::FileService>(std::move(request));
+ }
+
+ void ShutDown() {
+ io_task_runner_->PostTask(
+ FROM_HERE,
+ base::BindOnce(&FileServiceIOThreadState::ShutDownOnIOThread, this));
+ }
+
+ private:
+ friend class base::RefCountedThreadSafe<FileServiceIOThreadState>;
+
+ ~FileServiceIOThreadState() { DCHECK(!file_service_); }
+
+ void ShutDownOnIOThread() { file_service_.reset(); }
+
+ const scoped_refptr<base::SingleThreadTaskRunner> io_task_runner_;
+ std::unique_ptr<file::FileService> file_service_;
+
+ DISALLOW_COPY_AND_ASSIGN(FileServiceIOThreadState);
+};
+
+class FileServiceHolder : public base::SupportsUserData::Data {
+ public:
+ explicit FileServiceHolder(scoped_refptr<FileServiceIOThreadState> state)
+ : state_(std::move(state)) {}
+ ~FileServiceHolder() override { state_->ShutDown(); }
+
+ private:
+ const scoped_refptr<FileServiceIOThreadState> state_;
+
+ DISALLOW_COPY_AND_ASSIGN(FileServiceHolder);
+};
+
class ContentServiceDelegateHolder : public base::SupportsUserData::Data {
public:
explicit ContentServiceDelegateHolder(BrowserContext* browser_context)
@@ -163,6 +209,7 @@
// Key names on BrowserContext.
const char kBrowsingDataRemoverKey[] = "browsing-data-remover";
const char kContentServiceDelegateKey[] = "content-service-delegate";
+const char kFileServiceKey[] = "file-service";
const char kDownloadManagerKeyName[] = "download_manager";
const char kPermissionControllerKey[] = "permission-controller";
const char kServiceManagerConnection[] = "service-manager-connection";
@@ -248,13 +295,34 @@
context->SetUserData(kDownloadManagerKeyName, std::move(download_manager));
}
+std::unique_ptr<service_manager::Service>
+CreateMainThreadServiceForBrowserContext(
+ BrowserContext* browser_context,
+ const std::string& service_name,
+ service_manager::mojom::ServiceRequest request) {
+ if (service_name == content::mojom::kServiceName) {
+ auto* delegate_holder = static_cast<ContentServiceDelegateHolder*>(
+ browser_context->GetUserData(kContentServiceDelegateKey));
+ auto* delegate = delegate_holder->delegate();
+ auto service =
+ std::make_unique<content::Service>(delegate, std::move(request));
+ delegate->AddService(service.get());
+ return service;
+ }
+
+ return browser_context->HandleServiceRequest(service_name,
+ std::move(request));
+}
+
class BrowserContextServiceManagerConnectionHolder
: public base::SupportsUserData::Data {
public:
explicit BrowserContextServiceManagerConnectionHolder(
BrowserContext* browser_context,
- service_manager::mojom::ServiceRequest request)
+ service_manager::mojom::ServiceRequest request,
+ scoped_refptr<base::SequencedTaskRunner> main_thread_task_runner)
: browser_context_(browser_context),
+ main_thread_task_runner_(std::move(main_thread_task_runner)),
service_manager_connection_(ServiceManagerConnection::Create(
std::move(request),
base::CreateSingleThreadTaskRunnerWithTraits(
@@ -274,8 +342,8 @@
void OnServiceRequest(const std::string& service_name,
service_manager::mojom::ServiceRequest request) {
std::unique_ptr<service_manager::Service> service =
- browser_context_->HandleServiceRequest(service_name,
- std::move(request));
+ CreateMainThreadServiceForBrowserContext(browser_context_, service_name,
+ std::move(request));
if (!service) {
LOG(ERROR) << "Ignoring request for unknown per-browser-context service:"
<< service_name;
@@ -294,6 +362,7 @@
}
BrowserContext* const browser_context_;
+ const scoped_refptr<base::SequencedTaskRunner> main_thread_task_runner_;
std::unique_ptr<ServiceManagerConnection> service_manager_connection_;
std::map<service_manager::Service*, std::unique_ptr<service_manager::Service>>
running_services_;
@@ -633,41 +702,32 @@
BrowserContextServiceManagerConnectionHolder* connection_holder =
new BrowserContextServiceManagerConnectionHolder(
- browser_context, std::move(service_request));
+ browser_context, std::move(service_request),
+ base::SequencedTaskRunnerHandle::Get());
browser_context->SetUserData(kServiceManagerConnection,
base::WrapUnique(connection_holder));
-
ServiceManagerConnection* connection =
connection_holder->service_manager_connection();
- // New embedded service factories should be added to |connection| here.
-
- {
- service_manager::EmbeddedServiceInfo info;
- info.factory = base::BindRepeating(&file::CreateFileService);
- connection->AddEmbeddedService(file::mojom::kServiceName, info);
- }
-
browser_context->SetUserData(
kContentServiceDelegateKey,
std::make_unique<ContentServiceDelegateHolder>(browser_context));
- {
- service_manager::EmbeddedServiceInfo info;
- info.task_runner = base::SequencedTaskRunnerHandle::Get();
- info.factory = base::BindRepeating(
- [](BrowserContext* context)
- -> std::unique_ptr<service_manager::Service> {
- auto* holder = static_cast<ContentServiceDelegateHolder*>(
- context->GetUserData(kContentServiceDelegateKey));
- auto* delegate = holder->delegate();
- auto service = std::make_unique<content::Service>(delegate);
- delegate->AddService(service.get());
- return service;
- },
- browser_context);
- connection->AddEmbeddedService(content::mojom::kServiceName, info);
- }
+ scoped_refptr<FileServiceIOThreadState> file_service_io_thread_state =
+ base::MakeRefCounted<FileServiceIOThreadState>(
+ base::CreateSingleThreadTaskRunnerWithTraits({BrowserThread::IO}));
+ connection->AddServiceRequestHandler(
+ file::mojom::kServiceName,
+ base::BindRepeating(
+ [](scoped_refptr<FileServiceIOThreadState> io_thread_state,
+ service_manager::mojom::ServiceRequest request) {
+ io_thread_state->StartOnIOThread(std::move(request));
+ },
+ file_service_io_thread_state));
+
+ browser_context->SetUserData(kFileServiceKey,
+ std::make_unique<FileServiceHolder>(
+ std::move(file_service_io_thread_state)));
RegisterCommonBrowserInterfaces(connection);
connection->Start();
diff --git a/content/browser/dom_storage/local_storage_context_mojo_unittest.cc b/content/browser/dom_storage/local_storage_context_mojo_unittest.cc
index 4200f63..f121bf59 100644
--- a/content/browser/dom_storage/local_storage_context_mojo_unittest.cc
+++ b/content/browser/dom_storage/local_storage_context_mojo_unittest.cc
@@ -33,11 +33,8 @@
#include "mojo/public/cpp/bindings/binding.h"
#include "mojo/public/cpp/bindings/binding_set.h"
#include "mojo/public/cpp/bindings/strong_associated_binding.h"
-#include "services/file/file_service.h"
#include "services/file/public/mojom/constants.mojom.h"
#include "services/file/user_id_map.h"
-#include "services/service_manager/public/cpp/service_context.h"
-#include "services/service_manager/public/cpp/test/test_service_decorator.h"
#include "services/service_manager/public/mojom/service_factory.mojom.h"
#include "storage/browser/test/mock_special_storage_policy.h"
#include "testing/gtest/include/gtest/gtest.h"
@@ -1038,13 +1035,10 @@
TEST_F(LocalStorageContextMojoTestWithService, RecreateOnCommitFailure) {
FakeLevelDBService mock_leveldb_service;
- ResetFileServiceAndConnector(
- service_manager::TestServiceDecorator::CreateServiceWithUniqueOverride(
- file::CreateFileService(),
-
- leveldb::mojom::LevelDBService::Name_,
- base::BindRepeating(&test::FakeLevelDBService::Bind,
- base::Unretained(&mock_leveldb_service))));
+ file_service()->GetBinderRegistryForTesting()->AddInterface(
+ leveldb::mojom::LevelDBService::Name_,
+ base::BindRepeating(&test::FakeLevelDBService::Bind,
+ base::Unretained(&mock_leveldb_service)));
std::map<std::vector<uint8_t>, std::vector<uint8_t>> test_data;
@@ -1190,11 +1184,10 @@
TEST_F(LocalStorageContextMojoTestWithService,
DontRecreateOnRepeatedCommitFailure) {
FakeLevelDBService mock_leveldb_service;
- ResetFileServiceAndConnector(
- service_manager::TestServiceDecorator::CreateServiceWithUniqueOverride(
- file::CreateFileService(), leveldb::mojom::LevelDBService::Name_,
- base::BindRepeating(&test::FakeLevelDBService::Bind,
- base::Unretained(&mock_leveldb_service))));
+ file_service()->GetBinderRegistryForTesting()->AddInterface(
+ leveldb::mojom::LevelDBService::Name_,
+ base::BindRepeating(&test::FakeLevelDBService::Bind,
+ base::Unretained(&mock_leveldb_service)));
std::map<std::vector<uint8_t>, std::vector<uint8_t>> test_data;
diff --git a/content/browser/dom_storage/session_storage_context_mojo_unittest.cc b/content/browser/dom_storage/session_storage_context_mojo_unittest.cc
index c883b73..c701b61 100644
--- a/content/browser/dom_storage/session_storage_context_mojo_unittest.cc
+++ b/content/browser/dom_storage/session_storage_context_mojo_unittest.cc
@@ -27,10 +27,7 @@
#include "content/public/test/test_utils.h"
#include "mojo/core/embedder/embedder.h"
#include "mojo/public/cpp/bindings/strong_associated_binding.h"
-#include "services/file/file_service.h"
#include "services/file/public/mojom/constants.mojom.h"
-#include "services/service_manager/public/cpp/service_context.h"
-#include "services/service_manager/public/cpp/test/test_service_decorator.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/blink/public/common/features.h"
@@ -623,11 +620,10 @@
url::Origin origin3 = url::Origin::Create(GURL("http://example.com"));
test::FakeLevelDBService fake_leveldb_service;
- ResetFileServiceAndConnector(
- service_manager::TestServiceDecorator::CreateServiceWithUniqueOverride(
- file::CreateFileService(), leveldb::mojom::LevelDBService::Name_,
- base::BindRepeating(&test::FakeLevelDBService::Bind,
- base::Unretained(&fake_leveldb_service))));
+ file_service()->GetBinderRegistryForTesting()->AddInterface(
+ leveldb::mojom::LevelDBService::Name_,
+ base::BindRepeating(&test::FakeLevelDBService::Bind,
+ base::Unretained(&fake_leveldb_service)));
// Open three connections to the database.
blink::mojom::StorageAreaAssociatedPtr area1;
@@ -760,11 +756,10 @@
url::Origin origin1 = url::Origin::Create(GURL("http://foobar.com"));
test::FakeLevelDBService fake_leveldb_service;
- ResetFileServiceAndConnector(
- service_manager::TestServiceDecorator::CreateServiceWithUniqueOverride(
- file::CreateFileService(), leveldb::mojom::LevelDBService::Name_,
- base::BindRepeating(&test::FakeLevelDBService::Bind,
- base::Unretained(&fake_leveldb_service))));
+ file_service()->GetBinderRegistryForTesting()->AddInterface(
+ leveldb::mojom::LevelDBService::Name_,
+ base::BindRepeating(&test::FakeLevelDBService::Bind,
+ base::Unretained(&fake_leveldb_service)));
std::map<std::vector<uint8_t>, std::vector<uint8_t>> test_data;
diff --git a/content/browser/dom_storage/test/mojo_test_with_file_service.cc b/content/browser/dom_storage/test/mojo_test_with_file_service.cc
index 45af64b..624e698 100644
--- a/content/browser/dom_storage/test/mojo_test_with_file_service.cc
+++ b/content/browser/dom_storage/test/mojo_test_with_file_service.cc
@@ -4,29 +4,21 @@
#include "content/browser/dom_storage/test/mojo_test_with_file_service.h"
-#include "services/file/file_service.h"
#include "services/file/public/mojom/constants.mojom.h"
#include "services/file/user_id_map.h"
namespace content {
namespace test {
-MojoTestWithFileService::MojoTestWithFileService() {
- ResetFileServiceAndConnector(file::CreateFileService());
-}
-MojoTestWithFileService::~MojoTestWithFileService() = default;
-
-void MojoTestWithFileService::ResetFileServiceAndConnector(
- std::unique_ptr<service_manager::Service> service) {
- if (!temp_path_.IsValid())
- CHECK(temp_path_.CreateUniqueTempDir());
- test_connector_ =
- service_manager::TestConnectorFactory::CreateForUniqueService(
- std::move(service));
- connector_ = test_connector_->CreateConnector();
+MojoTestWithFileService::MojoTestWithFileService()
+ : file_service_(
+ test_connector_factory_.RegisterInstance(file::mojom::kServiceName)) {
+ CHECK(temp_path_.CreateUniqueTempDir());
file::AssociateServiceInstanceGroupWithUserDir(
- test_connector_->test_instance_group(), temp_path_.GetPath());
+ test_connector_factory_.test_instance_group(), temp_path_.GetPath());
}
+MojoTestWithFileService::~MojoTestWithFileService() = default;
+
} // namespace test
} // namespace content
diff --git a/content/browser/dom_storage/test/mojo_test_with_file_service.h b/content/browser/dom_storage/test/mojo_test_with_file_service.h
index baff122c..77d6eae 100644
--- a/content/browser/dom_storage/test/mojo_test_with_file_service.h
+++ b/content/browser/dom_storage/test/mojo_test_with_file_service.h
@@ -11,9 +11,8 @@
#include "base/files/scoped_temp_dir.h"
#include "base/macros.h"
#include "base/test/scoped_task_environment.h"
-#include "services/service_manager/public/cpp/connector.h"
+#include "services/file/file_service.h"
#include "services/service_manager/public/cpp/test/test_connector_factory.h"
-#include "services/service_manager/public/mojom/service_factory.mojom.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace content {
@@ -27,19 +26,20 @@
~MojoTestWithFileService() override;
protected:
- void ResetFileServiceAndConnector(
- std::unique_ptr<service_manager::Service> service);
-
const base::FilePath& temp_path() { return temp_path_.GetPath(); }
- service_manager::Connector* connector() const { return connector_.get(); }
+ file::FileService* file_service() { return &file_service_; }
+
+ service_manager::Connector* connector() {
+ return test_connector_factory_.GetDefaultConnector();
+ }
void RunUntilIdle() { scoped_task_environment_.RunUntilIdle(); }
private:
base::test::ScopedTaskEnvironment scoped_task_environment_;
- std::unique_ptr<service_manager::TestConnectorFactory> test_connector_;
- std::unique_ptr<service_manager::Connector> connector_;
+ service_manager::TestConnectorFactory test_connector_factory_;
+ file::FileService file_service_;
base::ScopedTempDir temp_path_;
DISALLOW_COPY_AND_ASSIGN(MojoTestWithFileService);
diff --git a/content/browser/service_manager/service_manager_context.cc b/content/browser/service_manager/service_manager_context.cc
index 12692ad..b3ea530 100644
--- a/content/browser/service_manager/service_manager_context.cc
+++ b/content/browser/service_manager/service_manager_context.cc
@@ -387,9 +387,8 @@
void LaunchInProcessServiceOnSequence(
const InProcessServiceFactory& factory,
service_manager::mojom::ServiceRequest request) {
- auto* raw_service_impl = factory.Run(std::move(request)).release();
- raw_service_impl->set_termination_closure(base::BindOnce(
- [](service_manager::Service* impl) { delete impl; }, raw_service_impl));
+ service_manager::Service::RunAsyncUntilTermination(
+ factory.Run(std::move(request)));
}
void LaunchInProcessService(
@@ -432,19 +431,29 @@
}
#if defined(OS_LINUX)
-void CreateFontService(service_manager::mojom::ServiceRequest request) {
- // The font service owns itself here, deleting on self-termination.
- auto service =
- std::make_unique<font_service::FontServiceApp>(std::move(request));
- auto* raw_service = service.get();
- raw_service->set_termination_closure(base::BindOnce(
- [](std::unique_ptr<font_service::FontServiceApp> service) {
- // Nothing to do but let |service| go out of scope.
- },
- std::move(service)));
+std::unique_ptr<service_manager::Service> CreateFontService(
+ service_manager::mojom::ServiceRequest request) {
+ return std::make_unique<font_service::FontServiceApp>(std::move(request));
}
#endif // defined(OS_LINUX)
+std::unique_ptr<service_manager::Service> CreateResourceCoordinatorService(
+ service_manager::mojom::ServiceRequest request) {
+ return std::make_unique<resource_coordinator::ResourceCoordinatorService>(
+ std::move(request));
+}
+
+std::unique_ptr<service_manager::Service> CreateTracingService(
+ service_manager::mojom::ServiceRequest request) {
+ return std::make_unique<tracing::TracingService>(std::move(request));
+}
+
+std::unique_ptr<service_manager::Service> CreateMediaSessionService(
+ service_manager::mojom::ServiceRequest request) {
+ return std::make_unique<media_session::MediaSessionService>(
+ std::move(request));
+}
+
} // namespace
// State which lives on the IO thread and drives the ServiceManager.
@@ -631,29 +640,29 @@
std::move(root_browser_service), mojo::MakeRequest(&pid_receiver));
pid_receiver->SetPID(base::GetCurrentProcId());
- packaged_services_connection_->AddServiceRequestHandler(
+ RegisterInProcessService(
+ packaged_services_connection_.get(),
resource_coordinator::mojom::kServiceName,
- base::BindRepeating([](service_manager::mojom::ServiceRequest request) {
- service_manager::Service::RunAsyncUntilTermination(
- std::make_unique<resource_coordinator::ResourceCoordinatorService>(
- std::move(request)));
- }));
+ service_manager_thread_task_runner_,
+ base::BindRepeating(&CreateResourceCoordinatorService));
+
+ RegisterInProcessService(packaged_services_connection_.get(),
+ tracing::mojom::kServiceName,
+ service_manager_thread_task_runner_,
+ base::BindRepeating(&CreateTracingService));
+
+ RegisterInProcessService(packaged_services_connection_.get(),
+ metrics::mojom::kMetricsServiceName,
+ service_manager_thread_task_runner_,
+ base::BindRepeating(&metrics::CreateMetricsService));
if (media_session::IsMediaSessionEnabled()) {
- service_manager::EmbeddedServiceInfo media_session_info;
- media_session_info.factory =
- base::BindRepeating(&media_session::MediaSessionService::Create);
- packaged_services_connection_->AddEmbeddedService(
- media_session::mojom::kServiceName, media_session_info);
+ RegisterInProcessService(packaged_services_connection_.get(),
+ media_session::mojom::kServiceName,
+ base::SequencedTaskRunnerHandle::Get(),
+ base::BindRepeating(&CreateMediaSessionService));
}
- packaged_services_connection_->AddServiceRequestHandler(
- tracing::mojom::kServiceName,
- base::BindRepeating([](service_manager::mojom::ServiceRequest request) {
- service_manager::Service::RunAsyncUntilTermination(
- std::make_unique<tracing::TracingService>(std::move(request)));
- }));
-
if (features::IsVideoCaptureServiceEnabledForBrowserProcess()) {
RegisterInProcessService(
packaged_services_connection_.get(), video_capture::mojom::kServiceName,
@@ -668,12 +677,14 @@
base::BindRepeating(&CreateVideoCaptureService));
}
- {
- service_manager::EmbeddedServiceInfo info;
- info.factory = base::BindRepeating(&metrics::CreateMetricsService);
- packaged_services_connection_->AddEmbeddedService(
- metrics::mojom::kMetricsServiceName, info);
- }
+#if defined(OS_LINUX)
+ RegisterInProcessService(
+ packaged_services_connection_.get(), font_service::mojom::kServiceName,
+ base::CreateSequencedTaskRunnerWithTraits(
+ base::TaskTraits({base::MayBlock(), base::WithBaseSyncPrimitives(),
+ base::TaskPriority::USER_BLOCKING})),
+ base::BindRepeating(&CreateFontService));
+#endif
GetContentClient()->browser()->RegisterIOThreadServiceHandlers(
packaged_services_connection_.get());
@@ -690,30 +701,14 @@
out_of_process_services[data_decoder::mojom::kServiceName] =
base::BindRepeating(&base::ASCIIToUTF16, "Data Decoder Service");
-#if defined(OS_LINUX)
- packaged_services_connection_->AddServiceRequestHandler(
- font_service::mojom::kServiceName,
- base::BindRepeating([](service_manager::mojom::ServiceRequest request) {
- auto task_runner =
- base::CreateSequencedTaskRunnerWithTraits(base::TaskTraits(
- {base::MayBlock(), base::WithBaseSyncPrimitives(),
- base::TaskPriority::USER_BLOCKING}));
- task_runner->PostTask(FROM_HERE, base::BindOnce(&CreateFontService,
- std::move(request)));
- }));
-#endif
-
bool network_service_enabled =
base::FeatureList::IsEnabled(network::features::kNetworkService);
if (network_service_enabled) {
if (IsInProcessNetworkService()) {
- packaged_services_connection_->AddServiceRequestHandler(
- mojom::kNetworkServiceName,
- base::BindRepeating(
- [](service_manager::mojom::ServiceRequest request) {
- service_manager::Service::RunAsyncUntilTermination(
- CreateNetworkService(std::move(request)));
- }));
+ RegisterInProcessService(packaged_services_connection_.get(),
+ mojom::kNetworkServiceName,
+ service_manager_thread_task_runner_,
+ base::BindRepeating(&CreateNetworkService));
} else {
out_of_process_services[mojom::kNetworkServiceName] =
base::BindRepeating(&base::ASCIIToUTF16, "Network Service");
diff --git a/content/common/service_manager/service_manager_connection_impl.cc b/content/common/service_manager/service_manager_connection_impl.cc
index 73da791..1226556 100644
--- a/content/common/service_manager/service_manager_connection_impl.cc
+++ b/content/common/service_manager/service_manager_connection_impl.cc
@@ -23,7 +23,6 @@
#include "content/public/common/service_names.mojom.h"
#include "mojo/public/cpp/bindings/binding_set.h"
#include "mojo/public/cpp/system/message_pipe.h"
-#include "services/service_manager/public/cpp/embedded_service_runner.h"
#include "services/service_manager/public/cpp/service.h"
#include "services/service_manager/public/cpp/service_binding.h"
#include "services/service_manager/public/mojom/constants.mojom.h"
@@ -118,15 +117,6 @@
filter_id));
}
- void AddEmbeddedService(const std::string& name,
- const service_manager::EmbeddedServiceInfo& info) {
- io_task_runner_->PostTask(
- FROM_HERE,
- base::BindOnce(&ServiceManagerConnectionImpl::IOThreadContext::
- AddEmbeddedServiceRequestHandlerOnIoThread,
- this, name, info));
- }
-
void AddServiceRequestHandler(const std::string& name,
const ServiceRequestHandler& handler) {
AddServiceRequestHandlerWithPID(
@@ -229,7 +219,6 @@
ClearConnectionFiltersOnIOThread();
request_handlers_.clear();
- embedded_services_.clear();
child_binding_.Close();
}
@@ -247,24 +236,6 @@
connection_filters_.erase(it);
}
- void AddEmbeddedServiceRequestHandlerOnIoThread(
- const std::string& name,
- const service_manager::EmbeddedServiceInfo& info) {
- DCHECK(io_thread_checker_.CalledOnValidThread());
- std::unique_ptr<service_manager::EmbeddedServiceRunner> service(
- new service_manager::EmbeddedServiceRunner(name, info));
- AddServiceRequestHandlerOnIoThread(
- name,
- base::BindRepeating(
- &WrapServiceRequestHandlerNoPID,
- base::BindRepeating(
- &service_manager::EmbeddedServiceRunner::BindServiceRequest,
- base::Unretained(service.get()))));
- auto result =
- embedded_services_.insert(std::make_pair(name, std::move(service)));
- DCHECK(result.second);
- }
-
void AddServiceRequestHandlerOnIoThread(
const std::string& name,
const ServiceRequestHandlerWithPID& handler) {
@@ -361,8 +332,6 @@
GUARDED_BY(lock_);
int next_filter_id_ GUARDED_BY(lock_) = kInvalidConnectionFilterId;
- std::map<std::string, std::unique_ptr<service_manager::EmbeddedServiceRunner>>
- embedded_services_;
std::map<std::string, ServiceRequestHandlerWithPID> request_handlers_;
mojo::Binding<mojom::Child> child_binding_;
@@ -471,12 +440,6 @@
context_->RemoveConnectionFilter(filter_id);
}
-void ServiceManagerConnectionImpl::AddEmbeddedService(
- const std::string& name,
- const service_manager::EmbeddedServiceInfo& info) {
- context_->AddEmbeddedService(name, info);
-}
-
void ServiceManagerConnectionImpl::AddServiceRequestHandler(
const std::string& name,
const ServiceRequestHandler& handler) {
diff --git a/content/common/service_manager/service_manager_connection_impl.h b/content/common/service_manager/service_manager_connection_impl.h
index 52a4b28..3d785cbd 100644
--- a/content/common/service_manager/service_manager_connection_impl.h
+++ b/content/common/service_manager/service_manager_connection_impl.h
@@ -40,9 +40,6 @@
void SetConnectionLostClosure(const base::Closure& closure) override;
int AddConnectionFilter(std::unique_ptr<ConnectionFilter> filter) override;
void RemoveConnectionFilter(int filter_id) override;
- void AddEmbeddedService(
- const std::string& name,
- const service_manager::EmbeddedServiceInfo& info) override;
void AddServiceRequestHandler(
const std::string& name,
const ServiceRequestHandler& handler) override;
diff --git a/content/common/service_manager/service_manager_connection_impl_unittest.cc b/content/common/service_manager/service_manager_connection_impl_unittest.cc
index 8fef0f6a..57dff5c 100644
--- a/content/common/service_manager/service_manager_connection_impl_unittest.cc
+++ b/content/common/service_manager/service_manager_connection_impl_unittest.cc
@@ -5,6 +5,7 @@
#include "content/common/service_manager/service_manager_connection_impl.h"
#include "base/synchronization/waitable_event.h"
+#include "base/test/bind_test_util.h"
#include "base/test/scoped_task_environment.h"
#include "base/threading/thread.h"
#include "services/service_manager/public/cpp/constants.h"
@@ -18,12 +19,6 @@
constexpr char kTestServiceName[] = "test service";
-std::unique_ptr<service_manager::Service> LaunchService(
- base::WaitableEvent* event) {
- event->Signal();
- return std::make_unique<service_manager::Service>();
-}
-
} // namespace
TEST(ServiceManagerConnectionImplTest, ServiceLaunchThreading) {
@@ -34,12 +29,14 @@
ServiceManagerConnectionImpl connection_impl(mojo::MakeRequest(&service),
io_thread.task_runner());
ServiceManagerConnection& connection = connection_impl;
- service_manager::EmbeddedServiceInfo info;
base::WaitableEvent event(base::WaitableEvent::ResetPolicy::MANUAL,
base::WaitableEvent::InitialState::NOT_SIGNALED);
- info.factory = base::Bind(&LaunchService, &event);
- info.task_runner = io_thread.task_runner();
- connection.AddEmbeddedService(kTestServiceName, info);
+ connection.AddServiceRequestHandler(
+ kTestServiceName, base::BindLambdaForTesting(
+ [&event](service_manager::mojom::ServiceRequest) {
+ event.Signal();
+ }));
+
connection.Start();
service_manager::BindSourceInfo source_info(
service_manager::Identity(service_manager::mojom::kServiceName,
diff --git a/content/public/common/service_manager_connection.h b/content/public/common/service_manager_connection.h
index a2a3e8e..0e88d902 100644
--- a/content/public/common/service_manager_connection.h
+++ b/content/public/common/service_manager_connection.h
@@ -10,7 +10,6 @@
#include "base/callback_forward.h"
#include "base/sequenced_task_runner.h"
#include "content/common/content_export.h"
-#include "services/service_manager/public/cpp/embedded_service_info.h"
#include "services/service_manager/public/cpp/identity.h"
#include "services/service_manager/public/mojom/service.mojom.h"
@@ -103,19 +102,9 @@
// Removal (and destruction) happens asynchronously on the IO thread.
virtual void RemoveConnectionFilter(int filter_id) = 0;
- // Adds an embedded service to this connection's ServiceFactory.
- // |info| provides details on how to construct new instances of the
- // service when an incoming connection is made to |name|.
- virtual void AddEmbeddedService(
- const std::string& name,
- const service_manager::EmbeddedServiceInfo& info) = 0;
-
// Adds a generic ServiceRequestHandler for a given service name. This
// will be used to satisfy any incoming calls to CreateService() which
// reference the given name.
- //
- // For in-process services, it is preferable to use |AddEmbeddedService()| as
- // defined above.
virtual void AddServiceRequestHandler(
const std::string& name,
const ServiceRequestHandler& handler) = 0;