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