Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(33)

Side by Side Diff: chrome/browser/chromeos/drive/sync_client.h

Issue 1314803004: Move chrome/browser/chromeos/drive/file_system.cc (+deps) into components/drive. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebasing... Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright (c) 2012 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 #ifndef CHROME_BROWSER_CHROMEOS_DRIVE_SYNC_CLIENT_H_
6 #define CHROME_BROWSER_CHROMEOS_DRIVE_SYNC_CLIENT_H_
7
8 #include <map>
9 #include <string>
10 #include <vector>
11
12 #include "base/callback.h"
13 #include "base/memory/scoped_ptr.h"
14 #include "base/memory/weak_ptr.h"
15 #include "base/threading/thread_checker.h"
16 #include "base/time/time.h"
17 #include "components/drive/file_errors.h"
18 #include "components/drive/job_scheduler.h"
19 #include "components/drive/resource_metadata.h"
20
21 namespace base {
22 class SequencedTaskRunner;
23 }
24
25 namespace drive {
26
27 class FileCacheEntry;
28 class JobScheduler;
29 class ResourceEntry;
30 struct ClientContext;
31
32 namespace file_system {
33 class DownloadOperation;
34 class OperationDelegate;
35 }
36
37 namespace internal {
38
39 class ChangeListLoader;
40 class EntryUpdatePerformer;
41 class FileCache;
42 class LoaderController;
43 class ResourceMetadata;
44
45 // The SyncClient is used to synchronize pinned files on Drive and the
46 // cache on the local drive.
47 //
48 // If the user logs out before fetching of the pinned files is complete, this
49 // client resumes fetching operations next time the user logs in, based on
50 // the states left in the cache.
51 class SyncClient {
52 public:
53 SyncClient(base::SequencedTaskRunner* blocking_task_runner,
54 file_system::OperationDelegate* delegate,
55 JobScheduler* scheduler,
56 ResourceMetadata* metadata,
57 FileCache* cache,
58 LoaderController* loader_controller,
59 const base::FilePath& temporary_file_directory);
60 virtual ~SyncClient();
61
62 // Adds a fetch task.
63 void AddFetchTask(const std::string& local_id);
64
65 // Removes a fetch task.
66 void RemoveFetchTask(const std::string& local_id);
67
68 // Adds a update task.
69 void AddUpdateTask(const ClientContext& context, const std::string& local_id);
70
71 // Waits for the update task to complete and runs the callback.
72 // Returns false if no task is found for the spcecified ID.
73 bool WaitForUpdateTaskToComplete(const std::string& local_id,
74 const FileOperationCallback& callback);
75
76 // Starts processing the backlog (i.e. pinned-but-not-filed files and
77 // dirty-but-not-uploaded files). Kicks off retrieval of the local
78 // IDs of these files, and then starts the sync loop.
79 void StartProcessingBacklog();
80
81 // Starts checking the existing pinned files to see if these are
82 // up-to-date. If stale files are detected, the local IDs of these files
83 // are added and the sync loop is started.
84 void StartCheckingExistingPinnedFiles();
85
86 // Sets a delay for testing.
87 void set_delay_for_testing(const base::TimeDelta& delay) {
88 delay_ = delay;
89 }
90
91 private:
92 // Types of sync tasks.
93 enum SyncType {
94 FETCH, // Fetch a file from the Drive server.
95 UPDATE, // Updates an entry's metadata or content on the Drive server.
96 };
97
98 // States of sync tasks.
99 enum SyncState {
100 SUSPENDED, // Task is currently inactive.
101 PENDING, // Task is going to run.
102 RUNNING, // Task is running.
103 };
104
105 typedef std::pair<SyncType, std::string> SyncTaskKey;
106
107 struct SyncTask {
108 SyncTask();
109 ~SyncTask();
110 SyncState state;
111 ClientContext context;
112 base::Callback<base::Closure(const ClientContext& context)> task;
113 bool should_run_again;
114 base::Closure cancel_closure;
115 std::vector<SyncTaskKey> dependent_tasks;
116 std::vector<FileOperationCallback> waiting_callbacks;
117 };
118
119 typedef std::map<SyncTaskKey, SyncTask> SyncTasks;
120
121 // Performs a FETCH task.
122 base::Closure PerformFetchTask(const std::string& local_id,
123 const ClientContext& context);
124
125 // Adds a FETCH task.
126 void AddFetchTaskInternal(const std::string& local_id,
127 const base::TimeDelta& delay);
128
129 // Performs a UPDATE task.
130 base::Closure PerformUpdateTask(const std::string& local_id,
131 const ClientContext& context);
132
133 // Adds a UPDATE task.
134 void AddUpdateTaskInternal(const ClientContext& context,
135 const std::string& local_id,
136 const base::TimeDelta& delay);
137
138 // Adds the given task. If the same task is found, does nothing.
139 void AddTask(const SyncTasks::key_type& key,
140 const SyncTask& task,
141 const base::TimeDelta& delay);
142
143 // Called when a task is ready to start.
144 void StartTask(const SyncTasks::key_type& key);
145 void StartTaskAfterGetParentResourceEntry(const SyncTasks::key_type& key,
146 const ResourceEntry* parent,
147 FileError error);
148
149 // Called when the local IDs of files in the backlog are obtained.
150 void OnGetLocalIdsOfBacklog(const std::vector<std::string>* to_fetch,
151 const std::vector<std::string>* to_update);
152
153 // Adds fetch tasks.
154 void AddFetchTasks(const std::vector<std::string>* local_ids);
155
156 // Called when a task is completed.
157 void OnTaskComplete(SyncType type,
158 const std::string& local_id,
159 FileError error);
160
161 // Called when the file for |local_id| is fetched.
162 void OnFetchFileComplete(const std::string& local_id,
163 FileError error,
164 const base::FilePath& local_path,
165 scoped_ptr<ResourceEntry> entry);
166
167 scoped_refptr<base::SequencedTaskRunner> blocking_task_runner_;
168 file_system::OperationDelegate* operation_delegate_;
169 ResourceMetadata* metadata_;
170 FileCache* cache_;
171
172 // Used to fetch pinned files.
173 scoped_ptr<file_system::DownloadOperation> download_operation_;
174
175 // Used to update entry metadata.
176 scoped_ptr<EntryUpdatePerformer> entry_update_performer_;
177
178 // Sync tasks to be processed.
179 SyncTasks tasks_;
180
181 // The delay is used for delaying processing tasks in AddTask().
182 base::TimeDelta delay_;
183
184 // The delay is used for delaying retry of tasks on server errors.
185 base::TimeDelta long_delay_;
186
187 base::ThreadChecker thread_checker_;
188
189 // Note: This should remain the last member so it'll be destroyed and
190 // invalidate its weak pointers before any other members are destroyed.
191 base::WeakPtrFactory<SyncClient> weak_ptr_factory_;
192
193 DISALLOW_COPY_AND_ASSIGN(SyncClient);
194 };
195
196 } // namespace internal
197 } // namespace drive
198
199 #endif // CHROME_BROWSER_CHROMEOS_DRIVE_SYNC_CLIENT_H_
OLDNEW
« no previous file with comments | « chrome/browser/chromeos/drive/sync/remove_performer_unittest.cc ('k') | chrome/browser/chromeos/drive/sync_client.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698