| 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 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 163 obj_ptr->DetachFromSequence(); | 163 obj_ptr->DetachFromSequence(); |
| 164 deleter.Run(); | 164 deleter.Run(); |
| 165 } | 165 } |
| 166 } | 166 } |
| 167 | 167 |
| 168 } // namespace | 168 } // namespace |
| 169 | 169 |
| 170 scoped_ptr<SyncEngine> SyncEngine::CreateForBrowserContext( | 170 scoped_ptr<SyncEngine> SyncEngine::CreateForBrowserContext( |
| 171 content::BrowserContext* context, | 171 content::BrowserContext* context, |
| 172 TaskLogger* task_logger) { | 172 TaskLogger* task_logger) { |
| 173 scoped_refptr<base::SequencedWorkerPool> worker_pool( | 173 scoped_refptr<base::SequencedWorkerPool> worker_pool = |
| 174 content::BrowserThread::GetBlockingPool()); | 174 content::BrowserThread::GetBlockingPool(); |
| 175 | 175 |
| 176 scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner = | 176 scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner = |
| 177 base::MessageLoopProxy::current(); | 177 base::MessageLoopProxy::current(); |
| 178 // TODO(peria): Create another task runner to manage SyncWorker. | 178 // TODO(peria): Create another task runner to manage SyncWorker. |
| 179 scoped_refptr<base::SequencedTaskRunner> worker_task_runner = | 179 scoped_refptr<base::SequencedTaskRunner> worker_task_runner = |
| 180 base::MessageLoopProxy::current(); | 180 base::MessageLoopProxy::current(); |
| 181 scoped_refptr<base::SequencedTaskRunner> file_task_runner = | 181 scoped_refptr<base::SequencedTaskRunner> file_task_runner = |
| 182 worker_pool->GetSequencedTaskRunnerWithShutdownBehavior( | 182 worker_pool->GetSequencedTaskRunnerWithShutdownBehavior( |
| 183 worker_pool->GetSequenceToken(), | 183 worker_pool->GetSequenceToken(), |
| 184 base::SequencedWorkerPool::SKIP_ON_SHUTDOWN); | 184 base::SequencedWorkerPool::SKIP_ON_SHUTDOWN); |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 222 DCHECK(factories); | 222 DCHECK(factories); |
| 223 factories->insert(drive::DriveNotificationManagerFactory::GetInstance()); | 223 factories->insert(drive::DriveNotificationManagerFactory::GetInstance()); |
| 224 factories->insert(SigninManagerFactory::GetInstance()); | 224 factories->insert(SigninManagerFactory::GetInstance()); |
| 225 factories->insert( | 225 factories->insert( |
| 226 extensions::ExtensionsBrowserClient::Get()->GetExtensionSystemFactory()); | 226 extensions::ExtensionsBrowserClient::Get()->GetExtensionSystemFactory()); |
| 227 factories->insert(ProfileOAuth2TokenServiceFactory::GetInstance()); | 227 factories->insert(ProfileOAuth2TokenServiceFactory::GetInstance()); |
| 228 } | 228 } |
| 229 | 229 |
| 230 SyncEngine::~SyncEngine() { | 230 SyncEngine::~SyncEngine() { |
| 231 Reset(); | 231 Reset(); |
| 232 |
| 233 net::NetworkChangeNotifier::RemoveNetworkChangeObserver(this); |
| 234 if (signin_manager_) |
| 235 signin_manager_->RemoveObserver(this); |
| 236 if (notification_manager_) |
| 237 notification_manager_->RemoveObserver(this); |
| 232 } | 238 } |
| 233 | 239 |
| 234 void SyncEngine::Reset() { | 240 void SyncEngine::Reset() { |
| 235 if (notification_manager_) | |
| 236 notification_manager_->RemoveObserver(this); | |
| 237 if (drive_service_) | 241 if (drive_service_) |
| 238 drive_service_->RemoveObserver(this); | 242 drive_service_->RemoveObserver(this); |
| 239 net::NetworkChangeNotifier::RemoveNetworkChangeObserver(this); | |
| 240 | 243 |
| 241 DeleteSoon(FROM_HERE, worker_task_runner_, worker_observer_.Pass()); | 244 DeleteSoon(FROM_HERE, worker_task_runner_, worker_observer_.Pass()); |
| 242 DeleteSoon(FROM_HERE, worker_task_runner_, sync_worker_.Pass()); | 245 DeleteSoon(FROM_HERE, worker_task_runner_, sync_worker_.Pass()); |
| 243 DeleteSoon(FROM_HERE, worker_task_runner_, | 246 DeleteSoon(FROM_HERE, worker_task_runner_, |
| 244 remote_change_processor_on_worker_.Pass()); | 247 remote_change_processor_on_worker_.Pass()); |
| 245 | 248 |
| 246 drive_service_wrapper_.reset(); | 249 drive_service_wrapper_.reset(); |
| 247 drive_service_.reset(); | 250 drive_service_.reset(); |
| 248 drive_uploader_wrapper_.reset(); | 251 drive_uploader_wrapper_.reset(); |
| 249 drive_uploader_.reset(); | 252 drive_uploader_.reset(); |
| 250 remote_change_processor_wrapper_.reset(); | 253 remote_change_processor_wrapper_.reset(); |
| 251 callback_tracker_.AbortAll(); | 254 callback_tracker_.AbortAll(); |
| 252 } | 255 } |
| 253 | 256 |
| 254 void SyncEngine::Initialize() { | 257 void SyncEngine::Initialize() { |
| 255 Reset(); | 258 Reset(); |
| 256 | 259 |
| 260 if (!signin_manager_ || |
| 261 signin_manager_->GetAuthenticatedAccountId().empty()) |
| 262 return; |
| 263 |
| 257 scoped_ptr<drive::DriveServiceInterface> drive_service( | 264 scoped_ptr<drive::DriveServiceInterface> drive_service( |
| 258 new drive::DriveAPIService( | 265 new drive::DriveAPIService( |
| 259 token_service_, | 266 token_service_, |
| 260 request_context_, | 267 request_context_, |
| 261 drive_task_runner_, | 268 drive_task_runner_, |
| 262 GURL(google_apis::DriveApiUrlGenerator::kBaseUrlForProduction), | 269 GURL(google_apis::DriveApiUrlGenerator::kBaseUrlForProduction), |
| 263 GURL(google_apis::DriveApiUrlGenerator:: | 270 GURL(google_apis::DriveApiUrlGenerator:: |
| 264 kBaseDownloadUrlForProduction), | 271 kBaseDownloadUrlForProduction), |
| 265 GURL(google_apis::GDataWapiUrlGenerator::kBaseUrlForProduction), | 272 GURL(google_apis::GDataWapiUrlGenerator::kBaseUrlForProduction), |
| 266 std::string() /* custom_user_agent */)); | 273 std::string() /* custom_user_agent */)); |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 327 sync_worker_ = worker.PassAs<SyncWorkerInterface>(); | 334 sync_worker_ = worker.PassAs<SyncWorkerInterface>(); |
| 328 | 335 |
| 329 if (remote_change_processor_) | 336 if (remote_change_processor_) |
| 330 SetRemoteChangeProcessor(remote_change_processor_); | 337 SetRemoteChangeProcessor(remote_change_processor_); |
| 331 | 338 |
| 332 worker_task_runner_->PostTask( | 339 worker_task_runner_->PostTask( |
| 333 FROM_HERE, | 340 FROM_HERE, |
| 334 base::Bind(&SyncWorkerInterface::Initialize, | 341 base::Bind(&SyncWorkerInterface::Initialize, |
| 335 base::Unretained(sync_worker_.get()))); | 342 base::Unretained(sync_worker_.get()))); |
| 336 | 343 |
| 337 if (notification_manager_) | |
| 338 notification_manager_->AddObserver(this); | |
| 339 drive_service_->AddObserver(this); | 344 drive_service_->AddObserver(this); |
| 340 net::NetworkChangeNotifier::AddNetworkChangeObserver(this); | |
| 341 | 345 |
| 342 service_state_ = REMOTE_SERVICE_TEMPORARY_UNAVAILABLE; | 346 service_state_ = REMOTE_SERVICE_TEMPORARY_UNAVAILABLE; |
| 343 SetSyncEnabled(sync_enabled_); | 347 SetSyncEnabled(sync_enabled_); |
| 344 OnNetworkChanged(net::NetworkChangeNotifier::GetConnectionType()); | 348 OnNetworkChanged(net::NetworkChangeNotifier::GetConnectionType()); |
| 345 } | 349 } |
| 346 | 350 |
| 347 void SyncEngine::AddServiceObserver(SyncServiceObserver* observer) { | 351 void SyncEngine::AddServiceObserver(SyncServiceObserver* observer) { |
| 348 service_observers_.AddObserver(observer); | 352 service_observers_.AddObserver(observer); |
| 349 } | 353 } |
| 350 | 354 |
| 351 void SyncEngine::AddFileStatusObserver(FileStatusObserver* observer) { | 355 void SyncEngine::AddFileStatusObserver(FileStatusObserver* observer) { |
| 352 file_status_observers_.AddObserver(observer); | 356 file_status_observers_.AddObserver(observer); |
| 353 } | 357 } |
| 354 | 358 |
| 355 void SyncEngine::RegisterOrigin(const GURL& origin, | 359 void SyncEngine::RegisterOrigin(const GURL& origin, |
| 356 const SyncStatusCallback& callback) { | 360 const SyncStatusCallback& callback) { |
| 361 if (!sync_worker_) { |
| 362 // TODO(tzik): Record |origin| and retry the registration after late |
| 363 // sign-in. Then, return SYNC_STATUS_OK. |
| 364 if (!signin_manager_ || |
| 365 signin_manager_->GetAuthenticatedAccountId().empty()) |
| 366 callback.Run(SYNC_STATUS_AUTHENTICATION_FAILED); |
| 367 else |
| 368 callback.Run(SYNC_STATUS_ABORT); |
| 369 return; |
| 370 } |
| 371 |
| 357 SyncStatusCallback relayed_callback = RelayCallbackToCurrentThread( | 372 SyncStatusCallback relayed_callback = RelayCallbackToCurrentThread( |
| 358 FROM_HERE, base::Bind(&DidRegisterOrigin, base::TimeTicks::Now(), | 373 FROM_HERE, base::Bind(&DidRegisterOrigin, base::TimeTicks::Now(), |
| 359 TrackCallback(callback))); | 374 TrackCallback(callback))); |
| 360 | 375 |
| 361 worker_task_runner_->PostTask( | 376 worker_task_runner_->PostTask( |
| 362 FROM_HERE, | 377 FROM_HERE, |
| 363 base::Bind(&SyncWorkerInterface::RegisterOrigin, | 378 base::Bind(&SyncWorkerInterface::RegisterOrigin, |
| 364 base::Unretained(sync_worker_.get()), | 379 base::Unretained(sync_worker_.get()), |
| 365 origin, relayed_callback)); | 380 origin, relayed_callback)); |
| 366 } | 381 } |
| 367 | 382 |
| 368 void SyncEngine::EnableOrigin( | 383 void SyncEngine::EnableOrigin( |
| 369 const GURL& origin, const SyncStatusCallback& callback) { | 384 const GURL& origin, const SyncStatusCallback& callback) { |
| 385 if (!sync_worker_) { |
| 386 // It's safe to return OK immediately since this is also checked in |
| 387 // SyncWorker initialization. |
| 388 callback.Run(SYNC_STATUS_OK); |
| 389 return; |
| 390 } |
| 391 |
| 370 SyncStatusCallback relayed_callback = RelayCallbackToCurrentThread( | 392 SyncStatusCallback relayed_callback = RelayCallbackToCurrentThread( |
| 371 FROM_HERE, TrackCallback(callback)); | 393 FROM_HERE, TrackCallback(callback)); |
| 372 | 394 |
| 373 worker_task_runner_->PostTask( | 395 worker_task_runner_->PostTask( |
| 374 FROM_HERE, | 396 FROM_HERE, |
| 375 base::Bind(&SyncWorkerInterface::EnableOrigin, | 397 base::Bind(&SyncWorkerInterface::EnableOrigin, |
| 376 base::Unretained(sync_worker_.get()), | 398 base::Unretained(sync_worker_.get()), |
| 377 origin, relayed_callback)); | 399 origin, relayed_callback)); |
| 378 } | 400 } |
| 379 | 401 |
| 380 void SyncEngine::DisableOrigin( | 402 void SyncEngine::DisableOrigin( |
| 381 const GURL& origin, const SyncStatusCallback& callback) { | 403 const GURL& origin, const SyncStatusCallback& callback) { |
| 404 if (!sync_worker_) { |
| 405 // It's safe to return OK immediately since this is also checked in |
| 406 // SyncWorker initialization. |
| 407 callback.Run(SYNC_STATUS_OK); |
| 408 return; |
| 409 } |
| 410 |
| 382 SyncStatusCallback relayed_callback = RelayCallbackToCurrentThread( | 411 SyncStatusCallback relayed_callback = RelayCallbackToCurrentThread( |
| 383 FROM_HERE, TrackCallback(callback)); | 412 FROM_HERE, TrackCallback(callback)); |
| 384 | 413 |
| 385 worker_task_runner_->PostTask( | 414 worker_task_runner_->PostTask( |
| 386 FROM_HERE, | 415 FROM_HERE, |
| 387 base::Bind(&SyncWorkerInterface::DisableOrigin, | 416 base::Bind(&SyncWorkerInterface::DisableOrigin, |
| 388 base::Unretained(sync_worker_.get()), | 417 base::Unretained(sync_worker_.get()), |
| 389 origin, | 418 origin, |
| 390 relayed_callback)); | 419 relayed_callback)); |
| 391 } | 420 } |
| 392 | 421 |
| 393 void SyncEngine::UninstallOrigin( | 422 void SyncEngine::UninstallOrigin( |
| 394 const GURL& origin, | 423 const GURL& origin, |
| 395 UninstallFlag flag, | 424 UninstallFlag flag, |
| 396 const SyncStatusCallback& callback) { | 425 const SyncStatusCallback& callback) { |
| 426 if (!sync_worker_) { |
| 427 // It's safe to return OK immediately since this is also checked in |
| 428 // SyncWorker initialization. |
| 429 callback.Run(SYNC_STATUS_OK); |
| 430 return; |
| 431 } |
| 432 |
| 397 SyncStatusCallback relayed_callback = RelayCallbackToCurrentThread( | 433 SyncStatusCallback relayed_callback = RelayCallbackToCurrentThread( |
| 398 FROM_HERE, TrackCallback(callback)); | 434 FROM_HERE, TrackCallback(callback)); |
| 399 worker_task_runner_->PostTask( | 435 worker_task_runner_->PostTask( |
| 400 FROM_HERE, | 436 FROM_HERE, |
| 401 base::Bind(&SyncWorkerInterface::UninstallOrigin, | 437 base::Bind(&SyncWorkerInterface::UninstallOrigin, |
| 402 base::Unretained(sync_worker_.get()), | 438 base::Unretained(sync_worker_.get()), |
| 403 origin, flag, relayed_callback)); | 439 origin, flag, relayed_callback)); |
| 404 } | 440 } |
| 405 | 441 |
| 406 void SyncEngine::ProcessRemoteChange(const SyncFileCallback& callback) { | 442 void SyncEngine::ProcessRemoteChange(const SyncFileCallback& callback) { |
| 443 base::Closure abort_closure = |
| 444 base::Bind(callback, SYNC_STATUS_ABORT, fileapi::FileSystemURL()); |
| 445 |
| 446 if (!sync_worker_) { |
| 447 abort_closure.Run(); |
| 448 return; |
| 449 } |
| 450 |
| 407 SyncFileCallback tracked_callback = callback_tracker_.Register( | 451 SyncFileCallback tracked_callback = callback_tracker_.Register( |
| 408 base::Bind(callback, SYNC_STATUS_ABORT, fileapi::FileSystemURL()), | 452 abort_closure, callback); |
| 409 callback); | |
| 410 SyncFileCallback relayed_callback = RelayCallbackToCurrentThread( | 453 SyncFileCallback relayed_callback = RelayCallbackToCurrentThread( |
| 411 FROM_HERE, tracked_callback); | 454 FROM_HERE, tracked_callback); |
| 412 worker_task_runner_->PostTask( | 455 worker_task_runner_->PostTask( |
| 413 FROM_HERE, | 456 FROM_HERE, |
| 414 base::Bind(&SyncWorkerInterface::ProcessRemoteChange, | 457 base::Bind(&SyncWorkerInterface::ProcessRemoteChange, |
| 415 base::Unretained(sync_worker_.get()), | 458 base::Unretained(sync_worker_.get()), |
| 416 relayed_callback)); | 459 relayed_callback)); |
| 417 } | 460 } |
| 418 | 461 |
| 419 void SyncEngine::SetRemoteChangeProcessor(RemoteChangeProcessor* processor) { | 462 void SyncEngine::SetRemoteChangeProcessor(RemoteChangeProcessor* processor) { |
| 420 remote_change_processor_ = processor; | 463 remote_change_processor_ = processor; |
| 464 |
| 465 if (!sync_worker_) |
| 466 return; |
| 467 |
| 421 remote_change_processor_wrapper_.reset( | 468 remote_change_processor_wrapper_.reset( |
| 422 new RemoteChangeProcessorWrapper(processor)); | 469 new RemoteChangeProcessorWrapper(processor)); |
| 423 | 470 |
| 424 remote_change_processor_on_worker_.reset(new RemoteChangeProcessorOnWorker( | 471 remote_change_processor_on_worker_.reset(new RemoteChangeProcessorOnWorker( |
| 425 remote_change_processor_wrapper_->AsWeakPtr(), | 472 remote_change_processor_wrapper_->AsWeakPtr(), |
| 426 ui_task_runner_, worker_task_runner_)); | 473 ui_task_runner_, worker_task_runner_)); |
| 427 | 474 |
| 428 worker_task_runner_->PostTask( | 475 worker_task_runner_->PostTask( |
| 429 FROM_HERE, | 476 FROM_HERE, |
| 430 base::Bind(&SyncWorkerInterface::SetRemoteChangeProcessor, | 477 base::Bind(&SyncWorkerInterface::SetRemoteChangeProcessor, |
| 431 base::Unretained(sync_worker_.get()), | 478 base::Unretained(sync_worker_.get()), |
| 432 remote_change_processor_on_worker_.get())); | 479 remote_change_processor_on_worker_.get())); |
| 433 } | 480 } |
| 434 | 481 |
| 435 LocalChangeProcessor* SyncEngine::GetLocalChangeProcessor() { | 482 LocalChangeProcessor* SyncEngine::GetLocalChangeProcessor() { |
| 436 return this; | 483 return this; |
| 437 } | 484 } |
| 438 | 485 |
| 439 RemoteServiceState SyncEngine::GetCurrentState() const { | 486 RemoteServiceState SyncEngine::GetCurrentState() const { |
| 440 return service_state_; | 487 return service_state_; |
| 441 } | 488 } |
| 442 | 489 |
| 443 void SyncEngine::GetOriginStatusMap(const StatusMapCallback& callback) { | 490 void SyncEngine::GetOriginStatusMap(const StatusMapCallback& callback) { |
| 491 base::Closure abort_closure = |
| 492 base::Bind(callback, base::Passed(scoped_ptr<OriginStatusMap>())); |
| 493 |
| 494 if (!sync_worker_) { |
| 495 abort_closure.Run(); |
| 496 return; |
| 497 } |
| 498 |
| 444 StatusMapCallback tracked_callback = | 499 StatusMapCallback tracked_callback = |
| 445 callback_tracker_.Register( | 500 callback_tracker_.Register(abort_closure, callback); |
| 446 base::Bind(callback, base::Passed(scoped_ptr<OriginStatusMap>())), | |
| 447 callback); | |
| 448 | |
| 449 StatusMapCallback relayed_callback = | 501 StatusMapCallback relayed_callback = |
| 450 RelayCallbackToCurrentThread(FROM_HERE, tracked_callback); | 502 RelayCallbackToCurrentThread(FROM_HERE, tracked_callback); |
| 451 | 503 |
| 452 worker_task_runner_->PostTask( | 504 worker_task_runner_->PostTask( |
| 453 FROM_HERE, | 505 FROM_HERE, |
| 454 base::Bind(&SyncWorkerInterface::GetOriginStatusMap, | 506 base::Bind(&SyncWorkerInterface::GetOriginStatusMap, |
| 455 base::Unretained(sync_worker_.get()), | 507 base::Unretained(sync_worker_.get()), |
| 456 relayed_callback)); | 508 relayed_callback)); |
| 457 } | 509 } |
| 458 | 510 |
| 459 void SyncEngine::DumpFiles(const GURL& origin, | 511 void SyncEngine::DumpFiles(const GURL& origin, |
| 460 const ListCallback& callback) { | 512 const ListCallback& callback) { |
| 513 base::Closure abort_closure = |
| 514 base::Bind(callback, base::Passed(scoped_ptr<base::ListValue>())); |
| 515 |
| 516 if (!sync_worker_) { |
| 517 abort_closure.Run(); |
| 518 return; |
| 519 } |
| 520 |
| 461 ListCallback tracked_callback = | 521 ListCallback tracked_callback = |
| 462 callback_tracker_.Register( | 522 callback_tracker_.Register(abort_closure, callback); |
| 463 base::Bind(callback, base::Passed(scoped_ptr<base::ListValue>())), | |
| 464 callback); | |
| 465 | 523 |
| 466 PostTaskAndReplyWithResult( | 524 PostTaskAndReplyWithResult( |
| 467 worker_task_runner_, | 525 worker_task_runner_, |
| 468 FROM_HERE, | 526 FROM_HERE, |
| 469 base::Bind(&SyncWorkerInterface::DumpFiles, | 527 base::Bind(&SyncWorkerInterface::DumpFiles, |
| 470 base::Unretained(sync_worker_.get()), | 528 base::Unretained(sync_worker_.get()), |
| 471 origin), | 529 origin), |
| 472 tracked_callback); | 530 tracked_callback); |
| 473 } | 531 } |
| 474 | 532 |
| 475 void SyncEngine::DumpDatabase(const ListCallback& callback) { | 533 void SyncEngine::DumpDatabase(const ListCallback& callback) { |
| 534 base::Closure abort_closure = |
| 535 base::Bind(callback, base::Passed(scoped_ptr<base::ListValue>())); |
| 536 |
| 537 if (!sync_worker_) { |
| 538 abort_closure.Run(); |
| 539 return; |
| 540 } |
| 541 |
| 476 ListCallback tracked_callback = | 542 ListCallback tracked_callback = |
| 477 callback_tracker_.Register( | 543 callback_tracker_.Register(abort_closure, callback); |
| 478 base::Bind(callback, base::Passed(scoped_ptr<base::ListValue>())), | |
| 479 callback); | |
| 480 | 544 |
| 481 PostTaskAndReplyWithResult( | 545 PostTaskAndReplyWithResult( |
| 482 worker_task_runner_, | 546 worker_task_runner_, |
| 483 FROM_HERE, | 547 FROM_HERE, |
| 484 base::Bind(&SyncWorkerInterface::DumpDatabase, | 548 base::Bind(&SyncWorkerInterface::DumpDatabase, |
| 485 base::Unretained(sync_worker_.get())), | 549 base::Unretained(sync_worker_.get())), |
| 486 tracked_callback); | 550 tracked_callback); |
| 487 } | 551 } |
| 488 | 552 |
| 489 void SyncEngine::SetSyncEnabled(bool sync_enabled) { | 553 void SyncEngine::SetSyncEnabled(bool sync_enabled) { |
| 490 sync_enabled_ = sync_enabled; | 554 sync_enabled_ = sync_enabled; |
| 555 |
| 556 if (!sync_worker_) |
| 557 return; |
| 558 |
| 491 worker_task_runner_->PostTask( | 559 worker_task_runner_->PostTask( |
| 492 FROM_HERE, | 560 FROM_HERE, |
| 493 base::Bind(&SyncWorkerInterface::SetSyncEnabled, | 561 base::Bind(&SyncWorkerInterface::SetSyncEnabled, |
| 494 base::Unretained(sync_worker_.get()), | 562 base::Unretained(sync_worker_.get()), |
| 495 sync_enabled)); | 563 sync_enabled)); |
| 496 } | 564 } |
| 497 | 565 |
| 498 void SyncEngine::PromoteDemotedChanges() { | 566 void SyncEngine::PromoteDemotedChanges() { |
| 567 if (!sync_worker_) |
| 568 return; |
| 569 |
| 499 worker_task_runner_->PostTask( | 570 worker_task_runner_->PostTask( |
| 500 FROM_HERE, | 571 FROM_HERE, |
| 501 base::Bind(&SyncWorkerInterface::PromoteDemotedChanges, | 572 base::Bind(&SyncWorkerInterface::PromoteDemotedChanges, |
| 502 base::Unretained(sync_worker_.get()))); | 573 base::Unretained(sync_worker_.get()))); |
| 503 } | 574 } |
| 504 | 575 |
| 505 void SyncEngine::ApplyLocalChange( | 576 void SyncEngine::ApplyLocalChange( |
| 506 const FileChange& local_change, | 577 const FileChange& local_change, |
| 507 const base::FilePath& local_path, | 578 const base::FilePath& local_path, |
| 508 const SyncFileMetadata& local_metadata, | 579 const SyncFileMetadata& local_metadata, |
| 509 const fileapi::FileSystemURL& url, | 580 const fileapi::FileSystemURL& url, |
| 510 const SyncStatusCallback& callback) { | 581 const SyncStatusCallback& callback) { |
| 582 if (!sync_worker_) { |
| 583 callback.Run(SYNC_STATUS_ABORT); |
| 584 return; |
| 585 } |
| 586 |
| 511 SyncStatusCallback relayed_callback = RelayCallbackToCurrentThread( | 587 SyncStatusCallback relayed_callback = RelayCallbackToCurrentThread( |
| 512 FROM_HERE, TrackCallback(callback)); | 588 FROM_HERE, TrackCallback(callback)); |
| 513 worker_task_runner_->PostTask( | 589 worker_task_runner_->PostTask( |
| 514 FROM_HERE, | 590 FROM_HERE, |
| 515 base::Bind(&SyncWorkerInterface::ApplyLocalChange, | 591 base::Bind(&SyncWorkerInterface::ApplyLocalChange, |
| 516 base::Unretained(sync_worker_.get()), | 592 base::Unretained(sync_worker_.get()), |
| 517 local_change, | 593 local_change, |
| 518 local_path, | 594 local_path, |
| 519 local_metadata, | 595 local_metadata, |
| 520 url, | 596 url, |
| 521 relayed_callback)); | 597 relayed_callback)); |
| 522 } | 598 } |
| 523 | 599 |
| 524 void SyncEngine::OnNotificationReceived() { | 600 void SyncEngine::OnNotificationReceived() { |
| 601 if (!sync_worker_) |
| 602 return; |
| 603 |
| 525 worker_task_runner_->PostTask( | 604 worker_task_runner_->PostTask( |
| 526 FROM_HERE, | 605 FROM_HERE, |
| 527 base::Bind(&SyncWorkerInterface::OnNotificationReceived, | 606 base::Bind(&SyncWorkerInterface::OnNotificationReceived, |
| 528 base::Unretained(sync_worker_.get()))); | 607 base::Unretained(sync_worker_.get()))); |
| 529 } | 608 } |
| 530 | 609 |
| 531 void SyncEngine::OnPushNotificationEnabled(bool) {} | 610 void SyncEngine::OnPushNotificationEnabled(bool) {} |
| 532 | 611 |
| 533 void SyncEngine::OnReadyToSendRequests() { | 612 void SyncEngine::OnReadyToSendRequests() { |
| 534 // TODO(tzik): Drop current Syncworker and replace with new one. | 613 if (!sync_worker_) |
| 535 | 614 return; |
| 536 const std::string account_id = | |
| 537 signin_manager_ ? signin_manager_->GetAuthenticatedAccountId() : ""; | |
| 538 | 615 |
| 539 worker_task_runner_->PostTask( | 616 worker_task_runner_->PostTask( |
| 540 FROM_HERE, | 617 FROM_HERE, |
| 541 base::Bind(&SyncWorkerInterface::OnReadyToSendRequests, | 618 base::Bind(&SyncWorkerInterface::OnReadyToSendRequests, |
| 542 base::Unretained(sync_worker_.get()), | 619 base::Unretained(sync_worker_.get()))); |
| 543 account_id)); | |
| 544 } | 620 } |
| 545 | 621 |
| 546 void SyncEngine::OnRefreshTokenInvalid() { | 622 void SyncEngine::OnRefreshTokenInvalid() { |
| 623 if (!sync_worker_) |
| 624 return; |
| 625 |
| 547 worker_task_runner_->PostTask( | 626 worker_task_runner_->PostTask( |
| 548 FROM_HERE, | 627 FROM_HERE, |
| 549 base::Bind(&SyncWorkerInterface::OnRefreshTokenInvalid, | 628 base::Bind(&SyncWorkerInterface::OnRefreshTokenInvalid, |
| 550 base::Unretained(sync_worker_.get()))); | 629 base::Unretained(sync_worker_.get()))); |
| 551 } | 630 } |
| 552 | 631 |
| 553 void SyncEngine::OnNetworkChanged( | 632 void SyncEngine::OnNetworkChanged( |
| 554 net::NetworkChangeNotifier::ConnectionType type) { | 633 net::NetworkChangeNotifier::ConnectionType type) { |
| 634 if (!sync_worker_) |
| 635 return; |
| 636 |
| 555 worker_task_runner_->PostTask( | 637 worker_task_runner_->PostTask( |
| 556 FROM_HERE, | 638 FROM_HERE, |
| 557 base::Bind(&SyncWorkerInterface::OnNetworkChanged, | 639 base::Bind(&SyncWorkerInterface::OnNetworkChanged, |
| 558 base::Unretained(sync_worker_.get()), | 640 base::Unretained(sync_worker_.get()), |
| 559 type)); | 641 type)); |
| 560 } | 642 } |
| 561 | 643 |
| 644 void SyncEngine::GoogleSigninFailed(const GoogleServiceAuthError& error) { |
| 645 Reset(); |
| 646 UpdateServiceState(REMOTE_SERVICE_AUTHENTICATION_REQUIRED, |
| 647 "Failed to sign in."); |
| 648 } |
| 649 |
| 650 void SyncEngine::GoogleSigninSucceeded(const std::string& username, |
| 651 const std::string& password) { |
| 652 Initialize(); |
| 653 } |
| 654 |
| 655 void SyncEngine::GoogleSignedOut(const std::string& username) { |
| 656 Reset(); |
| 657 UpdateServiceState(REMOTE_SERVICE_AUTHENTICATION_REQUIRED, |
| 658 "User signed out."); |
| 659 } |
| 660 |
| 562 SyncEngine::SyncEngine( | 661 SyncEngine::SyncEngine( |
| 563 base::SingleThreadTaskRunner* ui_task_runner, | 662 base::SingleThreadTaskRunner* ui_task_runner, |
| 564 base::SequencedTaskRunner* worker_task_runner, | 663 base::SequencedTaskRunner* worker_task_runner, |
| 565 base::SequencedTaskRunner* file_task_runner, | 664 base::SequencedTaskRunner* file_task_runner, |
| 566 base::SequencedTaskRunner* drive_task_runner, | 665 base::SequencedTaskRunner* drive_task_runner, |
| 567 const base::FilePath& sync_file_system_dir, | 666 const base::FilePath& sync_file_system_dir, |
| 568 TaskLogger* task_logger, | 667 TaskLogger* task_logger, |
| 569 drive::DriveNotificationManager* notification_manager, | 668 drive::DriveNotificationManager* notification_manager, |
| 570 ExtensionServiceInterface* extension_service, | 669 ExtensionServiceInterface* extension_service, |
| 571 SigninManagerBase* signin_manager, | 670 SigninManagerBase* signin_manager, |
| (...skipping 10 matching lines...) Expand all Loading... |
| 582 extension_service_(extension_service), | 681 extension_service_(extension_service), |
| 583 signin_manager_(signin_manager), | 682 signin_manager_(signin_manager), |
| 584 token_service_(token_service), | 683 token_service_(token_service), |
| 585 request_context_(request_context), | 684 request_context_(request_context), |
| 586 remote_change_processor_(NULL), | 685 remote_change_processor_(NULL), |
| 587 service_state_(REMOTE_SERVICE_TEMPORARY_UNAVAILABLE), | 686 service_state_(REMOTE_SERVICE_TEMPORARY_UNAVAILABLE), |
| 588 sync_enabled_(false), | 687 sync_enabled_(false), |
| 589 env_override_(env_override), | 688 env_override_(env_override), |
| 590 weak_ptr_factory_(this) { | 689 weak_ptr_factory_(this) { |
| 591 DCHECK(sync_file_system_dir_.IsAbsolute()); | 690 DCHECK(sync_file_system_dir_.IsAbsolute()); |
| 691 if (notification_manager_) |
| 692 notification_manager_->AddObserver(this); |
| 693 if (signin_manager_) |
| 694 signin_manager_->AddObserver(this); |
| 695 net::NetworkChangeNotifier::AddNetworkChangeObserver(this); |
| 592 } | 696 } |
| 593 | 697 |
| 594 void SyncEngine::OnPendingFileListUpdated(int item_count) { | 698 void SyncEngine::OnPendingFileListUpdated(int item_count) { |
| 595 FOR_EACH_OBSERVER( | 699 FOR_EACH_OBSERVER( |
| 596 Observer, | 700 SyncServiceObserver, |
| 597 service_observers_, | 701 service_observers_, |
| 598 OnRemoteChangeQueueUpdated(item_count)); | 702 OnRemoteChangeQueueUpdated(item_count)); |
| 599 } | 703 } |
| 600 | 704 |
| 601 void SyncEngine::OnFileStatusChanged(const fileapi::FileSystemURL& url, | 705 void SyncEngine::OnFileStatusChanged(const fileapi::FileSystemURL& url, |
| 602 SyncFileStatus file_status, | 706 SyncFileStatus file_status, |
| 603 SyncAction sync_action, | 707 SyncAction sync_action, |
| 604 SyncDirection direction) { | 708 SyncDirection direction) { |
| 605 FOR_EACH_OBSERVER(FileStatusObserver, | 709 FOR_EACH_OBSERVER(FileStatusObserver, |
| 606 file_status_observers_, | 710 file_status_observers_, |
| 607 OnFileStatusChanged( | 711 OnFileStatusChanged( |
| 608 url, file_status, sync_action, direction)); | 712 url, file_status, sync_action, direction)); |
| 609 } | 713 } |
| 610 | 714 |
| 611 void SyncEngine::UpdateServiceState(RemoteServiceState state, | 715 void SyncEngine::UpdateServiceState(RemoteServiceState state, |
| 612 const std::string& description) { | 716 const std::string& description) { |
| 613 service_state_ = state; | 717 service_state_ = state; |
| 614 | 718 |
| 615 FOR_EACH_OBSERVER( | 719 FOR_EACH_OBSERVER( |
| 616 Observer, service_observers_, | 720 SyncServiceObserver, service_observers_, |
| 617 OnRemoteServiceStateUpdated(state, description)); | 721 OnRemoteServiceStateUpdated(state, description)); |
| 618 } | 722 } |
| 619 | 723 |
| 620 SyncStatusCallback SyncEngine::TrackCallback( | 724 SyncStatusCallback SyncEngine::TrackCallback( |
| 621 const SyncStatusCallback& callback) { | 725 const SyncStatusCallback& callback) { |
| 622 return callback_tracker_.Register( | 726 return callback_tracker_.Register( |
| 623 base::Bind(callback, SYNC_STATUS_ABORT), | 727 base::Bind(callback, SYNC_STATUS_ABORT), |
| 624 callback); | 728 callback); |
| 625 } | 729 } |
| 626 | 730 |
| 627 } // namespace drive_backend | 731 } // namespace drive_backend |
| 628 } // namespace sync_file_system | 732 } // namespace sync_file_system |
| OLD | NEW |