sync_task_token.h revision 116680a4aac90f2aa7413d9095a592090648e557
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_TOKEN_H_
6#define CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_SYNC_TASK_TOKEN_H_
7
8#include "base/callback.h"
9#include "base/location.h"
10#include "base/memory/scoped_ptr.h"
11#include "base/memory/weak_ptr.h"
12#include "chrome/browser/sync_file_system/sync_callbacks.h"
13#include "chrome/browser/sync_file_system/task_logger.h"
14
15namespace sync_file_system {
16namespace drive_backend {
17
18class SyncTaskManager;
19struct BlockingFactor;
20
21// Represents a running sequence of SyncTasks.  Owned by a callback chain that
22// should run exclusively, and held by SyncTaskManager when no task is running.
23class SyncTaskToken {
24 public:
25  static const int64 kTestingTaskTokenID;
26  static const int64 kForegroundTaskTokenID;
27  static const int64 kMinimumBackgroundTaskTokenID;
28
29  static scoped_ptr<SyncTaskToken> CreateForTesting(
30      const SyncStatusCallback& callback);
31  static scoped_ptr<SyncTaskToken> CreateForForegroundTask(
32      const base::WeakPtr<SyncTaskManager>& manager,
33      base::SequencedTaskRunner* task_runner);
34  static scoped_ptr<SyncTaskToken> CreateForBackgroundTask(
35      const base::WeakPtr<SyncTaskManager>& manager,
36      base::SequencedTaskRunner* task_runner,
37      int64 token_id,
38      scoped_ptr<BlockingFactor> blocking_factor);
39
40  void UpdateTask(const tracked_objects::Location& location,
41                  const SyncStatusCallback& callback);
42
43  const tracked_objects::Location& location() const { return location_; }
44  virtual ~SyncTaskToken();
45
46  static SyncStatusCallback WrapToCallback(scoped_ptr<SyncTaskToken> token);
47
48  SyncTaskManager* manager() { return manager_.get(); }
49
50  const SyncStatusCallback& callback() const { return callback_; }
51  void clear_callback() { callback_.Reset(); }
52
53  void set_blocking_factor(scoped_ptr<BlockingFactor> blocking_factor);
54  const BlockingFactor* blocking_factor() const;
55  void clear_blocking_factor();
56
57  int64 token_id() const { return token_id_; }
58
59  void InitializeTaskLog(const std::string& task_description);
60  void FinalizeTaskLog(const std::string& result_description);
61  void RecordLog(const std::string& message);
62
63  bool has_task_log() const { return task_log_; }
64  void SetTaskLog(scoped_ptr<TaskLogger::TaskLog> task_log);
65  scoped_ptr<TaskLogger::TaskLog> PassTaskLog();
66
67 private:
68  SyncTaskToken(const base::WeakPtr<SyncTaskManager>& manager,
69                base::SequencedTaskRunner* task_runner,
70                int64 token_id,
71                scoped_ptr<BlockingFactor> blocking_factor,
72                const SyncStatusCallback& callback);
73
74  base::WeakPtr<SyncTaskManager> manager_;
75  scoped_refptr<base::SequencedTaskRunner> task_runner_;
76  tracked_objects::Location location_;
77  int64 token_id_;
78  SyncStatusCallback callback_;
79
80  scoped_ptr<TaskLogger::TaskLog> task_log_;
81  scoped_ptr<BlockingFactor> blocking_factor_;
82
83  DISALLOW_COPY_AND_ASSIGN(SyncTaskToken);
84};
85
86}  // namespace drive_backend
87}  // namespace sync_file_system
88
89#endif  // CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_SYNC_TASK_TOKEN_H_
90