Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4791)

Unified Diff: chrome/browser/sync/glue/model_association_manager.h

Issue 10387144: [Sync] - Implement isolated model association. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: For submitting. Created 8 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/sync/glue/model_association_manager.h
diff --git a/chrome/browser/sync/glue/model_association_manager.h b/chrome/browser/sync/glue/model_association_manager.h
index 76c527f2e1e759287236b0ce193c88b563188ad7..07b79335f0cce47aeb81fbd302016bfc96d5f18f 100644
--- a/chrome/browser/sync/glue/model_association_manager.h
+++ b/chrome/browser/sync/glue/model_association_manager.h
@@ -9,14 +9,15 @@
#include <list>
#include "base/memory/weak_ptr.h"
+#include "base/timer.h"
#include "chrome/browser/sync/glue/data_type_manager.h"
// |ModelAssociationManager| does the heavy lifting for doing the actual model
// association. It instructs DataTypeControllers to load models, start
// associating and stopping. Since the operations are async it uses an
-// interface to inform DTM the results of the operations.
-// This class is owned by DTM.
+// interface to inform DataTypeManager the results of the operations.
+// This class is owned by DataTypeManager.
namespace browser_sync {
class DataTypeController;
@@ -28,6 +29,12 @@ class ModelAssociationResultProcessor {
virtual void OnModelAssociationDone(
const DataTypeManager::ConfigureResult& result) = 0;
virtual ~ModelAssociationResultProcessor() {}
+
+ // Called to let the |ModelAssociationResultProcessor| know that "delayed"
+ // types have finished loading and association should take place. (A delayed
+ // type here is a type that did not finish loading during the previous
+ // configure cycle.)
+ virtual void OnTypesLoaded() = 0;
};
// The class that is responsible for model association.
@@ -39,8 +46,8 @@ class ModelAssociationManager {
// Initializes the state to do the model association in future. This
// should be called before communicating with sync server. A subsequent call
- // of Initialize is only allowed if the current configure cycle is completed,
- // aborted or stopped.
+ // of Initialize is only allowed if the ModelAssociationManager has invoked
+ // |OnModelAssociationDone| on the |ModelAssociationResultProcessor|.
void Initialize(syncable::ModelTypeSet desired_types);
// Can be called at any time. Synchronously stops all datatypes.
@@ -54,7 +61,7 @@ class ModelAssociationManager {
// It is valid to call this only when we are initialized to configure
// but we have not started the configuration.(i.e., |Initialize| has
// been called but |StartAssociationAsync| has not yet been called.)
- // If we have started configuration then the DTM will wait until
+ // If we have started configuration then the DataTypeManager will wait until
// the current configuration is done before processing the reconfigure
// request. We goto IDLE state and clear all our internal state. It is
// safe to do this as we have not started association on any DTCs.
@@ -64,6 +71,12 @@ class ModelAssociationManager {
// Stops any disabled types.
void StopDisabledTypes();
+ // This is used for TESTING PURPOSE ONLY. The test case can inspect
+ // and modify the timer.
+ // TODO(sync) : This would go away if we made this class be able to do
+ // Dependency injection. crbug.com/129212.
+ base::OneShotTimer<ModelAssociationManager>* GetTimerForTesting();
+
private:
enum State {
// This is the state after |Initialize| is called.
@@ -97,6 +110,15 @@ class ModelAssociationManager {
// loaded.
void StartAssociatingNextType();
+ // When a type fails to load or fails associating this method is invoked to
+ // do the book keeping and do the UMA reporting.
+ void AppendToFailedDatatypesAndLogError(
+ DataTypeController::StartResult result,
+ const SyncError& error);
+
+ syncable::ModelTypeSet GetTypesWaitingToLoad();
+
+
State state_;
syncable::ModelTypeSet desired_types_;
std::list<SyncError> failed_datatypes_info_;
@@ -140,6 +162,7 @@ class ModelAssociationManager {
const DataTypeController::TypeMap* controllers_;
ModelAssociationResultProcessor* result_processor_;
base::WeakPtrFactory<ModelAssociationManager> weak_ptr_factory_;
+ base::OneShotTimer<ModelAssociationManager> timer_;
DISALLOW_COPY_AND_ASSIGN(ModelAssociationManager);
};
} // namespace browser_sync
« no previous file with comments | « chrome/browser/sync/glue/frontend_data_type_controller_mock.h ('k') | chrome/browser/sync/glue/model_association_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698