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

Unified Diff: chrome/browser/sync/glue/session_change_processor.cc

Issue 3825005: Fix syncing of sessions. Numerous changes have been made. Currently, the mode... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Rebased again Created 10 years, 2 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/glue/session_change_processor.cc
===================================================================
--- chrome/browser/sync/glue/session_change_processor.cc (revision 63212)
+++ chrome/browser/sync/glue/session_change_processor.cc (working copy)
@@ -6,12 +6,15 @@
#include <sstream>
#include <string>
+#include <vector>
#include "base/logging.h"
+#include "base/scoped_vector.h"
#include "chrome/browser/browser_thread.h"
#include "chrome/browser/sync/engine/syncapi.h"
#include "chrome/browser/sync/glue/session_model_associator.h"
#include "chrome/common/notification_details.h"
+#include "chrome/common/notification_service.h"
#include "chrome/common/notification_source.h"
namespace browser_sync {
@@ -41,8 +44,6 @@
case NotificationType::SESSION_SERVICE_SAVED: {
std::string tag = session_model_associator_->GetCurrentMachineTag();
DCHECK_EQ(Source<Profile>(source).ptr(), profile_);
- LOG(INFO) << "Got change notification of type " << type.value
- << " for session " << tag;
session_model_associator_->UpdateSyncModelDataFromClient();
break;
}
@@ -61,40 +62,20 @@
if (!running()) {
return;
}
- for (int i = 0; i < change_count; ++i) {
- const sync_api::SyncManager::ChangeRecord& change = changes[i];
- switch (change.action) {
- case sync_api::SyncManager::ChangeRecord::ACTION_ADD:
- UpdateModel(trans, change, true);
- break;
- case sync_api::SyncManager::ChangeRecord::ACTION_UPDATE:
- UpdateModel(trans, change, true);
- break;
- case sync_api::SyncManager::ChangeRecord::ACTION_DELETE:
- UpdateModel(trans, change, false);
- break;
- }
- }
-}
-void SessionChangeProcessor::UpdateModel(const sync_api::BaseTransaction* trans,
- const sync_api::SyncManager::ChangeRecord& change, bool associate) {
- sync_api::ReadNode node(trans);
- if (!node.InitByIdLookup(change.id)) {
- std::stringstream error;
- error << "Session node lookup failed for change " << change.id
- << " of action type " << change.action;
- error_handler()->OnUnrecoverableError(FROM_HERE, error.str());
- return;
- }
- DCHECK_EQ(node.GetModelType(), syncable::SESSIONS);
StopObserving();
- if (associate) {
- session_model_associator_->Associate(
- (const sync_pb::SessionSpecifics *) NULL, node.GetId());
- } else {
- session_model_associator_->Disassociate(node.GetId());
- }
+
+ // This currently ignores the tracked changes and rebuilds the sessions from
+ // all the session sync nodes.
+ // TODO(zea): Make use of |changes| to adjust only modified sessions.
+ session_model_associator_->UpdateFromSyncModel(trans);
+
+ // Notify foreign session handlers that there are new sessions.
+ NotificationService::current()->Notify(
+ NotificationType::FOREIGN_SESSION_UPDATED,
+ NotificationService::AllSources(),
+ NotificationService::NoDetails());
+
StartObserving();
}
@@ -115,7 +96,6 @@
void SessionChangeProcessor::StartObserving() {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
DCHECK(profile_);
- LOG(INFO) << "Observing SESSION_SERVICE_SAVED";
notification_registrar_.Add(
this, NotificationType::SESSION_SERVICE_SAVED,
Source<Profile>(profile_));
@@ -124,9 +104,7 @@
void SessionChangeProcessor::StopObserving() {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
DCHECK(profile_);
- LOG(INFO) << "removing observation of all notifications";
notification_registrar_.RemoveAll();
}
} // namespace browser_sync
-
Property changes on: chrome/browser/sync/glue/session_change_processor.cc
___________________________________________________________________
Added: svn:eol-style
+ LF
« no previous file with comments | « chrome/browser/sync/glue/session_change_processor.h ('k') | chrome/browser/sync/glue/session_model_associator.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698