// Copyright 2014 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "sync/internal_api/public/attachments/attachment_service_proxy.h" #include "base/bind.h" #include "base/message_loop/message_loop.h" #include "base/thread_task_runner_handle.h" namespace syncer { namespace { // These ProxyFooCallback functions are used to invoke a callback in a specific // thread. // Invokes |callback| with |result| and |attachments| in the |task_runner| // thread. void ProxyGetOrDownloadCallback( const scoped_refptr& task_runner, const AttachmentService::GetOrDownloadCallback& callback, const AttachmentService::GetOrDownloadResult& result, scoped_ptr attachments) { task_runner->PostTask( FROM_HERE, base::Bind(callback, result, base::Passed(&attachments))); } } // namespace AttachmentServiceProxy::AttachmentServiceProxy() { } AttachmentServiceProxy::AttachmentServiceProxy( const scoped_refptr& wrapped_task_runner, const base::WeakPtr& wrapped) : wrapped_task_runner_(wrapped_task_runner), core_(new Core(wrapped)) { DCHECK(wrapped_task_runner_.get()); } AttachmentServiceProxy::AttachmentServiceProxy( const scoped_refptr& wrapped_task_runner, const scoped_refptr& core) : wrapped_task_runner_(wrapped_task_runner), core_(core) { DCHECK(wrapped_task_runner_.get()); DCHECK(core_.get()); } AttachmentServiceProxy::~AttachmentServiceProxy() { } void AttachmentServiceProxy::GetOrDownloadAttachments( const AttachmentIdList& attachment_ids, const GetOrDownloadCallback& callback) { DCHECK(wrapped_task_runner_.get()); GetOrDownloadCallback proxy_callback = base::Bind(&ProxyGetOrDownloadCallback, base::ThreadTaskRunnerHandle::Get(), callback); wrapped_task_runner_->PostTask( FROM_HERE, base::Bind(&AttachmentService::GetOrDownloadAttachments, core_, attachment_ids, proxy_callback)); } void AttachmentServiceProxy::UploadAttachments( const AttachmentIdList& attachment_ids) { DCHECK(wrapped_task_runner_.get()); wrapped_task_runner_->PostTask( FROM_HERE, base::Bind(&AttachmentService::UploadAttachments, core_, attachment_ids)); } AttachmentServiceProxy::Core::Core( const base::WeakPtr& wrapped) : wrapped_(wrapped) { } AttachmentServiceProxy::Core::~Core() { } void AttachmentServiceProxy::Core::GetOrDownloadAttachments( const AttachmentIdList& attachment_ids, const GetOrDownloadCallback& callback) { if (!wrapped_) { return; } wrapped_->GetOrDownloadAttachments(attachment_ids, callback); } void AttachmentServiceProxy::Core::UploadAttachments( const AttachmentIdList& attachment_ids) { if (!wrapped_) { return; } wrapped_->UploadAttachments(attachment_ids); } } // namespace syncer