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#ifndef CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_SYNC_TASK_H_
6#define CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_SYNC_TASK_H_
7
8#include "base/memory/scoped_ptr.h"
9#include "base/memory/weak_ptr.h"
10#include "chrome/browser/sync_file_system/sync_callbacks.h"
11
12namespace sync_file_system {
13namespace drive_backend {
14
15class SyncTaskToken;
16
17class SyncTask {
18 public:
19  SyncTask() : used_network_(false) {}
20  virtual ~SyncTask() {}
21  virtual void RunPreflight(scoped_ptr<SyncTaskToken> token) = 0;
22
23  bool used_network() { return used_network_; }
24
25 protected:
26  void set_used_network(bool used_network) {
27    used_network_ = used_network;
28  }
29
30 private:
31  bool used_network_;
32
33  DISALLOW_COPY_AND_ASSIGN(SyncTask);
34};
35
36class ExclusiveTask : public SyncTask {
37 public:
38  ExclusiveTask();
39  virtual ~ExclusiveTask();
40
41  virtual void RunPreflight(scoped_ptr<SyncTaskToken> token) OVERRIDE FINAL;
42  virtual void RunExclusive(const SyncStatusCallback& callback) = 0;
43
44 private:
45  base::WeakPtrFactory<ExclusiveTask> weak_ptr_factory_;
46
47  DISALLOW_COPY_AND_ASSIGN(ExclusiveTask);
48};
49
50}  // namespace drive_backend
51}  // namespace sync_file_system
52
53#endif  // CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_SYNC_TASK_H_
54