Chromium Code Reviews| 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/internal_api/sync_manager.h" | 5 #include "chrome/browser/sync/internal_api/sync_manager.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 | 8 |
| 9 #include "base/base64.h" | 9 #include "base/base64.h" |
| 10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
| (...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 107 NOTREACHED(); | 107 NOTREACHED(); |
| 108 } | 108 } |
| 109 | 109 |
| 110 return GetUpdatesCallerInfo::UNKNOWN; | 110 return GetUpdatesCallerInfo::UNKNOWN; |
| 111 } | 111 } |
| 112 | 112 |
| 113 } // namespace | 113 } // namespace |
| 114 | 114 |
| 115 namespace sync_api { | 115 namespace sync_api { |
| 116 | 116 |
| 117 const int SyncManager::kDefaultNudgeDelayMilliseconds = 200; | |
| 118 const int SyncManager::kPreferencesNudgeDelayMilliseconds = 2000; | |
| 119 | |
| 120 // Nudge delay for datatypes that piggy back their change with other changes. | |
| 121 const int SyncManager::kPiggybackNudgeDelay = 2 * 60 * 60 * 1000; | |
|
tim (not reviewing)
2011/12/09 23:07:21
Perhaps this could be controlled via ClientCommand
| |
| 122 | |
| 117 ////////////////////////////////////////////////////////////////////////// | 123 ////////////////////////////////////////////////////////////////////////// |
| 118 // SyncManager's implementation: SyncManager::SyncInternal | 124 // SyncManager's implementation: SyncManager::SyncInternal |
| 119 class SyncManager::SyncInternal | 125 class SyncManager::SyncInternal |
| 120 : public net::NetworkChangeNotifier::IPAddressObserver, | 126 : public net::NetworkChangeNotifier::IPAddressObserver, |
| 121 public browser_sync::Cryptographer::Observer, | 127 public browser_sync::Cryptographer::Observer, |
| 122 public sync_notifier::SyncNotifierObserver, | 128 public sync_notifier::SyncNotifierObserver, |
| 123 public JsBackend, | 129 public JsBackend, |
| 124 public SyncEngineEventListener, | 130 public SyncEngineEventListener, |
| 125 public ServerConnectionEventListener, | 131 public ServerConnectionEventListener, |
| 126 public syncable::DirectoryChangeDelegate { | 132 public syncable::DirectoryChangeDelegate { |
| 127 static const int kDefaultNudgeDelayMilliseconds; | |
| 128 static const int kPreferencesNudgeDelayMilliseconds; | |
| 129 public: | 133 public: |
| 130 explicit SyncInternal(const std::string& name) | 134 explicit SyncInternal(const std::string& name) |
| 131 : name_(name), | 135 : name_(name), |
| 132 weak_ptr_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)), | 136 weak_ptr_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)), |
| 133 registrar_(NULL), | 137 registrar_(NULL), |
| 134 change_delegate_(NULL), | 138 change_delegate_(NULL), |
| 135 initialized_(false), | 139 initialized_(false), |
| 136 setup_for_test_mode_(false), | 140 setup_for_test_mode_(false), |
| 137 observing_ip_address_changes_(false), | 141 observing_ip_address_changes_(false), |
| 138 created_on_loop_(MessageLoop::current()) { | 142 created_on_loop_(MessageLoop::current()) { |
| (...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 295 } | 299 } |
| 296 | 300 |
| 297 Status GetStatus(); | 301 Status GetStatus(); |
| 298 | 302 |
| 299 void RequestNudge(const tracked_objects::Location& nudge_location); | 303 void RequestNudge(const tracked_objects::Location& nudge_location); |
| 300 | 304 |
| 301 void RequestNudgeForDataType( | 305 void RequestNudgeForDataType( |
| 302 const tracked_objects::Location& nudge_location, | 306 const tracked_objects::Location& nudge_location, |
| 303 const ModelType& type); | 307 const ModelType& type); |
| 304 | 308 |
| 309 TimeDelta GetNudgeDelayTimeDelta(const ModelType& model_type); | |
| 310 | |
| 305 // See SyncManager::Shutdown* for information. | 311 // See SyncManager::Shutdown* for information. |
| 306 void StopSyncingForShutdown(const base::Closure& callback); | 312 void StopSyncingForShutdown(const base::Closure& callback); |
| 307 void ShutdownOnSyncThread(); | 313 void ShutdownOnSyncThread(); |
| 308 | 314 |
| 309 // If this is a deletion for a password, sets the legacy | 315 // If this is a deletion for a password, sets the legacy |
| 310 // ExtraPasswordChangeRecordData field of |buffer|. Otherwise sets | 316 // ExtraPasswordChangeRecordData field of |buffer|. Otherwise sets |
| 311 // |buffer|'s specifics field to contain the unencrypted data. | 317 // |buffer|'s specifics field to contain the unencrypted data. |
| 312 void SetExtraChangeRecordData(int64 id, | 318 void SetExtraChangeRecordData(int64 id, |
| 313 syncable::ModelType type, | 319 syncable::ModelType type, |
| 314 ChangeReorderBuffer* buffer, | 320 ChangeReorderBuffer* buffer, |
| (...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 460 | 466 |
| 461 // JS message handlers. | 467 // JS message handlers. |
| 462 JsArgList GetNotificationState(const JsArgList& args); | 468 JsArgList GetNotificationState(const JsArgList& args); |
| 463 JsArgList GetNotificationInfo(const JsArgList& args); | 469 JsArgList GetNotificationInfo(const JsArgList& args); |
| 464 JsArgList GetRootNodeDetails(const JsArgList& args); | 470 JsArgList GetRootNodeDetails(const JsArgList& args); |
| 465 JsArgList GetNodeSummariesById(const JsArgList& args); | 471 JsArgList GetNodeSummariesById(const JsArgList& args); |
| 466 JsArgList GetNodeDetailsById(const JsArgList& args); | 472 JsArgList GetNodeDetailsById(const JsArgList& args); |
| 467 JsArgList GetChildNodeIds(const JsArgList& args); | 473 JsArgList GetChildNodeIds(const JsArgList& args); |
| 468 JsArgList FindNodesContainingString(const JsArgList& args); | 474 JsArgList FindNodesContainingString(const JsArgList& args); |
| 469 | 475 |
| 476 TimeDelta GetNudgeDelayTimeDeltaFromType( | |
| 477 const NudgeDelayType& delay_type, const ModelType& model_type); | |
| 478 | |
| 479 | |
| 470 const std::string name_; | 480 const std::string name_; |
| 471 | 481 |
| 472 base::ThreadChecker thread_checker_; | 482 base::ThreadChecker thread_checker_; |
| 473 | 483 |
| 474 base::WeakPtrFactory<SyncInternal> weak_ptr_factory_; | 484 base::WeakPtrFactory<SyncInternal> weak_ptr_factory_; |
| 475 | 485 |
| 476 // Thread-safe handle used by | 486 // Thread-safe handle used by |
| 477 // HandleCalculateChangesChangeEventFromSyncApi(), which can be | 487 // HandleCalculateChangesChangeEventFromSyncApi(), which can be |
| 478 // called from any thread. Valid only between between calls to | 488 // called from any thread. Valid only between between calls to |
| 479 // Init() and Shutdown(). | 489 // Init() and Shutdown(). |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 542 JsMessageHandlerMap js_message_handlers_; | 552 JsMessageHandlerMap js_message_handlers_; |
| 543 WeakHandle<JsEventHandler> js_event_handler_; | 553 WeakHandle<JsEventHandler> js_event_handler_; |
| 544 JsSyncManagerObserver js_sync_manager_observer_; | 554 JsSyncManagerObserver js_sync_manager_observer_; |
| 545 JsMutationEventObserver js_mutation_event_observer_; | 555 JsMutationEventObserver js_mutation_event_observer_; |
| 546 | 556 |
| 547 // This is for keeping track of client events to send to the server. | 557 // This is for keeping track of client events to send to the server. |
| 548 DebugInfoEventListener debug_info_event_listener_; | 558 DebugInfoEventListener debug_info_event_listener_; |
| 549 | 559 |
| 550 MessageLoop* const created_on_loop_; | 560 MessageLoop* const created_on_loop_; |
| 551 }; | 561 }; |
| 552 const int SyncManager::SyncInternal::kDefaultNudgeDelayMilliseconds = 200; | |
| 553 const int SyncManager::SyncInternal::kPreferencesNudgeDelayMilliseconds = 2000; | |
| 554 | 562 |
| 555 SyncManager::ChangeDelegate::~ChangeDelegate() {} | 563 SyncManager::ChangeDelegate::~ChangeDelegate() {} |
| 556 | 564 |
| 557 SyncManager::ChangeObserver::~ChangeObserver() {} | 565 SyncManager::ChangeObserver::~ChangeObserver() {} |
| 558 | 566 |
| 559 SyncManager::Observer::~Observer() {} | 567 SyncManager::Observer::~Observer() {} |
| 560 | 568 |
| 561 SyncManager::SyncManager(const std::string& name) | 569 SyncManager::SyncManager(const std::string& name) |
| 562 : data_(new SyncInternal(name)) {} | 570 : data_(new SyncInternal(name)) {} |
| 563 | 571 |
| (...skipping 978 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1542 } | 1550 } |
| 1543 | 1551 |
| 1544 void SyncManager::SyncInternal::RequestNudge( | 1552 void SyncManager::SyncInternal::RequestNudge( |
| 1545 const tracked_objects::Location& location) { | 1553 const tracked_objects::Location& location) { |
| 1546 if (scheduler()) | 1554 if (scheduler()) |
| 1547 scheduler()->ScheduleNudge( | 1555 scheduler()->ScheduleNudge( |
| 1548 TimeDelta::FromMilliseconds(0), browser_sync::NUDGE_SOURCE_LOCAL, | 1556 TimeDelta::FromMilliseconds(0), browser_sync::NUDGE_SOURCE_LOCAL, |
| 1549 ModelTypeBitSet(), location); | 1557 ModelTypeBitSet(), location); |
| 1550 } | 1558 } |
| 1551 | 1559 |
| 1560 namespace { | |
| 1561 NudgeDelayType GetNudgeDelayType(const ModelType& type) { | |
| 1562 switch (type) { | |
| 1563 case syncable::AUTOFILL: | |
| 1564 case syncable::AUTOFILL_PROFILE: | |
| 1565 return PIGGY_BACK_WITH_ANOTHER_CHANGE; | |
| 1566 case syncable::PREFERENCES: | |
| 1567 case syncable::SESSIONS: | |
| 1568 return CUSTOM; | |
| 1569 default: | |
| 1570 return IMMEDIATE; | |
| 1571 } | |
| 1572 } | |
| 1573 } // namespace | |
| 1574 | |
| 1575 TimeDelta SyncManager::SyncInternal::GetNudgeDelayTimeDeltaFromType( | |
| 1576 const NudgeDelayType& delay_type, const ModelType& model_type) { | |
| 1577 | |
| 1578 TimeDelta delay = TimeDelta::FromMilliseconds( | |
| 1579 SyncManager::kDefaultNudgeDelayMilliseconds); | |
| 1580 switch (delay_type) { | |
| 1581 case IMMEDIATE: | |
| 1582 delay = TimeDelta::FromMilliseconds( | |
| 1583 SyncManager::kDefaultNudgeDelayMilliseconds); | |
| 1584 break; | |
| 1585 case PIGGY_BACK_WITH_ANOTHER_CHANGE: | |
| 1586 delay = TimeDelta::FromMilliseconds( | |
| 1587 SyncManager::kPiggybackNudgeDelay); | |
| 1588 break; | |
| 1589 case CUSTOM: | |
| 1590 switch (model_type) { | |
| 1591 case syncable::PREFERENCES: | |
| 1592 delay = TimeDelta::FromMilliseconds( | |
| 1593 SyncManager::kPreferencesNudgeDelayMilliseconds); | |
| 1594 break; | |
| 1595 case syncable::SESSIONS: | |
| 1596 delay = scheduler()->sessions_commit_delay(); | |
| 1597 break; | |
| 1598 default: | |
| 1599 NOTREACHED(); | |
| 1600 } | |
| 1601 break; | |
| 1602 default: | |
| 1603 NOTREACHED(); | |
| 1604 } | |
| 1605 | |
| 1606 return delay; | |
| 1607 } | |
| 1608 | |
| 1609 TimeDelta SyncManager::SyncInternal::GetNudgeDelayTimeDelta( | |
| 1610 const ModelType& model_type) { | |
| 1611 NudgeDelayType delay_type = GetNudgeDelayType(model_type); | |
| 1612 return GetNudgeDelayTimeDeltaFromType(delay_type, | |
| 1613 model_type); | |
| 1614 } | |
| 1615 | |
| 1616 | |
| 1552 void SyncManager::SyncInternal::RequestNudgeForDataType( | 1617 void SyncManager::SyncInternal::RequestNudgeForDataType( |
| 1553 const tracked_objects::Location& nudge_location, | 1618 const tracked_objects::Location& nudge_location, |
| 1554 const ModelType& type) { | 1619 const ModelType& type) { |
| 1555 if (!scheduler()) { | 1620 if (!scheduler()) { |
| 1556 NOTREACHED(); | 1621 NOTREACHED(); |
| 1557 return; | 1622 return; |
| 1558 } | 1623 } |
| 1559 base::TimeDelta nudge_delay; | 1624 base::TimeDelta nudge_delay = GetNudgeDelayTimeDelta(type); |
| 1560 switch (type) { | |
| 1561 case syncable::PREFERENCES: | |
| 1562 nudge_delay = | |
| 1563 TimeDelta::FromMilliseconds(kPreferencesNudgeDelayMilliseconds); | |
| 1564 break; | |
| 1565 case syncable::SESSIONS: | |
| 1566 nudge_delay = scheduler()->sessions_commit_delay(); | |
| 1567 break; | |
| 1568 default: | |
| 1569 nudge_delay = | |
| 1570 TimeDelta::FromMilliseconds(kDefaultNudgeDelayMilliseconds); | |
| 1571 break; | |
| 1572 } | |
| 1573 syncable::ModelTypeBitSet types; | 1625 syncable::ModelTypeBitSet types; |
| 1574 types.set(type); | 1626 types.set(type); |
| 1575 scheduler()->ScheduleNudge(nudge_delay, | 1627 scheduler()->ScheduleNudge(nudge_delay, |
| 1576 browser_sync::NUDGE_SOURCE_LOCAL, | 1628 browser_sync::NUDGE_SOURCE_LOCAL, |
| 1577 types, | 1629 types, |
| 1578 nudge_location); | 1630 nudge_location); |
| 1579 } | 1631 } |
| 1580 | 1632 |
| 1581 void SyncManager::SyncInternal::OnSyncEngineEvent( | 1633 void SyncManager::SyncInternal::OnSyncEngineEvent( |
| 1582 const SyncEngineEvent& event) { | 1634 const SyncEngineEvent& event) { |
| (...skipping 402 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1985 UserShare* SyncManager::GetUserShare() const { | 2037 UserShare* SyncManager::GetUserShare() const { |
| 1986 return data_->GetUserShare(); | 2038 return data_->GetUserShare(); |
| 1987 } | 2039 } |
| 1988 | 2040 |
| 1989 void SyncManager::RefreshEncryption() { | 2041 void SyncManager::RefreshEncryption() { |
| 1990 DCHECK(thread_checker_.CalledOnValidThread()); | 2042 DCHECK(thread_checker_.CalledOnValidThread()); |
| 1991 if (data_->UpdateCryptographerAndNigori()) | 2043 if (data_->UpdateCryptographerAndNigori()) |
| 1992 data_->RefreshEncryption(); | 2044 data_->RefreshEncryption(); |
| 1993 } | 2045 } |
| 1994 | 2046 |
| 2047 TimeDelta SyncManager::GetNudgeDelayTimeDelta( | |
| 2048 const ModelType& model_type) { | |
| 2049 return data_->GetNudgeDelayTimeDelta(model_type); | |
| 2050 } | |
| 2051 | |
| 1995 syncable::ModelTypeSet SyncManager::GetEncryptedDataTypesForTest() const { | 2052 syncable::ModelTypeSet SyncManager::GetEncryptedDataTypesForTest() const { |
| 1996 ReadTransaction trans(FROM_HERE, GetUserShare()); | 2053 ReadTransaction trans(FROM_HERE, GetUserShare()); |
| 1997 return GetEncryptedTypes(&trans); | 2054 return GetEncryptedTypes(&trans); |
| 1998 } | 2055 } |
| 1999 | 2056 |
| 2000 bool SyncManager::ReceivedExperimentalTypes(syncable::ModelTypeSet* to_add) | 2057 bool SyncManager::ReceivedExperimentalTypes(syncable::ModelTypeSet* to_add) |
| 2001 const { | 2058 const { |
| 2002 ReadTransaction trans(FROM_HERE, GetUserShare()); | 2059 ReadTransaction trans(FROM_HERE, GetUserShare()); |
| 2003 ReadNode node(&trans); | 2060 ReadNode node(&trans); |
| 2004 if (!node.InitByTagLookup(kNigoriTag)) { | 2061 if (!node.InitByTagLookup(kNigoriTag)) { |
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2087 lookup->GetDownloadProgress(*i, &marker); | 2144 lookup->GetDownloadProgress(*i, &marker); |
| 2088 | 2145 |
| 2089 if (marker.token().empty()) | 2146 if (marker.token().empty()) |
| 2090 result.insert(*i); | 2147 result.insert(*i); |
| 2091 | 2148 |
| 2092 } | 2149 } |
| 2093 return result; | 2150 return result; |
| 2094 } | 2151 } |
| 2095 | 2152 |
| 2096 } // namespace sync_api | 2153 } // namespace sync_api |
| OLD | NEW |