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 |