Commit de63615f authored by Paula Vidas's avatar Paula Vidas Committed by Commit Bot

[SyncInvalidations] Add subscribed data types manager.

This class is used to set data types for which the device should receive invalidations.
It will provide those data types to device info (this will be implemented in the next CL).

Bug: 1102312
Change-Id: I0b3850f5d816ae036084a46817cbb99c20fe12cf
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2377497
Commit-Queue: Paula Vidas <paulavidas@google.com>
Reviewed-by: default avatarMarc Treib <treib@chromium.org>
Reviewed-by: default avatarRushan Suleymanov <rushans@google.com>
Cr-Commit-Position: refs/heads/master@{#802191}
parent c563ba8c
...@@ -494,6 +494,7 @@ source_set("unit_tests") { ...@@ -494,6 +494,7 @@ source_set("unit_tests") {
"engine_impl/syncer_proto_util_unittest.cc", "engine_impl/syncer_proto_util_unittest.cc",
"engine_impl/syncer_unittest.cc", "engine_impl/syncer_unittest.cc",
"invalidations/fcm_handler_unittest.cc", "invalidations/fcm_handler_unittest.cc",
"invalidations/subscribed_data_types_manager_unittest.cc",
"js/js_event_details_unittest.cc", "js/js_event_details_unittest.cc",
"js/sync_js_controller_unittest.cc", "js/sync_js_controller_unittest.cc",
"model/entity_data_unittest.cc", "model/entity_data_unittest.cc",
......
...@@ -10,6 +10,9 @@ static_library("invalidations") { ...@@ -10,6 +10,9 @@ static_library("invalidations") {
"fcm_handler.h", "fcm_handler.h",
"fcm_registration_token_observer.h", "fcm_registration_token_observer.h",
"invalidations_listener.h", "invalidations_listener.h",
"subscribed_data_types_manager.cc",
"subscribed_data_types_manager.h",
"subscribed_data_types_observer.h",
"switches.cc", "switches.cc",
"switches.h", "switches.h",
"sync_invalidations_service.h", "sync_invalidations_service.h",
...@@ -21,6 +24,7 @@ static_library("invalidations") { ...@@ -21,6 +24,7 @@ static_library("invalidations") {
"//base", "//base",
"//components/gcm_driver", "//components/gcm_driver",
"//components/keyed_service/core", "//components/keyed_service/core",
"//components/sync/base",
] ]
} }
......
include_rules = [ include_rules = [
"+components/gcm_driver", "+components/gcm_driver",
"+components/keyed_service", "+components/keyed_service",
"+components/sync/base",
] ]
...@@ -26,6 +26,14 @@ class MockSyncInvalidationsService : public SyncInvalidationsService { ...@@ -26,6 +26,14 @@ class MockSyncInvalidationsService : public SyncInvalidationsService {
RemoveTokenObserver, RemoveTokenObserver,
(FCMRegistrationTokenObserver * observer)); (FCMRegistrationTokenObserver * observer));
MOCK_METHOD(const std::string&, GetFCMRegistrationToken, (), (const)); MOCK_METHOD(const std::string&, GetFCMRegistrationToken, (), (const));
MOCK_METHOD(void,
AddSubscribedDataTypesObserver,
(SubscribedDataTypesObserver * observer));
MOCK_METHOD(void,
RemoveSubscribedDataTypesObserver,
(SubscribedDataTypesObserver * observer));
MOCK_METHOD(const ModelTypeSet&, GetSubscribedDataTypes, (), (const));
MOCK_METHOD(void, SetSubscribedDataTypes, (const ModelTypeSet& data_types));
}; };
} // namespace syncer } // namespace syncer
......
// Copyright 2020 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 "components/sync/invalidations/subscribed_data_types_manager.h"
#include "components/sync/invalidations/subscribed_data_types_observer.h"
namespace syncer {
SubscribedDataTypesManager::SubscribedDataTypesManager() = default;
SubscribedDataTypesManager::~SubscribedDataTypesManager() = default;
void SubscribedDataTypesManager::AddSubscribedDataTypesObserver(
SubscribedDataTypesObserver* observer) {
observers_.AddObserver(observer);
}
void SubscribedDataTypesManager::RemoveSubscribedDataTypesObserver(
SubscribedDataTypesObserver* observer) {
observers_.RemoveObserver(observer);
}
const ModelTypeSet& SubscribedDataTypesManager::GetSubscribedDataTypes() const {
return data_types_;
}
void SubscribedDataTypesManager::SetSubscribedDataTypes(
const ModelTypeSet& data_types) {
data_types_ = data_types;
for (SubscribedDataTypesObserver& observer : observers_) {
observer.OnSubscribedDataTypesChanged();
}
}
} // namespace syncer
// Copyright 2020 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 COMPONENTS_SYNC_INVALIDATIONS_SUBSCRIBED_DATA_TYPES_MANAGER_H_
#define COMPONENTS_SYNC_INVALIDATIONS_SUBSCRIBED_DATA_TYPES_MANAGER_H_
#include "base/observer_list.h"
#include "components/sync/base/model_type.h"
namespace syncer {
class SubscribedDataTypesObserver;
// Manages for which data types are invalidations sent to this device.
class SubscribedDataTypesManager {
public:
SubscribedDataTypesManager();
~SubscribedDataTypesManager();
SubscribedDataTypesManager(const SubscribedDataTypesManager&) = delete;
SubscribedDataTypesManager& operator=(const SubscribedDataTypesManager&) =
delete;
// Add or remove a subscribed data types change observer. |observer| must not
// be nullptr.
void AddSubscribedDataTypesObserver(SubscribedDataTypesObserver* observer);
void RemoveSubscribedDataTypesObserver(SubscribedDataTypesObserver* observer);
// Get or set the subscribed data types.
const ModelTypeSet& GetSubscribedDataTypes() const;
void SetSubscribedDataTypes(const ModelTypeSet& data_types);
private:
base::ObserverList<SubscribedDataTypesObserver,
/*check_empty=*/true,
/*allow_reentrancy=*/false>
observers_;
ModelTypeSet data_types_;
};
} // namespace syncer
#endif // COMPONENTS_SYNC_INVALIDATIONS_SUBSCRIBED_DATA_TYPES_MANAGER_H_
// Copyright 2020 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 "components/sync/invalidations/subscribed_data_types_manager.h"
#include "components/sync/invalidations/subscribed_data_types_observer.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace syncer {
namespace {
class MockDataTypesObserver : public SubscribedDataTypesObserver {
public:
MOCK_METHOD0(OnSubscribedDataTypesChanged, void());
};
class SubscribedDataTypesManagerTest : public testing::Test {
protected:
SubscribedDataTypesManager manager_;
};
TEST_F(SubscribedDataTypesManagerTest, ShouldReturnGivenDataTypes) {
manager_.SetSubscribedDataTypes(ModelTypeSet(BOOKMARKS, PREFERENCES));
EXPECT_EQ(ModelTypeSet(BOOKMARKS, PREFERENCES),
manager_.GetSubscribedDataTypes());
manager_.SetSubscribedDataTypes(ModelTypeSet(PREFERENCES, PASSWORDS));
EXPECT_EQ(ModelTypeSet(PREFERENCES, PASSWORDS),
manager_.GetSubscribedDataTypes());
}
TEST_F(SubscribedDataTypesManagerTest, ShouldNotifyOnChange) {
testing::NiceMock<MockDataTypesObserver> observer;
manager_.AddSubscribedDataTypesObserver(&observer);
EXPECT_CALL(observer, OnSubscribedDataTypesChanged());
manager_.SetSubscribedDataTypes(ModelTypeSet(PASSWORDS, AUTOFILL));
manager_.RemoveSubscribedDataTypesObserver(&observer);
}
} // namespace
} // namespace syncer
// Copyright 2020 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 COMPONENTS_SYNC_INVALIDATIONS_SUBSCRIBED_DATA_TYPES_OBSERVER_H_
#define COMPONENTS_SYNC_INVALIDATIONS_SUBSCRIBED_DATA_TYPES_OBSERVER_H_
#include "base/observer_list.h"
namespace syncer {
// An interface to observe changes on data types for which the device wants to
// receive invalidations.
class SubscribedDataTypesObserver : public base::CheckedObserver {
public:
// Called on each change of subscribed data types.
virtual void OnSubscribedDataTypesChanged() = 0;
};
} // namespace syncer
#endif // COMPONENTS_SYNC_INVALIDATIONS_SUBSCRIBED_DATA_TYPES_OBSERVER_H_
...@@ -8,10 +8,12 @@ ...@@ -8,10 +8,12 @@
#include <string> #include <string>
#include "components/keyed_service/core/keyed_service.h" #include "components/keyed_service/core/keyed_service.h"
#include "components/sync/base/model_type.h"
namespace syncer { namespace syncer {
class FCMRegistrationTokenObserver; class FCMRegistrationTokenObserver;
class InvalidationsListener; class InvalidationsListener;
class SubscribedDataTypesObserver;
// Service which is used to register with FCM. It is used to obtain an FCM token // Service which is used to register with FCM. It is used to obtain an FCM token
// which is used to send invalidations from the server. The service also // which is used to send invalidations from the server. The service also
...@@ -33,6 +35,17 @@ class SyncInvalidationsService : public KeyedService { ...@@ -33,6 +35,17 @@ class SyncInvalidationsService : public KeyedService {
// Used to get an obtained FCM token. Returns empty string if it hasn't been // Used to get an obtained FCM token. Returns empty string if it hasn't been
// received yet. // received yet.
virtual const std::string& GetFCMRegistrationToken() const = 0; virtual const std::string& GetFCMRegistrationToken() const = 0;
// Add or remove a subscribed data types change observer. |observer| must not
// be nullptr.
virtual void AddSubscribedDataTypesObserver(
SubscribedDataTypesObserver* observer) = 0;
virtual void RemoveSubscribedDataTypesObserver(
SubscribedDataTypesObserver* observer) = 0;
// Get or set for which data types should the device receive invalidations.
virtual const ModelTypeSet& GetSubscribedDataTypes() const = 0;
virtual void SetSubscribedDataTypes(const ModelTypeSet& data_types) = 0;
}; };
} // namespace syncer } // namespace syncer
......
...@@ -45,6 +45,26 @@ const std::string& SyncInvalidationsServiceImpl::GetFCMRegistrationToken() ...@@ -45,6 +45,26 @@ const std::string& SyncInvalidationsServiceImpl::GetFCMRegistrationToken()
return fcm_handler_->GetFCMRegistrationToken(); return fcm_handler_->GetFCMRegistrationToken();
} }
void SyncInvalidationsServiceImpl::AddSubscribedDataTypesObserver(
SubscribedDataTypesObserver* observer) {
data_types_manager_.AddSubscribedDataTypesObserver(observer);
}
void SyncInvalidationsServiceImpl::RemoveSubscribedDataTypesObserver(
SubscribedDataTypesObserver* observer) {
data_types_manager_.RemoveSubscribedDataTypesObserver(observer);
}
const ModelTypeSet& SyncInvalidationsServiceImpl::GetSubscribedDataTypes()
const {
return data_types_manager_.GetSubscribedDataTypes();
}
void SyncInvalidationsServiceImpl::SetSubscribedDataTypes(
const ModelTypeSet& data_types) {
data_types_manager_.SetSubscribedDataTypes(data_types);
}
void SyncInvalidationsServiceImpl::Shutdown() { void SyncInvalidationsServiceImpl::Shutdown() {
fcm_handler_.reset(); fcm_handler_.reset();
} }
......
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
#include <memory> #include <memory>
#include <string> #include <string>
#include "components/sync/invalidations/subscribed_data_types_manager.h"
#include "components/sync/invalidations/sync_invalidations_service.h" #include "components/sync/invalidations/sync_invalidations_service.h"
namespace gcm { namespace gcm {
...@@ -38,12 +39,19 @@ class SyncInvalidationsServiceImpl : public SyncInvalidationsService { ...@@ -38,12 +39,19 @@ class SyncInvalidationsServiceImpl : public SyncInvalidationsService {
void AddTokenObserver(FCMRegistrationTokenObserver* observer) override; void AddTokenObserver(FCMRegistrationTokenObserver* observer) override;
void RemoveTokenObserver(FCMRegistrationTokenObserver* observer) override; void RemoveTokenObserver(FCMRegistrationTokenObserver* observer) override;
const std::string& GetFCMRegistrationToken() const override; const std::string& GetFCMRegistrationToken() const override;
void AddSubscribedDataTypesObserver(
SubscribedDataTypesObserver* observer) override;
void RemoveSubscribedDataTypesObserver(
SubscribedDataTypesObserver* observer) override;
const ModelTypeSet& GetSubscribedDataTypes() const override;
void SetSubscribedDataTypes(const ModelTypeSet& data_types) override;
// KeyedService overrides. // KeyedService overrides.
void Shutdown() override; void Shutdown() override;
private: private:
std::unique_ptr<FCMHandler> fcm_handler_; std::unique_ptr<FCMHandler> fcm_handler_;
SubscribedDataTypesManager data_types_manager_;
}; };
} // namespace syncer } // namespace syncer
......
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