| Index: chrome/browser/sync/internal_api/sync_manager.cc
|
| diff --git a/chrome/browser/sync/internal_api/sync_manager.cc b/chrome/browser/sync/internal_api/sync_manager.cc
|
| index 65d85e9385778ef561fa523f45b02307ab7ad660..b000d9a3188dd629f35cac816b6c74f1f757024b 100644
|
| --- a/chrome/browser/sync/internal_api/sync_manager.cc
|
| +++ b/chrome/browser/sync/internal_api/sync_manager.cc
|
| @@ -19,6 +19,7 @@
|
| #include "chrome/browser/sync/engine/all_status.h"
|
| #include "chrome/browser/sync/engine/net/server_connection_manager.h"
|
| #include "chrome/browser/sync/engine/nigori_util.h"
|
| +#include "chrome/browser/sync/engine/polling_constants.h"
|
| #include "chrome/browser/sync/engine/syncapi_internal.h"
|
| #include "chrome/browser/sync/engine/syncer_types.h"
|
| #include "chrome/browser/sync/engine/sync_scheduler.h"
|
| @@ -120,6 +121,9 @@ GetUpdatesCallerInfo::GetUpdatesSource GetSourceFromReason(
|
|
|
| namespace sync_api {
|
|
|
| +const int SyncManager::kDefaultNudgeDelayMilliseconds = 200;
|
| +const int SyncManager::kPreferencesNudgeDelayMilliseconds = 2000;
|
| +
|
| //////////////////////////////////////////////////////////////////////////
|
| // SyncManager's implementation: SyncManager::SyncInternal
|
| class SyncManager::SyncInternal
|
| @@ -130,8 +134,6 @@ class SyncManager::SyncInternal
|
| public SyncEngineEventListener,
|
| public ServerConnectionEventListener,
|
| public syncable::DirectoryChangeDelegate {
|
| - static const int kDefaultNudgeDelayMilliseconds;
|
| - static const int kPreferencesNudgeDelayMilliseconds;
|
| public:
|
| explicit SyncInternal(const std::string& name)
|
| : name_(name),
|
| @@ -291,7 +293,7 @@ class SyncManager::SyncInternal
|
| SyncAPIServerConnectionManager* connection_manager() {
|
| return connection_manager_.get();
|
| }
|
| - SyncScheduler* scheduler() { return scheduler_.get(); }
|
| + SyncScheduler* scheduler() const { return scheduler_.get(); }
|
| UserShare* GetUserShare() {
|
| DCHECK(initialized_);
|
| return &share_;
|
| @@ -311,6 +313,8 @@ class SyncManager::SyncInternal
|
| const tracked_objects::Location& nudge_location,
|
| const ModelType& type);
|
|
|
| + TimeDelta GetNudgeDelayTimeDelta(const ModelType& model_type);
|
| +
|
| // See SyncManager::Shutdown* for information.
|
| void StopSyncingForShutdown(const base::Closure& callback);
|
| void ShutdownOnSyncThread();
|
| @@ -563,8 +567,81 @@ class SyncManager::SyncInternal
|
|
|
| MessageLoop* const created_on_loop_;
|
| };
|
| -const int SyncManager::SyncInternal::kDefaultNudgeDelayMilliseconds = 200;
|
| -const int SyncManager::SyncInternal::kPreferencesNudgeDelayMilliseconds = 2000;
|
| +
|
| +// A class to calculate nudge delays for types.
|
| +class NudgeStrategy {
|
| + public:
|
| + static TimeDelta GetNudgeDelayTimeDelta(const ModelType& model_type,
|
| + SyncManager::SyncInternal* core) {
|
| + NudgeDelayStrategy delay_type = GetNudgeDelayStrategy(model_type);
|
| + return GetNudgeDelayTimeDeltaFromType(delay_type,
|
| + model_type,
|
| + core);
|
| + }
|
| +
|
| + private:
|
| + // Possible types of nudge delay for datatypes.
|
| + // Note: These are just hints. If a sync happens then all dirty entries
|
| + // would be committed as part of the sync.
|
| + enum NudgeDelayStrategy {
|
| + // Sync right away.
|
| + IMMEDIATE,
|
| +
|
| + // Sync this change while syncing another change.
|
| + ACCOMPANY_ONLY,
|
| +
|
| + // The datatype does not use one of the predefined wait times but defines
|
| + // its own wait time logic for nudge.
|
| + CUSTOM,
|
| + };
|
| +
|
| + static NudgeDelayStrategy GetNudgeDelayStrategy(const ModelType& type) {
|
| + switch (type) {
|
| + case syncable::AUTOFILL:
|
| + case syncable::AUTOFILL_PROFILE:
|
| + return ACCOMPANY_ONLY;
|
| + case syncable::PREFERENCES:
|
| + case syncable::SESSIONS:
|
| + return CUSTOM;
|
| + default:
|
| + return IMMEDIATE;
|
| + }
|
| + }
|
| +
|
| + static TimeDelta GetNudgeDelayTimeDeltaFromType(
|
| + const NudgeDelayStrategy& delay_type, const ModelType& model_type,
|
| + const SyncManager::SyncInternal* core) {
|
| + CHECK(core);
|
| + TimeDelta delay = TimeDelta::FromMilliseconds(
|
| + SyncManager::kDefaultNudgeDelayMilliseconds);
|
| + switch (delay_type) {
|
| + case IMMEDIATE:
|
| + delay = TimeDelta::FromMilliseconds(
|
| + SyncManager::kDefaultNudgeDelayMilliseconds);
|
| + break;
|
| + case ACCOMPANY_ONLY:
|
| + delay = TimeDelta::FromSeconds(
|
| + browser_sync::kDefaultShortPollIntervalSeconds);
|
| + break;
|
| + case CUSTOM:
|
| + switch (model_type) {
|
| + case syncable::PREFERENCES:
|
| + delay = TimeDelta::FromMilliseconds(
|
| + SyncManager::kPreferencesNudgeDelayMilliseconds);
|
| + break;
|
| + case syncable::SESSIONS:
|
| + delay = core->scheduler()->sessions_commit_delay();
|
| + break;
|
| + default:
|
| + NOTREACHED();
|
| + }
|
| + break;
|
| + default:
|
| + NOTREACHED();
|
| + }
|
| + return delay;
|
| + }
|
| +};
|
|
|
| SyncManager::ChangeDelegate::~ChangeDelegate() {}
|
|
|
| @@ -1621,6 +1698,11 @@ void SyncManager::SyncInternal::RequestNudge(
|
| ModelTypeSet(), location);
|
| }
|
|
|
| +TimeDelta SyncManager::SyncInternal::GetNudgeDelayTimeDelta(
|
| + const ModelType& model_type) {
|
| + return NudgeStrategy::GetNudgeDelayTimeDelta(model_type, this);
|
| +}
|
| +
|
| void SyncManager::SyncInternal::RequestNudgeForDataType(
|
| const tracked_objects::Location& nudge_location,
|
| const ModelType& type) {
|
| @@ -1628,20 +1710,10 @@ void SyncManager::SyncInternal::RequestNudgeForDataType(
|
| NOTREACHED();
|
| return;
|
| }
|
| - base::TimeDelta nudge_delay;
|
| - switch (type) {
|
| - case syncable::PREFERENCES:
|
| - nudge_delay =
|
| - TimeDelta::FromMilliseconds(kPreferencesNudgeDelayMilliseconds);
|
| - break;
|
| - case syncable::SESSIONS:
|
| - nudge_delay = scheduler()->sessions_commit_delay();
|
| - break;
|
| - default:
|
| - nudge_delay =
|
| - TimeDelta::FromMilliseconds(kDefaultNudgeDelayMilliseconds);
|
| - break;
|
| - }
|
| +
|
| + base::TimeDelta nudge_delay = NudgeStrategy::GetNudgeDelayTimeDelta(type,
|
| + this);
|
| + syncable::ModelTypeSet types(type);
|
| scheduler()->ScheduleNudge(nudge_delay,
|
| browser_sync::NUDGE_SOURCE_LOCAL,
|
| ModelTypeSet(type),
|
| @@ -2072,6 +2144,11 @@ void SyncManager::DoneRefreshNigori(const base::Closure& done_callback,
|
| done_callback.Run();
|
| }
|
|
|
| +TimeDelta SyncManager::GetNudgeDelayTimeDelta(
|
| + const ModelType& model_type) {
|
| + return data_->GetNudgeDelayTimeDelta(model_type);
|
| +}
|
| +
|
| syncable::ModelTypeSet SyncManager::GetEncryptedDataTypesForTest() const {
|
| ReadTransaction trans(FROM_HERE, GetUserShare());
|
| return GetEncryptedTypes(&trans);
|
|
|