Index: chrome/browser/sync_file_system/drive_file_sync_service.cc |
diff --git a/chrome/browser/sync_file_system/drive_file_sync_service.cc b/chrome/browser/sync_file_system/drive_file_sync_service.cc |
index 8b377cd3530cb14d81679a67e98e26ca31d1ceda..36047be66c46112ab0a4b43420e782f87ada8412 100644 |
--- a/chrome/browser/sync_file_system/drive_file_sync_service.cc |
+++ b/chrome/browser/sync_file_system/drive_file_sync_service.cc |
@@ -18,9 +18,9 @@ |
#include "base/values.h" |
#include "chrome/browser/extensions/extension_service.h" |
#include "chrome/browser/extensions/extension_system.h" |
+#include "chrome/browser/google_apis/drive_notification_manager.h" |
+#include "chrome/browser/google_apis/drive_notification_manager_factory.h" |
#include "chrome/browser/profiles/profile.h" |
-#include "chrome/browser/sync/profile_sync_service.h" |
-#include "chrome/browser/sync/profile_sync_service_factory.h" |
#include "chrome/browser/sync_file_system/conflict_resolution_policy.h" |
#include "chrome/browser/sync_file_system/drive_file_sync_client.h" |
#include "chrome/browser/sync_file_system/drive_file_sync_util.h" |
@@ -31,7 +31,6 @@ |
#include "chrome/common/extensions/extension.h" |
#include "content/public/browser/browser_thread.h" |
#include "extensions/common/constants.h" |
-#include "google/cacheinvalidation/types.pb.h" |
#include "webkit/fileapi/file_system_url.h" |
#include "webkit/fileapi/syncable/sync_file_metadata.h" |
#include "webkit/fileapi/syncable/sync_file_type.h" |
@@ -47,9 +46,6 @@ const base::FilePath::CharType kTempDirName[] = FILE_PATH_LITERAL("tmp"); |
const base::FilePath::CharType kSyncFileSystemDir[] = |
FILE_PATH_LITERAL("Sync FileSystem"); |
-// The sync invalidation object ID for Google Drive. |
-const char kDriveInvalidationObjectId[] = "CHANGELOG"; |
- |
// Incremental sync polling interval. |
// TODO(calvinlo): Improve polling algorithm dependent on whether push |
// notifications are on or off. |
@@ -155,31 +151,6 @@ class DriveFileSyncService::TaskToken { |
DISALLOW_COPY_AND_ASSIGN(TaskToken); |
}; |
-void DriveFileSyncService::OnInvalidatorStateChange( |
- syncer::InvalidatorState state) { |
- SetPushNotificationEnabled(state); |
-} |
- |
-void DriveFileSyncService::OnIncomingInvalidation( |
- const syncer::ObjectIdInvalidationMap& invalidation_map) { |
- DCHECK_EQ(1U, invalidation_map.size()); |
- const invalidation::ObjectId object_id( |
- ipc::invalidation::ObjectSource::COSMO_CHANGELOG, |
- kDriveInvalidationObjectId); |
- DCHECK_EQ(1U, invalidation_map.count(object_id)); |
- // TODO(dcheng): Only acknowledge the invalidation once the fetch has |
- // completed. http://crbug.com/156843 |
- 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); |
- |
- may_have_unfetched_changes_ = true; |
- MaybeStartFetchChanges(); |
-} |
- |
struct DriveFileSyncService::ProcessRemoteChangeParam { |
scoped_ptr<TaskToken> token; |
RemoteChange remote_change; |
@@ -304,8 +275,6 @@ DriveFileSyncService::DriveFileSyncService(Profile* profile) |
state_(REMOTE_SERVICE_OK), |
sync_enabled_(true), |
largest_fetched_changestamp_(0), |
- push_notification_registered_(false), |
- push_notification_enabled_(false), |
polling_delay_seconds_(kMinimumPollingDelaySeconds), |
may_have_unfetched_changes_(false), |
remote_change_processor_(NULL), |
@@ -338,22 +307,10 @@ DriveFileSyncService::~DriveFileSyncService() { |
sync_client_->RemoveObserver(this); |
token_.reset(); |
- // Unregister for Drive notifications. |
- ProfileSyncService* profile_sync_service = |
- ProfileSyncServiceFactory::GetForProfile(profile_); |
- if (!profile_sync_service || !push_notification_registered_) { |
- return; |
- } |
- |
- // TODO(calvinlo): Revisit this later in Consolidate Drive XMPP Notification |
- // and Polling Backup into one Class patch. http://crbug/173339. |
- // Original comment from Kochi about the order this is done in: |
- // Once DriveSystemService gets started / stopped at runtime, this ID needs to |
- // be unregistered *before* the handler is unregistered |
- // as ID persists across browser restarts. |
- profile_sync_service->UpdateRegisteredInvalidationIds( |
- this, syncer::ObjectIdSet()); |
- profile_sync_service->UnregisterInvalidationHandler(this); |
+ google_apis::DriveNotificationManager* drive_notification_manager = |
+ google_apis::DriveNotificationManagerFactory::GetForProfile(profile_); |
+ DCHECK(drive_notification_manager); |
+ drive_notification_manager->RemoveObserver(this); |
} |
// static |
@@ -741,8 +698,6 @@ DriveFileSyncService::DriveFileSyncService( |
state_(REMOTE_SERVICE_OK), |
sync_enabled_(true), |
largest_fetched_changestamp_(0), |
- push_notification_registered_(false), |
- push_notification_enabled_(false), |
polling_delay_seconds_(-1), |
may_have_unfetched_changes_(false), |
remote_change_processor_(NULL), |
@@ -923,8 +878,12 @@ void DriveFileSyncService::DidInitializeMetadataStore( |
sync_client_->EnsureSyncRootIsNotInMyDrive(sync_root_resource_id()); |
NotifyTaskDone(status, token.Pass()); |
- RegisterDriveNotifications(); |
may_have_unfetched_changes_ = true; |
+ |
+ google_apis::DriveNotificationManager* drive_notification_manager = |
+ google_apis::DriveNotificationManagerFactory::GetForProfile(profile_); |
+ DCHECK(drive_notification_manager); |
+ drive_notification_manager->AddObserver(this); |
} |
void DriveFileSyncService::UpdateRegisteredOrigins() { |
@@ -1113,14 +1072,7 @@ void DriveFileSyncService::DidGetDirectoryContentForBatchSync( |
metadata_store_->MoveBatchSyncOriginToIncremental(origin); |
} |
- // If this was the last batch sync origin and push_notification is enabled |
- // (indicates that we may have longer polling cycle), trigger the first |
- // incremental sync on next task cycle. |
- if (pending_batch_sync_origins_.empty() && |
- push_notification_enabled_) { |
- may_have_unfetched_changes_ = true; |
- } |
- |
+ CheckForUpdates(); |
NotifyTaskDone(SYNC_STATUS_OK, token.Pass()); |
} |
@@ -2191,6 +2143,8 @@ void DriveFileSyncService::MaybeStartFetchChanges() { |
} |
void DriveFileSyncService::CheckForUpdates() { |
+ // TODO(calvinlo): Try to eliminate may_have_unfetched_changes_ variable. |
+ may_have_unfetched_changes_ = true; |
MaybeStartFetchChanges(); |
} |
@@ -2352,11 +2306,6 @@ void DriveFileSyncService::UpdatePollingDelay(int64 new_delay_sec) { |
return; |
} |
- if (push_notification_enabled_) { |
- polling_delay_seconds_ = kPollingDelaySecondsWithNotification; |
- return; |
- } |
- |
int64 old_delay = polling_delay_seconds_; |
// Push notifications off. |
@@ -2366,52 +2315,6 @@ void DriveFileSyncService::UpdatePollingDelay(int64 new_delay_sec) { |
polling_timer_.Stop(); |
} |
-bool DriveFileSyncService::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 |
-} |
- |
-// Register for Google Drive invalidation notifications through XMPP. |
-void DriveFileSyncService::RegisterDriveNotifications() { |
- // Push notification registration might have already occurred if called from |
- // a different extension. |
- if (!IsDriveNotificationSupported() || push_notification_registered_) |
- return; |
- |
- ProfileSyncService* profile_sync_service = |
- ProfileSyncServiceFactory::GetForProfile(profile_); |
- if (!profile_sync_service) |
- return; |
- |
- profile_sync_service->RegisterInvalidationHandler(this); |
- syncer::ObjectIdSet ids; |
- ids.insert(invalidation::ObjectId( |
- ipc::invalidation::ObjectSource::COSMO_CHANGELOG, |
- kDriveInvalidationObjectId)); |
- profile_sync_service->UpdateRegisteredInvalidationIds(this, ids); |
- push_notification_registered_ = true; |
- SetPushNotificationEnabled(profile_sync_service->GetInvalidatorState()); |
-} |
- |
-void DriveFileSyncService::SetPushNotificationEnabled( |
- syncer::InvalidatorState state) { |
- push_notification_enabled_ = (state == syncer::INVALIDATIONS_ENABLED); |
- if (!push_notification_enabled_) |
- return; |
- |
- // Push notifications are enabled so reset polling timer. |
- UpdatePollingDelay(kPollingDelaySecondsWithNotification); |
-} |
- |
void DriveFileSyncService::NotifyObserversFileStatusChanged( |
const FileSystemURL& url, |
SyncFileStatus sync_status, |