Commit 1ddea984 authored by James Cook's avatar James Cook Committed by Commit Bot

Reland "Migrate the Chrome OS device_sync service off of the mojo pref service"

This reverts commit 87fc2374.

Relanding after fixing initialization in the chrome crash-and-restore
case. The old code missed a call to OnProfileInitialized() in that
crash-and-restore case.

Instead of relying on chrome to call OnProfileInitialized()
in all startup code paths, we now observe the IdentityManager for when
the primary account information becomes available.

Original change's description:
> Revert "Migrate the Chrome OS device_sync service off of the mojo pref service"
>
> This reverts commit 671afa99.
>
> Reason for revert: Breaks proximity auth in the crash-and-restore
> login flow (e.g. if chrome crashes during the session and logs you
> back in automatically on restart). See crbug.com/1015215
>
> Original change's description:
> > Migrate the Chrome OS device_sync service off of the mojo pref service
> >
> > DeviceSyncService runs in the browser process on the UI thread. It can
> > directly use the Profile's PrefService*. This simplifies the code, and
> > will reduce the amount of work rockot@ has to do for Service Manager
> > cleanup.
> >
> > Delete the DeviceSyncService mojo interface and implementation object.
> > They primarily existed to support wiring up the mojo pref service.
> > Instead, directly connect the DeviceSyncClientImpl to the backing
> > DeviceSyncImpl.
> >
> > Explicitly initialize the DeviceSyncImpl when the user's profile is
> > ready. The old code had startup timing dependencies that assumed that
> > DeviceSyncImpl was created after IdentityManager had information about
> > the primary profile. The new code instantiates the DeviceSyncImpl
> > object earlier, and IdentityManager may not be ready yet.
> >
> > Bug: 977637, 1012941
> > Test: bots
> > Change-Id: Ia32b687404e5b68980cb3aecd3003e6f7e48ffcd
> > Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1849217
> > Commit-Queue: James Cook <jamescook@chromium.org>
> > Reviewed-by: Greg Kerr <kerrnel@chromium.org>
> > Reviewed-by: Josh Nohle <nohle@chromium.org>
> > Reviewed-by: Scott Violet <sky@chromium.org>
> > Reviewed-by: Ken Rockot <rockot@google.com>
> > Cr-Commit-Position: refs/heads/master@{#706181}
>
> TBR=jamescook@chromium.org,sky@chromium.org,rockot@google.com,kerrnel@chromium.org,hansberry@chromium.org,nohle@chromium.org
>
> # Not skipping CQ checks because original CL landed > 1 day ago.
>
> Bug: 977637, 1012941
> Change-Id: Id6cf5f43aac57415dae266a7871c08e4954fa24b
> Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1865602
> Reviewed-by: James Cook <jamescook@chromium.org>
> Commit-Queue: James Cook <jamescook@chromium.org>
> Cr-Commit-Position: refs/heads/master@{#707000}

TBR=jamescook@chromium.org,sky@chromium.org,rockot@google.com,kerrnel@chromium.org,hansberry@chromium.org,nohle@chromium.org

# Not skipping CQ checks because original CL landed > 1 day ago.

Bug: 977637, 1012941
Change-Id: I1fff46240f3b34a7d1276edb7e79a264150ceb73
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1869576Reviewed-by: default avatarJames Cook <jamescook@chromium.org>
Reviewed-by: default avatarJosh Nohle <nohle@chromium.org>
Reviewed-by: default avatarKen Rockot <rockot@google.com>
Commit-Queue: James Cook <jamescook@chromium.org>
Cr-Commit-Position: refs/heads/master@{#708744}
parent 27c74496
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
#include "chrome/browser/chromeos/device_sync/device_sync_client_factory.h" #include "chrome/browser/chromeos/device_sync/device_sync_client_factory.h"
#include "base/macros.h" #include "base/macros.h"
#include "base/timer/timer.h"
#include "chrome/browser/chromeos/cryptauth/client_app_metadata_provider_service.h" #include "chrome/browser/chromeos/cryptauth/client_app_metadata_provider_service.h"
#include "chrome/browser/chromeos/cryptauth/client_app_metadata_provider_service_factory.h" #include "chrome/browser/chromeos/cryptauth/client_app_metadata_provider_service_factory.h"
#include "chrome/browser/chromeos/cryptauth/gcm_device_info_provider_impl.h" #include "chrome/browser/chromeos/cryptauth/gcm_device_info_provider_impl.h"
...@@ -12,9 +13,7 @@ ...@@ -12,9 +13,7 @@
#include "chrome/browser/gcm/gcm_profile_service_factory.h" #include "chrome/browser/gcm/gcm_profile_service_factory.h"
#include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile.h"
#include "chrome/browser/signin/identity_manager_factory.h" #include "chrome/browser/signin/identity_manager_factory.h"
#include "chrome/common/pref_names.h" #include "chromeos/services/device_sync/device_sync_impl.h"
#include "chromeos/constants/chromeos_features.h"
#include "chromeos/services/device_sync/device_sync_service.h"
#include "chromeos/services/device_sync/public/cpp/device_sync_client.h" #include "chromeos/services/device_sync/public/cpp/device_sync_client.h"
#include "chromeos/services/device_sync/public/cpp/device_sync_client_impl.h" #include "chromeos/services/device_sync/public/cpp/device_sync_client_impl.h"
#include "chromeos/services/multidevice_setup/public/cpp/prefs.h" #include "chromeos/services/multidevice_setup/public/cpp/prefs.h"
...@@ -22,12 +21,7 @@ ...@@ -22,12 +21,7 @@
#include "components/keyed_service/content/browser_context_dependency_manager.h" #include "components/keyed_service/content/browser_context_dependency_manager.h"
#include "components/keyed_service/core/keyed_service.h" #include "components/keyed_service/core/keyed_service.h"
#include "components/prefs/pref_service.h" #include "components/prefs/pref_service.h"
#include "content/public/browser/browser_context.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "mojo/public/cpp/bindings/remote.h"
#include "services/network/public/cpp/shared_url_loader_factory.h" #include "services/network/public/cpp/shared_url_loader_factory.h"
#include "services/preferences/public/mojom/preferences.mojom.h"
#include "services/service_manager/public/cpp/connector.h"
namespace chromeos { namespace chromeos {
...@@ -43,24 +37,14 @@ bool IsEnrollmentAllowedByPolicy(content::BrowserContext* context) { ...@@ -43,24 +37,14 @@ bool IsEnrollmentAllowedByPolicy(content::BrowserContext* context) {
Profile::FromBrowserContext(context)->GetPrefs()); Profile::FromBrowserContext(context)->GetPrefs());
} }
std::unique_ptr<DeviceSyncService> CreateServiceInstanceForProfile( std::unique_ptr<DeviceSyncBase> CreateDeviceSyncImplForProfile(
Profile* profile, Profile* profile) {
mojo::Remote<chromeos::device_sync::mojom::DeviceSyncService>* remote) { return DeviceSyncImpl::Factory::Get()->BuildInstance(
mojo::Remote<chromeos::device_sync::mojom::DeviceSyncServiceInitializer>
initializer;
auto service = std::make_unique<DeviceSyncService>(
IdentityManagerFactory::GetForProfile(profile), IdentityManagerFactory::GetForProfile(profile),
gcm::GCMProfileServiceFactory::GetForProfile(profile)->driver(), gcm::GCMProfileServiceFactory::GetForProfile(profile)->driver(),
chromeos::GcmDeviceInfoProviderImpl::GetInstance(), profile->GetPrefs(), chromeos::GcmDeviceInfoProviderImpl::GetInstance(),
chromeos::ClientAppMetadataProviderServiceFactory::GetForProfile(profile), chromeos::ClientAppMetadataProviderServiceFactory::GetForProfile(profile),
profile->GetURLLoaderFactory(), initializer.BindNewPipeAndPassReceiver()); profile->GetURLLoaderFactory(), std::make_unique<base::OneShotTimer>());
mojo::PendingRemote<prefs::mojom::PrefStoreConnector> pref_store_connector;
content::BrowserContext::GetConnectorFor(profile)->Connect(
prefs::mojom::kServiceName,
pref_store_connector.InitWithNewPipeAndPassReceiver());
initializer->Initialize(remote->BindNewPipeAndPassReceiver(),
std::move(pref_store_connector));
return service;
} }
} // namespace } // namespace
...@@ -69,11 +53,16 @@ std::unique_ptr<DeviceSyncService> CreateServiceInstanceForProfile( ...@@ -69,11 +53,16 @@ std::unique_ptr<DeviceSyncService> CreateServiceInstanceForProfile(
class DeviceSyncClientHolder : public KeyedService { class DeviceSyncClientHolder : public KeyedService {
public: public:
explicit DeviceSyncClientHolder(content::BrowserContext* context) explicit DeviceSyncClientHolder(content::BrowserContext* context)
: service_(CreateServiceInstanceForProfile( : device_sync_(CreateDeviceSyncImplForProfile(
Profile::FromBrowserContext(context), Profile::FromBrowserContext(context))),
&remote_service_)), device_sync_client_(
device_sync_client_(DeviceSyncClientImpl::Factory::Get()->BuildInstance( DeviceSyncClientImpl::Factory::Get()->BuildInstance()) {
remote_service_.get())) {} // Connect the client's mojo interface pointer to the implementation.
device_sync_->BindRequest(
mojo::MakeRequest(device_sync_client_->GetDeviceSyncPtr()));
// Finish client initialization.
device_sync_client_->Initialize(base::ThreadTaskRunnerHandle::Get());
}
DeviceSyncClient* device_sync_client() { return device_sync_client_.get(); } DeviceSyncClient* device_sync_client() { return device_sync_client_.get(); }
...@@ -81,15 +70,11 @@ class DeviceSyncClientHolder : public KeyedService { ...@@ -81,15 +70,11 @@ class DeviceSyncClientHolder : public KeyedService {
// KeyedService: // KeyedService:
void Shutdown() override { void Shutdown() override {
device_sync_client_.reset(); device_sync_client_.reset();
service_.reset(); device_sync_->CloseAllBindings();
device_sync_.reset();
} }
mojo::Remote<chromeos::device_sync::mojom::DeviceSyncService> remote_service_; std::unique_ptr<DeviceSyncBase> device_sync_;
// The in-process service instance. Never exposed publicly except through the
// DeviceSyncClient, which is isolated from the service by Mojo interfaces.
std::unique_ptr<chromeos::device_sync::DeviceSyncService> service_;
std::unique_ptr<DeviceSyncClient> device_sync_client_; std::unique_ptr<DeviceSyncClient> device_sync_client_;
DISALLOW_COPY_AND_ASSIGN(DeviceSyncClientHolder); DISALLOW_COPY_AND_ASSIGN(DeviceSyncClientHolder);
......
...@@ -266,8 +266,8 @@ class FakeDeviceSyncClientImplFactory ...@@ -266,8 +266,8 @@ class FakeDeviceSyncClientImplFactory
~FakeDeviceSyncClientImplFactory() override = default; ~FakeDeviceSyncClientImplFactory() override = default;
// chromeos::device_sync::DeviceSyncClientImpl::Factory: // chromeos::device_sync::DeviceSyncClientImpl::Factory:
std::unique_ptr<chromeos::device_sync::DeviceSyncClient> BuildInstance( std::unique_ptr<chromeos::device_sync::DeviceSyncClient> BuildInstance()
chromeos::device_sync::mojom::DeviceSyncService* service) override { override {
auto fake_device_sync_client = auto fake_device_sync_client =
std::make_unique<chromeos::device_sync::FakeDeviceSyncClient>(); std::make_unique<chromeos::device_sync::FakeDeviceSyncClient>();
fake_device_sync_client->NotifyReady(); fake_device_sync_client->NotifyReady();
......
...@@ -311,6 +311,7 @@ ...@@ -311,6 +311,7 @@
#include "chromeos/network/fast_transition_observer.h" #include "chromeos/network/fast_transition_observer.h"
#include "chromeos/network/proxy/proxy_config_handler.h" #include "chromeos/network/proxy/proxy_config_handler.h"
#include "chromeos/services/assistant/public/cpp/assistant_prefs.h" #include "chromeos/services/assistant/public/cpp/assistant_prefs.h"
#include "chromeos/services/device_sync/device_sync_impl.h"
#include "chromeos/services/multidevice_setup/multidevice_setup_service.h" #include "chromeos/services/multidevice_setup/multidevice_setup_service.h"
#include "chromeos/timezone/timezone_resolver.h" #include "chromeos/timezone/timezone_resolver.h"
#include "components/arc/arc_prefs.h" #include "components/arc/arc_prefs.h"
...@@ -935,6 +936,7 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry, ...@@ -935,6 +936,7 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry,
chromeos::AccountManager::RegisterPrefs(registry); chromeos::AccountManager::RegisterPrefs(registry);
chromeos::assistant::prefs::RegisterProfilePrefsForBrowser(registry); chromeos::assistant::prefs::RegisterProfilePrefsForBrowser(registry);
chromeos::CupsPrintersManager::RegisterProfilePrefs(registry); chromeos::CupsPrintersManager::RegisterProfilePrefs(registry);
chromeos::device_sync::DeviceSyncImpl::RegisterProfilePrefs(registry);
chromeos::first_run::RegisterProfilePrefs(registry); chromeos::first_run::RegisterProfilePrefs(registry);
chromeos::file_system_provider::RegisterProfilePrefs(registry); chromeos::file_system_provider::RegisterProfilePrefs(registry);
chromeos::KerberosCredentialsManager::RegisterProfilePrefs(registry); chromeos::KerberosCredentialsManager::RegisterProfilePrefs(registry);
......
...@@ -126,8 +126,7 @@ class FakeDeviceSyncImplFactory ...@@ -126,8 +126,7 @@ class FakeDeviceSyncImplFactory
std::unique_ptr<chromeos::device_sync::DeviceSyncBase> BuildInstance( std::unique_ptr<chromeos::device_sync::DeviceSyncBase> BuildInstance(
signin::IdentityManager* identity_manager, signin::IdentityManager* identity_manager,
gcm::GCMDriver* gcm_driver, gcm::GCMDriver* gcm_driver,
mojo::PendingRemote<prefs::mojom::PrefStoreConnector> PrefService* profile_prefs,
pref_store_connector,
const chromeos::device_sync::GcmDeviceInfoProvider* const chromeos::device_sync::GcmDeviceInfoProvider*
gcm_device_info_provider, gcm_device_info_provider,
chromeos::device_sync::ClientAppMetadataProvider* chromeos::device_sync::ClientAppMetadataProvider*
......
...@@ -106,8 +106,6 @@ static_library("device_sync") { ...@@ -106,8 +106,6 @@ static_library("device_sync") {
"device_sync_base.h", "device_sync_base.h",
"device_sync_impl.cc", "device_sync_impl.cc",
"device_sync_impl.h", "device_sync_impl.h",
"device_sync_service.cc",
"device_sync_service.h",
"device_sync_type_converters.cc", "device_sync_type_converters.cc",
"device_sync_type_converters.h", "device_sync_type_converters.h",
"network_request_error.cc", "network_request_error.cc",
...@@ -152,8 +150,8 @@ static_library("device_sync") { ...@@ -152,8 +150,8 @@ static_library("device_sync") {
"//chromeos/services/device_sync/public/cpp", "//chromeos/services/device_sync/public/cpp",
"//chromeos/services/device_sync/public/mojom", "//chromeos/services/device_sync/public/mojom",
"//components/gcm_driver", "//components/gcm_driver",
"//components/prefs",
"//net", "//net",
"//services/preferences/public/cpp",
] ]
visibility = [ visibility = [
......
...@@ -8,6 +8,5 @@ include_rules = [ ...@@ -8,6 +8,5 @@ include_rules = [
"+mojo/public/cpp", "+mojo/public/cpp",
"+services/network/public", "+services/network/public",
"+services/network/test", "+services/network/test",
"+services/preferences/public",
"+components/cryptauth" "+components/cryptauth"
] ]
...@@ -2,11 +2,12 @@ ...@@ -2,11 +2,12 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#include "chromeos/services/device_sync/device_sync_base.h"
#include <utility> #include <utility>
#include "base/bind.h" #include "base/bind.h"
#include "base/callback.h" #include "base/callback.h"
#include "chromeos/services/device_sync/device_sync_base.h"
namespace chromeos { namespace chromeos {
......
...@@ -18,11 +18,9 @@ ...@@ -18,11 +18,9 @@
#include "chromeos/services/device_sync/public/mojom/device_sync.mojom.h" #include "chromeos/services/device_sync/public/mojom/device_sync.mojom.h"
#include "chromeos/services/device_sync/remote_device_provider.h" #include "chromeos/services/device_sync/remote_device_provider.h"
#include "components/signin/public/identity_manager/account_info.h" #include "components/signin/public/identity_manager/account_info.h"
#include "mojo/public/cpp/bindings/pending_remote.h" #include "components/signin/public/identity_manager/identity_manager.h"
#include "mojo/public/cpp/bindings/remote.h"
#include "services/preferences/public/cpp/pref_service_factory.h"
#include "services/preferences/public/mojom/preferences.mojom.h"
class PrefRegistrySimple;
class PrefService; class PrefService;
namespace base { namespace base {
...@@ -34,10 +32,6 @@ namespace gcm { ...@@ -34,10 +32,6 @@ namespace gcm {
class GCMDriver; class GCMDriver;
} // namespace gcm } // namespace gcm
namespace signin {
class IdentityManager;
} // namespace signin
namespace network { namespace network {
class SharedURLLoaderFactory; class SharedURLLoaderFactory;
} // namespace network } // namespace network
...@@ -56,12 +50,13 @@ class SoftwareFeatureManager; ...@@ -56,12 +50,13 @@ class SoftwareFeatureManager;
// Concrete DeviceSync implementation. When DeviceSyncImpl is constructed, it // Concrete DeviceSync implementation. When DeviceSyncImpl is constructed, it
// starts an initialization flow with the following steps: // starts an initialization flow with the following steps:
// (1) Verify that the primary user is logged in with a valid account ID. // (1) Check if the primary user is logged in with a valid account ID.
// (2) Connect to the Prefs Service associated with that account. // (2) If not, wait for IdentityManager to provide the primary account ID.
// (3) Instantiate classes which communicate with the CryptAuth back-end. // (3) Instantiate classes which communicate with the CryptAuth back-end.
// (4) Check enrollment state; if not yet enrolled, enroll the device. // (4) Check enrollment state; if not yet enrolled, enroll the device.
// (5) When enrollment is valid, listen for device sync updates. // (5) When enrollment is valid, listen for device sync updates.
class DeviceSyncImpl : public DeviceSyncBase, class DeviceSyncImpl : public DeviceSyncBase,
public signin::IdentityManager::Observer,
public CryptAuthEnrollmentManager::Observer, public CryptAuthEnrollmentManager::Observer,
public RemoteDeviceProvider::Observer { public RemoteDeviceProvider::Observer {
public: public:
...@@ -77,8 +72,7 @@ class DeviceSyncImpl : public DeviceSyncBase, ...@@ -77,8 +72,7 @@ class DeviceSyncImpl : public DeviceSyncBase,
virtual std::unique_ptr<DeviceSyncBase> BuildInstance( virtual std::unique_ptr<DeviceSyncBase> BuildInstance(
signin::IdentityManager* identity_manager, signin::IdentityManager* identity_manager,
gcm::GCMDriver* gcm_driver, gcm::GCMDriver* gcm_driver,
mojo::PendingRemote<prefs::mojom::PrefStoreConnector> PrefService* profile_prefs,
pref_store_conector,
const GcmDeviceInfoProvider* gcm_device_info_provider, const GcmDeviceInfoProvider* gcm_device_info_provider,
ClientAppMetadataProvider* client_app_metadata_provider, ClientAppMetadataProvider* client_app_metadata_provider,
scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory, scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory,
...@@ -88,6 +82,8 @@ class DeviceSyncImpl : public DeviceSyncBase, ...@@ -88,6 +82,8 @@ class DeviceSyncImpl : public DeviceSyncBase,
static Factory* test_factory_instance_; static Factory* test_factory_instance_;
}; };
static void RegisterProfilePrefs(PrefRegistrySimple* registry);
~DeviceSyncImpl() override; ~DeviceSyncImpl() override;
protected: protected:
...@@ -117,27 +113,7 @@ class DeviceSyncImpl : public DeviceSyncBase, ...@@ -117,27 +113,7 @@ class DeviceSyncImpl : public DeviceSyncBase,
private: private:
friend class DeviceSyncServiceTest; friend class DeviceSyncServiceTest;
enum class Status { enum class Status { FETCHING_ACCOUNT_INFO, WAITING_FOR_ENROLLMENT, READY };
FETCHING_ACCOUNT_INFO,
CONNECTING_TO_USER_PREFS,
WAITING_FOR_ENROLLMENT,
READY
};
// Wrapper around preferences code. This class is necessary so that tests can
// override this functionality to use a fake PrefService rather than a real
// connection to the Preferences service.
class PrefConnectionDelegate {
public:
virtual ~PrefConnectionDelegate();
virtual scoped_refptr<PrefRegistrySimple> CreatePrefRegistry();
virtual void ConnectToPrefService(
mojo::PendingRemote<prefs::mojom::PrefStoreConnector>
pref_store_connector,
scoped_refptr<PrefRegistrySimple> pref_registry,
prefs::ConnectCallback callback);
};
class PendingSetSoftwareFeatureRequest { class PendingSetSoftwareFeatureRequest {
public: public:
...@@ -172,21 +148,21 @@ class DeviceSyncImpl : public DeviceSyncBase, ...@@ -172,21 +148,21 @@ class DeviceSyncImpl : public DeviceSyncBase,
DeviceSyncImpl( DeviceSyncImpl(
signin::IdentityManager* identity_manager, signin::IdentityManager* identity_manager,
gcm::GCMDriver* gcm_driver, gcm::GCMDriver* gcm_driver,
mojo::PendingRemote<prefs::mojom::PrefStoreConnector> PrefService* profile_prefs,
pref_store_connector,
const GcmDeviceInfoProvider* gcm_device_info_provider, const GcmDeviceInfoProvider* gcm_device_info_provider,
ClientAppMetadataProvider* client_app_metadata_provider, ClientAppMetadataProvider* client_app_metadata_provider,
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<base::OneShotTimer> timer); std::unique_ptr<base::OneShotTimer> timer);
// DeviceSyncBase: // DeviceSyncBase:
void Shutdown() override; void Shutdown() override;
// signin::IdentityManager::Observer:
void OnPrimaryAccountSet(
const CoreAccountInfo& primary_account_info) override;
void ProcessPrimaryAccountInfo(const CoreAccountInfo& primary_account_info); void ProcessPrimaryAccountInfo(const CoreAccountInfo& primary_account_info);
void ConnectToPrefStore();
void OnConnectedToPrefService(std::unique_ptr<PrefService> pref_service);
void InitializeCryptAuthManagementObjects(); void InitializeCryptAuthManagementObjects();
void CompleteInitializationAfterSuccessfulEnrollment(); void CompleteInitializationAfterSuccessfulEnrollment();
...@@ -221,22 +197,17 @@ class DeviceSyncImpl : public DeviceSyncBase, ...@@ -221,22 +197,17 @@ class DeviceSyncImpl : public DeviceSyncBase,
void StartSetSoftwareFeatureTimer(); void StartSetSoftwareFeatureTimer();
void OnSetSoftwareFeatureTimerFired(); void OnSetSoftwareFeatureTimerFired();
void SetPrefConnectionDelegateForTesting(
std::unique_ptr<PrefConnectionDelegate> pref_connection_delegate);
signin::IdentityManager* identity_manager_; signin::IdentityManager* identity_manager_;
gcm::GCMDriver* gcm_driver_; gcm::GCMDriver* gcm_driver_;
mojo::PendingRemote<prefs::mojom::PrefStoreConnector> pref_store_connector_; PrefService* profile_prefs_;
const GcmDeviceInfoProvider* gcm_device_info_provider_; const GcmDeviceInfoProvider* gcm_device_info_provider_;
ClientAppMetadataProvider* client_app_metadata_provider_; ClientAppMetadataProvider* client_app_metadata_provider_;
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<base::OneShotTimer> set_software_feature_timer_; std::unique_ptr<base::OneShotTimer> set_software_feature_timer_;
Status status_; Status status_;
CoreAccountInfo primary_account_info_; CoreAccountInfo primary_account_info_;
std::unique_ptr<PrefService> pref_service_;
base::flat_map<base::UnguessableToken, base::flat_map<base::UnguessableToken,
std::unique_ptr<PendingSetSoftwareFeatureRequest>> std::unique_ptr<PendingSetSoftwareFeatureRequest>>
id_to_pending_set_software_feature_request_map_; id_to_pending_set_software_feature_request_map_;
......
// 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/device_sync/device_sync_service.h"
#include "base/bind.h"
#include "base/timer/timer.h"
#include "chromeos/components/multidevice/logging/logging.h"
#include "chromeos/services/device_sync/device_sync_base.h"
#include "chromeos/services/device_sync/device_sync_impl.h"
#include "services/network/public/cpp/shared_url_loader_factory.h"
namespace chromeos {
namespace device_sync {
DeviceSyncService::DeviceSyncService(
signin::IdentityManager* identity_manager,
gcm::GCMDriver* gcm_driver,
const GcmDeviceInfoProvider* gcm_device_info_provider,
ClientAppMetadataProvider* client_app_metadata_provider,
scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory,
mojo::PendingReceiver<mojom::DeviceSyncServiceInitializer> init_receiver)
: init_receiver_(this, std::move(init_receiver)),
identity_manager_(identity_manager),
gcm_driver_(gcm_driver),
gcm_device_info_provider_(gcm_device_info_provider),
client_app_metadata_provider_(client_app_metadata_provider),
url_loader_factory_(std::move(url_loader_factory)) {}
DeviceSyncService::~DeviceSyncService() {
// Subclasses may hold onto message response callbacks. It's important that
// all bindings are closed by the time those callbacks are destroyed, or they
// will DCHECK.
if (device_sync_)
device_sync_->CloseAllBindings();
}
void DeviceSyncService::Initialize(
mojo::PendingReceiver<mojom::DeviceSyncService> receiver,
mojo::PendingRemote<prefs::mojom::PrefStoreConnector>
pref_store_connector) {
PA_LOG(VERBOSE) << "DeviceSyncService::Init()";
receiver_.Bind(std::move(receiver));
device_sync_ = DeviceSyncImpl::Factory::Get()->BuildInstance(
identity_manager_, gcm_driver_, std::move(pref_store_connector),
gcm_device_info_provider_, client_app_metadata_provider_,
url_loader_factory_, std::make_unique<base::OneShotTimer>());
}
void DeviceSyncService::BindDeviceSync(
mojo::PendingReceiver<mojom::DeviceSync> receiver) {
PA_LOG(VERBOSE) << "DeviceSyncService::BindDeviceSync()";
device_sync_->BindRequest(std::move(receiver));
}
} // namespace device_sync
} // 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_DEVICE_SYNC_DEVICE_SYNC_SERVICE_H_
#define CHROMEOS_SERVICES_DEVICE_SYNC_DEVICE_SYNC_SERVICE_H_
#include <memory>
#include "base/memory/ref_counted.h"
#include "chromeos/services/device_sync/public/mojom/device_sync.mojom.h"
#include "mojo/public/cpp/bindings/pending_receiver.h"
#include "mojo/public/cpp/bindings/receiver.h"
namespace gcm {
class GCMDriver;
} // namespace gcm
namespace signin {
class IdentityManager;
} // namespace signin
namespace network {
class SharedURLLoaderFactory;
} // namespace network
namespace chromeos {
namespace device_sync {
class ClientAppMetadataProvider;
class DeviceSyncBase;
class GcmDeviceInfoProvider;
// Service which provides an implementation for DeviceSync. This service creates
// one implementation and shares it among all connection requests.
class DeviceSyncService : public mojom::DeviceSyncServiceInitializer,
public mojom::DeviceSyncService {
public:
DeviceSyncService(
signin::IdentityManager* identity_manager,
gcm::GCMDriver* gcm_driver,
const GcmDeviceInfoProvider* gcm_device_info_provider,
ClientAppMetadataProvider* client_app_metadata_provider,
scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory,
mojo::PendingReceiver<mojom::DeviceSyncServiceInitializer> init_receiver);
~DeviceSyncService() override;
private:
// mojom::DeviceSyncServiceInitializer:
void Initialize(mojo::PendingReceiver<mojom::DeviceSyncService> receiver,
mojo::PendingRemote<prefs::mojom::PrefStoreConnector>
pref_store_connector) override;
// mojom::DeviceSyncService:
void BindDeviceSync(
mojo::PendingReceiver<mojom::DeviceSync> receiver) override;
mojo::Receiver<mojom::DeviceSyncServiceInitializer> init_receiver_;
mojo::Receiver<mojom::DeviceSyncService> receiver_{this};
signin::IdentityManager* identity_manager_;
gcm::GCMDriver* gcm_driver_;
const GcmDeviceInfoProvider* gcm_device_info_provider_;
ClientAppMetadataProvider* client_app_metadata_provider_;
scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory_;
std::unique_ptr<DeviceSyncBase> device_sync_;
DISALLOW_COPY_AND_ASSIGN(DeviceSyncService);
};
} // namespace device_sync
} // namespace chromeos
#endif // CHROMEOS_SERVICES_DEVICE_SYNC_DEVICE_SYNC_SERVICE_H_
...@@ -69,6 +69,7 @@ source_set("unit_tests") { ...@@ -69,6 +69,7 @@ source_set("unit_tests") {
"//chromeos/services/device_sync", "//chromeos/services/device_sync",
"//chromeos/services/device_sync:test_support", "//chromeos/services/device_sync:test_support",
"//components/gcm_driver:test_support", "//components/gcm_driver:test_support",
"//components/prefs:test_support",
"//components/signin/public/identity_manager:test_support", "//components/signin/public/identity_manager:test_support",
"//net", "//net",
"//services/network:test_support", "//services/network:test_support",
......
...@@ -12,6 +12,10 @@ DeviceSyncClient::DeviceSyncClient() = default; ...@@ -12,6 +12,10 @@ DeviceSyncClient::DeviceSyncClient() = default;
DeviceSyncClient::~DeviceSyncClient() = default; DeviceSyncClient::~DeviceSyncClient() = default;
mojom::DeviceSyncPtr* DeviceSyncClient::GetDeviceSyncPtr() {
return nullptr;
}
void DeviceSyncClient::AddObserver(Observer* observer) { void DeviceSyncClient::AddObserver(Observer* observer) {
observer_list_.AddObserver(observer); observer_list_.AddObserver(observer);
} }
......
...@@ -10,12 +10,17 @@ ...@@ -10,12 +10,17 @@
#include "base/callback.h" #include "base/callback.h"
#include "base/macros.h" #include "base/macros.h"
#include "base/memory/scoped_refptr.h"
#include "base/observer_list.h" #include "base/observer_list.h"
#include "base/optional.h" #include "base/optional.h"
#include "chromeos/components/multidevice/remote_device_ref.h" #include "chromeos/components/multidevice/remote_device_ref.h"
#include "chromeos/components/multidevice/software_feature.h" #include "chromeos/components/multidevice/software_feature.h"
#include "chromeos/services/device_sync/public/mojom/device_sync.mojom.h" #include "chromeos/services/device_sync/public/mojom/device_sync.mojom.h"
namespace base {
class TaskRunner;
} // namespace base
namespace chromeos { namespace chromeos {
namespace device_sync { namespace device_sync {
...@@ -47,6 +52,13 @@ class DeviceSyncClient { ...@@ -47,6 +52,13 @@ class DeviceSyncClient {
DeviceSyncClient(); DeviceSyncClient();
virtual ~DeviceSyncClient(); virtual ~DeviceSyncClient();
// Completes initialization. Must be called after connecting the DeviceSync
// mojo interface pointer to the implementation.
virtual void Initialize(scoped_refptr<base::TaskRunner> task_runner) {}
// Returns the DeviceSync mojo interface pointer.
virtual mojom::DeviceSyncPtr* GetDeviceSyncPtr();
void AddObserver(Observer* observer); void AddObserver(Observer* observer);
void RemoveObserver(Observer* observer); void RemoveObserver(Observer* observer);
......
...@@ -40,24 +40,23 @@ void DeviceSyncClientImpl::Factory::SetInstanceForTesting( ...@@ -40,24 +40,23 @@ void DeviceSyncClientImpl::Factory::SetInstanceForTesting(
DeviceSyncClientImpl::Factory::~Factory() = default; DeviceSyncClientImpl::Factory::~Factory() = default;
std::unique_ptr<DeviceSyncClient> DeviceSyncClientImpl::Factory::BuildInstance( std::unique_ptr<DeviceSyncClient>
mojom::DeviceSyncService* service) { DeviceSyncClientImpl::Factory::BuildInstance() {
return base::WrapUnique(new DeviceSyncClientImpl(service)); return std::make_unique<DeviceSyncClientImpl>();
} }
DeviceSyncClientImpl::DeviceSyncClientImpl(mojom::DeviceSyncService* service) DeviceSyncClientImpl::DeviceSyncClientImpl()
: DeviceSyncClientImpl(service, base::ThreadTaskRunnerHandle::Get()) {} : observer_binding_(this),
DeviceSyncClientImpl::DeviceSyncClientImpl(
mojom::DeviceSyncService* service,
scoped_refptr<base::TaskRunner> task_runner)
: binding_(this),
expiring_device_cache_( expiring_device_cache_(
std::make_unique<multidevice::ExpiringRemoteDeviceCache>()) { std::make_unique<multidevice::ExpiringRemoteDeviceCache>()) {}
service->BindDeviceSync(mojo::MakeRequest(&device_sync_ptr_));
DeviceSyncClientImpl::~DeviceSyncClientImpl() = default;
void DeviceSyncClientImpl::Initialize(
scoped_refptr<base::TaskRunner> task_runner) {
device_sync_ptr_->AddObserver(GenerateInterfacePtr(), base::OnceClosure()); device_sync_ptr_->AddObserver(GenerateInterfacePtr(), base::OnceClosure());
// Delay calling these until after the constructor finishes. // Delay calling these until after initialization finishes.
task_runner->PostTask( task_runner->PostTask(
FROM_HERE, base::BindOnce(&DeviceSyncClientImpl::LoadLocalDeviceMetadata, FROM_HERE, base::BindOnce(&DeviceSyncClientImpl::LoadLocalDeviceMetadata,
weak_ptr_factory_.GetWeakPtr())); weak_ptr_factory_.GetWeakPtr()));
...@@ -66,7 +65,9 @@ DeviceSyncClientImpl::DeviceSyncClientImpl( ...@@ -66,7 +65,9 @@ DeviceSyncClientImpl::DeviceSyncClientImpl(
weak_ptr_factory_.GetWeakPtr())); weak_ptr_factory_.GetWeakPtr()));
} }
DeviceSyncClientImpl::~DeviceSyncClientImpl() = default; mojom::DeviceSyncPtr* DeviceSyncClientImpl::GetDeviceSyncPtr() {
return &device_sync_ptr_;
}
void DeviceSyncClientImpl::OnEnrollmentFinished() { void DeviceSyncClientImpl::OnEnrollmentFinished() {
// Before notifying observers that enrollment has finished, sync down the // Before notifying observers that enrollment has finished, sync down the
...@@ -244,7 +245,7 @@ void DeviceSyncClientImpl::OnFindEligibleDevicesCompleted( ...@@ -244,7 +245,7 @@ void DeviceSyncClientImpl::OnFindEligibleDevicesCompleted(
mojom::DeviceSyncObserverPtr DeviceSyncClientImpl::GenerateInterfacePtr() { mojom::DeviceSyncObserverPtr DeviceSyncClientImpl::GenerateInterfacePtr() {
mojom::DeviceSyncObserverPtr interface_ptr; mojom::DeviceSyncObserverPtr interface_ptr;
binding_.Bind(mojo::MakeRequest(&interface_ptr)); observer_binding_.Bind(mojo::MakeRequest(&interface_ptr));
return interface_ptr; return interface_ptr;
} }
......
...@@ -41,16 +41,18 @@ class DeviceSyncClientImpl : public DeviceSyncClient, ...@@ -41,16 +41,18 @@ class DeviceSyncClientImpl : public DeviceSyncClient,
static Factory* Get(); static Factory* Get();
static void SetInstanceForTesting(Factory* test_factory); static void SetInstanceForTesting(Factory* test_factory);
virtual ~Factory(); virtual ~Factory();
virtual std::unique_ptr<DeviceSyncClient> BuildInstance( virtual std::unique_ptr<DeviceSyncClient> BuildInstance();
mojom::DeviceSyncService* service);
private: private:
static Factory* test_factory_; static Factory* test_factory_;
}; };
explicit DeviceSyncClientImpl(mojom::DeviceSyncService* service); DeviceSyncClientImpl();
~DeviceSyncClientImpl() override; ~DeviceSyncClientImpl() override;
void Initialize(scoped_refptr<base::TaskRunner> task_runner) override;
mojom::DeviceSyncPtr* GetDeviceSyncPtr() override;
// DeviceSyncClient: // DeviceSyncClient:
void ForceEnrollmentNow( void ForceEnrollmentNow(
mojom::DeviceSync::ForceEnrollmentNowCallback callback) override; mojom::DeviceSync::ForceEnrollmentNowCallback callback) override;
...@@ -77,9 +79,6 @@ class DeviceSyncClientImpl : public DeviceSyncClient, ...@@ -77,9 +79,6 @@ class DeviceSyncClientImpl : public DeviceSyncClient,
private: private:
friend class DeviceSyncClientImplTest; friend class DeviceSyncClientImplTest;
DeviceSyncClientImpl(mojom::DeviceSyncService* service,
scoped_refptr<base::TaskRunner> task_runner);
void AttemptToBecomeReady(); void AttemptToBecomeReady();
void LoadSyncedDevices(); void LoadSyncedDevices();
...@@ -100,7 +99,7 @@ class DeviceSyncClientImpl : public DeviceSyncClient, ...@@ -100,7 +99,7 @@ class DeviceSyncClientImpl : public DeviceSyncClient,
void FlushForTesting(); void FlushForTesting();
mojom::DeviceSyncPtr device_sync_ptr_; mojom::DeviceSyncPtr device_sync_ptr_;
mojo::Binding<mojom::DeviceSyncObserver> binding_; mojo::Binding<mojom::DeviceSyncObserver> observer_binding_;
std::unique_ptr<multidevice::ExpiringRemoteDeviceCache> std::unique_ptr<multidevice::ExpiringRemoteDeviceCache>
expiring_device_cache_; expiring_device_cache_;
......
...@@ -19,12 +19,12 @@ ...@@ -19,12 +19,12 @@
#include "base/test/test_simple_task_runner.h" #include "base/test/test_simple_task_runner.h"
#include "chromeos/components/multidevice/remote_device_test_util.h" #include "chromeos/components/multidevice/remote_device_test_util.h"
#include "chromeos/services/device_sync/device_sync_impl.h" #include "chromeos/services/device_sync/device_sync_impl.h"
#include "chromeos/services/device_sync/device_sync_service.h"
#include "chromeos/services/device_sync/fake_device_sync.h" #include "chromeos/services/device_sync/fake_device_sync.h"
#include "chromeos/services/device_sync/public/cpp/fake_client_app_metadata_provider.h" #include "chromeos/services/device_sync/public/cpp/fake_client_app_metadata_provider.h"
#include "chromeos/services/device_sync/public/cpp/fake_gcm_device_info_provider.h" #include "chromeos/services/device_sync/public/cpp/fake_gcm_device_info_provider.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/gcm_driver/fake_gcm_driver.h" #include "components/gcm_driver/fake_gcm_driver.h"
#include "components/prefs/testing_pref_service.h"
#include "components/signin/public/identity_manager/identity_test_environment.h" #include "components/signin/public/identity_manager/identity_test_environment.h"
#include "services/network/public/cpp/weak_wrapper_shared_url_loader_factory.h" #include "services/network/public/cpp/weak_wrapper_shared_url_loader_factory.h"
#include "testing/gtest/include/gtest/gtest.h" #include "testing/gtest/include/gtest/gtest.h"
...@@ -61,8 +61,7 @@ class FakeDeviceSyncImplFactory : public DeviceSyncImpl::Factory { ...@@ -61,8 +61,7 @@ class FakeDeviceSyncImplFactory : public DeviceSyncImpl::Factory {
std::unique_ptr<DeviceSyncBase> BuildInstance( std::unique_ptr<DeviceSyncBase> BuildInstance(
signin::IdentityManager* identity_manager, signin::IdentityManager* identity_manager,
gcm::GCMDriver* gcm_driver, gcm::GCMDriver* gcm_driver,
mojo::PendingRemote<prefs::mojom::PrefStoreConnector> PrefService* profile_prefs,
pref_store_connector,
const GcmDeviceInfoProvider* gcm_device_info_provider, const GcmDeviceInfoProvider* gcm_device_info_provider,
ClientAppMetadataProvider* client_app_metadata_provider, ClientAppMetadataProvider* client_app_metadata_provider,
scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory, scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory,
...@@ -169,33 +168,27 @@ class DeviceSyncClientImplTest : public testing::Test { ...@@ -169,33 +168,27 @@ class DeviceSyncClientImplTest : public testing::Test {
return nullptr; return nullptr;
})); }));
mojo::Remote<mojom::DeviceSyncServiceInitializer> initializer; test_pref_service_ = std::make_unique<TestingPrefServiceSimple>();
service_ = std::make_unique<DeviceSyncService>( DeviceSyncImpl::RegisterProfilePrefs(test_pref_service_->registry());
device_sync_ = DeviceSyncImpl::Factory::Get()->BuildInstance(
identity_test_environment_->identity_manager(), fake_gcm_driver_.get(), identity_test_environment_->identity_manager(), fake_gcm_driver_.get(),
fake_gcm_device_info_provider_.get(), test_pref_service_.get(), fake_gcm_device_info_provider_.get(),
fake_client_app_metadata_provider_.get(), shared_url_loader_factory, fake_client_app_metadata_provider_.get(), shared_url_loader_factory,
initializer.BindNewPipeAndPassReceiver()); std::make_unique<base::OneShotTimer>());
mojo::PendingRemote<prefs::mojom::PrefStoreConnector> pref_store_connector;
ignore_result(pref_store_connector.InitWithNewPipeAndPassReceiver());
initializer->Initialize(remote_service_.BindNewPipeAndPassReceiver(),
std::move(pref_store_connector));
test_observer_ = std::make_unique<TestDeviceSyncClientObserver>(); test_observer_ = std::make_unique<TestDeviceSyncClientObserver>();
CreateClient(); // DeviceSyncClient initialization posts two tasks to the TaskRunner. Idle
}
void CreateClient() {
// DeviceSyncClient's constructor posts two tasks to the TaskRunner. Idle
// the TaskRunner so that the tasks can be run via a RunLoop later on. // the TaskRunner so that the tasks can be run via a RunLoop later on.
auto test_task_runner = base::MakeRefCounted<base::TestSimpleTaskRunner>(); auto test_task_runner = base::MakeRefCounted<base::TestSimpleTaskRunner>();
client_ = base::WrapUnique( client_ = std::make_unique<DeviceSyncClientImpl>();
new DeviceSyncClientImpl(remote_service_.get(), test_task_runner)); device_sync_->BindRequest(mojo::MakeRequest(client_->GetDeviceSyncPtr()));
client_->Initialize(test_task_runner);
test_task_runner->RunUntilIdle(); test_task_runner->RunUntilIdle();
} }
void InitializeClient(bool complete_enrollment_before_sync = true) { void SetupClient(bool complete_enrollment_before_sync = true) {
client_->AddObserver(test_observer_.get()); client_->AddObserver(test_observer_.get());
SendPendingMojoMessages(); SendPendingMojoMessages();
...@@ -471,8 +464,8 @@ class DeviceSyncClientImplTest : public testing::Test { ...@@ -471,8 +464,8 @@ class DeviceSyncClientImplTest : public testing::Test {
fake_client_app_metadata_provider_; fake_client_app_metadata_provider_;
FakeDeviceSync* fake_device_sync_; FakeDeviceSync* fake_device_sync_;
std::unique_ptr<FakeDeviceSyncImplFactory> fake_device_sync_impl_factory_; std::unique_ptr<FakeDeviceSyncImplFactory> fake_device_sync_impl_factory_;
std::unique_ptr<DeviceSyncService> service_; std::unique_ptr<TestingPrefServiceSimple> test_pref_service_;
mojo::Remote<mojom::DeviceSyncService> remote_service_; std::unique_ptr<DeviceSyncBase> device_sync_;
std::unique_ptr<TestDeviceSyncClientObserver> test_observer_; std::unique_ptr<TestDeviceSyncClientObserver> test_observer_;
std::unique_ptr<DeviceSyncClientImpl> client_; std::unique_ptr<DeviceSyncClientImpl> client_;
...@@ -543,7 +536,7 @@ class DeviceSyncClientImplTest : public testing::Test { ...@@ -543,7 +536,7 @@ class DeviceSyncClientImplTest : public testing::Test {
TEST_F(DeviceSyncClientImplTest, TEST_F(DeviceSyncClientImplTest,
TestCompleteInitialSyncBeforeInitialEnrollment) { TestCompleteInitialSyncBeforeInitialEnrollment) {
InitializeClient(false /* complete_enrollment_before_sync */); SetupClient(false /* complete_enrollment_before_sync */);
} }
TEST_F( TEST_F(
...@@ -598,7 +591,7 @@ TEST_F( ...@@ -598,7 +591,7 @@ TEST_F(
TEST_F(DeviceSyncClientImplTest, TestOnEnrollmentFinished) { TEST_F(DeviceSyncClientImplTest, TestOnEnrollmentFinished) {
EXPECT_EQ(0u, test_observer_->enrollment_finished_count()); EXPECT_EQ(0u, test_observer_->enrollment_finished_count());
InitializeClient(); SetupClient();
EXPECT_EQ(test_remote_device_list_[0].public_key, EXPECT_EQ(test_remote_device_list_[0].public_key,
client_->GetLocalDeviceMetadata()->public_key()); client_->GetLocalDeviceMetadata()->public_key());
...@@ -635,7 +628,7 @@ TEST_F(DeviceSyncClientImplTest, TestOnEnrollmentFinished) { ...@@ -635,7 +628,7 @@ TEST_F(DeviceSyncClientImplTest, TestOnEnrollmentFinished) {
TEST_F(DeviceSyncClientImplTest, TestOnNewDevicesSynced) { TEST_F(DeviceSyncClientImplTest, TestOnNewDevicesSynced) {
EXPECT_EQ(0u, test_observer_->new_devices_synced_count()); EXPECT_EQ(0u, test_observer_->new_devices_synced_count());
InitializeClient(); SetupClient();
VerifyRemoteDeviceRefListAndRemoteDeviceListAreEqual( VerifyRemoteDeviceRefListAndRemoteDeviceListAreEqual(
client_->GetSyncedDevices(), test_remote_device_list_); client_->GetSyncedDevices(), test_remote_device_list_);
...@@ -664,31 +657,31 @@ TEST_F(DeviceSyncClientImplTest, TestOnNewDevicesSynced) { ...@@ -664,31 +657,31 @@ TEST_F(DeviceSyncClientImplTest, TestOnNewDevicesSynced) {
} }
TEST_F(DeviceSyncClientImplTest, TestForceEnrollmentNow_ExpectSuccess) { TEST_F(DeviceSyncClientImplTest, TestForceEnrollmentNow_ExpectSuccess) {
InitializeClient(); SetupClient();
CallForceEnrollmentNow(true /* expected_success */); CallForceEnrollmentNow(true /* expected_success */);
} }
TEST_F(DeviceSyncClientImplTest, TestForceEnrollmentNow_ExpectFailure) { TEST_F(DeviceSyncClientImplTest, TestForceEnrollmentNow_ExpectFailure) {
InitializeClient(); SetupClient();
CallForceEnrollmentNow(false /* expected_success */); CallForceEnrollmentNow(false /* expected_success */);
} }
TEST_F(DeviceSyncClientImplTest, TestSyncNow_ExpectSuccess) { TEST_F(DeviceSyncClientImplTest, TestSyncNow_ExpectSuccess) {
InitializeClient(); SetupClient();
CallSyncNow(true /* expected_success */); CallSyncNow(true /* expected_success */);
} }
TEST_F(DeviceSyncClientImplTest, TestSyncNow_ExpectFailure) { TEST_F(DeviceSyncClientImplTest, TestSyncNow_ExpectFailure) {
InitializeClient(); SetupClient();
CallSyncNow(false /* expected_success */); CallSyncNow(false /* expected_success */);
} }
TEST_F(DeviceSyncClientImplTest, TestGetSyncedDevices_DeviceRemovedFromCache) { TEST_F(DeviceSyncClientImplTest, TestGetSyncedDevices_DeviceRemovedFromCache) {
InitializeClient(); SetupClient();
VerifyRemoteDeviceRefListAndRemoteDeviceListAreEqual( VerifyRemoteDeviceRefListAndRemoteDeviceListAreEqual(
client_->GetSyncedDevices(), test_remote_device_list_); client_->GetSyncedDevices(), test_remote_device_list_);
...@@ -711,13 +704,13 @@ TEST_F(DeviceSyncClientImplTest, TestGetSyncedDevices_DeviceRemovedFromCache) { ...@@ -711,13 +704,13 @@ TEST_F(DeviceSyncClientImplTest, TestGetSyncedDevices_DeviceRemovedFromCache) {
} }
TEST_F(DeviceSyncClientImplTest, TestSetSoftwareFeatureState) { TEST_F(DeviceSyncClientImplTest, TestSetSoftwareFeatureState) {
InitializeClient(); SetupClient();
CallSetSoftwareFeatureState(mojom::NetworkRequestResult::kSuccess); CallSetSoftwareFeatureState(mojom::NetworkRequestResult::kSuccess);
} }
TEST_F(DeviceSyncClientImplTest, TestFindEligibleDevices_NoErrorCode) { TEST_F(DeviceSyncClientImplTest, TestFindEligibleDevices_NoErrorCode) {
InitializeClient(); SetupClient();
multidevice::RemoteDeviceList expected_eligible_devices( multidevice::RemoteDeviceList expected_eligible_devices(
{test_remote_device_list_[0], test_remote_device_list_[1]}); {test_remote_device_list_[0], test_remote_device_list_[1]});
...@@ -731,7 +724,7 @@ TEST_F(DeviceSyncClientImplTest, TestFindEligibleDevices_NoErrorCode) { ...@@ -731,7 +724,7 @@ TEST_F(DeviceSyncClientImplTest, TestFindEligibleDevices_NoErrorCode) {
} }
TEST_F(DeviceSyncClientImplTest, TestFindEligibleDevices_ErrorCode) { TEST_F(DeviceSyncClientImplTest, TestFindEligibleDevices_ErrorCode) {
InitializeClient(); SetupClient();
CallFindEligibleDevices(mojom::NetworkRequestResult::kEndpointNotFound, CallFindEligibleDevices(mojom::NetworkRequestResult::kEndpointNotFound,
multidevice::RemoteDeviceList(), multidevice::RemoteDeviceList(),
...@@ -739,7 +732,7 @@ TEST_F(DeviceSyncClientImplTest, TestFindEligibleDevices_ErrorCode) { ...@@ -739,7 +732,7 @@ TEST_F(DeviceSyncClientImplTest, TestFindEligibleDevices_ErrorCode) {
} }
TEST_F(DeviceSyncClientImplTest, TestGetDevicesActivityStatus_NoErrorCode) { TEST_F(DeviceSyncClientImplTest, TestGetDevicesActivityStatus_NoErrorCode) {
InitializeClient(); SetupClient();
std::vector<mojom::DeviceActivityStatusPtr> expected_activity_statuses; std::vector<mojom::DeviceActivityStatusPtr> expected_activity_statuses;
expected_activity_statuses.emplace_back(mojom::DeviceActivityStatus::New( expected_activity_statuses.emplace_back(mojom::DeviceActivityStatus::New(
"deviceid", base::Time(), cryptauthv2::ConnectivityStatus::ONLINE)); "deviceid", base::Time(), cryptauthv2::ConnectivityStatus::ONLINE));
...@@ -749,14 +742,14 @@ TEST_F(DeviceSyncClientImplTest, TestGetDevicesActivityStatus_NoErrorCode) { ...@@ -749,14 +742,14 @@ TEST_F(DeviceSyncClientImplTest, TestGetDevicesActivityStatus_NoErrorCode) {
} }
TEST_F(DeviceSyncClientImplTest, TestGetDevicesActivityStatus_ErrorCode) { TEST_F(DeviceSyncClientImplTest, TestGetDevicesActivityStatus_ErrorCode) {
InitializeClient(); SetupClient();
CallGetDevicesActivityStatus(mojom::NetworkRequestResult::kEndpointNotFound, CallGetDevicesActivityStatus(mojom::NetworkRequestResult::kEndpointNotFound,
base::nullopt); base::nullopt);
} }
TEST_F(DeviceSyncClientImplTest, TestGetDebugInfo) { TEST_F(DeviceSyncClientImplTest, TestGetDebugInfo) {
InitializeClient(); SetupClient();
CallGetDebugInfo(); CallGetDebugInfo();
} }
......
...@@ -12,7 +12,6 @@ mojom("mojom") { ...@@ -12,7 +12,6 @@ mojom("mojom") {
public_deps = [ public_deps = [
"//chromeos/components/multidevice/mojom", "//chromeos/components/multidevice/mojom",
"//mojo/public/mojom/base", "//mojo/public/mojom/base",
"//services/preferences/public/mojom",
] ]
} }
......
...@@ -6,7 +6,6 @@ module chromeos.device_sync.mojom; ...@@ -6,7 +6,6 @@ module chromeos.device_sync.mojom;
import "chromeos/components/multidevice/mojom/multidevice_types.mojom"; import "chromeos/components/multidevice/mojom/multidevice_types.mojom";
import "mojo/public/mojom/base/time.mojom"; import "mojo/public/mojom/base/time.mojom";
import "services/preferences/public/mojom/preferences.mojom";
enum NetworkRequestResult { enum NetworkRequestResult {
// Successful network request. // Successful network request.
...@@ -160,8 +159,8 @@ interface DeviceSync { ...@@ -160,8 +159,8 @@ interface DeviceSync {
// On success, this function returns a null error_code with the activity // On success, this function returns a null error_code with the activity
// statuses to the callback; on error, it returns a valid error_code string // statuses to the callback; on error, it returns a valid error_code string
// indicating the reason for failure along with a null activity statuses. // indicating the reason for failure along with a null activity statuses.
// //
// This method is expected to be used by multidevice_setup service running // This method is expected to be used by multidevice_setup service running
// in the browser process. // in the browser process.
GetDevicesActivityStatus() => GetDevicesActivityStatus() =>
(NetworkRequestResult result_code, (NetworkRequestResult result_code,
...@@ -174,19 +173,3 @@ interface DeviceSync { ...@@ -174,19 +173,3 @@ interface DeviceSync {
GetDebugInfo() => (DebugInfo? debug_info); GetDebugInfo() => (DebugInfo? debug_info);
}; };
// The main interface to the Device Sync service, used to initialized a new
// instance of the service.
interface DeviceSyncServiceInitializer {
// Initializes the service instance, binding a DeviceSyncService endpoint
// with access to a given PrefStoreConnector.
Initialize(
pending_receiver<DeviceSyncService> receiver,
pending_remote<prefs.mojom.PrefStoreConnector> pref_store_connector);
};
// The main interface to the Device Sync service.
interface DeviceSyncService {
// Binds a new DeviceSync endpoint.
BindDeviceSync(pending_receiver<DeviceSync> receiver);
};
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