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

[CrOS MultiDevice] Add Shutdown() handling in MultiDevice KeyedServices.

This ensures that connections to our Mojo services are disconnected,
which will result in the Shutdown() code added in this CL will run:
https://chromium-review.googlesource.com/c/chromium/src/+/1274886

Bug: 884066
Change-Id: Ifb4fad53fc9d1a693ae83099dc43ee9908303ea7
TBR: jhawkins@chromium.org
Reviewed-on: https://chromium-review.googlesource.com/c/1277588
Commit-Queue: Kyle Horimoto <khorimoto@chromium.org>
Reviewed-by: default avatarJeremy Klein <jlklein@chromium.org>
Cr-Commit-Position: refs/heads/master@{#599080}
parent 31c0c1c2
...@@ -26,6 +26,7 @@ AndroidSmsService::AndroidSmsService(content::BrowserContext* browser_context) ...@@ -26,6 +26,7 @@ AndroidSmsService::AndroidSmsService(content::BrowserContext* browser_context)
AndroidSmsService::~AndroidSmsService() = default; AndroidSmsService::~AndroidSmsService() = default;
void AndroidSmsService::Shutdown() { void AndroidSmsService::Shutdown() {
connection_manager_.reset();
session_manager::SessionManager::Get()->RemoveObserver(this); session_manager::SessionManager::Get()->RemoveObserver(this);
} }
......
...@@ -44,6 +44,9 @@ class DeviceSyncClientHolder : public KeyedService { ...@@ -44,6 +44,9 @@ class DeviceSyncClientHolder : public KeyedService {
DeviceSyncClient* device_sync_client() { return device_sync_client_.get(); } DeviceSyncClient* device_sync_client() { return device_sync_client_.get(); }
private: private:
// KeyedService:
void Shutdown() override { device_sync_client_.reset(); }
std::unique_ptr<DeviceSyncClient> device_sync_client_; std::unique_ptr<DeviceSyncClient> device_sync_client_;
DISALLOW_COPY_AND_ASSIGN(DeviceSyncClientHolder); DISALLOW_COPY_AND_ASSIGN(DeviceSyncClientHolder);
......
...@@ -551,6 +551,7 @@ void EasyUnlockServiceRegular::InitializeInternal() { ...@@ -551,6 +551,7 @@ void EasyUnlockServiceRegular::InitializeInternal() {
void EasyUnlockServiceRegular::ShutdownInternal() { void EasyUnlockServiceRegular::ShutdownInternal() {
short_lived_user_context_.reset(); short_lived_user_context_.reset();
pref_manager_.reset();
turn_off_flow_status_ = EasyUnlockService::IDLE; turn_off_flow_status_ = EasyUnlockService::IDLE;
proximity_auth::ScreenlockBridge::Get()->RemoveObserver(this); proximity_auth::ScreenlockBridge::Get()->RemoveObserver(this);
......
...@@ -43,6 +43,9 @@ class MultiDeviceSetupClientHolder : public KeyedService { ...@@ -43,6 +43,9 @@ class MultiDeviceSetupClientHolder : public KeyedService {
} }
private: private:
// KeyedService:
void Shutdown() override { multidevice_setup_client_.reset(); }
std::unique_ptr<MultiDeviceSetupClient> multidevice_setup_client_; std::unique_ptr<MultiDeviceSetupClient> multidevice_setup_client_;
DISALLOW_COPY_AND_ASSIGN(MultiDeviceSetupClientHolder); DISALLOW_COPY_AND_ASSIGN(MultiDeviceSetupClientHolder);
......
...@@ -34,6 +34,7 @@ static_library("device_sync") { ...@@ -34,6 +34,7 @@ static_library("device_sync") {
"//base", "//base",
"//chromeos/components/proximity_auth/logging", "//chromeos/components/proximity_auth/logging",
"//chromeos/services/device_sync/public/mojom", "//chromeos/services/device_sync/public/mojom",
"//components/gcm_driver",
"//net", "//net",
"//services/identity/public/cpp", "//services/identity/public/cpp",
"//services/preferences/public/cpp", "//services/preferences/public/cpp",
......
...@@ -5,13 +5,49 @@ ...@@ -5,13 +5,49 @@
#include <utility> #include <utility>
#include "base/bind.h" #include "base/bind.h"
#include "base/callback.h"
#include "chromeos/services/device_sync/device_sync_base.h" #include "chromeos/services/device_sync/device_sync_base.h"
#include "components/gcm_driver/gcm_app_handler.h"
#include "components/gcm_driver/gcm_driver.h"
namespace chromeos { namespace chromeos {
namespace device_sync { namespace device_sync {
DeviceSyncBase::DeviceSyncBase() { namespace {
const char kDummyAppName[] = "DeviceSyncDummyApp";
class DummyGCMAppHandler : public gcm::GCMAppHandler {
public:
explicit DummyGCMAppHandler(base::OnceClosure shutdown_callback)
: shutdown_callback_(std::move(shutdown_callback)) {}
~DummyGCMAppHandler() override = default;
// gcm::GCMAppHandler:
void ShutdownHandler() override { std::move(shutdown_callback_).Run(); }
void OnStoreReset() override {}
void OnMessage(const std::string& app_id,
const gcm::IncomingMessage& message) override {}
void OnMessagesDeleted(const std::string& app_id) override {}
void OnSendError(
const std::string& app_id,
const gcm::GCMClient::SendErrorDetails& send_error_details) override {}
void OnSendAcknowledged(const std::string& app_id,
const std::string& message_id) override {}
private:
base::OnceClosure shutdown_callback_;
};
} // namespace
DeviceSyncBase::DeviceSyncBase(gcm::GCMDriver* gcm_driver)
: gcm_app_handler_(std::make_unique<DummyGCMAppHandler>(
base::BindOnce(&DeviceSyncBase::Shutdown, base::Unretained(this)))) {
if (gcm_driver)
gcm_driver->AddAppHandler(kDummyAppName, gcm_app_handler_.get());
bindings_.set_connection_error_handler(base::BindRepeating( bindings_.set_connection_error_handler(base::BindRepeating(
&DeviceSyncBase::OnDisconnection, base::Unretained(this))); &DeviceSyncBase::OnDisconnection, base::Unretained(this)));
} }
......
...@@ -5,12 +5,19 @@ ...@@ -5,12 +5,19 @@
#ifndef CHROMEOS_SERVICES_DEVICE_SYNC_DEVICE_SYNC_BASE_H_ #ifndef CHROMEOS_SERVICES_DEVICE_SYNC_DEVICE_SYNC_BASE_H_
#define CHROMEOS_SERVICES_DEVICE_SYNC_DEVICE_SYNC_BASE_H_ #define CHROMEOS_SERVICES_DEVICE_SYNC_DEVICE_SYNC_BASE_H_
#include <memory>
#include "base/macros.h" #include "base/macros.h"
#include "chromeos/services/device_sync/public/mojom/device_sync.mojom.h" #include "chromeos/services/device_sync/public/mojom/device_sync.mojom.h"
#include "components/signin/core/browser/account_info.h" #include "components/signin/core/browser/account_info.h"
#include "mojo/public/cpp/bindings/binding_set.h" #include "mojo/public/cpp/bindings/binding_set.h"
#include "mojo/public/cpp/bindings/interface_ptr_set.h" #include "mojo/public/cpp/bindings/interface_ptr_set.h"
namespace gcm {
class GCMAppHandler;
class GCMDriver;
} // namespace gcm
namespace chromeos { namespace chromeos {
namespace device_sync { namespace device_sync {
...@@ -29,7 +36,7 @@ class DeviceSyncBase : public mojom::DeviceSync { ...@@ -29,7 +36,7 @@ class DeviceSyncBase : public mojom::DeviceSync {
void BindRequest(mojom::DeviceSyncRequest request); void BindRequest(mojom::DeviceSyncRequest request);
protected: protected:
DeviceSyncBase(); explicit DeviceSyncBase(gcm::GCMDriver* gcm_driver);
// Derived types should override this function to remove references to any // Derived types should override this function to remove references to any
// dependencies. // dependencies.
...@@ -44,6 +51,8 @@ class DeviceSyncBase : public mojom::DeviceSync { ...@@ -44,6 +51,8 @@ class DeviceSyncBase : public mojom::DeviceSync {
mojo::InterfacePtrSet<mojom::DeviceSyncObserver> observers_; mojo::InterfacePtrSet<mojom::DeviceSyncObserver> observers_;
mojo::BindingSet<mojom::DeviceSync> bindings_; mojo::BindingSet<mojom::DeviceSync> bindings_;
std::unique_ptr<gcm::GCMAppHandler> gcm_app_handler_;
DISALLOW_COPY_AND_ASSIGN(DeviceSyncBase); DISALLOW_COPY_AND_ASSIGN(DeviceSyncBase);
}; };
......
...@@ -108,7 +108,8 @@ DeviceSyncImpl::DeviceSyncImpl( ...@@ -108,7 +108,8 @@ DeviceSyncImpl::DeviceSyncImpl(
scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory, scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory,
base::Clock* clock, base::Clock* clock,
std::unique_ptr<PrefConnectionDelegate> pref_connection_delegate) std::unique_ptr<PrefConnectionDelegate> pref_connection_delegate)
: identity_manager_(identity_manager), : DeviceSyncBase(gcm_driver),
identity_manager_(identity_manager),
gcm_driver_(gcm_driver), gcm_driver_(gcm_driver),
connector_(connector), connector_(connector),
gcm_device_info_provider_(gcm_device_info_provider), gcm_device_info_provider_(gcm_device_info_provider),
......
...@@ -14,7 +14,7 @@ namespace chromeos { ...@@ -14,7 +14,7 @@ namespace chromeos {
namespace device_sync { namespace device_sync {
FakeDeviceSync::FakeDeviceSync() = default; FakeDeviceSync::FakeDeviceSync() : DeviceSyncBase(nullptr /* gcm_driver */) {}
FakeDeviceSync::~FakeDeviceSync() = default; FakeDeviceSync::~FakeDeviceSync() = default;
......
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