Index: trunk/src/chrome/browser/google_apis/drive_notification_manager.cc |
=================================================================== |
--- trunk/src/chrome/browser/google_apis/drive_notification_manager.cc (revision 195487) |
+++ trunk/src/chrome/browser/google_apis/drive_notification_manager.cc (working copy) |
@@ -15,14 +15,13 @@ |
// The sync invalidation object ID for Google Drive. |
const char kDriveInvalidationObjectId[] = "CHANGELOG"; |
+// TODO(calvinlo): Constants for polling to go here. |
+ |
DriveNotificationManager::DriveNotificationManager(Profile* profile) |
: profile_(profile), |
push_notification_registered_(false), |
push_notification_enabled_(false) { |
- ProfileSyncService* profile_sync_service_ = |
- ProfileSyncServiceFactory::GetForProfile(profile_); |
- CHECK(profile_sync_service_); |
- |
+ // TODO(calvinlo): Initialize member variables for polling here. |
RegisterDriveNotifications(); |
} |
@@ -43,12 +42,7 @@ |
void DriveNotificationManager::OnInvalidatorStateChange( |
syncer::InvalidatorState state) { |
- push_notification_enabled_ = (state == syncer::INVALIDATIONS_ENABLED); |
- if (push_notification_enabled_) { |
- DVLOG(1) << "XMPP Notifications enabled"; |
- } else { |
- DVLOG(1) << "XMPP Notifications disabled (state=" << state << ")"; |
- } |
+ SetPushNotificationEnabled(state); |
} |
void DriveNotificationManager::OnIncomingInvalidation( |
@@ -62,7 +56,10 @@ |
// TODO(dcheng): Only acknowledge the invalidation once the fetch has |
// completed. http://crbug.com/156843 |
- profile_sync_service_->AcknowledgeInvalidation( |
+ ProfileSyncService* profile_sync_service = |
+ ProfileSyncServiceFactory::GetForProfile(profile_); |
+ CHECK(profile_sync_service); |
+ profile_sync_service->AcknowledgeInvalidation( |
invalidation_map.begin()->first, |
invalidation_map.begin()->second.ack_handle); |
@@ -79,20 +76,15 @@ |
observers_.RemoveObserver(observer); |
} |
-bool DriveNotificationManager::IsPushNotificationEnabled() { |
- return push_notification_enabled_; |
-} |
- |
void DriveNotificationManager::NotifyObserversToUpdate() { |
- FOR_EACH_OBSERVER(DriveNotificationObserver, observers_, |
- OnNotificationReceived()); |
+ FOR_EACH_OBSERVER(DriveNotificationObserver, observers_, CheckForUpdates()); |
} |
// Register for Google Drive invalidation notifications through XMPP. |
void DriveNotificationManager::RegisterDriveNotifications() { |
// Push notification registration might have already occurred if called from |
// a different extension. |
- if (push_notification_registered_) |
+ if (!IsDriveNotificationSupported() || push_notification_registered_) |
return; |
ProfileSyncService* profile_sync_service = |
@@ -107,7 +99,33 @@ |
kDriveInvalidationObjectId)); |
profile_sync_service->UpdateRegisteredInvalidationIds(this, ids); |
push_notification_registered_ = true; |
- OnInvalidatorStateChange(profile_sync_service->GetInvalidatorState()); |
+ SetPushNotificationEnabled(profile_sync_service->GetInvalidatorState()); |
} |
+// TODO(calvinlo): Remove when all patches for http://crbug.com/173339 done. |
+bool DriveNotificationManager::IsDriveNotificationSupported() { |
+ // TODO(calvinlo): A invalidation ID can only be registered to one handler. |
+ // Therefore ChromeOS and SyncFS cannot both use XMPP notifications until |
+ // (http://crbug.com/173339) is completed. |
+ // For now, disable XMPP notifications for SyncFC on ChromeOS to guarantee |
+ // that ChromeOS's file manager can register itself to the invalidationID. |
+ |
+#if defined(OS_CHROMEOS) |
+ return false; |
+#else |
+ return true; |
+#endif |
+} |
+ |
+void DriveNotificationManager::SetPushNotificationEnabled( |
+ syncer::InvalidatorState state) { |
+ DVLOG(1) << "SetPushNotificationEnabled() with state=" << state; |
+ push_notification_enabled_ = (state == syncer::INVALIDATIONS_ENABLED); |
+ if (!push_notification_enabled_) |
+ return; |
+ |
+ // Push notifications are enabled so reset polling timer. |
+ //UpdatePollingDelay(kPollingDelaySecondsWithNotification); |
+} |
+ |
} // namespace google_apis |