Index: chrome/browser/sync/glue/sync_backend_host_unittest.cc |
diff --git a/chrome/browser/sync/glue/sync_backend_host_unittest.cc b/chrome/browser/sync/glue/sync_backend_host_unittest.cc |
index dcaddef32c73255f1be80d5f3ade4849a8d325d8..8d98431fa8794be98f5c1b4bfb60c541cfb92a46 100644 |
--- a/chrome/browser/sync/glue/sync_backend_host_unittest.cc |
+++ b/chrome/browser/sync/glue/sync_backend_host_unittest.cc |
@@ -6,6 +6,7 @@ |
#include <cstddef> |
+#include "base/location.h" |
#include "base/memory/scoped_ptr.h" |
#include "base/message_loop.h" |
#include "base/synchronization/waitable_event.h" |
@@ -14,6 +15,7 @@ |
#include "chrome/browser/sync/sync_prefs.h" |
#include "chrome/test/base/testing_profile.h" |
#include "content/public/test/test_browser_thread.h" |
+#include "google/cacheinvalidation/include/types.h" |
#include "googleurl/src/gurl.h" |
#include "net/url_request/test_url_fetcher_factory.h" |
#include "sync/internal_api/public/base/model_type.h" |
@@ -21,6 +23,8 @@ |
#include "sync/internal_api/public/sync_manager_factory.h" |
#include "sync/internal_api/public/test/fake_sync_manager.h" |
#include "sync/internal_api/public/util/experiments.h" |
+#include "sync/notifier/mock_sync_notifier_observer.h" |
+#include "sync/notifier/notifications_disabled_reason.h" |
#include "sync/protocol/encryption.pb.h" |
#include "sync/protocol/sync_protocol_error.h" |
#include "sync/util/test_unrecoverable_error_handler.h" |
@@ -31,6 +35,7 @@ using content::BrowserThread; |
using syncer::FakeSyncManager; |
using syncer::SyncManager; |
using ::testing::InvokeWithoutArgs; |
+using ::testing::StrictMock; |
using ::testing::_; |
namespace browser_sync { |
@@ -53,6 +58,12 @@ class MockSyncFrontend : public SyncFrontend { |
public: |
virtual ~MockSyncFrontend() {} |
+ MOCK_METHOD0(OnNotificationsEnabled, void()); |
+ MOCK_METHOD1(OnNotificationsDisabled, |
+ void(syncer::NotificationsDisabledReason)); |
+ MOCK_METHOD2(OnIncomingNotification, |
+ void(const syncer::ObjectIdPayloadMap&, |
+ syncer::IncomingNotificationSource)); |
MOCK_METHOD2(OnBackendInitialized, |
void(const syncer::WeakHandle<syncer::JsBackend>&, bool)); |
MOCK_METHOD0(OnSyncCycleCompleted, void()); |
@@ -140,7 +151,7 @@ class SyncBackendHostTest : public testing::Test { |
sync_prefs_.reset(); |
invalidator_storage_.reset(); |
profile_.reset(); |
- // Pump messages posted by the sync core thread (which may end up |
+ // Pump messages posted by the sync thread (which may end up |
// posting on the IO thread). |
ui_loop_.RunAllPending(); |
io_thread_.Stop(); |
@@ -540,6 +551,64 @@ TEST_F(SyncBackendHostTest, NewlySupportedTypesWithPartialTypes) { |
enabled_types_).Empty()); |
} |
+// Register for some IDs and trigger an invalidation. This should |
+// propagate all the way to the frontend. |
+TEST_F(SyncBackendHostTest, Invalidate) { |
+ InitializeBackend(); |
+ |
+ syncer::ObjectIdSet ids; |
+ ids.insert(invalidation::ObjectId(1, "id1")); |
+ ids.insert(invalidation::ObjectId(2, "id2")); |
+ const syncer::ObjectIdPayloadMap& id_payloads = |
+ syncer::ObjectIdSetToPayloadMap(ids, "payload"); |
+ |
+ EXPECT_CALL( |
+ mock_frontend_, |
+ OnIncomingNotification(id_payloads, syncer::REMOTE_NOTIFICATION)) |
+ .WillOnce(InvokeWithoutArgs(QuitMessageLoop)); |
+ |
+ backend_->UpdateRegisteredIds(ids); |
+ fake_manager_->Invalidate(id_payloads, syncer::REMOTE_NOTIFICATION); |
+ ui_loop_.PostDelayedTask( |
+ FROM_HERE, ui_loop_.QuitClosure(), TestTimeouts::action_timeout()); |
+ ui_loop_.Run(); |
+} |
+ |
+// Register for some IDs and turn on notifications. This should |
+// propagate all the way to the frontend. |
+TEST_F(SyncBackendHostTest, EnableNotifications) { |
+ InitializeBackend(); |
+ |
+ EXPECT_CALL(mock_frontend_, OnNotificationsEnabled()) |
+ .WillOnce(InvokeWithoutArgs(QuitMessageLoop)); |
+ |
+ syncer::ObjectIdSet ids; |
+ ids.insert(invalidation::ObjectId(3, "id3")); |
+ backend_->UpdateRegisteredIds(ids); |
+ fake_manager_->EnableNotifications(); |
+ ui_loop_.PostDelayedTask( |
+ FROM_HERE, ui_loop_.QuitClosure(), TestTimeouts::action_timeout()); |
+ ui_loop_.Run(); |
+} |
+ |
+// Register for some IDs and turn off notifications. This should |
+// propagate all the way to the frontend. |
+TEST_F(SyncBackendHostTest, DisableNotifications) { |
+ InitializeBackend(); |
+ |
+ EXPECT_CALL(mock_frontend_, |
+ OnNotificationsDisabled(syncer::TRANSIENT_NOTIFICATION_ERROR)) |
+ .WillOnce(InvokeWithoutArgs(QuitMessageLoop)); |
+ |
+ syncer::ObjectIdSet ids; |
+ ids.insert(invalidation::ObjectId(4, "id4")); |
+ backend_->UpdateRegisteredIds(ids); |
+ fake_manager_->DisableNotifications(syncer::TRANSIENT_NOTIFICATION_ERROR); |
+ ui_loop_.PostDelayedTask( |
+ FROM_HERE, ui_loop_.QuitClosure(), TestTimeouts::action_timeout()); |
+ ui_loop_.Run(); |
+} |
+ |
} // namespace |
} // namespace browser_sync |