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
;
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.
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
,
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();
68 SyncTaskToken(const base::WeakPtr
<SyncTaskManager
>& manager
,
69 const scoped_refptr
<base::SequencedTaskRunner
>& task_runner
,
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_
;
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_