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..9e217c3672b9d8d55ec9e755c09d33d95f18aaf8 |
| --- /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" |
| +#include "components/pref_registry/pref_registry_syncable.h" |
|
fgorski
2014/09/11 18:24:35
you are also forward declaring it before. I think
jianli
2014/09/11 21:04:31
Done.
|
| + |
| +class PrefService; |
| +class PrefRegistrySimple; |
| +namespace net { |
| +class URLRequestContextGetter; |
| +} |
| +namespace user_prefs { |
| +class PrefRegistrySyncable; |
| +} |
| + |
| +namespace gcm { |
| + |
| +class GCMChannelStatusRequest; |
| +class GCMDriver; |
| + |
| +class GCMChannelStatusSyncer { |
| + public: |
| + static void RegisterPrefs(PrefRegistrySimple* registry); |
| + static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry); |
| + |
| + GCMChannelStatusSyncer( |
| + GCMDriver* driver, |
| + PrefService* prefs, |
| + scoped_refptr<net::URLRequestContextGetter> request_context); |
| + ~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 to start next request. |
|
fgorski
2014/09/11 18:24:35
nit: remove "to start"
jianli
2014/09/11 21:04:31
Done.
|
| + 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* driver_; // GCMDriver owns GCMChannelStatusSyncer instance. |
|
fgorski
2014/09/11 18:24:35
nit: why not putting comment above?
jianli
2014/09/11 21:04:30
Done.
|
| + 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_ |