| 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 "components/sync/driver/glue/sync_backend_host_core.h" | 5 #include "components/sync/driver/glue/sync_backend_host_core.h" |
| 6 | 6 |
| 7 #include <utility> | 7 #include <utility> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/files/file_util.h" | 10 #include "base/files/file_util.h" |
| 11 #include "base/location.h" | 11 #include "base/location.h" |
| 12 #include "base/memory/ptr_util.h" |
| 12 #include "base/single_thread_task_runner.h" | 13 #include "base/single_thread_task_runner.h" |
| 13 #include "components/data_use_measurement/core/data_use_user_data.h" | 14 #include "components/data_use_measurement/core/data_use_user_data.h" |
| 14 #include "components/invalidation/public/invalidation_util.h" | 15 #include "components/invalidation/public/invalidation_util.h" |
| 15 #include "components/invalidation/public/object_id_invalidation_map.h" | 16 #include "components/invalidation/public/object_id_invalidation_map.h" |
| 16 #include "components/sync/core/http_post_provider_factory.h" | 17 #include "components/sync/core/http_post_provider_factory.h" |
| 17 #include "components/sync/core/internal_components_factory.h" | 18 #include "components/sync/core/internal_components_factory.h" |
| 18 #include "components/sync/core/sync_manager.h" | 19 #include "components/sync/core/sync_manager.h" |
| 19 #include "components/sync/core/sync_manager_factory.h" | 20 #include "components/sync/core/sync_manager_factory.h" |
| 20 #include "components/sync/device_info/local_device_info_provider_impl.h" | 21 #include "components/sync/device_info/local_device_info_provider_impl.h" |
| 21 #include "components/sync/driver/glue/sync_backend_registrar.h" | 22 #include "components/sync/driver/glue/sync_backend_registrar.h" |
| (...skipping 300 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 322 } | 323 } |
| 323 | 324 |
| 324 void SyncBackendHostCore::OnMigrationRequested(syncer::ModelTypeSet types) { | 325 void SyncBackendHostCore::OnMigrationRequested(syncer::ModelTypeSet types) { |
| 325 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); | 326 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); |
| 326 host_.Call(FROM_HERE, | 327 host_.Call(FROM_HERE, |
| 327 &SyncBackendHostImpl::HandleMigrationRequestedOnFrontendLoop, | 328 &SyncBackendHostImpl::HandleMigrationRequestedOnFrontendLoop, |
| 328 types); | 329 types); |
| 329 } | 330 } |
| 330 | 331 |
| 331 void SyncBackendHostCore::OnProtocolEvent(const syncer::ProtocolEvent& event) { | 332 void SyncBackendHostCore::OnProtocolEvent(const syncer::ProtocolEvent& event) { |
| 332 // TODO(rlarocque): Find a way to pass event_clone as a scoped_ptr. | |
| 333 if (forward_protocol_events_) { | 333 if (forward_protocol_events_) { |
| 334 std::unique_ptr<syncer::ProtocolEvent> event_clone(event.Clone()); | 334 std::unique_ptr<syncer::ProtocolEvent> event_clone(event.Clone()); |
| 335 host_.Call(FROM_HERE, | 335 host_.Call(FROM_HERE, |
| 336 &SyncBackendHostImpl::HandleProtocolEventOnFrontendLoop, | 336 &SyncBackendHostImpl::HandleProtocolEventOnFrontendLoop, |
| 337 event_clone.release()); | 337 base::Passed(std::move(event_clone))); |
| 338 } | 338 } |
| 339 } | 339 } |
| 340 | 340 |
| 341 void SyncBackendHostCore::DoOnInvalidatorStateChange( | 341 void SyncBackendHostCore::DoOnInvalidatorStateChange( |
| 342 syncer::InvalidatorState state) { | 342 syncer::InvalidatorState state) { |
| 343 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); | 343 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); |
| 344 sync_manager_->SetInvalidatorEnabled(state == syncer::INVALIDATIONS_ENABLED); | 344 sync_manager_->SetInvalidatorEnabled(state == syncer::INVALIDATIONS_ENABLED); |
| 345 } | 345 } |
| 346 | 346 |
| 347 void SyncBackendHostCore::DoOnIncomingInvalidation( | 347 void SyncBackendHostCore::DoOnIncomingInvalidation( |
| (...skipping 261 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 609 retry_callback); | 609 retry_callback); |
| 610 } | 610 } |
| 611 | 611 |
| 612 void SyncBackendHostCore::SendBufferedProtocolEventsAndEnableForwarding() { | 612 void SyncBackendHostCore::SendBufferedProtocolEventsAndEnableForwarding() { |
| 613 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); | 613 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); |
| 614 forward_protocol_events_ = true; | 614 forward_protocol_events_ = true; |
| 615 | 615 |
| 616 if (sync_manager_) { | 616 if (sync_manager_) { |
| 617 // Grab our own copy of the buffered events. | 617 // Grab our own copy of the buffered events. |
| 618 // The buffer is not modified by this operation. | 618 // The buffer is not modified by this operation. |
| 619 std::vector<syncer::ProtocolEvent*> buffered_events; | 619 std::vector<std::unique_ptr<syncer::ProtocolEvent>> buffered_events = |
| 620 sync_manager_->GetBufferedProtocolEvents().release(&buffered_events); | 620 sync_manager_->GetBufferedProtocolEvents(); |
| 621 | 621 |
| 622 // Send them all over the fence to the host. | 622 // Send them all over the fence to the host. |
| 623 for (std::vector<syncer::ProtocolEvent*>::iterator it = | 623 for (auto& event : buffered_events) { |
| 624 buffered_events.begin(); | |
| 625 it != buffered_events.end(); ++it) { | |
| 626 // TODO(rlarocque): Make it explicit that host_ takes ownership. | |
| 627 host_.Call(FROM_HERE, | 624 host_.Call(FROM_HERE, |
| 628 &SyncBackendHostImpl::HandleProtocolEventOnFrontendLoop, *it); | 625 &SyncBackendHostImpl::HandleProtocolEventOnFrontendLoop, |
| 626 base::Passed(std::move(event))); |
| 629 } | 627 } |
| 630 } | 628 } |
| 631 } | 629 } |
| 632 | 630 |
| 633 void SyncBackendHostCore::DisableProtocolEventForwarding() { | 631 void SyncBackendHostCore::DisableProtocolEventForwarding() { |
| 634 forward_protocol_events_ = false; | 632 forward_protocol_events_ = false; |
| 635 } | 633 } |
| 636 | 634 |
| 637 void SyncBackendHostCore::EnableDirectoryTypeDebugInfoForwarding() { | 635 void SyncBackendHostCore::EnableDirectoryTypeDebugInfoForwarding() { |
| 638 DCHECK(sync_manager_); | 636 DCHECK(sync_manager_); |
| (...skipping 22 matching lines...) Expand all Loading... |
| 661 if (base::DirectoryExists(sync_data_folder_path_)) { | 659 if (base::DirectoryExists(sync_data_folder_path_)) { |
| 662 if (!base::DeleteFile(sync_data_folder_path_, true)) | 660 if (!base::DeleteFile(sync_data_folder_path_, true)) |
| 663 SLOG(DFATAL) << "Could not delete the Sync Data folder."; | 661 SLOG(DFATAL) << "Could not delete the Sync Data folder."; |
| 664 } | 662 } |
| 665 } | 663 } |
| 666 | 664 |
| 667 void SyncBackendHostCore::GetAllNodesForTypes( | 665 void SyncBackendHostCore::GetAllNodesForTypes( |
| 668 syncer::ModelTypeSet types, | 666 syncer::ModelTypeSet types, |
| 669 scoped_refptr<base::SequencedTaskRunner> task_runner, | 667 scoped_refptr<base::SequencedTaskRunner> task_runner, |
| 670 base::Callback<void(const std::vector<syncer::ModelType>& type, | 668 base::Callback<void(const std::vector<syncer::ModelType>& type, |
| 671 ScopedVector<base::ListValue>)> callback) { | 669 std::vector<std::unique_ptr<base::ListValue>>)> |
| 670 callback) { |
| 672 std::vector<syncer::ModelType> types_vector; | 671 std::vector<syncer::ModelType> types_vector; |
| 673 ScopedVector<base::ListValue> node_lists; | 672 std::vector<std::unique_ptr<base::ListValue>> node_lists; |
| 674 | 673 |
| 675 syncer::ModelSafeRoutingInfo routes; | 674 syncer::ModelSafeRoutingInfo routes; |
| 676 registrar_->GetModelSafeRoutingInfo(&routes); | 675 registrar_->GetModelSafeRoutingInfo(&routes); |
| 677 syncer::ModelTypeSet enabled_types = GetRoutingInfoTypes(routes); | 676 syncer::ModelTypeSet enabled_types = GetRoutingInfoTypes(routes); |
| 678 | 677 |
| 679 for (syncer::ModelTypeSet::Iterator it = types.First(); it.Good(); it.Inc()) { | 678 for (syncer::ModelTypeSet::Iterator it = types.First(); it.Good(); it.Inc()) { |
| 680 types_vector.push_back(it.Get()); | 679 types_vector.push_back(it.Get()); |
| 681 if (!enabled_types.Has(it.Get())) { | 680 if (!enabled_types.Has(it.Get())) { |
| 682 node_lists.push_back(new base::ListValue()); | 681 node_lists.push_back(base::MakeUnique<base::ListValue>()); |
| 683 } else { | 682 } else { |
| 684 node_lists.push_back( | 683 node_lists.push_back(sync_manager_->GetAllNodesForType(it.Get())); |
| 685 sync_manager_->GetAllNodesForType(it.Get()).release()); | |
| 686 } | 684 } |
| 687 } | 685 } |
| 688 | 686 |
| 689 task_runner->PostTask( | 687 task_runner->PostTask( |
| 690 FROM_HERE, base::Bind(callback, types_vector, base::Passed(&node_lists))); | 688 FROM_HERE, base::Bind(callback, types_vector, base::Passed(&node_lists))); |
| 691 } | 689 } |
| 692 | 690 |
| 693 void SyncBackendHostCore::StartSavingChanges() { | 691 void SyncBackendHostCore::StartSavingChanges() { |
| 694 // We may already be shut down. | 692 // We may already be shut down. |
| 695 if (!sync_loop_) | 693 if (!sync_loop_) |
| (...skipping 27 matching lines...) Expand all Loading... |
| 723 } | 721 } |
| 724 | 722 |
| 725 void SyncBackendHostCore::ClearServerDataDone( | 723 void SyncBackendHostCore::ClearServerDataDone( |
| 726 const base::Closure& frontend_callback) { | 724 const base::Closure& frontend_callback) { |
| 727 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); | 725 DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); |
| 728 host_.Call(FROM_HERE, &SyncBackendHostImpl::ClearServerDataDoneOnFrontendLoop, | 726 host_.Call(FROM_HERE, &SyncBackendHostImpl::ClearServerDataDoneOnFrontendLoop, |
| 729 frontend_callback); | 727 frontend_callback); |
| 730 } | 728 } |
| 731 | 729 |
| 732 } // namespace browser_sync | 730 } // namespace browser_sync |
| OLD | NEW |