Index: chrome/browser/sync/sessions/status_controller.h |
diff --git a/chrome/browser/sync/sessions/status_controller.h b/chrome/browser/sync/sessions/status_controller.h |
deleted file mode 100644 |
index f4fb4ecbf8f882040a96037858ccaf8cf283b81d..0000000000000000000000000000000000000000 |
--- a/chrome/browser/sync/sessions/status_controller.h |
+++ /dev/null |
@@ -1,297 +0,0 @@ |
-// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-// StatusController handles all counter and status related number crunching and |
-// state tracking on behalf of a SyncSession. It 'controls' the model data |
-// defined in session_state.h. The most important feature of StatusController |
-// is the ScopedModelSafetyRestriction. When one of these is active, the |
-// underlying data set exposed via accessors is swapped out to the appropriate |
-// set for the restricted ModelSafeGroup behind the scenes. For example, if |
-// GROUP_UI is set, then accessors such as conflict_progress() and commit_ids() |
-// are implicitly restricted to returning only data pertaining to GROUP_UI. |
-// You can see which parts of status fall into this "restricted" category, or |
-// the global "shared" category for all model types, by looking at the struct |
-// declarations in session_state.h. If these accessors are invoked without a |
-// restriction in place, this is a violation and will cause debug assertions |
-// to surface improper use of the API in development. Likewise for |
-// invocation of "shared" accessors when a restriction is in place; for |
-// safety's sake, an assertion will fire. |
-// |
-// NOTE: There is no concurrent access protection provided by this class. It |
-// assumes one single thread is accessing this class for each unique |
-// ModelSafeGroup, and also only one single thread (in practice, the |
-// SyncerThread) responsible for all "shared" access when no restriction is in |
-// place. Thus, every bit of data is to be accessed mutually exclusively with |
-// respect to threads. |
-// |
-// StatusController can also track if changes occur to certain parts of state |
-// so that various parts of the sync engine can avoid broadcasting |
-// notifications if no changes occurred. |
- |
-#ifndef CHROME_BROWSER_SYNC_SESSIONS_STATUS_CONTROLLER_H_ |
-#define CHROME_BROWSER_SYNC_SESSIONS_STATUS_CONTROLLER_H_ |
-#pragma once |
- |
-#include <vector> |
-#include <map> |
- |
-#include "base/logging.h" |
-#include "base/stl_util.h" |
-#include "base/time.h" |
-#include "chrome/browser/sync/sessions/ordered_commit_set.h" |
-#include "chrome/browser/sync/sessions/session_state.h" |
- |
-namespace browser_sync { |
-namespace sessions { |
- |
-class StatusController { |
- public: |
- explicit StatusController(const ModelSafeRoutingInfo& routes); |
- ~StatusController(); |
- |
- // Returns true if some portion of the session state has changed (is dirty) |
- // since it was created or was last reset. |
- bool TestAndClearIsDirty(); |
- |
- // Progress counters. All const methods may return NULL if the |
- // progress structure doesn't exist, but all non-const methods |
- // auto-create. |
- const ConflictProgress* conflict_progress() const; |
- ConflictProgress* mutable_conflict_progress(); |
- const UpdateProgress* update_progress() const; |
- UpdateProgress* mutable_update_progress(); |
- const ConflictProgress* GetUnrestrictedConflictProgress( |
- ModelSafeGroup group) const; |
- ConflictProgress* GetUnrestrictedMutableConflictProgressForTest( |
- ModelSafeGroup group); |
- const UpdateProgress* GetUnrestrictedUpdateProgress( |
- ModelSafeGroup group) const; |
- UpdateProgress* GetUnrestrictedMutableUpdateProgressForTest( |
- ModelSafeGroup group); |
- |
- // ClientToServer messages. |
- const ClientToServerMessage& commit_message() { |
- return shared_.commit_message; |
- } |
- ClientToServerMessage* mutable_commit_message() { |
- return &shared_.commit_message; |
- } |
- const ClientToServerResponse& commit_response() const { |
- return shared_.commit_response; |
- } |
- ClientToServerResponse* mutable_commit_response() { |
- return &shared_.commit_response; |
- } |
- const syncable::ModelTypeSet updates_request_types() const { |
- return shared_.updates_request_types; |
- } |
- void set_updates_request_types(syncable::ModelTypeSet value) { |
- shared_.updates_request_types = value; |
- } |
- const ClientToServerResponse& updates_response() const { |
- return shared_.updates_response; |
- } |
- ClientToServerResponse* mutable_updates_response() { |
- return &shared_.updates_response; |
- } |
- |
- // Errors and SyncerStatus. |
- const ErrorCounters& error() const { |
- return shared_.error.value(); |
- } |
- const SyncerStatus& syncer_status() const { |
- return shared_.syncer_status.value(); |
- } |
- |
- // Changelog related state. |
- int64 num_server_changes_remaining() const { |
- return shared_.num_server_changes_remaining.value(); |
- } |
- |
- // Commit path data. |
- const std::vector<syncable::Id>& commit_ids() const { |
- DCHECK(!group_restriction_in_effect_) << "Group restriction in effect!"; |
- return shared_.commit_set.GetAllCommitIds(); |
- } |
- const OrderedCommitSet::Projection& commit_id_projection() { |
- DCHECK(group_restriction_in_effect_) |
- << "No group restriction for projection."; |
- return shared_.commit_set.GetCommitIdProjection(group_restriction_); |
- } |
- const syncable::Id& GetCommitIdAt(size_t index) { |
- DCHECK(CurrentCommitIdProjectionHasIndex(index)); |
- return shared_.commit_set.GetCommitIdAt(index); |
- } |
- syncable::ModelType GetCommitModelTypeAt(size_t index) { |
- DCHECK(CurrentCommitIdProjectionHasIndex(index)); |
- return shared_.commit_set.GetModelTypeAt(index); |
- } |
- syncable::ModelType GetUnrestrictedCommitModelTypeAt(size_t index) const { |
- DCHECK(!group_restriction_in_effect_) << "Group restriction in effect!"; |
- return shared_.commit_set.GetModelTypeAt(index); |
- } |
- const std::vector<int64>& unsynced_handles() const { |
- DCHECK(!group_restriction_in_effect_) |
- << "unsynced_handles is unrestricted."; |
- return shared_.unsynced_handles.value(); |
- } |
- |
- // Control parameters for sync cycles. |
- bool conflicts_resolved() const { |
- return shared_.control_params.conflicts_resolved; |
- } |
- bool did_commit_items() const { |
- return shared_.control_params.items_committed; |
- } |
- |
- // If a GetUpdates for any data type resulted in downloading an update that |
- // is in conflict, this method returns true. |
- // Note: this includes unresolvable conflicts. |
- bool HasConflictingUpdates() const; |
- |
- // Aggregate sums of various types of conflict counters accross all |
- // ConflictProgress objects (one for each ModelSafeGroup currently in-use). |
- int TotalNumEncryptionConflictingItems() const; |
- int TotalNumHierarchyConflictingItems() const; |
- int TotalNumServerConflictingItems() const; |
- int TotalNumSimpleConflictingItems() const; |
- |
- // Aggregate sum of SimpleConflictingItemSize() and other |
- // ${Type}ConflictingItemSize() methods over all ConflictProgress objects (one |
- // for each ModelSafeGroup currently in-use). |
- int TotalNumConflictingItems() const; |
- |
- // Returns the number of updates received from the sync server. |
- int64 CountUpdates() const; |
- |
- // Returns true iff any of the commit ids added during this session are |
- // bookmark related, and the bookmark group restriction is in effect. |
- bool HasBookmarkCommitActivity() const { |
- return ActiveGroupRestrictionIncludesModel(syncable::BOOKMARKS) && |
- shared_.commit_set.HasBookmarkCommitId(); |
- } |
- |
- // Returns true if the last download_updates_command received a valid |
- // server response. |
- bool download_updates_succeeded() const { |
- return updates_response().has_get_updates(); |
- } |
- |
- // Returns true if the last updates response indicated that we were fully |
- // up to date. This is subtle: if it's false, it could either mean that |
- // the server said there WAS more to download, or it could mean that we |
- // were unable to reach the server. If we didn't request every enabled |
- // datatype, then we can't say for sure that there's nothing left to |
- // download: in that case, this also returns false. |
- bool ServerSaysNothingMoreToDownload() const; |
- |
- ModelSafeGroup group_restriction() const { |
- return group_restriction_; |
- } |
- |
- base::Time sync_start_time() const { |
- // The time at which we sent the first GetUpdates command for this sync. |
- return sync_start_time_; |
- } |
- |
- // Check whether a particular model is included by the active group |
- // restriction. |
- bool ActiveGroupRestrictionIncludesModel(syncable::ModelType model) const { |
- if (!group_restriction_in_effect_) |
- return true; |
- ModelSafeRoutingInfo::const_iterator it = routing_info_.find(model); |
- if (it == routing_info_.end()) |
- return false; |
- return group_restriction() == it->second; |
- } |
- |
- // A toolbelt full of methods for updating counters and flags. |
- void set_num_server_changes_remaining(int64 changes_remaining); |
- void set_invalid_store(bool invalid_store); |
- void set_num_successful_bookmark_commits(int value); |
- void increment_num_successful_commits(); |
- void increment_num_successful_bookmark_commits(); |
- void increment_num_updates_downloaded_by(int value); |
- void increment_num_tombstone_updates_downloaded_by(int value); |
- void set_types_needing_local_migration(syncable::ModelTypeSet types); |
- void set_unsynced_handles(const std::vector<int64>& unsynced_handles); |
- void increment_num_local_overwrites(); |
- void increment_num_server_overwrites(); |
- void set_sync_protocol_error(const SyncProtocolError& error); |
- void set_last_download_updates_result(const SyncerError result); |
- void set_last_post_commit_result(const SyncerError result); |
- void set_last_process_commit_response_result(const SyncerError result); |
- |
- void set_commit_set(const OrderedCommitSet& commit_set); |
- void update_conflicts_resolved(bool resolved); |
- void reset_conflicts_resolved(); |
- void set_items_committed(); |
- |
- void UpdateStartTime(); |
- |
- void set_debug_info_sent(); |
- |
- bool debug_info_sent() const; |
- |
- private: |
- friend class ScopedModelSafeGroupRestriction; |
- |
- // Returns true iff the commit id projection for |group_restriction_| |
- // references position |index| into the full set of commit ids in play. |
- bool CurrentCommitIdProjectionHasIndex(size_t index); |
- |
- // Returns the state, if it exists, or NULL otherwise. |
- const PerModelSafeGroupState* GetModelSafeGroupState( |
- bool restrict, ModelSafeGroup group) const; |
- |
- // Helper to lazily create objects for per-ModelSafeGroup state. |
- PerModelSafeGroupState* GetOrCreateModelSafeGroupState( |
- bool restrict, ModelSafeGroup group); |
- |
- AllModelTypeState shared_; |
- std::map<ModelSafeGroup, PerModelSafeGroupState*> per_model_group_; |
- |
- STLValueDeleter<std::map<ModelSafeGroup, PerModelSafeGroupState*> > |
- per_model_group_deleter_; |
- |
- // Set to true if any DirtyOnWrite pieces of state we maintain are changed. |
- // Reset to false by TestAndClearIsDirty. |
- bool is_dirty_; |
- |
- // Used to fail read/write operations on state that don't obey the current |
- // active ModelSafeWorker contract. |
- bool group_restriction_in_effect_; |
- ModelSafeGroup group_restriction_; |
- |
- const ModelSafeRoutingInfo routing_info_; |
- |
- base::Time sync_start_time_; |
- |
- DISALLOW_COPY_AND_ASSIGN(StatusController); |
-}; |
- |
-// A utility to restrict access to only those parts of the given |
-// StatusController that pertain to the specified ModelSafeGroup. |
-class ScopedModelSafeGroupRestriction { |
- public: |
- ScopedModelSafeGroupRestriction(StatusController* to_restrict, |
- ModelSafeGroup restriction) |
- : status_(to_restrict) { |
- DCHECK(!status_->group_restriction_in_effect_); |
- status_->group_restriction_ = restriction; |
- status_->group_restriction_in_effect_ = true; |
- } |
- ~ScopedModelSafeGroupRestriction() { |
- DCHECK(status_->group_restriction_in_effect_); |
- status_->group_restriction_in_effect_ = false; |
- } |
- private: |
- StatusController* status_; |
- DISALLOW_COPY_AND_ASSIGN(ScopedModelSafeGroupRestriction); |
-}; |
- |
-} |
-} |
- |
-#endif // CHROME_BROWSER_SYNC_SESSIONS_STATUS_CONTROLLER_H_ |