• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
14 namespace drive {
15 
16 // Enum representing the type of job.
17 enum 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|.
42 std::string JobTypeToString(JobType type);
43 
44 // Current state of the job.
45 enum 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|.
57 std::string JobStateToString(JobState state);
58 
59 // Unique ID assigned to each job.
60 typedef int32 JobID;
61 
62 // Information about a specific job that is visible to other systems.
63 struct 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.
95 bool IsActiveFileTransferJobInfo(const JobInfo& job_info);
96 
97 // The interface for observing JobListInterface.
98 // All events are notified in the UI thread.
99 class JobListObserver {
100  public:
101   // Called when a new job id added.
OnJobAdded(const JobInfo & job_info)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.
OnJobDone(const JobInfo & job_info,FileError error)107   virtual void OnJobDone(const JobInfo& job_info,
108                          FileError error) {}
109 
110   // Called when a job status is updated.
OnJobUpdated(const JobInfo & job_info)111   virtual void OnJobUpdated(const JobInfo& job_info) {}
112 
113  protected:
~JobListObserver()114   virtual ~JobListObserver() {}
115 };
116 
117 // The interface to expose the list of issued Drive jobs.
118 class JobListInterface {
119  public:
~JobListInterface()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