Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / sync / glue / sync_backend_host_impl.cc
index de87a49..57d4428 100644 (file)
@@ -5,14 +5,15 @@
 #include "chrome/browser/sync/glue/sync_backend_host_impl.h"
 
 #include "base/command_line.h"
+#include "base/logging.h"
 #include "chrome/browser/chrome_notification_types.h"
-#include "chrome/browser/invalidation/invalidation_service.h"
 #include "chrome/browser/invalidation/invalidation_service_factory.h"
 #include "chrome/browser/network_time/network_time_tracker.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/sync/glue/sync_backend_host_core.h"
 #include "chrome/browser/sync/glue/sync_backend_registrar.h"
 #include "chrome/common/chrome_switches.h"
+#include "components/invalidation/invalidation_service.h"
 #include "components/sync_driver/sync_frontend.h"
 #include "components/sync_driver/sync_prefs.h"
 #include "content/public/browser/browser_thread.h"
@@ -59,6 +60,7 @@ SyncBackendHostImpl::SyncBackendHostImpl(
           invalidation::InvalidationServiceFactory::GetForProfile(profile)),
       invalidation_handler_registered_(false),
       weak_ptr_factory_(this) {
+  CHECK(invalidator_);
   core_ = new SyncBackendHostCore(
       name_,
       profile_->GetPath().Append(kSyncDataFolderName),
@@ -234,6 +236,9 @@ void SyncBackendHostImpl::StopSyncingForShutdown() {
   // Stop listening for and forwarding locally-triggered sync refresh requests.
   notification_registrar_.RemoveAll();
 
+  // Stop non-blocking sync types from sending any more requests to the syncer.
+  sync_core_proxy_.reset();
+
   DCHECK(registrar_->sync_thread()->IsRunning());
 
   registrar_->RequestWorkerStopOnUIThread();
@@ -427,6 +432,10 @@ syncer::UserShare* SyncBackendHostImpl::GetUserShare() const {
   return core_->sync_manager()->GetUserShare();
 }
 
+scoped_ptr<syncer::SyncCoreProxy> SyncBackendHostImpl::GetSyncCoreProxy() {
+  return scoped_ptr<syncer::SyncCoreProxy>(sync_core_proxy_->Clone());
+}
+
 SyncBackendHostImpl::Status SyncBackendHostImpl::GetDetailedStatus() {
   DCHECK(initialized());
   return core_->sync_manager()->GetDetailedStatus();
@@ -475,12 +484,52 @@ SyncedDeviceTracker* SyncBackendHostImpl::GetSyncedDeviceTracker() const {
   return core_->synced_device_tracker();
 }
 
-void SyncBackendHostImpl::SetForwardProtocolEvents(bool forward) {
+void SyncBackendHostImpl::RequestBufferedProtocolEventsAndEnableForwarding() {
+  registrar_->sync_thread()->message_loop()->PostTask(
+      FROM_HERE,
+      base::Bind(
+          &SyncBackendHostCore::SendBufferedProtocolEventsAndEnableForwarding,
+          core_));
+}
+
+void SyncBackendHostImpl::DisableProtocolEventForwarding() {
+  registrar_->sync_thread()->message_loop()->PostTask(
+      FROM_HERE,
+      base::Bind(
+          &SyncBackendHostCore::DisableProtocolEventForwarding,
+          core_));
+}
+
+void SyncBackendHostImpl::EnableDirectoryTypeDebugInfoForwarding() {
+  DCHECK(initialized());
+  registrar_->sync_thread()->message_loop()->PostTask(
+      FROM_HERE,
+      base::Bind(
+          &SyncBackendHostCore::EnableDirectoryTypeDebugInfoForwarding,
+          core_));
+}
+
+void SyncBackendHostImpl::DisableDirectoryTypeDebugInfoForwarding() {
   DCHECK(initialized());
   registrar_->sync_thread()->message_loop()->PostTask(
       FROM_HERE,
-      base::Bind(&SyncBackendHostCore::SetForwardProtocolEvents,
-                 core_, forward));
+      base::Bind(
+          &SyncBackendHostCore::DisableDirectoryTypeDebugInfoForwarding,
+          core_));
+}
+
+void SyncBackendHostImpl::GetAllNodesForTypes(
+    syncer::ModelTypeSet types,
+    base::Callback<void(const std::vector<syncer::ModelType>&,
+                        ScopedVector<base::ListValue>)> callback) {
+  DCHECK(initialized());
+  registrar_->sync_thread()->message_loop()->PostTask(FROM_HERE,
+       base::Bind(
+           &SyncBackendHostCore::GetAllNodesForTypes,
+           core_,
+           types,
+           frontend_loop_->message_loop_proxy(),
+           callback));
 }
 
 void SyncBackendHostImpl::InitCore(scoped_ptr<DoInitializeOptions> options) {
@@ -563,8 +612,12 @@ void SyncBackendHostImpl::HandleControlTypesDownloadRetry() {
 void SyncBackendHostImpl::HandleInitializationSuccessOnFrontendLoop(
     const syncer::WeakHandle<syncer::JsBackend> js_backend,
     const syncer::WeakHandle<syncer::DataTypeDebugInfoListener>
-        debug_info_listener) {
+        debug_info_listener,
+    syncer::SyncCoreProxy* sync_core_proxy) {
   DCHECK_EQ(base::MessageLoop::current(), frontend_loop_);
+
+  sync_core_proxy_ = sync_core_proxy->Clone();
+
   if (!frontend_)
     return;
 
@@ -761,6 +814,30 @@ void SyncBackendHostImpl::HandleProtocolEventOnFrontendLoop(
   frontend_->OnProtocolEvent(*scoped_event);
 }
 
+void SyncBackendHostImpl::HandleDirectoryCommitCountersUpdatedOnFrontendLoop(
+    syncer::ModelType type,
+    const syncer::CommitCounters& counters) {
+  if (!frontend_)
+    return;
+  frontend_->OnDirectoryTypeCommitCounterUpdated(type, counters);
+}
+
+void SyncBackendHostImpl::HandleDirectoryUpdateCountersUpdatedOnFrontendLoop(
+    syncer::ModelType type,
+    const syncer::UpdateCounters& counters) {
+  if (!frontend_)
+    return;
+  frontend_->OnDirectoryTypeUpdateCounterUpdated(type, counters);
+}
+
+void SyncBackendHostImpl::HandleDirectoryStatusCountersUpdatedOnFrontendLoop(
+    syncer::ModelType type,
+    const syncer::StatusCounters& counters) {
+  if (!frontend_)
+    return;
+  frontend_->OnDirectoryTypeStatusCounterUpdated(type, counters);
+}
+
 base::MessageLoop* SyncBackendHostImpl::GetSyncLoopForTesting() {
   return registrar_->sync_thread()->message_loop();
 }