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

Unified Diff: chrome/browser/sync_file_system/drive_file_sync_service.cc

Issue 13866037: Ports XMPP Invalidation code from drive_file_sync_service in /sync_file_system to /google_apis/driv… (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Updated tests Created 7 years, 8 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/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,

Powered by Google App Engine
This is Rietveld 408576698