| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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_file_system/drive_backend/sync_engine_initializer.
h" | 5 #include "chrome/browser/sync_file_system/drive_backend/sync_engine_initializer.
h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/callback.h" | 8 #include "base/callback.h" |
| 9 #include "base/logging.h" | 9 #include "base/logging.h" |
| 10 #include "chrome/browser/drive/drive_api_service.h" | 10 #include "chrome/browser/drive/drive_api_service.h" |
| (...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 132 if (metadata_database_->HasSyncRoot()) { | 132 if (metadata_database_->HasSyncRoot()) { |
| 133 callback.Run(SYNC_STATUS_OK); | 133 callback.Run(SYNC_STATUS_OK); |
| 134 return; | 134 return; |
| 135 } | 135 } |
| 136 | 136 |
| 137 GetAboutResource(callback); | 137 GetAboutResource(callback); |
| 138 } | 138 } |
| 139 | 139 |
| 140 void SyncEngineInitializer::GetAboutResource( | 140 void SyncEngineInitializer::GetAboutResource( |
| 141 const SyncStatusCallback& callback) { | 141 const SyncStatusCallback& callback) { |
| 142 set_used_network(true); |
| 142 drive_service_->GetAboutResource( | 143 drive_service_->GetAboutResource( |
| 143 base::Bind(&SyncEngineInitializer::DidGetAboutResource, | 144 base::Bind(&SyncEngineInitializer::DidGetAboutResource, |
| 144 weak_ptr_factory_.GetWeakPtr(), callback)); | 145 weak_ptr_factory_.GetWeakPtr(), callback)); |
| 145 } | 146 } |
| 146 | 147 |
| 147 void SyncEngineInitializer::DidGetAboutResource( | 148 void SyncEngineInitializer::DidGetAboutResource( |
| 148 const SyncStatusCallback& callback, | 149 const SyncStatusCallback& callback, |
| 149 google_apis::GDataErrorCode error, | 150 google_apis::GDataErrorCode error, |
| 150 scoped_ptr<google_apis::AboutResource> about_resource) { | 151 scoped_ptr<google_apis::AboutResource> about_resource) { |
| 151 cancel_callback_.Reset(); | 152 cancel_callback_.Reset(); |
| 152 if (error != google_apis::HTTP_SUCCESS) { | 153 if (error != google_apis::HTTP_SUCCESS) { |
| 153 callback.Run(GDataErrorCodeToSyncStatusCode(error)); | 154 callback.Run(GDataErrorCodeToSyncStatusCode(error)); |
| 154 return; | 155 return; |
| 155 } | 156 } |
| 156 | 157 |
| 157 DCHECK(about_resource); | 158 DCHECK(about_resource); |
| 158 root_folder_id_ = about_resource->root_folder_id(); | 159 root_folder_id_ = about_resource->root_folder_id(); |
| 159 largest_change_id_ = about_resource->largest_change_id(); | 160 largest_change_id_ = about_resource->largest_change_id(); |
| 160 | 161 |
| 161 DCHECK(!root_folder_id_.empty()); | 162 DCHECK(!root_folder_id_.empty()); |
| 162 FindSyncRoot(callback); | 163 FindSyncRoot(callback); |
| 163 } | 164 } |
| 164 | 165 |
| 165 void SyncEngineInitializer::FindSyncRoot(const SyncStatusCallback& callback) { | 166 void SyncEngineInitializer::FindSyncRoot(const SyncStatusCallback& callback) { |
| 166 if (find_sync_root_retry_count_++ >= kMaxRetry) { | 167 if (find_sync_root_retry_count_++ >= kMaxRetry) { |
| 167 callback.Run(SYNC_STATUS_FAILED); | 168 callback.Run(SYNC_STATUS_FAILED); |
| 168 return; | 169 return; |
| 169 } | 170 } |
| 170 | 171 |
| 172 set_used_network(true); |
| 171 cancel_callback_ = drive_service_->SearchByTitle( | 173 cancel_callback_ = drive_service_->SearchByTitle( |
| 172 kSyncRootFolderTitle, | 174 kSyncRootFolderTitle, |
| 173 std::string(), // parent_folder_id | 175 std::string(), // parent_folder_id |
| 174 base::Bind(&SyncEngineInitializer::DidFindSyncRoot, | 176 base::Bind(&SyncEngineInitializer::DidFindSyncRoot, |
| 175 weak_ptr_factory_.GetWeakPtr(), | 177 weak_ptr_factory_.GetWeakPtr(), |
| 176 callback)); | 178 callback)); |
| 177 } | 179 } |
| 178 | 180 |
| 179 void SyncEngineInitializer::DidFindSyncRoot( | 181 void SyncEngineInitializer::DidFindSyncRoot( |
| 180 const SyncStatusCallback& callback, | 182 const SyncStatusCallback& callback, |
| (...skipping 21 matching lines...) Expand all Loading... |
| 202 DCHECK(!root_folder_id_.empty()); | 204 DCHECK(!root_folder_id_.empty()); |
| 203 if (!HasNoParents(*entry) && !HasFolderAsParent(*entry, root_folder_id_)) | 205 if (!HasNoParents(*entry) && !HasFolderAsParent(*entry, root_folder_id_)) |
| 204 continue; | 206 continue; |
| 205 | 207 |
| 206 if (!sync_root_folder_ || LessOnCreationTime(*entry, *sync_root_folder_)) { | 208 if (!sync_root_folder_ || LessOnCreationTime(*entry, *sync_root_folder_)) { |
| 207 sync_root_folder_.reset(entry); | 209 sync_root_folder_.reset(entry); |
| 208 *itr = NULL; | 210 *itr = NULL; |
| 209 } | 211 } |
| 210 } | 212 } |
| 211 | 213 |
| 214 set_used_network(true); |
| 212 // If there are more results, retrieve them. | 215 // If there are more results, retrieve them. |
| 213 if (GetRemainingFileList( | 216 if (GetRemainingFileList( |
| 214 &cancel_callback_, | 217 &cancel_callback_, |
| 215 drive_service_, *resource_list, | 218 drive_service_, *resource_list, |
| 216 base::Bind(&SyncEngineInitializer::DidFindSyncRoot, | 219 base::Bind(&SyncEngineInitializer::DidFindSyncRoot, |
| 217 weak_ptr_factory_.GetWeakPtr(), | 220 weak_ptr_factory_.GetWeakPtr(), |
| 218 callback))) | 221 callback))) |
| 219 return; | 222 return; |
| 220 | 223 |
| 221 if (!sync_root_folder_) { | 224 if (!sync_root_folder_) { |
| 222 CreateSyncRoot(callback); | 225 CreateSyncRoot(callback); |
| 223 return; | 226 return; |
| 224 } | 227 } |
| 225 | 228 |
| 226 if (!HasNoParents(*sync_root_folder_)) { | 229 if (!HasNoParents(*sync_root_folder_)) { |
| 227 DetachSyncRoot(callback); | 230 DetachSyncRoot(callback); |
| 228 return; | 231 return; |
| 229 } | 232 } |
| 230 | 233 |
| 231 ListAppRootFolders(callback); | 234 ListAppRootFolders(callback); |
| 232 } | 235 } |
| 233 | 236 |
| 234 void SyncEngineInitializer::CreateSyncRoot(const SyncStatusCallback& callback) { | 237 void SyncEngineInitializer::CreateSyncRoot(const SyncStatusCallback& callback) { |
| 235 DCHECK(!sync_root_folder_); | 238 DCHECK(!sync_root_folder_); |
| 239 set_used_network(true); |
| 236 cancel_callback_ = drive_service_->AddNewDirectory( | 240 cancel_callback_ = drive_service_->AddNewDirectory( |
| 237 root_folder_id_, kSyncRootFolderTitle, | 241 root_folder_id_, kSyncRootFolderTitle, |
| 238 base::Bind(&SyncEngineInitializer::DidCreateSyncRoot, | 242 base::Bind(&SyncEngineInitializer::DidCreateSyncRoot, |
| 239 weak_ptr_factory_.GetWeakPtr(), | 243 weak_ptr_factory_.GetWeakPtr(), |
| 240 callback)); | 244 callback)); |
| 241 } | 245 } |
| 242 | 246 |
| 243 void SyncEngineInitializer::DidCreateSyncRoot( | 247 void SyncEngineInitializer::DidCreateSyncRoot( |
| 244 const SyncStatusCallback& callback, | 248 const SyncStatusCallback& callback, |
| 245 google_apis::GDataErrorCode error, | 249 google_apis::GDataErrorCode error, |
| 246 scoped_ptr<google_apis::ResourceEntry> entry) { | 250 scoped_ptr<google_apis::ResourceEntry> entry) { |
| 247 DCHECK(!sync_root_folder_); | 251 DCHECK(!sync_root_folder_); |
| 248 cancel_callback_.Reset(); | 252 cancel_callback_.Reset(); |
| 249 if (error != google_apis::HTTP_SUCCESS && | 253 if (error != google_apis::HTTP_SUCCESS && |
| 250 error != google_apis::HTTP_CREATED) { | 254 error != google_apis::HTTP_CREATED) { |
| 251 callback.Run(GDataErrorCodeToSyncStatusCode(error)); | 255 callback.Run(GDataErrorCodeToSyncStatusCode(error)); |
| 252 return; | 256 return; |
| 253 } | 257 } |
| 254 | 258 |
| 255 FindSyncRoot(callback); | 259 FindSyncRoot(callback); |
| 256 } | 260 } |
| 257 | 261 |
| 258 void SyncEngineInitializer::DetachSyncRoot(const SyncStatusCallback& callback) { | 262 void SyncEngineInitializer::DetachSyncRoot(const SyncStatusCallback& callback) { |
| 259 DCHECK(sync_root_folder_); | 263 DCHECK(sync_root_folder_); |
| 264 set_used_network(true); |
| 260 cancel_callback_ = drive_service_->RemoveResourceFromDirectory( | 265 cancel_callback_ = drive_service_->RemoveResourceFromDirectory( |
| 261 root_folder_id_, GetID(*sync_root_folder_), | 266 root_folder_id_, GetID(*sync_root_folder_), |
| 262 base::Bind(&SyncEngineInitializer::DidDetachSyncRoot, | 267 base::Bind(&SyncEngineInitializer::DidDetachSyncRoot, |
| 263 weak_ptr_factory_.GetWeakPtr(), | 268 weak_ptr_factory_.GetWeakPtr(), |
| 264 callback)); | 269 callback)); |
| 265 } | 270 } |
| 266 | 271 |
| 267 void SyncEngineInitializer::DidDetachSyncRoot( | 272 void SyncEngineInitializer::DidDetachSyncRoot( |
| 268 const SyncStatusCallback& callback, | 273 const SyncStatusCallback& callback, |
| 269 google_apis::GDataErrorCode error) { | 274 google_apis::GDataErrorCode error) { |
| 270 cancel_callback_.Reset(); | 275 cancel_callback_.Reset(); |
| 271 if (error != google_apis::HTTP_SUCCESS) { | 276 if (error != google_apis::HTTP_SUCCESS) { |
| 272 callback.Run(GDataErrorCodeToSyncStatusCode(error)); | 277 callback.Run(GDataErrorCodeToSyncStatusCode(error)); |
| 273 return; | 278 return; |
| 274 } | 279 } |
| 280 |
| 275 ListAppRootFolders(callback); | 281 ListAppRootFolders(callback); |
| 276 } | 282 } |
| 277 | 283 |
| 278 void SyncEngineInitializer::ListAppRootFolders( | 284 void SyncEngineInitializer::ListAppRootFolders( |
| 279 const SyncStatusCallback& callback) { | 285 const SyncStatusCallback& callback) { |
| 280 DCHECK(sync_root_folder_); | 286 DCHECK(sync_root_folder_); |
| 287 set_used_network(true); |
| 281 cancel_callback_ = drive_service_->GetResourceListInDirectory( | 288 cancel_callback_ = drive_service_->GetResourceListInDirectory( |
| 282 GetID(*sync_root_folder_), | 289 GetID(*sync_root_folder_), |
| 283 base::Bind(&SyncEngineInitializer::DidListAppRootFolders, | 290 base::Bind(&SyncEngineInitializer::DidListAppRootFolders, |
| 284 weak_ptr_factory_.GetWeakPtr(), | 291 weak_ptr_factory_.GetWeakPtr(), |
| 285 callback)); | 292 callback)); |
| 286 } | 293 } |
| 287 | 294 |
| 288 void SyncEngineInitializer::DidListAppRootFolders( | 295 void SyncEngineInitializer::DidListAppRootFolders( |
| 289 const SyncStatusCallback& callback, | 296 const SyncStatusCallback& callback, |
| 290 google_apis::GDataErrorCode error, | 297 google_apis::GDataErrorCode error, |
| 291 scoped_ptr<google_apis::ResourceList> resource_list) { | 298 scoped_ptr<google_apis::ResourceList> resource_list) { |
| 292 cancel_callback_.Reset(); | 299 cancel_callback_.Reset(); |
| 293 if (error != google_apis::HTTP_SUCCESS) { | 300 if (error != google_apis::HTTP_SUCCESS) { |
| 294 callback.Run(GDataErrorCodeToSyncStatusCode(error)); | 301 callback.Run(GDataErrorCodeToSyncStatusCode(error)); |
| 295 return; | 302 return; |
| 296 } | 303 } |
| 297 | 304 |
| 298 ScopedVector<google_apis::ResourceEntry>* new_entries = | 305 ScopedVector<google_apis::ResourceEntry>* new_entries = |
| 299 resource_list->mutable_entries(); | 306 resource_list->mutable_entries(); |
| 300 app_root_folders_.insert(app_root_folders_.end(), | 307 app_root_folders_.insert(app_root_folders_.end(), |
| 301 new_entries->begin(), new_entries->end()); | 308 new_entries->begin(), new_entries->end()); |
| 302 new_entries->weak_clear(); | 309 new_entries->weak_clear(); |
| 303 | 310 |
| 311 set_used_network(true); |
| 304 if (GetRemainingFileList( | 312 if (GetRemainingFileList( |
| 305 &cancel_callback_, | 313 &cancel_callback_, |
| 306 drive_service_, | 314 drive_service_, |
| 307 *resource_list, | 315 *resource_list, |
| 308 base::Bind(&SyncEngineInitializer::DidListAppRootFolders, | 316 base::Bind(&SyncEngineInitializer::DidListAppRootFolders, |
| 309 weak_ptr_factory_.GetWeakPtr(), callback))) | 317 weak_ptr_factory_.GetWeakPtr(), callback))) |
| 310 return; | 318 return; |
| 311 | 319 |
| 312 PopulateDatabase(callback); | 320 PopulateDatabase(callback); |
| 313 } | 321 } |
| (...skipping 17 matching lines...) Expand all Loading... |
| 331 if (status != SYNC_STATUS_OK) { | 339 if (status != SYNC_STATUS_OK) { |
| 332 callback.Run(status); | 340 callback.Run(status); |
| 333 return; | 341 return; |
| 334 } | 342 } |
| 335 | 343 |
| 336 callback.Run(SYNC_STATUS_OK); | 344 callback.Run(SYNC_STATUS_OK); |
| 337 } | 345 } |
| 338 | 346 |
| 339 } // namespace drive_backend | 347 } // namespace drive_backend |
| 340 } // namespace sync_file_system | 348 } // namespace sync_file_system |
| OLD | NEW |