remote_change_processor_on_worker.cc revision 46d4c2bc3267f3f028f39e7e311b0f89aba2e4fd
1// Copyright 2014 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "chrome/browser/sync_file_system/drive_backend/remote_change_processor_on_worker.h" 6 7#include "base/bind.h" 8#include "base/location.h" 9#include "base/memory/weak_ptr.h" 10#include "base/single_thread_task_runner.h" 11#include "chrome/browser/sync_file_system/drive_backend/callback_helper.h" 12#include "chrome/browser/sync_file_system/drive_backend/remote_change_processor_wrapper.h" 13#include "chrome/browser/sync_file_system/file_change.h" 14#include "chrome/browser/sync_file_system/sync_file_metadata.h" 15 16namespace sync_file_system { 17namespace drive_backend { 18 19RemoteChangeProcessorOnWorker::RemoteChangeProcessorOnWorker( 20 const base::WeakPtr<RemoteChangeProcessorWrapper>& wrapper, 21 base::SingleThreadTaskRunner* ui_task_runner, 22 base::SequencedTaskRunner* worker_task_runner) 23 : wrapper_(wrapper), 24 ui_task_runner_(ui_task_runner), 25 worker_task_runner_(worker_task_runner) { 26 sequence_checker_.DetachFromSequence(); 27} 28 29RemoteChangeProcessorOnWorker::~RemoteChangeProcessorOnWorker() {} 30 31void RemoteChangeProcessorOnWorker::PrepareForProcessRemoteChange( 32 const fileapi::FileSystemURL& url, 33 const PrepareChangeCallback& callback) { 34 DCHECK(sequence_checker_.CalledOnValidSequencedThread()); 35 36 ui_task_runner_->PostTask( 37 FROM_HERE, 38 base::Bind(&RemoteChangeProcessorWrapper::PrepareForProcessRemoteChange, 39 wrapper_, 40 url, 41 RelayCallbackToTaskRunner( 42 worker_task_runner_, 43 FROM_HERE, 44 callback))); 45} 46 47void RemoteChangeProcessorOnWorker::ApplyRemoteChange( 48 const FileChange& change, 49 const base::FilePath& local_path, 50 const fileapi::FileSystemURL& url, 51 const SyncStatusCallback& callback) { 52 DCHECK(sequence_checker_.CalledOnValidSequencedThread()); 53 54 ui_task_runner_->PostTask( 55 FROM_HERE, 56 base::Bind(&RemoteChangeProcessorWrapper::ApplyRemoteChange, 57 wrapper_, 58 change, 59 local_path, 60 url, 61 RelayCallbackToTaskRunner( 62 worker_task_runner_, 63 FROM_HERE, 64 callback))); 65} 66 67void RemoteChangeProcessorOnWorker::FinalizeRemoteSync( 68 const fileapi::FileSystemURL& url, 69 bool clear_local_changes, 70 const base::Closure& completion_callback) { 71 DCHECK(sequence_checker_.CalledOnValidSequencedThread()); 72 73 ui_task_runner_->PostTask( 74 FROM_HERE, 75 base::Bind(&RemoteChangeProcessorWrapper::FinalizeRemoteSync, 76 wrapper_, 77 url, 78 clear_local_changes, 79 RelayCallbackToTaskRunner( 80 worker_task_runner_, 81 FROM_HERE, 82 completion_callback))); 83} 84 85void RemoteChangeProcessorOnWorker::RecordFakeLocalChange( 86 const fileapi::FileSystemURL& url, 87 const FileChange& change, 88 const SyncStatusCallback& callback) { 89 DCHECK(sequence_checker_.CalledOnValidSequencedThread()); 90 91 ui_task_runner_->PostTask( 92 FROM_HERE, 93 base::Bind(&RemoteChangeProcessorWrapper::RecordFakeLocalChange, 94 wrapper_, 95 url, 96 change, 97 RelayCallbackToTaskRunner( 98 worker_task_runner_, 99 FROM_HERE, 100 callback))); 101} 102 103} // namespace drive_backend 104} // namespace sync_file_system 105