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 19 matching lines...) Expand all Loading... |
30 class MessageLoop; | 30 class MessageLoop; |
31 | 31 |
32 namespace tracked_objects { | 32 namespace tracked_objects { |
33 class Location; | 33 class Location; |
34 } // namespace tracked_objects | 34 } // namespace tracked_objects |
35 | 35 |
36 namespace browser_sync { | 36 namespace browser_sync { |
37 | 37 |
38 struct ServerConnectionEvent; | 38 struct ServerConnectionEvent; |
39 | 39 |
40 class SyncScheduler : public sessions::SyncSession::Delegate, | 40 class SyncScheduler : public sessions::SyncSession::Delegate { |
41 public ServerConnectionEventListener { | |
42 public: | 41 public: |
43 enum Mode { | 42 enum Mode { |
44 // In this mode, the thread only performs configuration tasks. This is | 43 // In this mode, the thread only performs configuration tasks. This is |
45 // designed to make the case where we want to download updates for a | 44 // designed to make the case where we want to download updates for a |
46 // specific type only, and not continue syncing until we are moved into | 45 // specific type only, and not continue syncing until we are moved into |
47 // normal mode. | 46 // normal mode. |
48 CONFIGURATION_MODE, | 47 CONFIGURATION_MODE, |
49 // Resumes polling and allows nudges, drops configuration tasks. Runs | 48 // Resumes polling and allows nudges, drops configuration tasks. Runs |
50 // through entire sync cycle. | 49 // through entire sync cycle. |
51 NORMAL_MODE, | 50 NORMAL_MODE, |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
116 virtual void OnReceivedShortPollIntervalUpdate( | 115 virtual void OnReceivedShortPollIntervalUpdate( |
117 const base::TimeDelta& new_interval) OVERRIDE; | 116 const base::TimeDelta& new_interval) OVERRIDE; |
118 virtual void OnReceivedLongPollIntervalUpdate( | 117 virtual void OnReceivedLongPollIntervalUpdate( |
119 const base::TimeDelta& new_interval) OVERRIDE; | 118 const base::TimeDelta& new_interval) OVERRIDE; |
120 virtual void OnReceivedSessionsCommitDelay( | 119 virtual void OnReceivedSessionsCommitDelay( |
121 const base::TimeDelta& new_delay) OVERRIDE; | 120 const base::TimeDelta& new_delay) OVERRIDE; |
122 virtual void OnShouldStopSyncingPermanently() OVERRIDE; | 121 virtual void OnShouldStopSyncingPermanently() OVERRIDE; |
123 virtual void OnSyncProtocolError( | 122 virtual void OnSyncProtocolError( |
124 const sessions::SyncSessionSnapshot& snapshot) OVERRIDE; | 123 const sessions::SyncSessionSnapshot& snapshot) OVERRIDE; |
125 | 124 |
126 // ServerConnectionEventListener implementation. | 125 // Forces the scheduler to make another attempt to contact the server. |
127 // TODO(tim): schedule a nudge when valid connection detected? in 1 minute? | 126 // |
128 virtual void OnServerConnectionEvent( | 127 // Does not override THROTTLED state. Should be called when some client-side |
129 const ServerConnectionEvent& event) OVERRIDE; | 128 // event, such as an IP address change or the receipt of new auth credentials, |
| 129 // imporoves our odds of successfully contacting the server. |
| 130 // |
| 131 // WARNING: This function will also lead to retries in the case where our |
| 132 // connection to the server was perfectly fine. If used improperly, this |
| 133 // function coudl DoS the server. |
| 134 // |
| 135 // WARNING: This function is synchronous. Do not call it unless you are |
| 136 // prepared to wait the duration of a sync cycle. |
| 137 void TryToConnect(); |
130 | 138 |
131 private: | 139 private: |
132 enum JobProcessDecision { | 140 enum JobProcessDecision { |
133 // Indicates we should continue with the current job. | 141 // Indicates we should continue with the current job. |
134 CONTINUE, | 142 CONTINUE, |
135 // Indicates that we should save it to be processed later. | 143 // Indicates that we should save it to be processed later. |
136 SAVE, | 144 SAVE, |
137 // Indicates we should drop this job. | 145 // Indicates we should drop this job. |
138 DROP, | 146 DROP, |
139 }; | 147 }; |
(...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
333 | 341 |
334 // Creates a session for a poll and performs the sync. | 342 // Creates a session for a poll and performs the sync. |
335 void PollTimerCallback(); | 343 void PollTimerCallback(); |
336 | 344 |
337 // Assign |start| and |end| to appropriate SyncerStep values for the | 345 // Assign |start| and |end| to appropriate SyncerStep values for the |
338 // specified |purpose|. | 346 // specified |purpose|. |
339 void SetSyncerStepsForPurpose(SyncSessionJob::SyncSessionJobPurpose purpose, | 347 void SetSyncerStepsForPurpose(SyncSessionJob::SyncSessionJobPurpose purpose, |
340 SyncerStep* start, | 348 SyncerStep* start, |
341 SyncerStep* end); | 349 SyncerStep* end); |
342 | 350 |
343 // Initializes the hookup between the ServerConnectionManager and us. | |
344 void WatchConnectionManager(); | |
345 | |
346 // Used to update |server_connection_ok_|, see below. | 351 // Used to update |server_connection_ok_|, see below. |
347 void CheckServerConnectionManagerStatus( | 352 void CheckServerConnectionManagerStatus( |
348 HttpResponse::ServerConnectionCode code); | 353 HttpResponse::ServerConnectionCode code); |
349 | 354 |
350 // Called once the first time thread_ is started to broadcast an initial | 355 // Called once the first time thread_ is started to broadcast an initial |
351 // session snapshot containing data like initial_sync_ended. Important when | 356 // session snapshot containing data like initial_sync_ended. Important when |
352 // the client starts up and does not need to perform an initial sync. | 357 // the client starts up and does not need to perform an initial sync. |
353 void SendInitialSnapshot(); | 358 void SendInitialSnapshot(); |
354 | 359 |
355 virtual void OnActionableError(const sessions::SyncSessionSnapshot& snapshot); | 360 virtual void OnActionableError(const sessions::SyncSessionSnapshot& snapshot); |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
406 scoped_ptr<Syncer> syncer_; | 411 scoped_ptr<Syncer> syncer_; |
407 | 412 |
408 scoped_ptr<sessions::SyncSessionContext> session_context_; | 413 scoped_ptr<sessions::SyncSessionContext> session_context_; |
409 | 414 |
410 DISALLOW_COPY_AND_ASSIGN(SyncScheduler); | 415 DISALLOW_COPY_AND_ASSIGN(SyncScheduler); |
411 }; | 416 }; |
412 | 417 |
413 } // namespace browser_sync | 418 } // namespace browser_sync |
414 | 419 |
415 #endif // CHROME_BROWSER_SYNC_ENGINE_SYNC_SCHEDULER_H_ | 420 #endif // CHROME_BROWSER_SYNC_ENGINE_SYNC_SCHEDULER_H_ |
OLD | NEW |