Index: components/gcm_driver/gcm_backoff_policy.cc |
diff --git a/components/gcm_driver/gcm_backoff_policy.cc b/components/gcm_driver/gcm_backoff_policy.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..45ccd8b5b00402f28ab43676c8d7ad62f5c83b43 |
--- /dev/null |
+++ b/components/gcm_driver/gcm_backoff_policy.cc |
@@ -0,0 +1,46 @@ |
+// Copyright 2014 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "components/gcm_driver/gcm_backoff_policy.h" |
+ |
+namespace gcm { |
+ |
+namespace { |
+ |
+// Backoff policy. Shared across GCM requests. |
+// Note: In order to ensure a minimum of 20 seconds between server errors (for |
+// server reasons), we have a 30s +- 10s (33%) jitter initial backoff. |
+const net::BackoffEntry::Policy kDefaultBackoffPolicy = { |
+ // Number of initial errors (in sequence) to ignore before applying |
+ // exponential back-off rules. |
+ 0, |
+ |
+ // Initial delay for exponential back-off in ms. |
+ 30 * 1000, // 30 seconds. |
+ |
+ // Factor by which the waiting time will be multiplied. |
+ 2, |
+ |
+ // Fuzzing percentage. ex: 10% will spread requests randomly |
+ // between 90%-100% of the calculated time. |
+ 0.33, // 33%. |
+ |
+ // Maximum amount of time we are willing to delay our request in ms. |
+ 10 * 60 * 1000, // 10 minutes. |
+ |
+ // Time to keep an entry from being discarded even when it |
+ // has no significant state, -1 to never discard. |
+ -1, |
+ |
+ // Don't use initial delay unless the last request was an error. |
+ false, |
+}; |
+ |
+} // namespace |
+ |
+const net::BackoffEntry::Policy& GetGCMBackoffPolicy() { |
+ return kDefaultBackoffPolicy; |
+} |
+ |
+} // namespace gcm |