Index: chrome/browser/sync/engine/syncer_thread2.h |
diff --git a/chrome/browser/sync/engine/syncer_thread2.h b/chrome/browser/sync/engine/syncer_thread2.h |
index 363a1c9ded729ef01db4582a0764d4c96c3f076d..37684561be51df2a1779374e2acf7712a5e69313 100644 |
--- a/chrome/browser/sync/engine/syncer_thread2.h |
+++ b/chrome/browser/sync/engine/syncer_thread2.h |
@@ -7,6 +7,7 @@ |
#define CHROME_BROWSER_SYNC_ENGINE_SYNCER_THREAD2_H_ |
#pragma once |
+#include "base/callback.h" |
#include "base/memory/linked_ptr.h" |
#include "base/memory/scoped_ptr.h" |
#include "base/observer_list.h" |
@@ -18,6 +19,7 @@ |
#include "chrome/browser/sync/engine/polling_constants.h" |
#include "chrome/browser/sync/engine/syncer.h" |
#include "chrome/browser/sync/syncable/model_type_payload_map.h" |
+#include "chrome/browser/sync/engine/net/server_connection_manager.h" |
#include "chrome/browser/sync/sessions/sync_session.h" |
#include "chrome/browser/sync/sessions/sync_session_context.h" |
@@ -27,7 +29,8 @@ struct ServerConnectionEvent; |
namespace s3 { |
-class SyncerThread : public sessions::SyncSession::Delegate { |
+class SyncerThread : public sessions::SyncSession::Delegate, |
+ public ServerConnectionEventListener { |
public: |
enum Mode { |
// In this mode, the thread only performs configuration tasks. This is |
@@ -44,6 +47,8 @@ class SyncerThread : public sessions::SyncSession::Delegate { |
SyncerThread(sessions::SyncSessionContext* context, Syncer* syncer); |
virtual ~SyncerThread(); |
+ typedef Callback0::Type ModeChangeCallback; |
+ |
// Change the mode of operation. |
// We don't use a lock when changing modes, so we won't cause currently |
// scheduled jobs to adhere to the new mode. We could protect it, but it |
@@ -52,7 +57,10 @@ class SyncerThread : public sessions::SyncSession::Delegate { |
// all their required state and won't be affected by potential change at |
// higher levels (i.e. the registrar), and c) we service tasks FIFO, so once |
// the mode changes all future jobs will be run against the updated mode. |
- void Start(Mode mode); |
+ // If supplied, |callback| will be invoked when the mode has been |
+ // changed to |mode| *from the SyncerThread*, and not from the caller |
+ // thread. |
+ void Start(Mode mode, ModeChangeCallback* callback); |
// Joins on the thread as soon as possible (currently running session |
// completes). |
@@ -84,6 +92,10 @@ class SyncerThread : public sessions::SyncSession::Delegate { |
const base::TimeDelta& new_interval); |
virtual void OnShouldStopSyncingPermanently(); |
+ // ServerConnectionEventListener implementation. |
+ // TODO(tim): schedule a nudge when valid connection detected? in 1 minute? |
+ virtual void OnServerConnectionEvent(const ServerConnectionEvent2& event); |
+ |
private: |
friend class SyncerThread2Test; |
@@ -133,6 +145,10 @@ class SyncerThread : public sessions::SyncSession::Delegate { |
// reset our state. |
void FinishSyncSessionJob(const SyncSessionJob& job); |
+ // Record important state that might be needed in future syncs, such as which |
+ // data types may require cleanup. |
+ void UpdateCarryoverSessionState(const SyncSessionJob& old_job); |
+ |
// Helper to FinishSyncSessionJob to schedule the next sync operation. |
void ScheduleNextSync(const SyncSessionJob& old_job); |
@@ -150,7 +166,7 @@ class SyncerThread : public sessions::SyncSession::Delegate { |
// 'Impl' here refers to real implementation of public functions, running on |
// |thread_|. |
- void StartImpl(Mode mode); |
+ void StartImpl(Mode mode, linked_ptr<ModeChangeCallback> callback); |
void ScheduleNudgeImpl( |
const base::TimeDelta& delay, |
NudgeSource source, |
@@ -165,10 +181,6 @@ class SyncerThread : public sessions::SyncSession::Delegate { |
// Helper to signal all listeners registered with |session_context_|. |
void Notify(SyncEngineEvent::EventCause cause); |
- // ServerConnectionEventListener implementation. |
- // TODO(tim): schedule a nudge when valid connection detected? in 1 minute? |
- virtual void OnServerConnectionEvent(const ServerConnectionEvent& event); |
- |
// Callback to change backoff state. |
void DoCanaryJob(); |
void Unthrottle(); |
@@ -182,6 +194,18 @@ class SyncerThread : public sessions::SyncSession::Delegate { |
SyncerStep* start, |
SyncerStep* end); |
+ // Initializes the hookup between the ServerConnectionManager and us. |
+ void WatchConnectionManager(); |
+ |
+ // Used to update |server_connection_ok_|, see below. |
+ void CheckServerConnectionManagerStatus( |
+ HttpResponse::ServerConnectionCode code); |
+ |
+ // Called once the first time thread_ is started to broadcast an initial |
+ // session snapshot containing data like initial_sync_ended. Important when |
+ // the client starts up and does not need to perform an initial sync. |
+ void SendInitialSnapshot(); |
+ |
base::Thread thread_; |
// Modifiable versions of kDefaultLongPollIntervalSeconds which can be |