| OLD | NEW |
| 1 // Copyright (c) 2006-2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2009 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 #ifndef CHROME_BROWSER_SYNC_ENGINE_MODEL_SAFE_WORKER_H_ | 5 #ifndef CHROME_BROWSER_SYNC_ENGINE_MODEL_SAFE_WORKER_H_ |
| 6 #define CHROME_BROWSER_SYNC_ENGINE_MODEL_SAFE_WORKER_H_ | 6 #define CHROME_BROWSER_SYNC_ENGINE_MODEL_SAFE_WORKER_H_ |
| 7 | 7 |
| 8 #include <map> | 8 #include <map> |
| 9 #include <string> |
| 9 #include <vector> | 10 #include <vector> |
| 10 | 11 |
| 11 #include "base/ref_counted.h" | 12 #include "base/ref_counted.h" |
| 12 #include "chrome/browser/sync/syncable/model_type.h" | 13 #include "chrome/browser/sync/syncable/model_type.h" |
| 13 #include "chrome/browser/sync/util/closure.h" | 14 #include "chrome/browser/sync/util/closure.h" |
| 14 #include "chrome/browser/sync/util/sync_types.h" | 15 #include "chrome/browser/sync/util/sync_types.h" |
| 15 | 16 |
| 16 namespace browser_sync { | 17 namespace browser_sync { |
| 17 | 18 |
| 18 enum ModelSafeGroup { | 19 enum ModelSafeGroup { |
| 19 GROUP_PASSIVE = 0, // Models that are just "passively" being synced; e.g. | 20 GROUP_PASSIVE = 0, // Models that are just "passively" being synced; e.g. |
| 20 // changes to these models don't need to be pushed to a | 21 // changes to these models don't need to be pushed to a |
| 21 // native model. | 22 // native model. |
| 22 GROUP_UI, // Models that live on UI thread and are being synced. | 23 GROUP_UI, // Models that live on UI thread and are being synced. |
| 23 GROUP_DB, // Models that live on DB thread and are being synced. | 24 GROUP_DB, // Models that live on DB thread and are being synced. |
| 24 GROUP_HISTORY, // Models that live on history thread and are being | 25 GROUP_HISTORY, // Models that live on history thread and are being |
| 25 // synced. | 26 // synced. |
| 26 GROUP_PASSWORD, // Models that live on the password thread and are | 27 GROUP_PASSWORD, // Models that live on the password thread and are |
| 27 // being synced. On windows and linux, this runs on the | 28 // being synced. On windows and linux, this runs on the |
| 28 // DB thread. | 29 // DB thread. |
| 29 MODEL_SAFE_GROUP_COUNT, | 30 MODEL_SAFE_GROUP_COUNT, |
| 30 }; | 31 }; |
| 31 | 32 |
| 33 std::string ModelSafeGroupToString(ModelSafeGroup group); |
| 34 |
| 32 // The Syncer uses a ModelSafeWorker for all tasks that could potentially | 35 // The Syncer uses a ModelSafeWorker for all tasks that could potentially |
| 33 // modify syncable entries (e.g under a WriteTransaction). The ModelSafeWorker | 36 // modify syncable entries (e.g under a WriteTransaction). The ModelSafeWorker |
| 34 // only knows how to do one thing, and that is take some work (in a fully | 37 // only knows how to do one thing, and that is take some work (in a fully |
| 35 // pre-bound callback) and have it performed (as in Run()) from a thread which | 38 // pre-bound callback) and have it performed (as in Run()) from a thread which |
| 36 // is guaranteed to be "model-safe", where "safe" refers to not allowing us to | 39 // is guaranteed to be "model-safe", where "safe" refers to not allowing us to |
| 37 // cause an embedding application model to fall out of sync with the | 40 // cause an embedding application model to fall out of sync with the |
| 38 // syncable::Directory due to a race. | 41 // syncable::Directory due to a race. |
| 39 class ModelSafeWorker : public base::RefCountedThreadSafe<ModelSafeWorker> { | 42 class ModelSafeWorker : public base::RefCountedThreadSafe<ModelSafeWorker> { |
| 40 public: | 43 public: |
| 41 ModelSafeWorker() { } | 44 ModelSafeWorker() { } |
| (...skipping 14 matching lines...) Expand all Loading... |
| 56 // this worker. If this returns true, then it should be safe to operate | 59 // this worker. If this returns true, then it should be safe to operate |
| 57 // on models that are in this worker's group. If this returns false, | 60 // on models that are in this worker's group. If this returns false, |
| 58 // such work should not be attempted. | 61 // such work should not be attempted. |
| 59 virtual bool CurrentThreadIsWorkThread() { | 62 virtual bool CurrentThreadIsWorkThread() { |
| 60 // The passive group is not the work thread for any browser model. | 63 // The passive group is not the work thread for any browser model. |
| 61 return false; | 64 return false; |
| 62 } | 65 } |
| 63 | 66 |
| 64 private: | 67 private: |
| 65 friend class base::RefCountedThreadSafe<ModelSafeWorker>; | 68 friend class base::RefCountedThreadSafe<ModelSafeWorker>; |
| 66 | 69 |
| 67 DISALLOW_COPY_AND_ASSIGN(ModelSafeWorker); | 70 DISALLOW_COPY_AND_ASSIGN(ModelSafeWorker); |
| 68 }; | 71 }; |
| 69 | 72 |
| 70 // A map that details which ModelSafeGroup each syncable::ModelType | 73 // A map that details which ModelSafeGroup each syncable::ModelType |
| 71 // belongs to. Routing info can change in response to the user enabling / | 74 // belongs to. Routing info can change in response to the user enabling / |
| 72 // disabling sync for certain types, as well as model association completions. | 75 // disabling sync for certain types, as well as model association completions. |
| 73 typedef std::map<syncable::ModelType, ModelSafeGroup> | 76 typedef std::map<syncable::ModelType, ModelSafeGroup> |
| 74 ModelSafeRoutingInfo; | 77 ModelSafeRoutingInfo; |
| 75 | 78 |
| 76 ModelSafeGroup GetGroupForModelType(const syncable::ModelType type, | 79 ModelSafeGroup GetGroupForModelType(const syncable::ModelType type, |
| (...skipping 20 matching lines...) Expand all Loading... |
| 97 virtual void GetModelSafeRoutingInfo(ModelSafeRoutingInfo* out) = 0; | 100 virtual void GetModelSafeRoutingInfo(ModelSafeRoutingInfo* out) = 0; |
| 98 protected: | 101 protected: |
| 99 virtual ~ModelSafeWorkerRegistrar() {} | 102 virtual ~ModelSafeWorkerRegistrar() {} |
| 100 private: | 103 private: |
| 101 DISALLOW_COPY_AND_ASSIGN(ModelSafeWorkerRegistrar); | 104 DISALLOW_COPY_AND_ASSIGN(ModelSafeWorkerRegistrar); |
| 102 }; | 105 }; |
| 103 | 106 |
| 104 } // namespace browser_sync | 107 } // namespace browser_sync |
| 105 | 108 |
| 106 #endif // CHROME_BROWSER_SYNC_ENGINE_MODEL_SAFE_WORKER_H_ | 109 #endif // CHROME_BROWSER_SYNC_ENGINE_MODEL_SAFE_WORKER_H_ |
| OLD | NEW |