Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2206)

Unified Diff: chrome/browser/invalidation/invalidation_service_android_unittest.cc

Issue 23643002: Enable invalidations for arbitrary objects on Android. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/invalidation/invalidation_service_android_unittest.cc
diff --git a/chrome/browser/invalidation/invalidation_service_android_unittest.cc b/chrome/browser/invalidation/invalidation_service_android_unittest.cc
index af9de1de1fc10df259056b2058d14d6d90ac1d60..8d4c1eeead5c9fb745ec1488878877abab7bc417 100644
--- a/chrome/browser/invalidation/invalidation_service_android_unittest.cc
+++ b/chrome/browser/invalidation/invalidation_service_android_unittest.cc
@@ -4,11 +4,16 @@
#include "chrome/browser/invalidation/invalidation_service_android.h"
+#include <string>
+#include <vector>
+
+#include "base/bind.h"
#include "chrome/browser/chrome_notification_types.h"
#include "chrome/browser/invalidation/invalidation_service_factory.h"
#include "chrome/browser/invalidation/invalidation_service_test_template.h"
#include "chrome/test/base/testing_profile.h"
#include "content/public/browser/notification_service.h"
+#include "sync/notifier/fake_invalidation_handler.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace invalidation {
@@ -56,4 +61,192 @@ INSTANTIATE_TYPED_TEST_CASE_P(
AndroidInvalidationServiceTest, InvalidationServiceTest,
InvalidationServiceAndroidTestDelegate);
+class InvalidationServiceAndroidRegistrationTest : public testing::Test {
+ protected:
+ InvalidationServiceAndroidRegistrationTest()
+ : invalidation_service_(&profile_),
+ object_registration_updated_(false) {
+ invalidation_service_.SetUpdateRegistrationCallbackForTest(base::Bind(
+ &InvalidationServiceAndroidRegistrationTest::UpdateRegistration,
+ base::Unretained(this)));
+ OBJECT_SET_A.insert(invalidation::ObjectId(1, "A"));
+ OBJECT_SET_A.insert(invalidation::ObjectId(2, "B"));
+ OBJECT_SET_A.insert(invalidation::ObjectId(3, "C"));
+ OBJECT_SET_B.insert(invalidation::ObjectId(1, "D"));
+ OBJECT_SET_B.insert(invalidation::ObjectId(2, "E"));
+ OBJECT_SET_C.insert(invalidation::ObjectId(3, "F"));
+ OBJECT_SET_SYNC.insert(
+ invalidation::ObjectId(ipc::invalidation::ObjectSource::CHROME_SYNC,
+ "A"));
+ OBJECT_SET_SYNC.insert(
+ invalidation::ObjectId(ipc::invalidation::ObjectSource::CHROME_SYNC,
+ "B"));
+ OBJECT_SET_MIXED.insert(OBJECT_SET_A.begin(), OBJECT_SET_A.end());
+ OBJECT_SET_MIXED.insert(OBJECT_SET_SYNC.begin(), OBJECT_SET_SYNC.end());
+ }
+
+ virtual ~InvalidationServiceAndroidRegistrationTest() {
+ invalidation_service_.Shutdown();
+ }
+
+ // Determines if the object registration was updated since the last time this
+ // method was called.
+ bool ObjectRegistrationUpdated() {
+ bool updated = object_registration_updated_;
+ object_registration_updated_ = false;
+ return updated;
+ }
+
+ // Determines if all of the object ids in the given set were registered in
+ // the last registration update.
+ bool ObjectsRegistered(const syncer::ObjectIdSet& ids) {
+ return CheckObjectRegistration(ids, true /* expect_registered */);
+ }
+
+ // Determines if none of the object ids in the given set were registered in
+ // the last registration update.
+ bool ObjectsNotRegistered(const syncer::ObjectIdSet& ids) {
+ return CheckObjectRegistration(ids, false /* expect_registered */);
+ }
+
+ // Get the number of objects which are registered.
+ size_t RegisteredObjectCount() {
+ return registered_object_ids_.size();
+ }
+
+ // Determines if the given object id was registered in the last registration
+ // update.
+ bool IsRegistered(const invalidation::ObjectId& id) {
+ return registered_object_ids_.find(id) != registered_object_ids_.end();
+ }
+
+ // Disjoint object id sets containing non-Sync object ids.
+ syncer::ObjectIdSet OBJECT_SET_A;
+ syncer::ObjectIdSet OBJECT_SET_B;
+ syncer::ObjectIdSet OBJECT_SET_C;
+
+ // An object id set containing Sync object ids.
+ syncer::ObjectIdSet OBJECT_SET_SYNC;
+
+ // An object id set comprised of the union of OBJECT_SET_A and
+ // OBJECT_SET_SYNC.
+ syncer::ObjectIdSet OBJECT_SET_MIXED;
+
+ TestingProfile profile_;
+
+ // The invalidation service used for testing.
+ InvalidationServiceAndroid invalidation_service_;
+
+ private:
+ // Determines if all of the object ids in the given set have the same
+ // registration status.
+ bool CheckObjectRegistration(const syncer::ObjectIdSet& ids,
+ bool expect_registered) {
+ syncer::ObjectIdSet::const_iterator id;
+ for (id = ids.begin(); id != ids.end(); ++id)
+ if (IsRegistered(*id) != expect_registered)
+ return false;
+ return true;
+ }
+
+ // Callback invoked when the invalidation service updates the registration.
+ void UpdateRegistration(const std::vector<int>& object_sources,
+ const std::vector<std::string>& object_names) {
+ object_registration_updated_ = true;
+ registered_object_ids_.clear();
+ for (size_t i = 0; i < object_sources.size(); ++i) {
+ registered_object_ids_.insert(invalidation::ObjectId(
+ object_sources[i], object_names[i]));
+ }
+ }
+
+ bool object_registration_updated_;
+ syncer::ObjectIdSet registered_object_ids_;
+};
+
+TEST_F(InvalidationServiceAndroidRegistrationTest, NoObjectRegistration) {
+ syncer::FakeInvalidationHandler handler;
+ invalidation_service_.RegisterInvalidationHandler(&handler);
+ EXPECT_EQ(0U, RegisteredObjectCount());
+ invalidation_service_.UnregisterInvalidationHandler(&handler);
+}
+
+TEST_F(InvalidationServiceAndroidRegistrationTest, UpdateObjectRegistration) {
+ syncer::FakeInvalidationHandler handler1;
+ syncer::FakeInvalidationHandler handler2;
+ syncer::FakeInvalidationHandler handler3;
+ syncer::FakeInvalidationHandler handler4;
+ invalidation_service_.RegisterInvalidationHandler(&handler1);
+ invalidation_service_.RegisterInvalidationHandler(&handler2);
+ invalidation_service_.RegisterInvalidationHandler(&handler3);
+ invalidation_service_.RegisterInvalidationHandler(&handler4);
+
+ // Register for object set A.
+ invalidation_service_.UpdateRegisteredInvalidationIds(&handler1,
+ OBJECT_SET_A);
+ EXPECT_TRUE(ObjectRegistrationUpdated());
+ EXPECT_EQ(OBJECT_SET_A.size(), RegisteredObjectCount());
+ EXPECT_TRUE(ObjectsRegistered(OBJECT_SET_A));
+
+ // Register for object sets B and C.
+ invalidation_service_.UpdateRegisteredInvalidationIds(&handler2,
+ OBJECT_SET_B);
+ EXPECT_TRUE(ObjectRegistrationUpdated());
+ invalidation_service_.UpdateRegisteredInvalidationIds(&handler3,
+ OBJECT_SET_C);
+ EXPECT_TRUE(ObjectRegistrationUpdated());
+ EXPECT_EQ(OBJECT_SET_A.size() + OBJECT_SET_B.size() + OBJECT_SET_C.size(),
+ RegisteredObjectCount());
+ EXPECT_TRUE(ObjectsRegistered(OBJECT_SET_A));
+ EXPECT_TRUE(ObjectsRegistered(OBJECT_SET_B));
+ EXPECT_TRUE(ObjectsRegistered(OBJECT_SET_C));
+
+ // Register for sync object set. Expect no registration update.
+ invalidation_service_.UpdateRegisteredInvalidationIds(&handler4,
+ OBJECT_SET_SYNC);
+ EXPECT_FALSE(ObjectRegistrationUpdated());
+ EXPECT_TRUE(ObjectsNotRegistered(OBJECT_SET_SYNC));
+
+ // Unregister for object set C.
+ invalidation_service_.UpdateRegisteredInvalidationIds(&handler3,
+ syncer::ObjectIdSet());
+ EXPECT_TRUE(ObjectRegistrationUpdated());
+ EXPECT_TRUE(ObjectsNotRegistered(OBJECT_SET_C));
+
+ // Unregister for object set A.
+ invalidation_service_.UpdateRegisteredInvalidationIds(&handler1,
+ syncer::ObjectIdSet());
+ EXPECT_TRUE(ObjectRegistrationUpdated());
+ EXPECT_TRUE(ObjectsNotRegistered(OBJECT_SET_A));
+
+ // Unregister for sync object set. Expect no registration update.
+ invalidation_service_.UpdateRegisteredInvalidationIds(&handler4,
+ syncer::ObjectIdSet());
+ EXPECT_FALSE(ObjectRegistrationUpdated());
+
+ // Register for mixed object set. Expect only the objects in set A to be
+ // registered.
+ invalidation_service_.UpdateRegisteredInvalidationIds(&handler3,
+ OBJECT_SET_MIXED);
+ EXPECT_TRUE(ObjectRegistrationUpdated());
+ EXPECT_TRUE(ObjectsRegistered(OBJECT_SET_A));
+ EXPECT_TRUE(ObjectsNotRegistered(OBJECT_SET_SYNC));
+
+ // Unregister the handler mapped to set B. Expect no registration update.
+ invalidation_service_.UnregisterInvalidationHandler(&handler2);
+ EXPECT_FALSE(ObjectRegistrationUpdated());
+ EXPECT_TRUE(ObjectsRegistered(OBJECT_SET_B));
+
+ // Replace object set A with object set C.
+ invalidation_service_.UpdateRegisteredInvalidationIds(&handler3,
+ OBJECT_SET_C);
+ EXPECT_TRUE(ObjectRegistrationUpdated());
+ EXPECT_TRUE(ObjectsNotRegistered(OBJECT_SET_A));
+ EXPECT_TRUE(ObjectsRegistered(OBJECT_SET_C));
+
+ invalidation_service_.UnregisterInvalidationHandler(&handler1);
+ invalidation_service_.UnregisterInvalidationHandler(&handler3);
+ invalidation_service_.UnregisterInvalidationHandler(&handler4);
+}
+
} // namespace invalidation

Powered by Google App Engine
This is Rietveld 408576698