remote_change_processor_on_worker.cc revision 1320f92c476a1ad9d19dba2a48c72b75566198e9
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 DCHECK(sequence_checker_.CalledOnValidSequencedThread()); 31} 32 33void RemoteChangeProcessorOnWorker::PrepareForProcessRemoteChange( 34 const storage::FileSystemURL& url, 35 const PrepareChangeCallback& callback) { 36 DCHECK(sequence_checker_.CalledOnValidSequencedThread()); 37 38 ui_task_runner_->PostTask( 39 FROM_HERE, 40 base::Bind(&RemoteChangeProcessorWrapper::PrepareForProcessRemoteChange, 41 wrapper_, 42 url, 43 RelayCallbackToTaskRunner( 44 worker_task_runner_.get(), FROM_HERE, callback))); 45} 46 47void RemoteChangeProcessorOnWorker::ApplyRemoteChange( 48 const FileChange& change, 49 const base::FilePath& local_path, 50 const storage::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_.get(), FROM_HERE, callback))); 63} 64 65void RemoteChangeProcessorOnWorker::FinalizeRemoteSync( 66 const storage::FileSystemURL& url, 67 bool clear_local_changes, 68 const base::Closure& completion_callback) { 69 DCHECK(sequence_checker_.CalledOnValidSequencedThread()); 70 71 ui_task_runner_->PostTask( 72 FROM_HERE, 73 base::Bind( 74 &RemoteChangeProcessorWrapper::FinalizeRemoteSync, 75 wrapper_, 76 url, 77 clear_local_changes, 78 RelayCallbackToTaskRunner( 79 worker_task_runner_.get(), FROM_HERE, completion_callback))); 80} 81 82void RemoteChangeProcessorOnWorker::RecordFakeLocalChange( 83 const storage::FileSystemURL& url, 84 const FileChange& change, 85 const SyncStatusCallback& callback) { 86 DCHECK(sequence_checker_.CalledOnValidSequencedThread()); 87 88 ui_task_runner_->PostTask( 89 FROM_HERE, 90 base::Bind(&RemoteChangeProcessorWrapper::RecordFakeLocalChange, 91 wrapper_, 92 url, 93 change, 94 RelayCallbackToTaskRunner( 95 worker_task_runner_.get(), FROM_HERE, callback))); 96} 97 98void RemoteChangeProcessorOnWorker::DetachFromSequence() { 99 sequence_checker_.DetachFromSequence(); 100} 101 102} // namespace drive_backend 103} // namespace sync_file_system 104