OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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 #include "chrome/browser/sync/engine/syncapi.h" | 5 #include "chrome/browser/sync/engine/syncapi.h" |
6 | 6 |
7 #include <bitset> | 7 #include <bitset> |
8 #include <iomanip> | 8 #include <iomanip> |
9 #include <list> | 9 #include <list> |
10 #include <string> | 10 #include <string> |
(...skipping 1045 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1056 TalkMediator* talk_mediator() { return talk_mediator_.get(); } | 1056 TalkMediator* talk_mediator() { return talk_mediator_.get(); } |
1057 void set_observer(SyncManager::Observer* observer) { observer_ = observer; } | 1057 void set_observer(SyncManager::Observer* observer) { observer_ = observer; } |
1058 UserShare* GetUserShare() { return &share_; } | 1058 UserShare* GetUserShare() { return &share_; } |
1059 | 1059 |
1060 // Return the currently active (validated) username for use with syncable | 1060 // Return the currently active (validated) username for use with syncable |
1061 // types. | 1061 // types. |
1062 const std::string& username_for_share() const { | 1062 const std::string& username_for_share() const { |
1063 return share_.name; | 1063 return share_.name; |
1064 } | 1064 } |
1065 | 1065 |
1066 // Note about SyncManager::Status implementation: Status is a trimmed | 1066 Status GetStatus(); |
1067 // down AllStatus::Status, augmented with authentication failure information | |
1068 // gathered from the internal AuthWatcher. The sync UI itself hooks up to | |
1069 // various sources like the AuthWatcher individually, but with syncapi we try | |
1070 // to keep everything status-related in one place. This means we have to | |
1071 // privately manage state about authentication failures, and whenever the | |
1072 // status or status summary is requested we aggregate this state with | |
1073 // AllStatus::Status information. | |
1074 Status ComputeAggregatedStatus(); | |
1075 Status::Summary ComputeAggregatedStatusSummary(); | |
1076 | 1067 |
1077 // See SyncManager::Shutdown for information. | 1068 // See SyncManager::Shutdown for information. |
1078 void Shutdown(); | 1069 void Shutdown(); |
1079 | 1070 |
1080 // Whether we're initialized to the point of being able to accept changes | 1071 // Whether we're initialized to the point of being able to accept changes |
1081 // (and hence allow transaction creation). See initialized_ for details. | 1072 // (and hence allow transaction creation). See initialized_ for details. |
1082 bool initialized() const { | 1073 bool initialized() const { |
1083 AutoLock lock(initialized_mutex_); | 1074 AutoLock lock(initialized_mutex_); |
1084 return initialized_; | 1075 return initialized_; |
1085 } | 1076 } |
(...skipping 971 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2057 change_buffers_[type].PushDeletedItem(id); | 2048 change_buffers_[type].PushDeletedItem(id); |
2058 else if (exists_now && existed_before && VisiblePropertiesDiffer(*i, e)) | 2049 else if (exists_now && existed_before && VisiblePropertiesDiffer(*i, e)) |
2059 change_buffers_[type].PushUpdatedItem(id, VisiblePositionsDiffer(*i, e)); | 2050 change_buffers_[type].PushUpdatedItem(id, VisiblePositionsDiffer(*i, e)); |
2060 | 2051 |
2061 SetExtraChangeRecordData(id, type, &change_buffers_[type], | 2052 SetExtraChangeRecordData(id, type, &change_buffers_[type], |
2062 dir_manager()->cryptographer(), *i, | 2053 dir_manager()->cryptographer(), *i, |
2063 existed_before, exists_now); | 2054 existed_before, exists_now); |
2064 } | 2055 } |
2065 } | 2056 } |
2066 | 2057 |
2067 SyncManager::Status::Summary | 2058 SyncManager::Status SyncManager::SyncInternal::GetStatus() { |
2068 SyncManager::SyncInternal::ComputeAggregatedStatusSummary() { | 2059 return allstatus_.status(); |
2069 switch (allstatus_.status().icon) { | |
2070 case AllStatus::OFFLINE: | |
2071 return Status::OFFLINE; | |
2072 case AllStatus::OFFLINE_UNSYNCED: | |
2073 return Status::OFFLINE_UNSYNCED; | |
2074 case AllStatus::SYNCING: | |
2075 return Status::SYNCING; | |
2076 case AllStatus::READY: | |
2077 return Status::READY; | |
2078 case AllStatus::CONFLICT: | |
2079 return Status::CONFLICT; | |
2080 case AllStatus::OFFLINE_UNUSABLE: | |
2081 return Status::OFFLINE_UNUSABLE; | |
2082 default: | |
2083 return Status::INVALID; | |
2084 } | |
2085 } | |
2086 | |
2087 SyncManager::Status SyncManager::SyncInternal::ComputeAggregatedStatus() { | |
2088 Status return_status = | |
2089 { ComputeAggregatedStatusSummary(), | |
2090 allstatus_.status().authenticated, | |
2091 allstatus_.status().server_up, | |
2092 allstatus_.status().server_reachable, | |
2093 allstatus_.status().server_broken, | |
2094 allstatus_.status().notifications_enabled, | |
2095 allstatus_.status().notifications_received, | |
2096 allstatus_.status().notifications_sent, | |
2097 allstatus_.status().unsynced_count, | |
2098 allstatus_.status().conflicting_count, | |
2099 allstatus_.status().syncing, | |
2100 allstatus_.status().initial_sync_ended, | |
2101 allstatus_.status().syncer_stuck, | |
2102 allstatus_.status().updates_available, | |
2103 allstatus_.status().updates_received, | |
2104 allstatus_.status().disk_full, | |
2105 false, // TODO(ncarter): invalid store? | |
2106 allstatus_.status().max_consecutive_errors}; | |
2107 return return_status; | |
2108 } | 2060 } |
2109 | 2061 |
2110 void SyncManager::SyncInternal::OnSyncEngineEvent( | 2062 void SyncManager::SyncInternal::OnSyncEngineEvent( |
2111 const SyncEngineEvent& event) { | 2063 const SyncEngineEvent& event) { |
2112 if (!observer_) | 2064 if (!observer_) |
2113 return; | 2065 return; |
2114 | 2066 |
2115 // Only send an event if this is due to a cycle ending and this cycle | 2067 // Only send an event if this is due to a cycle ending and this cycle |
2116 // concludes a canonical "sync" process; that is, based on what is known | 2068 // concludes a canonical "sync" process; that is, based on what is known |
2117 // locally we are "all happy" and up-to-date. There may be new changes on | 2069 // locally we are "all happy" and up-to-date. There may be new changes on |
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2303 if (VLOG_IS_ON(1)) { | 2255 if (VLOG_IS_ON(1)) { |
2304 std::string encoded_state; | 2256 std::string encoded_state; |
2305 base::Base64Encode(state, &encoded_state); | 2257 base::Base64Encode(state, &encoded_state); |
2306 VLOG(1) << "Writing notification state: " << encoded_state; | 2258 VLOG(1) << "Writing notification state: " << encoded_state; |
2307 } | 2259 } |
2308 lookup->SetNotificationState(state); | 2260 lookup->SetNotificationState(state); |
2309 lookup->SaveChanges(); | 2261 lookup->SaveChanges(); |
2310 } | 2262 } |
2311 | 2263 |
2312 SyncManager::Status::Summary SyncManager::GetStatusSummary() const { | 2264 SyncManager::Status::Summary SyncManager::GetStatusSummary() const { |
2313 return data_->ComputeAggregatedStatusSummary(); | 2265 return data_->GetStatus().summary; |
2314 } | 2266 } |
2315 | 2267 |
2316 SyncManager::Status SyncManager::GetDetailedStatus() const { | 2268 SyncManager::Status SyncManager::GetDetailedStatus() const { |
2317 return data_->ComputeAggregatedStatus(); | 2269 return data_->GetStatus(); |
2318 } | 2270 } |
2319 | 2271 |
2320 SyncManager::SyncInternal* SyncManager::GetImpl() const { return data_; } | 2272 SyncManager::SyncInternal* SyncManager::GetImpl() const { return data_; } |
2321 | 2273 |
2322 void SyncManager::SaveChanges() { | 2274 void SyncManager::SaveChanges() { |
2323 data_->SaveChanges(); | 2275 data_->SaveChanges(); |
2324 } | 2276 } |
2325 | 2277 |
2326 void SyncManager::SyncInternal::SaveChanges() { | 2278 void SyncManager::SyncInternal::SaveChanges() { |
2327 syncable::ScopedDirLookup lookup(dir_manager(), username_for_share()); | 2279 syncable::ScopedDirLookup lookup(dir_manager(), username_for_share()); |
(...skipping 23 matching lines...) Expand all Loading... |
2351 DCHECK(data_->initialized()) << "GetUserShare requires initialization!"; | 2303 DCHECK(data_->initialized()) << "GetUserShare requires initialization!"; |
2352 return data_->GetUserShare(); | 2304 return data_->GetUserShare(); |
2353 } | 2305 } |
2354 | 2306 |
2355 bool SyncManager::HasUnsyncedItems() const { | 2307 bool SyncManager::HasUnsyncedItems() const { |
2356 sync_api::ReadTransaction trans(GetUserShare()); | 2308 sync_api::ReadTransaction trans(GetUserShare()); |
2357 return (trans.GetWrappedTrans()->directory()->unsynced_entity_count() != 0); | 2309 return (trans.GetWrappedTrans()->directory()->unsynced_entity_count() != 0); |
2358 } | 2310 } |
2359 | 2311 |
2360 } // namespace sync_api | 2312 } // namespace sync_api |
OLD | NEW |