1// Copyright 2013 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_JOB_LIST_H_
6#define CHROME_BROWSER_CHROMEOS_DRIVE_JOB_LIST_H_
7
8#include <string>
9
10#include "base/basictypes.h"
11#include "base/files/file_path.h"
12#include "chrome/browser/chromeos/drive/file_errors.h"
13
14namespace drive {
15
16// Enum representing the type of job.
17enum JobType {
18  TYPE_GET_ABOUT_RESOURCE,
19  TYPE_GET_APP_LIST,
20  TYPE_GET_ALL_RESOURCE_LIST,
21  TYPE_GET_RESOURCE_LIST_IN_DIRECTORY,
22  TYPE_SEARCH,
23  TYPE_GET_CHANGE_LIST,
24  TYPE_GET_REMAINING_CHANGE_LIST,
25  TYPE_GET_REMAINING_FILE_LIST,
26  TYPE_GET_RESOURCE_ENTRY,
27  TYPE_GET_SHARE_URL,
28  TYPE_TRASH_RESOURCE,
29  TYPE_COPY_RESOURCE,
30  TYPE_UPDATE_RESOURCE,
31  TYPE_ADD_RESOURCE_TO_DIRECTORY,
32  TYPE_REMOVE_RESOURCE_FROM_DIRECTORY,
33  TYPE_ADD_NEW_DIRECTORY,
34  TYPE_DOWNLOAD_FILE,
35  TYPE_UPLOAD_NEW_FILE,
36  TYPE_UPLOAD_EXISTING_FILE,
37  TYPE_CREATE_FILE,
38  TYPE_ADD_PERMISSION,
39};
40
41// Returns the string representation of |type|.
42std::string JobTypeToString(JobType type);
43
44// Current state of the job.
45enum JobState {
46  // The job is queued, but not yet executed.
47  STATE_NONE,
48
49  // The job is in the process of being handled.
50  STATE_RUNNING,
51
52  // The job failed, but has been re-added to the queue.
53  STATE_RETRY,
54};
55
56// Returns the string representation of |state|.
57std::string JobStateToString(JobState state);
58
59// Unique ID assigned to each job.
60typedef int32 JobID;
61
62// Information about a specific job that is visible to other systems.
63struct JobInfo {
64  explicit JobInfo(JobType job_type);
65
66  // Type of the job.
67  JobType job_type;
68
69  // Id of the job, which can be used to query or modify it.
70  JobID job_id;
71
72  // Current state of the operation.
73  JobState state;
74
75  // The fields below are available only for jobs with job_type:
76  // TYPE_DOWNLOAD_FILE, TYPE_UPLOAD_NEW_FILE, or TYPE_UPLOAD_EXISTING_FILE.
77
78  // Number of bytes completed.
79  int64 num_completed_bytes;
80
81  // Total bytes of this operation.
82  int64 num_total_bytes;
83
84  // Drive path of the file that this job acts on.
85  base::FilePath file_path;
86
87  // Time when the job is started (i.e. the request is sent to the server).
88  base::Time start_time;
89
90  // Returns the string representation of the job info.
91  std::string ToString() const;
92};
93
94// Checks if |job_info| represents a job for currently active file transfer.
95bool IsActiveFileTransferJobInfo(const JobInfo& job_info);
96
97// The interface for observing JobListInterface.
98// All events are notified in the UI thread.
99class JobListObserver {
100 public:
101  // Called when a new job id added.
102  virtual void OnJobAdded(const JobInfo& job_info) {}
103
104  // Called when a job id finished.
105  // |error| is FILE_ERROR_OK when the job successfully finished, and a value
106  // telling the reason of failure when the jobs is failed.
107  virtual void OnJobDone(const JobInfo& job_info,
108                         FileError error) {}
109
110  // Called when a job status is updated.
111  virtual void OnJobUpdated(const JobInfo& job_info) {}
112
113 protected:
114  virtual ~JobListObserver() {}
115};
116
117// The interface to expose the list of issued Drive jobs.
118class JobListInterface {
119 public:
120  virtual ~JobListInterface() {}
121
122  // Returns the list of jobs currently managed by the scheduler.
123  virtual std::vector<JobInfo> GetJobInfoList() = 0;
124
125  // Adds an observer.
126  virtual void AddObserver(JobListObserver* observer) = 0;
127
128  // Removes an observer.
129  virtual void RemoveObserver(JobListObserver* observer) = 0;
130
131  // Cancels the job.
132  virtual void CancelJob(JobID job_id) = 0;
133
134  // Cancels all the jobs.
135  virtual void CancelAllJobs() = 0;
136};
137
138}  // namespace drive
139
140#endif  // CHROME_BROWSER_CHROMEOS_DRIVE_JOB_LIST_H_
141