Merge Chromium + Blink git repositories
[chromium-blink-merge.git] / chrome / browser / sync_file_system / drive_backend / sync_task_token.h
bloba32fd47fb8828362a4706938995a92856129d4d7
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.
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_
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"
15 namespace sync_file_system {
16 namespace drive_backend {
18 class SyncTaskManager;
19 struct TaskBlocker;
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.
23 class SyncTaskToken {
24 public:
25 static const int64 kTestingTaskTokenID;
26 static const int64 kForegroundTaskTokenID;
27 static const int64 kMinimumBackgroundTaskTokenID;
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<TaskBlocker> task_blocker);
40 void UpdateTask(const tracked_objects::Location& location,
41 const SyncStatusCallback& callback);
43 const tracked_objects::Location& location() const { return location_; }
44 virtual ~SyncTaskToken();
46 static SyncStatusCallback WrapToCallback(scoped_ptr<SyncTaskToken> token);
48 SyncTaskManager* manager() { return manager_.get(); }
50 const SyncStatusCallback& callback() const { return callback_; }
51 void clear_callback() { callback_.Reset(); }
53 void set_task_blocker(scoped_ptr<TaskBlocker> task_blocker);
54 const TaskBlocker* task_blocker() const;
55 void clear_task_blocker();
57 int64 token_id() const { return token_id_; }
59 void InitializeTaskLog(const std::string& task_description);
60 void FinalizeTaskLog(const std::string& result_description);
61 void RecordLog(const std::string& message);
63 bool has_task_log() const { return task_log_; }
64 void SetTaskLog(scoped_ptr<TaskLogger::TaskLog> task_log);
65 scoped_ptr<TaskLogger::TaskLog> PassTaskLog();
67 private:
68 SyncTaskToken(const base::WeakPtr<SyncTaskManager>& manager,
69 const scoped_refptr<base::SequencedTaskRunner>& task_runner,
70 int64 token_id,
71 scoped_ptr<TaskBlocker> task_blocker,
72 const SyncStatusCallback& callback);
74 base::WeakPtr<SyncTaskManager> manager_;
75 scoped_refptr<base::SequencedTaskRunner> task_runner_;
76 tracked_objects::Location location_;
77 int64 token_id_;
78 SyncStatusCallback callback_;
80 scoped_ptr<TaskLogger::TaskLog> task_log_;
81 scoped_ptr<TaskBlocker> task_blocker_;
83 DISALLOW_COPY_AND_ASSIGN(SyncTaskToken);
86 } // namespace drive_backend
87 } // namespace sync_file_system
89 #endif // CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_SYNC_TASK_TOKEN_H_