Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1902)

Side by Side Diff: chrome/browser/sync_file_system/drive_backend/sync_engine.cc

Issue 324343002: [SyncFS] Support late authentication (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698