Chromium Code Reviews| Index: components/gcm_driver/gcm_channel_status_syncer.h |
| diff --git a/components/gcm_driver/gcm_channel_status_syncer.h b/components/gcm_driver/gcm_channel_status_syncer.h |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..d01b8c08010ab6d6200bd548d9a4e5f80b942d5a |
| --- /dev/null |
| +++ b/components/gcm_driver/gcm_channel_status_syncer.h |
| @@ -0,0 +1,94 @@ |
| +// 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. |
| + |
| +#ifndef COMPONENTS_GCM_DRIVER_GCM_CHANNEL_STATUS_SYNCER_H_ |
| +#define COMPONENTS_GCM_DRIVER_GCM_CHANNEL_STATUS_SYNCER_H_ |
| + |
| +#include "base/compiler_specific.h" |
| +#include "base/macros.h" |
| +#include "base/memory/ref_counted.h" |
| +#include "base/memory/scoped_ptr.h" |
| +#include "base/memory/weak_ptr.h" |
| +#include "base/time/time.h" |
| + |
| +class PrefService; |
| +class PrefRegistrySimple; |
| +namespace net { |
|
Nicolas Zea
2014/09/15 22:35:58
nit: newline before and after namespace
jianli
2014/09/16 01:07:45
Done.
|
| +class URLRequestContextGetter; |
| +} |
| +namespace user_prefs { |
| +class PrefRegistrySyncable; |
| +} |
| + |
| +namespace gcm { |
| + |
| +class GCMChannelStatusRequest; |
| +class GCMDriver; |
| + |
| +class GCMChannelStatusSyncer { |
|
Nicolas Zea
2014/09/15 22:35:58
nit: description
jianli
2014/09/16 01:07:45
Done.
|
| + public: |
| + static void RegisterPrefs(PrefRegistrySimple* registry); |
|
Nicolas Zea
2014/09/15 22:35:58
Why are both of these needed?
jianli
2014/09/16 01:07:45
GCMDriver can now run under 2 modes: profile and n
|
| + static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry); |
| + |
| + GCMChannelStatusSyncer( |
| + GCMDriver* driver, |
| + PrefService* prefs, |
| + scoped_refptr<net::URLRequestContextGetter> request_context); |
|
Nicolas Zea
2014/09/15 22:35:58
nit: pass scoped_refptr as const ref (i.e. const s
jianli
2014/09/16 01:07:44
Done.
|
| + ~GCMChannelStatusSyncer(); |
| + |
| + void EnsureStarted(); |
| + void Stop(); |
| + |
| + bool gcm_enabled() const { return gcm_enabled_; } |
| + |
| + // For testing purpose. |
| + void set_delay_removed_for_testing(bool delay_removed) { |
| + delay_removed_for_testing_ = delay_removed; |
| + } |
| + base::TimeDelta current_request_delay_interval() const { |
| + return current_request_delay_interval_; |
| + } |
| + static int first_time_delay_seconds(); |
| + |
| + private: |
| + // Called when a request is completed. |
| + void OnRequestCompleted(bool enabled, int poll_interval_seconds); |
| + |
| + // Schedules next request to start after appropriate delay. |
| + void ScheduleRequest(); |
| + |
| + // Creates and starts a request immediately. |
| + void StartRequest(); |
| + |
| + // Computes and returns a delay with the fuzzing variation added if needed, |
| + // after which the request could start. |
| + base::TimeDelta GetRequestDelayInterval() const; |
| + |
| + // GCMDriver owns GCMChannelStatusSyncer instance. |
| + GCMDriver* driver_; |
| + PrefService* prefs_; |
| + |
| + scoped_refptr<net::URLRequestContextGetter> request_context_; |
| + scoped_ptr<GCMChannelStatusRequest> request_; |
| + |
| + bool gcm_enabled_; |
| + int poll_interval_seconds_; |
| + base::Time last_check_time_; |
| + |
| + // The flag that indicates if the delay, including fuzzing variation and poll |
| + // interval, is removed for testing purpose. |
| + bool delay_removed_for_testing_; |
| + |
| + // Tracked for testing purpose. |
| + base::TimeDelta current_request_delay_interval_; |
| + |
| + // Used to pass a weak pointer to a task. |
| + base::WeakPtrFactory<GCMChannelStatusSyncer> weak_ptr_factory_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(GCMChannelStatusSyncer); |
| +}; |
| + |
| +} // namespace gcm |
| + |
| +#endif // COMPONENTS_GCM_DRIVER_GCM_CHANNEL_STATUS_SYNCER_H_ |