| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/sync/glue/session_change_processor.h" | 5 #include "chrome/browser/sync/glue/session_change_processor.h" |
| 6 | 6 |
| 7 #include <sstream> | 7 #include <sstream> |
| 8 #include <string> | 8 #include <string> |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| (...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 207 } | 207 } |
| 208 | 208 |
| 209 void SessionChangeProcessor::ApplyChangesFromSyncModel( | 209 void SessionChangeProcessor::ApplyChangesFromSyncModel( |
| 210 const sync_api::BaseTransaction* trans, | 210 const sync_api::BaseTransaction* trans, |
| 211 const sync_api::ImmutableChangeRecordList& changes) { | 211 const sync_api::ImmutableChangeRecordList& changes) { |
| 212 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 212 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 213 if (!running()) { | 213 if (!running()) { |
| 214 return; | 214 return; |
| 215 } | 215 } |
| 216 | 216 |
| 217 StopObserving(); | 217 ScopedStopObserving<SessionChangeProcessor> stop_observing(this); |
| 218 | 218 |
| 219 sync_api::ReadNode root(trans); | 219 sync_api::ReadNode root(trans); |
| 220 if (!root.InitByTagLookup(kSessionsTag)) { | 220 if (!root.InitByTagLookup(kSessionsTag)) { |
| 221 error_handler()->OnUnrecoverableError(FROM_HERE, | 221 error_handler()->OnUnrecoverableError(FROM_HERE, |
| 222 "Sessions root node lookup failed."); | 222 "Sessions root node lookup failed."); |
| 223 return; | 223 return; |
| 224 } | 224 } |
| 225 | 225 |
| 226 for (sync_api::ChangeRecordList::const_iterator it = | 226 for (sync_api::ChangeRecordList::const_iterator it = |
| 227 changes.Get().begin(); it != changes.Get().end(); ++it) { | 227 changes.Get().begin(); it != changes.Get().end(); ++it) { |
| (...skipping 26 matching lines...) Expand all Loading... |
| 254 | 254 |
| 255 const sync_pb::SessionSpecifics& specifics( | 255 const sync_pb::SessionSpecifics& specifics( |
| 256 sync_node.GetSessionSpecifics()); | 256 sync_node.GetSessionSpecifics()); |
| 257 if (specifics.session_tag() == | 257 if (specifics.session_tag() == |
| 258 session_model_associator_->GetCurrentMachineTag() && | 258 session_model_associator_->GetCurrentMachineTag() && |
| 259 !setup_for_test_) { | 259 !setup_for_test_) { |
| 260 // We should only ever receive a change to our own machine's session info | 260 // We should only ever receive a change to our own machine's session info |
| 261 // if encryption was turned on. In that case, the data is still the same, | 261 // if encryption was turned on. In that case, the data is still the same, |
| 262 // so we can ignore. | 262 // so we can ignore. |
| 263 LOG(WARNING) << "Dropping modification to local session."; | 263 LOG(WARNING) << "Dropping modification to local session."; |
| 264 StartObserving(); | |
| 265 return; | 264 return; |
| 266 } | 265 } |
| 267 const base::Time& mtime = sync_node.GetModificationTime(); | 266 const base::Time& mtime = sync_node.GetModificationTime(); |
| 268 // The model associator handles foreign session updates and adds the same. | 267 // The model associator handles foreign session updates and adds the same. |
| 269 session_model_associator_->AssociateForeignSpecifics(specifics, mtime); | 268 session_model_associator_->AssociateForeignSpecifics(specifics, mtime); |
| 270 } | 269 } |
| 271 | 270 |
| 272 // Notify foreign session handlers that there are new sessions. | 271 // Notify foreign session handlers that there are new sessions. |
| 273 content::NotificationService::current()->Notify( | 272 content::NotificationService::current()->Notify( |
| 274 chrome::NOTIFICATION_FOREIGN_SESSION_UPDATED, | 273 chrome::NOTIFICATION_FOREIGN_SESSION_UPDATED, |
| 275 content::Source<Profile>(profile_), | 274 content::Source<Profile>(profile_), |
| 276 content::NotificationService::NoDetails()); | 275 content::NotificationService::NoDetails()); |
| 277 | |
| 278 StartObserving(); | |
| 279 } | 276 } |
| 280 | 277 |
| 281 void SessionChangeProcessor::StartImpl(Profile* profile) { | 278 void SessionChangeProcessor::StartImpl(Profile* profile) { |
| 282 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 279 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 283 DCHECK(profile); | 280 DCHECK(profile); |
| 284 DCHECK(profile_ == NULL); | 281 DCHECK(profile_ == NULL); |
| 285 profile_ = profile; | 282 profile_ = profile; |
| 286 StartObserving(); | 283 StartObserving(); |
| 287 } | 284 } |
| 288 | 285 |
| (...skipping 26 matching lines...) Expand all Loading... |
| 315 content::NotificationService::AllBrowserContextsAndSources()); | 312 content::NotificationService::AllBrowserContextsAndSources()); |
| 316 } | 313 } |
| 317 | 314 |
| 318 void SessionChangeProcessor::StopObserving() { | 315 void SessionChangeProcessor::StopObserving() { |
| 319 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 316 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 320 DCHECK(profile_); | 317 DCHECK(profile_); |
| 321 notification_registrar_.RemoveAll(); | 318 notification_registrar_.RemoveAll(); |
| 322 } | 319 } |
| 323 | 320 |
| 324 } // namespace browser_sync | 321 } // namespace browser_sync |
| OLD | NEW |