| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 // | 4 // |
| 5 // A class to schedule syncer tasks intelligently. | 5 // A class to schedule syncer tasks intelligently. |
| 6 #ifndef CHROME_BROWSER_SYNC_ENGINE_SYNC_SCHEDULER_H_ | 6 #ifndef CHROME_BROWSER_SYNC_ENGINE_SYNC_SCHEDULER_H_ |
| 7 #define CHROME_BROWSER_SYNC_ENGINE_SYNC_SCHEDULER_H_ | 7 #define CHROME_BROWSER_SYNC_ENGINE_SYNC_SCHEDULER_H_ |
| 8 #pragma once | 8 #pragma once |
| 9 | 9 |
| 10 #include <string> | 10 #include <string> |
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 101 // Change status of notifications in the SyncSessionContext. | 101 // Change status of notifications in the SyncSessionContext. |
| 102 void set_notifications_enabled(bool notifications_enabled); | 102 void set_notifications_enabled(bool notifications_enabled); |
| 103 | 103 |
| 104 base::TimeDelta sessions_commit_delay() const; | 104 base::TimeDelta sessions_commit_delay() const; |
| 105 | 105 |
| 106 // DDOS avoidance function. Calculates how long we should wait before trying | 106 // DDOS avoidance function. Calculates how long we should wait before trying |
| 107 // again after a failed sync attempt, where the last delay was |base_delay|. | 107 // again after a failed sync attempt, where the last delay was |base_delay|. |
| 108 // TODO(tim): Look at URLRequestThrottlerEntryInterface. | 108 // TODO(tim): Look at URLRequestThrottlerEntryInterface. |
| 109 static base::TimeDelta GetRecommendedDelay(const base::TimeDelta& base_delay); | 109 static base::TimeDelta GetRecommendedDelay(const base::TimeDelta& base_delay); |
| 110 | 110 |
| 111 // Called when credentials are updated by the user. | |
| 112 void OnCredentialsUpdated(); | |
| 113 | |
| 114 // Called when the network layer detects a connection status change. | |
| 115 void OnConnectionStatusChange(); | |
| 116 | |
| 117 // SyncSession::Delegate implementation. | 111 // SyncSession::Delegate implementation. |
| 118 virtual void OnSilencedUntil( | 112 virtual void OnSilencedUntil( |
| 119 const base::TimeTicks& silenced_until) OVERRIDE; | 113 const base::TimeTicks& silenced_until) OVERRIDE; |
| 120 virtual bool IsSyncingCurrentlySilenced() OVERRIDE; | 114 virtual bool IsSyncingCurrentlySilenced() OVERRIDE; |
| 121 virtual void OnReceivedShortPollIntervalUpdate( | 115 virtual void OnReceivedShortPollIntervalUpdate( |
| 122 const base::TimeDelta& new_interval) OVERRIDE; | 116 const base::TimeDelta& new_interval) OVERRIDE; |
| 123 virtual void OnReceivedLongPollIntervalUpdate( | 117 virtual void OnReceivedLongPollIntervalUpdate( |
| 124 const base::TimeDelta& new_interval) OVERRIDE; | 118 const base::TimeDelta& new_interval) OVERRIDE; |
| 125 virtual void OnReceivedSessionsCommitDelay( | 119 virtual void OnReceivedSessionsCommitDelay( |
| 126 const base::TimeDelta& new_delay) OVERRIDE; | 120 const base::TimeDelta& new_delay) OVERRIDE; |
| 127 virtual void OnShouldStopSyncingPermanently() OVERRIDE; | 121 virtual void OnShouldStopSyncingPermanently() OVERRIDE; |
| 128 virtual void OnSyncProtocolError( | 122 virtual void OnSyncProtocolError( |
| 129 const sessions::SyncSessionSnapshot& snapshot) OVERRIDE; | 123 const sessions::SyncSessionSnapshot& snapshot) OVERRIDE; |
| 130 | 124 |
| 125 // Called when the root cause of the current connection error is fixed. |
| 126 void OnServerConnectionErrorFixed(); |
| 127 |
| 131 private: | 128 private: |
| 132 enum JobProcessDecision { | 129 enum JobProcessDecision { |
| 133 // Indicates we should continue with the current job. | 130 // Indicates we should continue with the current job. |
| 134 CONTINUE, | 131 CONTINUE, |
| 135 // Indicates that we should save it to be processed later. | 132 // Indicates that we should save it to be processed later. |
| 136 SAVE, | 133 SAVE, |
| 137 // Indicates we should drop this job. | 134 // Indicates we should drop this job. |
| 138 DROP, | 135 DROP, |
| 139 }; | 136 }; |
| 140 | 137 |
| (...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 320 | 317 |
| 321 // Callback to change backoff state. | 318 // Callback to change backoff state. |
| 322 void DoCanaryJob(); | 319 void DoCanaryJob(); |
| 323 void Unthrottle(); | 320 void Unthrottle(); |
| 324 | 321 |
| 325 // Executes the pending job. Called whenever an event occurs that may | 322 // Executes the pending job. Called whenever an event occurs that may |
| 326 // change conditions permitting a job to run. Like when network connection is | 323 // change conditions permitting a job to run. Like when network connection is |
| 327 // re-established, mode changes etc. | 324 // re-established, mode changes etc. |
| 328 void DoPendingJobIfPossible(bool is_canary_job); | 325 void DoPendingJobIfPossible(bool is_canary_job); |
| 329 | 326 |
| 330 // Called when the root cause of the current connection error is fixed. | |
| 331 void OnServerConnectionErrorFixed(); | |
| 332 | |
| 333 // The pointer is owned by the caller. | 327 // The pointer is owned by the caller. |
| 334 browser_sync::sessions::SyncSession* CreateSyncSession( | 328 browser_sync::sessions::SyncSession* CreateSyncSession( |
| 335 const browser_sync::sessions::SyncSourceInfo& info); | 329 const browser_sync::sessions::SyncSourceInfo& info); |
| 336 | 330 |
| 337 // Creates a session for a poll and performs the sync. | 331 // Creates a session for a poll and performs the sync. |
| 338 void PollTimerCallback(); | 332 void PollTimerCallback(); |
| 339 | 333 |
| 340 // Assign |start| and |end| to appropriate SyncerStep values for the | 334 // Assign |start| and |end| to appropriate SyncerStep values for the |
| 341 // specified |purpose|. | 335 // specified |purpose|. |
| 342 void SetSyncerStepsForPurpose(SyncSessionJob::SyncSessionJobPurpose purpose, | 336 void SetSyncerStepsForPurpose(SyncSessionJob::SyncSessionJobPurpose purpose, |
| 343 SyncerStep* start, | 337 SyncerStep* start, |
| 344 SyncerStep* end); | 338 SyncerStep* end); |
| 345 | 339 |
| 346 // Used to update |server_connection_ok_|, see below. | |
| 347 void UpdateServerConnectionManagerStatus( | |
| 348 HttpResponse::ServerConnectionCode code); | |
| 349 | |
| 350 // Called once the first time thread_ is started to broadcast an initial | 340 // Called once the first time thread_ is started to broadcast an initial |
| 351 // session snapshot containing data like initial_sync_ended. Important when | 341 // session snapshot containing data like initial_sync_ended. Important when |
| 352 // the client starts up and does not need to perform an initial sync. | 342 // the client starts up and does not need to perform an initial sync. |
| 353 void SendInitialSnapshot(); | 343 void SendInitialSnapshot(); |
| 354 | 344 |
| 355 virtual void OnActionableError(const sessions::SyncSessionSnapshot& snapshot); | 345 virtual void OnActionableError(const sessions::SyncSessionSnapshot& snapshot); |
| 356 | 346 |
| 357 base::WeakPtrFactory<SyncScheduler> weak_ptr_factory_; | 347 base::WeakPtrFactory<SyncScheduler> weak_ptr_factory_; |
| 358 | 348 |
| 359 // A second factory specially for weak_handle_this_, to allow the handle | 349 // A second factory specially for weak_handle_this_, to allow the handle |
| (...skipping 24 matching lines...) Expand all Loading... |
| 384 // Periodic timer for polling. See AdjustPolling. | 374 // Periodic timer for polling. See AdjustPolling. |
| 385 base::RepeatingTimer<SyncScheduler> poll_timer_; | 375 base::RepeatingTimer<SyncScheduler> poll_timer_; |
| 386 | 376 |
| 387 // The mode of operation. | 377 // The mode of operation. |
| 388 Mode mode_; | 378 Mode mode_; |
| 389 | 379 |
| 390 // TODO(tim): Bug 26339. This needs to track more than just time I think, | 380 // TODO(tim): Bug 26339. This needs to track more than just time I think, |
| 391 // since the nudges could be for different types. Current impl doesn't care. | 381 // since the nudges could be for different types. Current impl doesn't care. |
| 392 base::TimeTicks last_sync_session_end_time_; | 382 base::TimeTicks last_sync_session_end_time_; |
| 393 | 383 |
| 394 // Have we observed a valid server connection? | |
| 395 bool server_connection_ok_; | |
| 396 | |
| 397 // The latest connection code we got while trying to connect. | |
| 398 HttpResponse::ServerConnectionCode connection_code_; | |
| 399 | |
| 400 // Tracks in-flight nudges so we can coalesce. | 384 // Tracks in-flight nudges so we can coalesce. |
| 401 scoped_ptr<SyncSessionJob> pending_nudge_; | 385 scoped_ptr<SyncSessionJob> pending_nudge_; |
| 402 | 386 |
| 403 // Current wait state. Null if we're not in backoff and not throttled. | 387 // Current wait state. Null if we're not in backoff and not throttled. |
| 404 scoped_ptr<WaitInterval> wait_interval_; | 388 scoped_ptr<WaitInterval> wait_interval_; |
| 405 | 389 |
| 406 scoped_ptr<DelayProvider> delay_provider_; | 390 scoped_ptr<DelayProvider> delay_provider_; |
| 407 | 391 |
| 408 // Invoked to run through the sync cycle. | 392 // Invoked to run through the sync cycle. |
| 409 scoped_ptr<Syncer> syncer_; | 393 scoped_ptr<Syncer> syncer_; |
| 410 | 394 |
| 411 scoped_ptr<sessions::SyncSessionContext> session_context_; | 395 scoped_ptr<sessions::SyncSessionContext> session_context_; |
| 412 | 396 |
| 413 DISALLOW_COPY_AND_ASSIGN(SyncScheduler); | 397 DISALLOW_COPY_AND_ASSIGN(SyncScheduler); |
| 414 }; | 398 }; |
| 415 | 399 |
| 416 } // namespace browser_sync | 400 } // namespace browser_sync |
| 417 | 401 |
| 418 #endif // CHROME_BROWSER_SYNC_ENGINE_SYNC_SCHEDULER_H_ | 402 #endif // CHROME_BROWSER_SYNC_ENGINE_SYNC_SCHEDULER_H_ |
| OLD | NEW |