Commit eb796e96 authored by Kyle Horimoto's avatar Kyle Horimoto Committed by Commit Bot

[CrOS MultiDevice] Add MultiDeviceSetupBase.

This CL separates the logic which controls Mojo bindings from the rest
of MultiDeviceSetupImpl. This will allow me to add a follow-up CL
which adds an initialization step to this service.

Bug: 824568
Change-Id: I5cc870f44f8933b2eee16336e9476684fe6ada85
Reviewed-on: https://chromium-review.googlesource.com/1109276Reviewed-by: default avatarRyan Hansberry <hansberry@chromium.org>
Commit-Queue: Kyle Horimoto <khorimoto@chromium.org>
Cr-Commit-Position: refs/heads/master@{#569294}
parent 1cca03a5
...@@ -14,6 +14,8 @@ static_library("multidevice_setup") { ...@@ -14,6 +14,8 @@ static_library("multidevice_setup") {
"account_status_change_delegate_notifier.h", "account_status_change_delegate_notifier.h",
"account_status_change_delegate_notifier_impl.cc", "account_status_change_delegate_notifier_impl.cc",
"account_status_change_delegate_notifier_impl.h", "account_status_change_delegate_notifier_impl.h",
"multidevice_setup_base.cc",
"multidevice_setup_base.h",
"multidevice_setup_impl.cc", "multidevice_setup_impl.cc",
"multidevice_setup_impl.h", "multidevice_setup_impl.h",
"multidevice_setup_service.cc", "multidevice_setup_service.cc",
......
// 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 "chromeos/services/multidevice_setup/multidevice_setup_base.h"
namespace chromeos {
namespace multidevice_setup {
MultiDeviceSetupBase::MultiDeviceSetupBase() = default;
MultiDeviceSetupBase::~MultiDeviceSetupBase() = default;
void MultiDeviceSetupBase::BindRequest(mojom::MultiDeviceSetupRequest request) {
bindings_.AddBinding(this, std::move(request));
}
} // namespace multidevice_setup
} // namespace chromeos
// 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.
#ifndef CHROMEOS_SERVICES_MULTIDEVICE_SETUP_MULTIDEVICE_SETUP_BASE_H_
#define CHROMEOS_SERVICES_MULTIDEVICE_SETUP_MULTIDEVICE_SETUP_BASE_H_
#include "chromeos/services/multidevice_setup/public/mojom/multidevice_setup.mojom.h"
#include "mojo/public/cpp/bindings/binding_set.h"
namespace chromeos {
namespace multidevice_setup {
// MultiDeviceSetup implementation which accepts requests to bind to it.
class MultiDeviceSetupBase : public mojom::MultiDeviceSetup {
public:
~MultiDeviceSetupBase() override;
void BindRequest(mojom::MultiDeviceSetupRequest request);
protected:
MultiDeviceSetupBase();
private:
mojo::BindingSet<mojom::MultiDeviceSetup> bindings_;
DISALLOW_COPY_AND_ASSIGN(MultiDeviceSetupBase);
};
} // namespace multidevice_setup
} // namespace chromeos
#endif // CHROMEOS_SERVICES_MULTIDEVICE_SETUP_MULTIDEVICE_SETUP_BASE_H_
...@@ -4,20 +4,44 @@ ...@@ -4,20 +4,44 @@
#include "chromeos/services/multidevice_setup/multidevice_setup_impl.h" #include "chromeos/services/multidevice_setup/multidevice_setup_impl.h"
#include "base/memory/ptr_util.h"
#include "base/no_destructor.h"
#include "chromeos/components/proximity_auth/logging/logging.h" #include "chromeos/components/proximity_auth/logging/logging.h"
namespace chromeos { namespace chromeos {
namespace multidevice_setup { namespace multidevice_setup {
MultiDeviceSetupImpl::MultiDeviceSetupImpl() = default; // static
MultiDeviceSetupImpl::Factory* MultiDeviceSetupImpl::Factory::test_factory_ =
nullptr;
MultiDeviceSetupImpl::~MultiDeviceSetupImpl() = default; // static
MultiDeviceSetupImpl::Factory* MultiDeviceSetupImpl::Factory::Get() {
if (test_factory_)
return test_factory_;
static base::NoDestructor<Factory> factory;
return factory.get();
}
void MultiDeviceSetupImpl::BindRequest(mojom::MultiDeviceSetupRequest request) { // static
bindings_.AddBinding(this, std::move(request)); void MultiDeviceSetupImpl::Factory::SetFactoryForTesting(
Factory* test_factory) {
test_factory_ = test_factory;
} }
MultiDeviceSetupImpl::Factory::~Factory() = default;
std::unique_ptr<MultiDeviceSetupBase>
MultiDeviceSetupImpl::Factory::BuildInstance() {
return base::WrapUnique(new MultiDeviceSetupImpl());
}
MultiDeviceSetupImpl::MultiDeviceSetupImpl() = default;
MultiDeviceSetupImpl::~MultiDeviceSetupImpl() = default;
void MultiDeviceSetupImpl::SetAccountStatusChangeDelegate( void MultiDeviceSetupImpl::SetAccountStatusChangeDelegate(
mojom::AccountStatusChangeDelegatePtr delegate, mojom::AccountStatusChangeDelegatePtr delegate,
SetAccountStatusChangeDelegateCallback callback) { SetAccountStatusChangeDelegateCallback callback) {
......
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
#include <memory> #include <memory>
#include "chromeos/services/multidevice_setup/multidevice_setup_base.h"
#include "chromeos/services/multidevice_setup/public/mojom/multidevice_setup.mojom.h" #include "chromeos/services/multidevice_setup/public/mojom/multidevice_setup.mojom.h"
#include "mojo/public/cpp/bindings/binding_set.h" #include "mojo/public/cpp/bindings/binding_set.h"
#include "services/service_manager/public/cpp/binder_registry.h" #include "services/service_manager/public/cpp/binder_registry.h"
...@@ -17,14 +18,23 @@ namespace chromeos { ...@@ -17,14 +18,23 @@ namespace chromeos {
namespace multidevice_setup { namespace multidevice_setup {
// Concrete MultiDeviceSetup implementation. // Concrete MultiDeviceSetup implementation.
class MultiDeviceSetupImpl : public mojom::MultiDeviceSetup { class MultiDeviceSetupImpl : public MultiDeviceSetupBase {
public: public:
MultiDeviceSetupImpl(); class Factory {
public:
static Factory* Get();
static void SetFactoryForTesting(Factory* test_factory);
virtual ~Factory();
virtual std::unique_ptr<MultiDeviceSetupBase> BuildInstance();
private:
static Factory* test_factory_;
};
~MultiDeviceSetupImpl() override; ~MultiDeviceSetupImpl() override;
// Binds a request to this implementation. Should be called each time that the private:
// service receives a request. MultiDeviceSetupImpl();
void BindRequest(mojom::MultiDeviceSetupRequest request);
// mojom::MultiDeviceSetup: // mojom::MultiDeviceSetup:
void SetAccountStatusChangeDelegate( void SetAccountStatusChangeDelegate(
...@@ -34,9 +44,7 @@ class MultiDeviceSetupImpl : public mojom::MultiDeviceSetup { ...@@ -34,9 +44,7 @@ class MultiDeviceSetupImpl : public mojom::MultiDeviceSetup {
mojom::EventTypeForDebugging type, mojom::EventTypeForDebugging type,
TriggerEventForDebuggingCallback callback) override; TriggerEventForDebuggingCallback callback) override;
private:
mojom::AccountStatusChangeDelegatePtr delegate_; mojom::AccountStatusChangeDelegatePtr delegate_;
mojo::BindingSet<mojom::MultiDeviceSetup> bindings_;
DISALLOW_COPY_AND_ASSIGN(MultiDeviceSetupImpl); DISALLOW_COPY_AND_ASSIGN(MultiDeviceSetupImpl);
}; };
......
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
#include "chromeos/services/multidevice_setup/multidevice_setup_service.h" #include "chromeos/services/multidevice_setup/multidevice_setup_service.h"
#include "chromeos/components/proximity_auth/logging/logging.h" #include "chromeos/components/proximity_auth/logging/logging.h"
#include "chromeos/services/multidevice_setup/multidevice_setup_base.h"
#include "chromeos/services/multidevice_setup/multidevice_setup_impl.h" #include "chromeos/services/multidevice_setup/multidevice_setup_impl.h"
namespace chromeos { namespace chromeos {
...@@ -12,14 +13,16 @@ namespace chromeos { ...@@ -12,14 +13,16 @@ namespace chromeos {
namespace multidevice_setup { namespace multidevice_setup {
MultiDeviceSetupService::MultiDeviceSetupService() MultiDeviceSetupService::MultiDeviceSetupService()
: multidevice_setup_impl_(std::make_unique<MultiDeviceSetupImpl>()) {} : multidevice_setup_(
MultiDeviceSetupImpl::Factory::Get()->BuildInstance()) {}
MultiDeviceSetupService::~MultiDeviceSetupService() = default; MultiDeviceSetupService::~MultiDeviceSetupService() = default;
void MultiDeviceSetupService::OnStart() { void MultiDeviceSetupService::OnStart() {
PA_LOG(INFO) << "MultiDeviceSetupService::OnStart()"; PA_LOG(INFO) << "MultiDeviceSetupService::OnStart()";
registry_.AddInterface(base::Bind(&MultiDeviceSetupService::BindRequest, registry_.AddInterface(
base::Unretained(this))); base::BindRepeating(&MultiDeviceSetupBase::BindRequest,
base::Unretained(multidevice_setup_.get())));
} }
void MultiDeviceSetupService::OnBindInterface( void MultiDeviceSetupService::OnBindInterface(
...@@ -31,11 +34,6 @@ void MultiDeviceSetupService::OnBindInterface( ...@@ -31,11 +34,6 @@ void MultiDeviceSetupService::OnBindInterface(
registry_.BindInterface(interface_name, std::move(interface_pipe)); registry_.BindInterface(interface_name, std::move(interface_pipe));
} }
void MultiDeviceSetupService::BindRequest(
mojom::MultiDeviceSetupRequest request) {
multidevice_setup_impl_->BindRequest(std::move(request));
}
} // namespace multidevice_setup } // namespace multidevice_setup
} // namespace chromeos } // namespace chromeos
...@@ -15,7 +15,7 @@ namespace chromeos { ...@@ -15,7 +15,7 @@ namespace chromeos {
namespace multidevice_setup { namespace multidevice_setup {
class MultiDeviceSetupImpl; class MultiDeviceSetupBase;
// Service which provides an implementation for mojom::MultiDeviceSetup. This // Service which provides an implementation for mojom::MultiDeviceSetup. This
// service creates one implementation and shares it among all connection // service creates one implementation and shares it among all connection
...@@ -32,9 +32,7 @@ class MultiDeviceSetupService : public service_manager::Service { ...@@ -32,9 +32,7 @@ class MultiDeviceSetupService : public service_manager::Service {
const std::string& interface_name, const std::string& interface_name,
mojo::ScopedMessagePipeHandle interface_pipe) override; mojo::ScopedMessagePipeHandle interface_pipe) override;
void BindRequest(mojom::MultiDeviceSetupRequest request); std::unique_ptr<MultiDeviceSetupBase> multidevice_setup_;
std::unique_ptr<MultiDeviceSetupImpl> multidevice_setup_impl_;
service_manager::BinderRegistry registry_; service_manager::BinderRegistry registry_;
......
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