| 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.h" | 5 #include "chrome/browser/sync_file_system/drive_backend/sync_engine.h" |
| 6 | 6 |
| 7 #include <vector> | 7 #include <vector> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/metrics/histogram.h" | 10 #include "base/metrics/histogram.h" |
| (...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 207 SyncEngine::~SyncEngine() { | 207 SyncEngine::~SyncEngine() { |
| 208 net::NetworkChangeNotifier::RemoveNetworkChangeObserver(this); | 208 net::NetworkChangeNotifier::RemoveNetworkChangeObserver(this); |
| 209 GetDriveService()->RemoveObserver(this); | 209 GetDriveService()->RemoveObserver(this); |
| 210 if (notification_manager_) | 210 if (notification_manager_) |
| 211 notification_manager_->RemoveObserver(this); | 211 notification_manager_->RemoveObserver(this); |
| 212 | 212 |
| 213 WorkerObserver* worker_observer = worker_observer_.release(); | 213 WorkerObserver* worker_observer = worker_observer_.release(); |
| 214 if (!worker_task_runner_->DeleteSoon(FROM_HERE, worker_observer)) | 214 if (!worker_task_runner_->DeleteSoon(FROM_HERE, worker_observer)) |
| 215 delete worker_observer; | 215 delete worker_observer; |
| 216 | 216 |
| 217 SyncWorker* sync_worker = sync_worker_.release(); | 217 SyncWorkerInterface* sync_worker = sync_worker_.release(); |
| 218 if (!worker_task_runner_->DeleteSoon(FROM_HERE, sync_worker)) { | 218 if (!worker_task_runner_->DeleteSoon(FROM_HERE, sync_worker)) { |
| 219 sync_worker->DetachFromSequence(); | 219 sync_worker->DetachFromSequence(); |
| 220 delete sync_worker; | 220 delete sync_worker; |
| 221 } | 221 } |
| 222 } | 222 } |
| 223 | 223 |
| 224 void SyncEngine::Initialize(const base::FilePath& base_dir, | 224 void SyncEngine::Initialize(const base::FilePath& base_dir, |
| 225 TaskLogger* task_logger, | 225 TaskLogger* task_logger, |
| 226 base::SequencedTaskRunner* file_task_runner, | 226 base::SequencedTaskRunner* file_task_runner, |
| 227 leveldb::Env* env_override) { | 227 leveldb::Env* env_override) { |
| (...skipping 16 matching lines...) Expand all Loading... |
| 244 file_task_runner)); | 244 file_task_runner)); |
| 245 | 245 |
| 246 worker_observer_.reset( | 246 worker_observer_.reset( |
| 247 new WorkerObserver(base::MessageLoopProxy::current(), | 247 new WorkerObserver(base::MessageLoopProxy::current(), |
| 248 weak_ptr_factory_.GetWeakPtr())); | 248 weak_ptr_factory_.GetWeakPtr())); |
| 249 | 249 |
| 250 base::WeakPtr<ExtensionServiceInterface> extension_service_weak_ptr; | 250 base::WeakPtr<ExtensionServiceInterface> extension_service_weak_ptr; |
| 251 if (extension_service_) | 251 if (extension_service_) |
| 252 extension_service_weak_ptr = extension_service_->AsWeakPtr(); | 252 extension_service_weak_ptr = extension_service_->AsWeakPtr(); |
| 253 | 253 |
| 254 sync_worker_.reset(new SyncWorker( | 254 scoped_ptr<SyncWorker> worker(new SyncWorker( |
| 255 base_dir, | 255 base_dir, |
| 256 extension_service_weak_ptr, | 256 extension_service_weak_ptr, |
| 257 sync_engine_context.Pass(), | 257 sync_engine_context.Pass(), |
| 258 env_override)); | 258 env_override)); |
| 259 sync_worker_->AddObserver(worker_observer_.get()); | 259 worker->AddObserver(worker_observer_.get()); |
| 260 |
| 261 sync_worker_ = worker.PassAs<SyncWorkerInterface>(); |
| 260 worker_task_runner_->PostTask( | 262 worker_task_runner_->PostTask( |
| 261 FROM_HERE, | 263 FROM_HERE, |
| 262 base::Bind(&SyncWorker::Initialize, | 264 base::Bind(&SyncWorkerInterface::Initialize, |
| 263 base::Unretained(sync_worker_.get()))); | 265 base::Unretained(sync_worker_.get()))); |
| 264 | 266 |
| 265 if (notification_manager_) | 267 if (notification_manager_) |
| 266 notification_manager_->AddObserver(this); | 268 notification_manager_->AddObserver(this); |
| 267 GetDriveService()->AddObserver(this); | 269 GetDriveService()->AddObserver(this); |
| 268 net::NetworkChangeNotifier::AddNetworkChangeObserver(this); | 270 net::NetworkChangeNotifier::AddNetworkChangeObserver(this); |
| 269 } | 271 } |
| 270 | 272 |
| 271 void SyncEngine::AddServiceObserver(SyncServiceObserver* observer) { | 273 void SyncEngine::AddServiceObserver(SyncServiceObserver* observer) { |
| 272 service_observers_.AddObserver(observer); | 274 service_observers_.AddObserver(observer); |
| 273 } | 275 } |
| 274 | 276 |
| 275 void SyncEngine::AddFileStatusObserver(FileStatusObserver* observer) { | 277 void SyncEngine::AddFileStatusObserver(FileStatusObserver* observer) { |
| 276 file_status_observers_.AddObserver(observer); | 278 file_status_observers_.AddObserver(observer); |
| 277 } | 279 } |
| 278 | 280 |
| 279 void SyncEngine::RegisterOrigin(const GURL& origin, | 281 void SyncEngine::RegisterOrigin(const GURL& origin, |
| 280 const SyncStatusCallback& callback) { | 282 const SyncStatusCallback& callback) { |
| 281 SyncStatusCallback relayed_callback = RelayCallbackToCurrentThread( | 283 SyncStatusCallback relayed_callback = RelayCallbackToCurrentThread( |
| 282 FROM_HERE, base::Bind(&DidRegisterOrigin, base::TimeTicks::Now(), | 284 FROM_HERE, base::Bind(&DidRegisterOrigin, base::TimeTicks::Now(), |
| 283 TrackCallback(callback))); | 285 TrackCallback(callback))); |
| 284 | 286 |
| 285 worker_task_runner_->PostTask( | 287 worker_task_runner_->PostTask( |
| 286 FROM_HERE, | 288 FROM_HERE, |
| 287 base::Bind(&SyncWorker::RegisterOrigin, | 289 base::Bind(&SyncWorkerInterface::RegisterOrigin, |
| 288 base::Unretained(sync_worker_.get()), | 290 base::Unretained(sync_worker_.get()), |
| 289 origin, relayed_callback)); | 291 origin, relayed_callback)); |
| 290 } | 292 } |
| 291 | 293 |
| 292 void SyncEngine::EnableOrigin( | 294 void SyncEngine::EnableOrigin( |
| 293 const GURL& origin, const SyncStatusCallback& callback) { | 295 const GURL& origin, const SyncStatusCallback& callback) { |
| 294 SyncStatusCallback relayed_callback = RelayCallbackToCurrentThread( | 296 SyncStatusCallback relayed_callback = RelayCallbackToCurrentThread( |
| 295 FROM_HERE, TrackCallback(callback)); | 297 FROM_HERE, TrackCallback(callback)); |
| 296 | 298 |
| 297 worker_task_runner_->PostTask( | 299 worker_task_runner_->PostTask( |
| 298 FROM_HERE, | 300 FROM_HERE, |
| 299 base::Bind(&SyncWorker::EnableOrigin, | 301 base::Bind(&SyncWorkerInterface::EnableOrigin, |
| 300 base::Unretained(sync_worker_.get()), | 302 base::Unretained(sync_worker_.get()), |
| 301 origin, relayed_callback)); | 303 origin, relayed_callback)); |
| 302 } | 304 } |
| 303 | 305 |
| 304 void SyncEngine::DisableOrigin( | 306 void SyncEngine::DisableOrigin( |
| 305 const GURL& origin, const SyncStatusCallback& callback) { | 307 const GURL& origin, const SyncStatusCallback& callback) { |
| 306 SyncStatusCallback relayed_callback = RelayCallbackToCurrentThread( | 308 SyncStatusCallback relayed_callback = RelayCallbackToCurrentThread( |
| 307 FROM_HERE, TrackCallback(callback)); | 309 FROM_HERE, TrackCallback(callback)); |
| 308 | 310 |
| 309 worker_task_runner_->PostTask( | 311 worker_task_runner_->PostTask( |
| 310 FROM_HERE, | 312 FROM_HERE, |
| 311 base::Bind(&SyncWorker::DisableOrigin, | 313 base::Bind(&SyncWorkerInterface::DisableOrigin, |
| 312 base::Unretained(sync_worker_.get()), | 314 base::Unretained(sync_worker_.get()), |
| 313 origin, | 315 origin, |
| 314 relayed_callback)); | 316 relayed_callback)); |
| 315 } | 317 } |
| 316 | 318 |
| 317 void SyncEngine::UninstallOrigin( | 319 void SyncEngine::UninstallOrigin( |
| 318 const GURL& origin, | 320 const GURL& origin, |
| 319 UninstallFlag flag, | 321 UninstallFlag flag, |
| 320 const SyncStatusCallback& callback) { | 322 const SyncStatusCallback& callback) { |
| 321 SyncStatusCallback relayed_callback = RelayCallbackToCurrentThread( | 323 SyncStatusCallback relayed_callback = RelayCallbackToCurrentThread( |
| 322 FROM_HERE, TrackCallback(callback)); | 324 FROM_HERE, TrackCallback(callback)); |
| 323 worker_task_runner_->PostTask( | 325 worker_task_runner_->PostTask( |
| 324 FROM_HERE, | 326 FROM_HERE, |
| 325 base::Bind(&SyncWorker::UninstallOrigin, | 327 base::Bind(&SyncWorkerInterface::UninstallOrigin, |
| 326 base::Unretained(sync_worker_.get()), | 328 base::Unretained(sync_worker_.get()), |
| 327 origin, flag, relayed_callback)); | 329 origin, flag, relayed_callback)); |
| 328 } | 330 } |
| 329 | 331 |
| 330 void SyncEngine::ProcessRemoteChange(const SyncFileCallback& callback) { | 332 void SyncEngine::ProcessRemoteChange(const SyncFileCallback& callback) { |
| 331 SyncFileCallback tracked_callback = callback_tracker_.Register( | 333 SyncFileCallback tracked_callback = callback_tracker_.Register( |
| 332 base::Bind(callback, SYNC_STATUS_ABORT, fileapi::FileSystemURL()), | 334 base::Bind(callback, SYNC_STATUS_ABORT, fileapi::FileSystemURL()), |
| 333 callback); | 335 callback); |
| 334 SyncFileCallback relayed_callback = RelayCallbackToCurrentThread( | 336 SyncFileCallback relayed_callback = RelayCallbackToCurrentThread( |
| 335 FROM_HERE, tracked_callback); | 337 FROM_HERE, tracked_callback); |
| 336 worker_task_runner_->PostTask( | 338 worker_task_runner_->PostTask( |
| 337 FROM_HERE, | 339 FROM_HERE, |
| 338 base::Bind(&SyncWorker::ProcessRemoteChange, | 340 base::Bind(&SyncWorkerInterface::ProcessRemoteChange, |
| 339 base::Unretained(sync_worker_.get()), | 341 base::Unretained(sync_worker_.get()), |
| 340 relayed_callback)); | 342 relayed_callback)); |
| 341 } | 343 } |
| 342 | 344 |
| 343 void SyncEngine::SetRemoteChangeProcessor(RemoteChangeProcessor* processor) { | 345 void SyncEngine::SetRemoteChangeProcessor(RemoteChangeProcessor* processor) { |
| 344 remote_change_processor_ = processor; | 346 remote_change_processor_ = processor; |
| 345 remote_change_processor_wrapper_.reset( | 347 remote_change_processor_wrapper_.reset( |
| 346 new RemoteChangeProcessorWrapper(processor)); | 348 new RemoteChangeProcessorWrapper(processor)); |
| 347 | 349 |
| 348 remote_change_processor_on_worker_.reset(new RemoteChangeProcessorOnWorker( | 350 remote_change_processor_on_worker_.reset(new RemoteChangeProcessorOnWorker( |
| 349 remote_change_processor_wrapper_->AsWeakPtr(), | 351 remote_change_processor_wrapper_->AsWeakPtr(), |
| 350 base::MessageLoopProxy::current(), /* ui_task_runner */ | 352 base::MessageLoopProxy::current(), /* ui_task_runner */ |
| 351 worker_task_runner_)); | 353 worker_task_runner_)); |
| 352 | 354 |
| 353 worker_task_runner_->PostTask( | 355 worker_task_runner_->PostTask( |
| 354 FROM_HERE, | 356 FROM_HERE, |
| 355 base::Bind(&SyncWorker::SetRemoteChangeProcessor, | 357 base::Bind(&SyncWorkerInterface::SetRemoteChangeProcessor, |
| 356 base::Unretained(sync_worker_.get()), | 358 base::Unretained(sync_worker_.get()), |
| 357 remote_change_processor_on_worker_.get())); | 359 remote_change_processor_on_worker_.get())); |
| 358 } | 360 } |
| 359 | 361 |
| 360 LocalChangeProcessor* SyncEngine::GetLocalChangeProcessor() { | 362 LocalChangeProcessor* SyncEngine::GetLocalChangeProcessor() { |
| 361 return this; | 363 return this; |
| 362 } | 364 } |
| 363 | 365 |
| 364 RemoteServiceState SyncEngine::GetCurrentState() const { | 366 RemoteServiceState SyncEngine::GetCurrentState() const { |
| 365 return service_state_; | 367 return service_state_; |
| 366 } | 368 } |
| 367 | 369 |
| 368 void SyncEngine::GetOriginStatusMap(const StatusMapCallback& callback) { | 370 void SyncEngine::GetOriginStatusMap(const StatusMapCallback& callback) { |
| 369 StatusMapCallback tracked_callback = | 371 StatusMapCallback tracked_callback = |
| 370 callback_tracker_.Register( | 372 callback_tracker_.Register( |
| 371 base::Bind(callback, base::Passed(scoped_ptr<OriginStatusMap>())), | 373 base::Bind(callback, base::Passed(scoped_ptr<OriginStatusMap>())), |
| 372 callback); | 374 callback); |
| 373 | 375 |
| 374 StatusMapCallback relayed_callback = | 376 StatusMapCallback relayed_callback = |
| 375 RelayCallbackToCurrentThread(FROM_HERE, tracked_callback); | 377 RelayCallbackToCurrentThread(FROM_HERE, tracked_callback); |
| 376 | 378 |
| 377 worker_task_runner_->PostTask( | 379 worker_task_runner_->PostTask( |
| 378 FROM_HERE, | 380 FROM_HERE, |
| 379 base::Bind(&SyncWorker::GetOriginStatusMap, | 381 base::Bind(&SyncWorkerInterface::GetOriginStatusMap, |
| 380 base::Unretained(sync_worker_.get()), | 382 base::Unretained(sync_worker_.get()), |
| 381 relayed_callback)); | 383 relayed_callback)); |
| 382 } | 384 } |
| 383 | 385 |
| 384 void SyncEngine::DumpFiles(const GURL& origin, | 386 void SyncEngine::DumpFiles(const GURL& origin, |
| 385 const ListCallback& callback) { | 387 const ListCallback& callback) { |
| 386 ListCallback tracked_callback = | 388 ListCallback tracked_callback = |
| 387 callback_tracker_.Register( | 389 callback_tracker_.Register( |
| 388 base::Bind(callback, base::Passed(scoped_ptr<base::ListValue>())), | 390 base::Bind(callback, base::Passed(scoped_ptr<base::ListValue>())), |
| 389 callback); | 391 callback); |
| 390 | 392 |
| 391 PostTaskAndReplyWithResult( | 393 PostTaskAndReplyWithResult( |
| 392 worker_task_runner_, | 394 worker_task_runner_, |
| 393 FROM_HERE, | 395 FROM_HERE, |
| 394 base::Bind(&SyncWorker::DumpFiles, | 396 base::Bind(&SyncWorkerInterface::DumpFiles, |
| 395 base::Unretained(sync_worker_.get()), | 397 base::Unretained(sync_worker_.get()), |
| 396 origin), | 398 origin), |
| 397 tracked_callback); | 399 tracked_callback); |
| 398 } | 400 } |
| 399 | 401 |
| 400 void SyncEngine::DumpDatabase(const ListCallback& callback) { | 402 void SyncEngine::DumpDatabase(const ListCallback& callback) { |
| 401 ListCallback tracked_callback = | 403 ListCallback tracked_callback = |
| 402 callback_tracker_.Register( | 404 callback_tracker_.Register( |
| 403 base::Bind(callback, base::Passed(scoped_ptr<base::ListValue>())), | 405 base::Bind(callback, base::Passed(scoped_ptr<base::ListValue>())), |
| 404 callback); | 406 callback); |
| 405 | 407 |
| 406 PostTaskAndReplyWithResult( | 408 PostTaskAndReplyWithResult( |
| 407 worker_task_runner_, | 409 worker_task_runner_, |
| 408 FROM_HERE, | 410 FROM_HERE, |
| 409 base::Bind(&SyncWorker::DumpDatabase, | 411 base::Bind(&SyncWorkerInterface::DumpDatabase, |
| 410 base::Unretained(sync_worker_.get())), | 412 base::Unretained(sync_worker_.get())), |
| 411 tracked_callback); | 413 tracked_callback); |
| 412 } | 414 } |
| 413 | 415 |
| 414 void SyncEngine::SetSyncEnabled(bool enabled) { | 416 void SyncEngine::SetSyncEnabled(bool enabled) { |
| 415 worker_task_runner_->PostTask( | 417 worker_task_runner_->PostTask( |
| 416 FROM_HERE, | 418 FROM_HERE, |
| 417 base::Bind(&SyncWorker::SetSyncEnabled, | 419 base::Bind(&SyncWorkerInterface::SetSyncEnabled, |
| 418 base::Unretained(sync_worker_.get()), | 420 base::Unretained(sync_worker_.get()), |
| 419 enabled)); | 421 enabled)); |
| 420 } | 422 } |
| 421 | 423 |
| 422 void SyncEngine::PromoteDemotedChanges() { | 424 void SyncEngine::PromoteDemotedChanges() { |
| 423 worker_task_runner_->PostTask( | 425 worker_task_runner_->PostTask( |
| 424 FROM_HERE, | 426 FROM_HERE, |
| 425 base::Bind(&SyncWorker::PromoteDemotedChanges, | 427 base::Bind(&SyncWorkerInterface::PromoteDemotedChanges, |
| 426 base::Unretained(sync_worker_.get()))); | 428 base::Unretained(sync_worker_.get()))); |
| 427 } | 429 } |
| 428 | 430 |
| 429 void SyncEngine::ApplyLocalChange( | 431 void SyncEngine::ApplyLocalChange( |
| 430 const FileChange& local_change, | 432 const FileChange& local_change, |
| 431 const base::FilePath& local_path, | 433 const base::FilePath& local_path, |
| 432 const SyncFileMetadata& local_metadata, | 434 const SyncFileMetadata& local_metadata, |
| 433 const fileapi::FileSystemURL& url, | 435 const fileapi::FileSystemURL& url, |
| 434 const SyncStatusCallback& callback) { | 436 const SyncStatusCallback& callback) { |
| 435 SyncStatusCallback relayed_callback = RelayCallbackToCurrentThread( | 437 SyncStatusCallback relayed_callback = RelayCallbackToCurrentThread( |
| 436 FROM_HERE, TrackCallback(callback)); | 438 FROM_HERE, TrackCallback(callback)); |
| 437 worker_task_runner_->PostTask( | 439 worker_task_runner_->PostTask( |
| 438 FROM_HERE, | 440 FROM_HERE, |
| 439 base::Bind(&SyncWorker::ApplyLocalChange, | 441 base::Bind(&SyncWorkerInterface::ApplyLocalChange, |
| 440 base::Unretained(sync_worker_.get()), | 442 base::Unretained(sync_worker_.get()), |
| 441 local_change, | 443 local_change, |
| 442 local_path, | 444 local_path, |
| 443 local_metadata, | 445 local_metadata, |
| 444 url, | 446 url, |
| 445 relayed_callback)); | 447 relayed_callback)); |
| 446 } | 448 } |
| 447 | 449 |
| 448 void SyncEngine::OnNotificationReceived() { | 450 void SyncEngine::OnNotificationReceived() { |
| 449 worker_task_runner_->PostTask( | 451 worker_task_runner_->PostTask( |
| 450 FROM_HERE, | 452 FROM_HERE, |
| 451 base::Bind(&SyncWorker::OnNotificationReceived, | 453 base::Bind(&SyncWorkerInterface::OnNotificationReceived, |
| 452 base::Unretained(sync_worker_.get()))); | 454 base::Unretained(sync_worker_.get()))); |
| 453 } | 455 } |
| 454 | 456 |
| 455 void SyncEngine::OnPushNotificationEnabled(bool) {} | 457 void SyncEngine::OnPushNotificationEnabled(bool) {} |
| 456 | 458 |
| 457 void SyncEngine::OnReadyToSendRequests() { | 459 void SyncEngine::OnReadyToSendRequests() { |
| 458 // TODO(tzik): Drop current Syncworker and replace with new one. | 460 // TODO(tzik): Drop current Syncworker and replace with new one. |
| 459 | 461 |
| 460 const std::string account_id = | 462 const std::string account_id = |
| 461 signin_manager_ ? signin_manager_->GetAuthenticatedAccountId() : ""; | 463 signin_manager_ ? signin_manager_->GetAuthenticatedAccountId() : ""; |
| 462 | 464 |
| 463 worker_task_runner_->PostTask( | 465 worker_task_runner_->PostTask( |
| 464 FROM_HERE, | 466 FROM_HERE, |
| 465 base::Bind(&SyncWorker::OnReadyToSendRequests, | 467 base::Bind(&SyncWorkerInterface::OnReadyToSendRequests, |
| 466 base::Unretained(sync_worker_.get()), | 468 base::Unretained(sync_worker_.get()), |
| 467 account_id)); | 469 account_id)); |
| 468 } | 470 } |
| 469 | 471 |
| 470 void SyncEngine::OnRefreshTokenInvalid() { | 472 void SyncEngine::OnRefreshTokenInvalid() { |
| 471 worker_task_runner_->PostTask( | 473 worker_task_runner_->PostTask( |
| 472 FROM_HERE, | 474 FROM_HERE, |
| 473 base::Bind(&SyncWorker::OnRefreshTokenInvalid, | 475 base::Bind(&SyncWorkerInterface::OnRefreshTokenInvalid, |
| 474 base::Unretained(sync_worker_.get()))); | 476 base::Unretained(sync_worker_.get()))); |
| 475 } | 477 } |
| 476 | 478 |
| 477 void SyncEngine::OnNetworkChanged( | 479 void SyncEngine::OnNetworkChanged( |
| 478 net::NetworkChangeNotifier::ConnectionType type) { | 480 net::NetworkChangeNotifier::ConnectionType type) { |
| 479 worker_task_runner_->PostTask( | 481 worker_task_runner_->PostTask( |
| 480 FROM_HERE, | 482 FROM_HERE, |
| 481 base::Bind(&SyncWorker::OnNetworkChanged, | 483 base::Bind(&SyncWorkerInterface::OnNetworkChanged, |
| 482 base::Unretained(sync_worker_.get()), | 484 base::Unretained(sync_worker_.get()), |
| 483 type)); | 485 type)); |
| 484 } | 486 } |
| 485 | 487 |
| 486 drive::DriveServiceInterface* SyncEngine::GetDriveService() { | 488 drive::DriveServiceInterface* SyncEngine::GetDriveService() { |
| 487 return drive_service_.get(); | 489 return drive_service_.get(); |
| 488 } | 490 } |
| 489 | 491 |
| 490 drive::DriveUploaderInterface* SyncEngine::GetDriveUploader() { | 492 drive::DriveUploaderInterface* SyncEngine::GetDriveUploader() { |
| 491 return drive_uploader_.get(); | 493 return drive_uploader_.get(); |
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 576 | 578 |
| 577 SyncStatusCallback SyncEngine::TrackCallback( | 579 SyncStatusCallback SyncEngine::TrackCallback( |
| 578 const SyncStatusCallback& callback) { | 580 const SyncStatusCallback& callback) { |
| 579 return callback_tracker_.Register( | 581 return callback_tracker_.Register( |
| 580 base::Bind(callback, SYNC_STATUS_ABORT), | 582 base::Bind(callback, SYNC_STATUS_ABORT), |
| 581 callback); | 583 callback); |
| 582 } | 584 } |
| 583 | 585 |
| 584 } // namespace drive_backend | 586 } // namespace drive_backend |
| 585 } // namespace sync_file_system | 587 } // namespace sync_file_system |
| OLD | NEW |