Chromium Code Reviews| Index: chrome/browser/sync/engine/syncer_proto_util.cc |
| diff --git a/chrome/browser/sync/engine/syncer_proto_util.cc b/chrome/browser/sync/engine/syncer_proto_util.cc |
| index 84abca64ffba9062664e5ee4d9e1e17648c3ac8d..389e3e39c236b583e72240e18f9434cfbca80b54 100644 |
| --- a/chrome/browser/sync/engine/syncer_proto_util.cc |
| +++ b/chrome/browser/sync/engine/syncer_proto_util.cc |
| @@ -187,6 +187,19 @@ base::TimeDelta SyncerProtoUtil::GetThrottleDelay( |
| return throttle_delay; |
| } |
| +void SyncerProtoUtil::HandleThrottling( |
| + const SyncProtocolError& error, |
| + const base::TimeTicks& throttled_until, |
| + sessions::SyncSessionContext* context, |
| + sessions::SyncSession::Delegate* delegate) { |
| + DCHECK(error.error_type == browser_sync::THROTTLED); |
|
akalin
2011/11/21 20:04:26
DCHECK_EQ
lipalani1
2011/11/21 21:55:38
Done.
|
| + if (error.throttled_types.size() > 0) { |
| + context->AddUnthrottleTime(error.throttled_types, throttled_until); |
| + } else { |
| + delegate->OnSilencedUntil(throttled_until); |
| + } |
| +} |
| + |
| namespace { |
| // Helper function for an assertion in PostClientToServerMessage. |
| @@ -258,6 +271,16 @@ browser_sync::SyncProtocolError ConvertErrorPBToLocalType( |
| sync_protocol_error.url = error.url(); |
| sync_protocol_error.action = ConvertClientActionPBToLocalClientAction( |
| error.action()); |
| + |
| + if (error.throttled_data_type_ids_size() > 0) { |
| + DCHECK(error.error_type() == ClientToServerResponse::THROTTLED); |
| + for (int i = 0; i < error.throttled_data_type_ids_size(); ++i) { |
| + sync_protocol_error.throttled_types.insert( |
| + syncable::GetModelTypeFromExtensionFieldNumber( |
| + error.throttled_data_type_ids(i))); |
| + } |
| + } |
| + |
| return sync_protocol_error; |
| } |
| @@ -331,8 +354,10 @@ bool SyncerProtoUtil::PostClientToServerMessage( |
| return true; |
| case browser_sync::THROTTLED: |
| LOG(WARNING) << "Client silenced by server."; |
| - session->delegate()->OnSilencedUntil(base::TimeTicks::Now() + |
| - GetThrottleDelay(*response)); |
| + HandleThrottling(sync_protocol_error, |
| + base::TimeTicks::Now() + GetThrottleDelay(*response), |
| + session->context(), |
| + session->delegate()); |
| return false; |
| case browser_sync::TRANSIENT_ERROR: |
| return false; |