Index: chrome/browser/sync/engine/cleanup_disabled_types_command.cc |
=================================================================== |
--- chrome/browser/sync/engine/cleanup_disabled_types_command.cc (revision 0) |
+++ chrome/browser/sync/engine/cleanup_disabled_types_command.cc (revision 0) |
@@ -0,0 +1,63 @@ |
+// Copyright (c) 2010 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. |
+ |
+#include "chrome/browser/sync/engine/cleanup_disabled_types_command.h" |
+ |
+#include "chrome/browser/sync/sessions/sync_session.h" |
+#include "chrome/browser/sync/sessions/sync_session_context.h" |
+#include "chrome/browser/sync/syncable/directory_manager.h" |
+#include "chrome/browser/sync/syncable/model_type.h" |
+#include "chrome/browser/sync/syncable/syncable.h" |
+ |
+namespace browser_sync { |
+ |
+CleanupDisabledTypesCommand::CleanupDisabledTypesCommand() {} |
+CleanupDisabledTypesCommand::~CleanupDisabledTypesCommand() {} |
+ |
+void CleanupDisabledTypesCommand::ExecuteImpl(sessions::SyncSession* session) { |
+ syncable::ModelTypeSet to_cleanup; |
+ for (int i = syncable::FIRST_REAL_MODEL_TYPE; |
+ i < syncable::MODEL_TYPE_COUNT; i++) { |
+ syncable::ModelType model_type = syncable::ModelTypeFromInt(i); |
+ |
+ if (session->routing_info().count(model_type)) |
+ continue; |
+ |
+ // The type isn't currently desired. Because a full directory purge is |
+ // slow, we avoid purging undesired types unless we have reason to believe |
+ // they were previously enabled. Because purging could theoretically fail, |
+ // on the first sync session (when there's no previous routing info) we pay |
+ // the full directory scan price once and do a "deep clean" of types that |
+ // may potentially need cleanup so that we converge to the correct state. |
+ // |
+ // in_previous | !in_previous |
+ // | |
+ // initial_sync_ended should clean | may have attempted cleanup |
+ // !initial_sync_ended should clean | may have never been enabled, or |
+ // | could have been disabled before |
+ // | initial sync ended and cleanup |
+ // | may not have happened yet |
+ // | (failure, browser restart |
+ // | before another sync session,..) |
+ const ModelSafeRoutingInfo& previous_routing = |
+ session->context()->previous_session_routing_info(); |
+ if (previous_routing.empty() || previous_routing.count(model_type)) |
+ to_cleanup.insert(model_type); |
+ } |
+ |
+ if (to_cleanup.empty()) |
+ return; |
+ |
+ syncable::ScopedDirLookup dir(session->context()->directory_manager(), |
+ session->context()->account_name()); |
+ if (!dir.good()) { |
+ LOG(ERROR) << "Scoped dir lookup failed!"; |
+ return; |
+ } |
+ |
+ dir->PurgeEntriesWithTypeIn(to_cleanup); |
+} |
+ |
+} // namespace browser_sync |
+ |
Property changes on: chrome\browser\sync\engine\cleanup_disabled_types_command.cc |
___________________________________________________________________ |
Added: svn:eol-style |
+ LF |