Home | History | Annotate | Download | only in drive_backend
      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 
     16 namespace sync_file_system {
     17 namespace drive_backend {
     18 
     19 RemoteChangeProcessorOnWorker::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 
     29 RemoteChangeProcessorOnWorker::~RemoteChangeProcessorOnWorker() {
     30   DCHECK(sequence_checker_.CalledOnValidSequencedThread());
     31 }
     32 
     33 void 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 
     47 void 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 
     65 void 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 
     82 void 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 
     98 void RemoteChangeProcessorOnWorker::DetachFromSequence() {
     99   sequence_checker_.DetachFromSequence();
    100 }
    101 
    102 }  // namespace drive_backend
    103 }  // namespace sync_file_system
    104