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