| Index: chrome/browser/sync/sessions/session_state.h
|
| diff --git a/chrome/browser/sync/sessions/session_state.h b/chrome/browser/sync/sessions/session_state.h
|
| deleted file mode 100644
|
| index 994e983c82d1c265c61ba9bfa13bf8ce7f7d589f..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/sync/sessions/session_state.h
|
| +++ /dev/null
|
| @@ -1,329 +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.
|
| -
|
| -// The 'sessions' namespace comprises all the pieces of state that are
|
| -// combined to form a SyncSession instance. In that way, it can be thought of
|
| -// as an extension of the SyncSession type itself. Session scoping gives
|
| -// context to things like "conflict progress", "update progress", etc, and the
|
| -// separation this file provides allows clients to only include the parts they
|
| -// need rather than the entire session stack.
|
| -
|
| -#ifndef CHROME_BROWSER_SYNC_SESSIONS_SESSION_STATE_H_
|
| -#define CHROME_BROWSER_SYNC_SESSIONS_SESSION_STATE_H_
|
| -#pragma once
|
| -
|
| -#include <map>
|
| -#include <set>
|
| -#include <string>
|
| -#include <utility>
|
| -#include <vector>
|
| -
|
| -#include "base/basictypes.h"
|
| -#include "chrome/browser/sync/engine/syncer_types.h"
|
| -#include "chrome/browser/sync/engine/syncproto.h"
|
| -#include "chrome/browser/sync/sessions/ordered_commit_set.h"
|
| -#include "chrome/browser/sync/protocol/sync_protocol_error.h"
|
| -#include "chrome/browser/sync/syncable/model_type.h"
|
| -#include "chrome/browser/sync/syncable/model_type_payload_map.h"
|
| -#include "chrome/browser/sync/syncable/syncable.h"
|
| -
|
| -namespace base {
|
| -class DictionaryValue;
|
| -}
|
| -
|
| -namespace browser_sync {
|
| -namespace sessions {
|
| -
|
| -class UpdateProgress;
|
| -
|
| -// A container for the source of a sync session. This includes the update
|
| -// source, the datatypes triggering the sync session, and possible session
|
| -// specific payloads which should be sent to the server.
|
| -struct SyncSourceInfo {
|
| - SyncSourceInfo();
|
| - explicit SyncSourceInfo(const syncable::ModelTypePayloadMap& t);
|
| - SyncSourceInfo(
|
| - const sync_pb::GetUpdatesCallerInfo::GetUpdatesSource& u,
|
| - const syncable::ModelTypePayloadMap& t);
|
| - ~SyncSourceInfo();
|
| -
|
| - // Caller takes ownership of the returned dictionary.
|
| - base::DictionaryValue* ToValue() const;
|
| -
|
| - sync_pb::GetUpdatesCallerInfo::GetUpdatesSource updates_source;
|
| - syncable::ModelTypePayloadMap types;
|
| -};
|
| -
|
| -// Data pertaining to the status of an active Syncer object.
|
| -struct SyncerStatus {
|
| - SyncerStatus();
|
| - ~SyncerStatus();
|
| -
|
| - // Caller takes ownership of the returned dictionary.
|
| - base::DictionaryValue* ToValue() const;
|
| -
|
| - // True when we get such an INVALID_STORE error from the server.
|
| - bool invalid_store;
|
| - int num_successful_commits;
|
| - // This is needed for monitoring extensions activity.
|
| - int num_successful_bookmark_commits;
|
| -
|
| - // Download event counters.
|
| - int num_updates_downloaded_total;
|
| - int num_tombstone_updates_downloaded_total;
|
| -
|
| - // If the syncer encountered a MIGRATION_DONE code, these are the types that
|
| - // the client must now "migrate", by purging and re-downloading all updates.
|
| - syncable::ModelTypeSet types_needing_local_migration;
|
| -
|
| - // Overwrites due to conflict resolution counters.
|
| - int num_local_overwrites;
|
| - int num_server_overwrites;
|
| -};
|
| -
|
| -// Counters for various errors that can occur repeatedly during a sync session.
|
| -// TODO(lipalani) : Rename this structure to Error.
|
| -struct ErrorCounters {
|
| - ErrorCounters();
|
| -
|
| - // Any protocol errors that we received during this sync session.
|
| - SyncProtocolError sync_protocol_error;
|
| -
|
| - // Records the most recent results of PostCommit and GetUpdates commands.
|
| - SyncerError last_download_updates_result;
|
| - SyncerError last_post_commit_result;
|
| - SyncerError last_process_commit_response_result;
|
| -};
|
| -
|
| -// Caller takes ownership of the returned dictionary.
|
| -base::DictionaryValue* DownloadProgressMarkersToValue(
|
| - const std::string
|
| - (&download_progress_markers)[syncable::MODEL_TYPE_COUNT]);
|
| -
|
| -// An immutable snapshot of state from a SyncSession. Convenient to use as
|
| -// part of notifications as it is inherently thread-safe.
|
| -struct SyncSessionSnapshot {
|
| - SyncSessionSnapshot(
|
| - const SyncerStatus& syncer_status,
|
| - const ErrorCounters& errors,
|
| - int64 num_server_changes_remaining,
|
| - bool is_share_usable,
|
| - syncable::ModelTypeSet initial_sync_ended,
|
| - const std::string
|
| - (&download_progress_markers)[syncable::MODEL_TYPE_COUNT],
|
| - bool more_to_sync,
|
| - bool is_silenced,
|
| - int64 unsynced_count,
|
| - int num_encryption_conflicts,
|
| - int num_hierarchy_conflicts,
|
| - int num_simple_conflicts,
|
| - int num_server_conflicts,
|
| - bool did_commit_items,
|
| - const SyncSourceInfo& source,
|
| - size_t num_entries,
|
| - base::Time sync_start_time,
|
| - bool retry_scheduled);
|
| - ~SyncSessionSnapshot();
|
| -
|
| - // Caller takes ownership of the returned dictionary.
|
| - base::DictionaryValue* ToValue() const;
|
| -
|
| - std::string ToString() const;
|
| -
|
| - const SyncerStatus syncer_status;
|
| - const ErrorCounters errors;
|
| - const int64 num_server_changes_remaining;
|
| - const bool is_share_usable;
|
| - const syncable::ModelTypeSet initial_sync_ended;
|
| - const std::string download_progress_markers[syncable::MODEL_TYPE_COUNT];
|
| - const bool has_more_to_sync;
|
| - const bool is_silenced;
|
| - const int64 unsynced_count;
|
| - const int num_encryption_conflicts;
|
| - const int num_hierarchy_conflicts;
|
| - const int num_simple_conflicts;
|
| - const int num_server_conflicts;
|
| - const bool did_commit_items;
|
| - const SyncSourceInfo source;
|
| - const size_t num_entries;
|
| - base::Time sync_start_time;
|
| - const bool retry_scheduled;
|
| -};
|
| -
|
| -// Tracks progress of conflicts and their resolutions.
|
| -class ConflictProgress {
|
| - public:
|
| - explicit ConflictProgress(bool* dirty_flag);
|
| - ~ConflictProgress();
|
| -
|
| - bool HasSimpleConflictItem(const syncable::Id &id) const;
|
| -
|
| - // Various mutators for tracking commit conflicts.
|
| - void AddSimpleConflictingItemById(const syncable::Id& the_id);
|
| - void EraseSimpleConflictingItemById(const syncable::Id& the_id);
|
| - std::set<syncable::Id>::const_iterator SimpleConflictingItemsBegin() const;
|
| - std::set<syncable::Id>::const_iterator SimpleConflictingItemsEnd() const;
|
| - int SimpleConflictingItemsSize() const {
|
| - return simple_conflicting_item_ids_.size();
|
| - }
|
| -
|
| - // Mutators for unresolvable conflicting items (see description below).
|
| - void AddEncryptionConflictingItemById(const syncable::Id& the_id);
|
| - int EncryptionConflictingItemsSize() const {
|
| - return num_encryption_conflicting_items;
|
| - }
|
| -
|
| - void AddHierarchyConflictingItemById(const syncable::Id& id);
|
| - int HierarchyConflictingItemsSize() const {
|
| - return num_hierarchy_conflicting_items;
|
| - }
|
| -
|
| - void AddServerConflictingItemById(const syncable::Id& id);
|
| - int ServerConflictingItemsSize() const {
|
| - return num_server_conflicting_items;
|
| - }
|
| -
|
| - private:
|
| - // Conflicts that occur when local and server changes collide and can be
|
| - // resolved locally.
|
| - std::set<syncable::Id> simple_conflicting_item_ids_;
|
| -
|
| - // Unresolvable conflicts are not processed by the conflict resolver. We wait
|
| - // and hope the server will provide us with an update that resolves these
|
| - // conflicts.
|
| - std::set<syncable::Id> unresolvable_conflicting_item_ids_;
|
| -
|
| - size_t num_server_conflicting_items;
|
| - size_t num_hierarchy_conflicting_items;
|
| - size_t num_encryption_conflicting_items;
|
| -
|
| - // Whether a conflicting item was added or removed since
|
| - // the last call to reset_progress_changed(), if any. In practice this
|
| - // points to StatusController::is_dirty_.
|
| - bool* dirty_;
|
| -};
|
| -
|
| -typedef std::pair<VerifyResult, sync_pb::SyncEntity> VerifiedUpdate;
|
| -typedef std::pair<UpdateAttemptResponse, syncable::Id> AppliedUpdate;
|
| -
|
| -// Tracks update application and verification.
|
| -class UpdateProgress {
|
| - public:
|
| - UpdateProgress();
|
| - ~UpdateProgress();
|
| -
|
| - void AddVerifyResult(const VerifyResult& verify_result,
|
| - const sync_pb::SyncEntity& entity);
|
| -
|
| - // Log a successful or failing update attempt.
|
| - void AddAppliedUpdate(const UpdateAttemptResponse& response,
|
| - const syncable::Id& id);
|
| -
|
| - // Various iterators.
|
| - std::vector<AppliedUpdate>::iterator AppliedUpdatesBegin();
|
| - std::vector<VerifiedUpdate>::const_iterator VerifiedUpdatesBegin() const;
|
| - std::vector<AppliedUpdate>::const_iterator AppliedUpdatesEnd() const;
|
| - std::vector<VerifiedUpdate>::const_iterator VerifiedUpdatesEnd() const;
|
| -
|
| - // Returns the number of update application attempts. This includes both
|
| - // failures and successes.
|
| - int AppliedUpdatesSize() const { return applied_updates_.size(); }
|
| - int VerifiedUpdatesSize() const { return verified_updates_.size(); }
|
| - bool HasVerifiedUpdates() const { return !verified_updates_.empty(); }
|
| - bool HasAppliedUpdates() const { return !applied_updates_.empty(); }
|
| - void ClearVerifiedUpdates() { verified_updates_.clear(); }
|
| -
|
| - // Count the number of successful update applications that have happend this
|
| - // cycle. Note that if an item is successfully applied twice, it will be
|
| - // double counted here.
|
| - int SuccessfullyAppliedUpdateCount() const;
|
| -
|
| - // Returns true if at least one update application failed due to a conflict
|
| - // during this sync cycle.
|
| - bool HasConflictingUpdates() const;
|
| -
|
| - private:
|
| - // Container for updates that passed verification.
|
| - std::vector<VerifiedUpdate> verified_updates_;
|
| -
|
| - // Stores the result of the various ApplyUpdate attempts we've made.
|
| - // May contain duplicate entries.
|
| - std::vector<AppliedUpdate> applied_updates_;
|
| -};
|
| -
|
| -struct SyncCycleControlParameters {
|
| - SyncCycleControlParameters() : conflicts_resolved(false),
|
| - items_committed(false),
|
| - debug_info_sent(false) {}
|
| - // Set to true by ResolveConflictsCommand if any forward progress was made.
|
| - bool conflicts_resolved;
|
| -
|
| - // Set to true by PostCommitMessageCommand if any commits were successful.
|
| - bool items_committed;
|
| -
|
| - // True indicates debug info has been sent once this session.
|
| - bool debug_info_sent;
|
| -};
|
| -
|
| -// DirtyOnWrite wraps a value such that any write operation will update a
|
| -// specified dirty bit, which can be used to determine if a notification should
|
| -// be sent due to state change.
|
| -template <typename T>
|
| -class DirtyOnWrite {
|
| - public:
|
| - explicit DirtyOnWrite(bool* dirty) : dirty_(dirty) {}
|
| - DirtyOnWrite(bool* dirty, const T& t) : t_(t), dirty_(dirty) {}
|
| - T* mutate() {
|
| - *dirty_ = true;
|
| - return &t_;
|
| - }
|
| - const T& value() const { return t_; }
|
| - private:
|
| - T t_;
|
| - bool* dirty_;
|
| -};
|
| -
|
| -// The next 3 structures declare how all the state involved in running a sync
|
| -// cycle is divided between global scope (applies to all model types),
|
| -// ModelSafeGroup scope (applies to all data types in a group), and single
|
| -// model type scope. Within this breakdown, each struct declares which bits
|
| -// of state are dirty-on-write and should incur dirty bit updates if changed.
|
| -
|
| -// Grouping of all state that applies to all model types. Note that some
|
| -// components of the global grouping can internally implement finer grained
|
| -// scope control (such as OrderedCommitSet), but the top level entity is still
|
| -// a singleton with respect to model types.
|
| -struct AllModelTypeState {
|
| - explicit AllModelTypeState(bool* dirty_flag);
|
| - ~AllModelTypeState();
|
| -
|
| - // Commits for all model types are bundled together into a single message.
|
| - ClientToServerMessage commit_message;
|
| - ClientToServerResponse commit_response;
|
| - // We GetUpdates for some combination of types at once.
|
| - // requested_update_types stores the set of types which were requested.
|
| - syncable::ModelTypeSet updates_request_types;
|
| - ClientToServerResponse updates_response;
|
| - // Used to build the shared commit message.
|
| - DirtyOnWrite<std::vector<int64> > unsynced_handles;
|
| - DirtyOnWrite<SyncerStatus> syncer_status;
|
| - DirtyOnWrite<ErrorCounters> error;
|
| - SyncCycleControlParameters control_params;
|
| - DirtyOnWrite<int64> num_server_changes_remaining;
|
| - OrderedCommitSet commit_set;
|
| -};
|
| -
|
| -// Grouping of all state that applies to a single ModelSafeGroup.
|
| -struct PerModelSafeGroupState {
|
| - explicit PerModelSafeGroupState(bool* dirty_flag);
|
| - ~PerModelSafeGroupState();
|
| -
|
| - UpdateProgress update_progress;
|
| - ConflictProgress conflict_progress;
|
| -};
|
| -
|
| -} // namespace sessions
|
| -} // namespace browser_sync
|
| -
|
| -#endif // CHROME_BROWSER_SYNC_SESSIONS_SESSION_STATE_H_
|
|
|