Index: chrome/browser/chromeos/drive/job_scheduler.h |
diff --git a/chrome/browser/chromeos/drive/job_scheduler.h b/chrome/browser/chromeos/drive/job_scheduler.h |
deleted file mode 100644 |
index fc1be52f77f9cb88213af60588b61ad9ae1c91f7..0000000000000000000000000000000000000000 |
--- a/chrome/browser/chromeos/drive/job_scheduler.h |
+++ /dev/null |
@@ -1,411 +0,0 @@ |
-// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#ifndef CHROME_BROWSER_CHROMEOS_DRIVE_JOB_SCHEDULER_H_ |
-#define CHROME_BROWSER_CHROMEOS_DRIVE_JOB_SCHEDULER_H_ |
- |
-#include <string> |
-#include <vector> |
- |
-#include "base/id_map.h" |
-#include "base/memory/scoped_ptr.h" |
-#include "base/observer_list.h" |
-#include "base/threading/thread_checker.h" |
-#include "chrome/browser/chromeos/drive/job_list.h" |
-#include "chrome/browser/chromeos/drive/job_queue.h" |
-#include "components/drive/drive_uploader.h" |
-#include "components/drive/service/drive_service_interface.h" |
-#include "net/base/network_change_notifier.h" |
- |
-class PrefService; |
- |
-namespace base { |
-class SeqencedTaskRunner; |
-} |
- |
-namespace drive { |
- |
-class EventLogger; |
- |
-// Priority of a job. Higher values are lower priority. |
-enum ContextType { |
- USER_INITIATED, |
- BACKGROUND, |
- // Indicates the number of values of this enum. |
- NUM_CONTEXT_TYPES, |
-}; |
- |
-struct ClientContext { |
- explicit ClientContext(ContextType in_type) : type(in_type) {} |
- ContextType type; |
-}; |
- |
-// The JobScheduler is responsible for queuing and scheduling drive jobs. |
-// Because jobs are executed concurrently by priority and retried for network |
-// failures, there is no guarantee of orderings. |
-// |
-// Jobs are grouped into two priority levels: |
-// - USER_INITIATED jobs are those occur as a result of direct user actions. |
-// - BACKGROUND jobs runs in response to state changes, server actions, etc. |
-// USER_INITIATED jobs must be handled immediately, thus have higher priority. |
-// BACKGROUND jobs run only after all USER_INITIATED jobs have run. |
-// |
-// Orthogonally, jobs are grouped into two types: |
-// - "File jobs" transfer the contents of files. |
-// - "Metadata jobs" operates on file metadata or the directory structure. |
-// On WiFi or Ethernet connections, all types of jobs just run. |
-// On mobile connections (2G/3G/4G), we don't want large background traffic. |
-// USER_INITIATED jobs or metadata jobs will run. BACKGROUND file jobs wait |
-// in the queue until the network type changes. |
-// On offline case, no jobs run. USER_INITIATED jobs fail immediately. |
-// BACKGROUND jobs stay in the queue and wait for network connection. |
-class JobScheduler |
- : public net::NetworkChangeNotifier::ConnectionTypeObserver, |
- public JobListInterface { |
- public: |
- JobScheduler(PrefService* pref_service, |
- EventLogger* logger, |
- DriveServiceInterface* drive_service, |
- base::SequencedTaskRunner* blocking_task_runner); |
- ~JobScheduler() override; |
- |
- // JobListInterface overrides. |
- std::vector<JobInfo> GetJobInfoList() override; |
- void AddObserver(JobListObserver* observer) override; |
- void RemoveObserver(JobListObserver* observer) override; |
- void CancelJob(JobID job_id) override; |
- void CancelAllJobs() override; |
- |
- // Adds a GetAppList operation to the queue. |
- // |callback| must not be null. |
- void GetAppList(const google_apis::AppListCallback& callback); |
- |
- // Adds a GetAboutResource operation to the queue. |
- // |callback| must not be null. |
- void GetAboutResource(const google_apis::AboutResourceCallback& callback); |
- |
- // Adds a GetAllFileList operation to the queue. |
- // |callback| must not be null. |
- void GetAllFileList(const google_apis::FileListCallback& callback); |
- |
- // Adds a GetFileListInDirectory operation to the queue. |
- // |callback| must not be null. |
- void GetFileListInDirectory(const std::string& directory_resource_id, |
- const google_apis::FileListCallback& callback); |
- |
- // Adds a Search operation to the queue. |
- // |callback| must not be null. |
- void Search(const std::string& search_query, |
- const google_apis::FileListCallback& callback); |
- |
- // Adds a GetChangeList operation to the queue. |
- // |callback| must not be null. |
- void GetChangeList(int64 start_changestamp, |
- const google_apis::ChangeListCallback& callback); |
- |
- // Adds GetRemainingChangeList operation to the queue. |
- // |callback| must not be null. |
- void GetRemainingChangeList(const GURL& next_link, |
- const google_apis::ChangeListCallback& callback); |
- |
- // Adds GetRemainingFileList operation to the queue. |
- // |callback| must not be null. |
- void GetRemainingFileList(const GURL& next_link, |
- const google_apis::FileListCallback& callback); |
- |
- // Adds a GetFileResource operation to the queue. |
- void GetFileResource(const std::string& resource_id, |
- const ClientContext& context, |
- const google_apis::FileResourceCallback& callback); |
- |
- // Adds a GetShareUrl operation to the queue. |
- void GetShareUrl(const std::string& resource_id, |
- const GURL& embed_origin, |
- const ClientContext& context, |
- const google_apis::GetShareUrlCallback& callback); |
- |
- // Adds a TrashResource operation to the queue. |
- void TrashResource(const std::string& resource_id, |
- const ClientContext& context, |
- const google_apis::EntryActionCallback& callback); |
- |
- // Adds a CopyResource operation to the queue. |
- void CopyResource(const std::string& resource_id, |
- const std::string& parent_resource_id, |
- const std::string& new_title, |
- const base::Time& last_modified, |
- const google_apis::FileResourceCallback& callback); |
- |
- // Adds a UpdateResource operation to the queue. |
- void UpdateResource(const std::string& resource_id, |
- const std::string& parent_resource_id, |
- const std::string& new_title, |
- const base::Time& last_modified, |
- const base::Time& last_viewed_by_me, |
- const google_apis::drive::Properties& properties, |
- const ClientContext& context, |
- const google_apis::FileResourceCallback& callback); |
- |
- // Adds a AddResourceToDirectory operation to the queue. |
- void AddResourceToDirectory(const std::string& parent_resource_id, |
- const std::string& resource_id, |
- const google_apis::EntryActionCallback& callback); |
- |
- // Adds a RemoveResourceFromDirectory operation to the queue. |
- void RemoveResourceFromDirectory( |
- const std::string& parent_resource_id, |
- const std::string& resource_id, |
- const ClientContext& context, |
- const google_apis::EntryActionCallback& callback); |
- |
- // Adds a AddNewDirectory operation to the queue. |
- void AddNewDirectory(const std::string& parent_resource_id, |
- const std::string& directory_title, |
- const AddNewDirectoryOptions& options, |
- const ClientContext& context, |
- const google_apis::FileResourceCallback& callback); |
- |
- // Adds a DownloadFile operation to the queue. |
- // The first two arguments |virtual_path| and |expected_file_size| are used |
- // only for filling JobInfo for the operation so that observers can get the |
- // detail. The actual operation never refers these values. |
- JobID DownloadFile( |
- const base::FilePath& virtual_path, |
- int64 expected_file_size, |
- const base::FilePath& local_cache_path, |
- const std::string& resource_id, |
- const ClientContext& context, |
- const google_apis::DownloadActionCallback& download_action_callback, |
- const google_apis::GetContentCallback& get_content_callback); |
- |
- // Adds an UploadNewFile operation to the queue. |
- void UploadNewFile(const std::string& parent_resource_id, |
- int64 expected_file_size, |
- const base::FilePath& drive_file_path, |
- const base::FilePath& local_file_path, |
- const std::string& title, |
- const std::string& content_type, |
- const UploadNewFileOptions& options, |
- const ClientContext& context, |
- const google_apis::FileResourceCallback& callback); |
- |
- // Adds an UploadExistingFile operation to the queue. |
- void UploadExistingFile(const std::string& resource_id, |
- int64 expected_file_size, |
- const base::FilePath& drive_file_path, |
- const base::FilePath& local_file_path, |
- const std::string& content_type, |
- const UploadExistingFileOptions& options, |
- const ClientContext& context, |
- const google_apis::FileResourceCallback& callback); |
- |
- // Adds AddPermission operation to the queue. |callback| must not be null. |
- void AddPermission(const std::string& resource_id, |
- const std::string& email, |
- google_apis::drive::PermissionRole role, |
- const google_apis::EntryActionCallback& callback); |
- |
- private: |
- friend class JobSchedulerTest; |
- |
- enum QueueType { |
- METADATA_QUEUE, |
- FILE_QUEUE, |
- NUM_QUEUES |
- }; |
- |
- static const int kMaxJobCount[NUM_QUEUES]; |
- |
- // Represents a single entry in the job map. |
- struct JobEntry { |
- explicit JobEntry(JobType type); |
- ~JobEntry(); |
- |
- // General user-visible information on the job. |
- JobInfo job_info; |
- |
- // Context of the job. |
- ClientContext context; |
- |
- // The number of times the jobs is retried due to server errors. |
- int retry_count; |
- |
- // The callback to start the job. Called each time it is retry. |
- base::Callback<google_apis::CancelCallback()> task; |
- |
- // The callback to cancel the running job. It is returned from task.Run(). |
- google_apis::CancelCallback cancel_callback; |
- |
- // The callback to notify an error to the client of JobScheduler. |
- // This is used to notify cancel of a job that is not running yet. |
- base::Callback<void(google_apis::DriveApiErrorCode)> abort_callback; |
- |
- base::ThreadChecker thread_checker_; |
- }; |
- |
- // Parameters for DriveUploader::ResumeUploadFile. |
- struct ResumeUploadParams; |
- |
- // Creates a new job and add it to the job map. |
- JobEntry* CreateNewJob(JobType type); |
- |
- // Adds the specified job to the queue and starts the job loop for the queue |
- // if needed. |
- void StartJob(JobEntry* job); |
- |
- // Adds the specified job to the queue. |
- void QueueJob(JobID job_id); |
- |
- // Determines the next job that should run, and starts it. |
- void DoJobLoop(QueueType queue_type); |
- |
- // Returns the lowest acceptable priority level of the operations that is |
- // currently allowed to start for the |queue_type|. |
- int GetCurrentAcceptedPriority(QueueType queue_type); |
- |
- // Updates |wait_until_| to throttle requests. |
- void UpdateWait(); |
- |
- // Retries the job if needed and returns false. Otherwise returns true. |
- bool OnJobDone(JobID job_id, google_apis::DriveApiErrorCode error); |
- |
- // Callback for job finishing with a FileListCallback. |
- void OnGetFileListJobDone( |
- JobID job_id, |
- const google_apis::FileListCallback& callback, |
- google_apis::DriveApiErrorCode error, |
- scoped_ptr<google_apis::FileList> file_list); |
- |
- // Callback for job finishing with a ChangeListCallback. |
- void OnGetChangeListJobDone( |
- JobID job_id, |
- const google_apis::ChangeListCallback& callback, |
- google_apis::DriveApiErrorCode error, |
- scoped_ptr<google_apis::ChangeList> change_list); |
- |
- // Callback for job finishing with a FileResourceCallback. |
- void OnGetFileResourceJobDone( |
- JobID job_id, |
- const google_apis::FileResourceCallback& callback, |
- google_apis::DriveApiErrorCode error, |
- scoped_ptr<google_apis::FileResource> entry); |
- |
- // Callback for job finishing with a AboutResourceCallback. |
- void OnGetAboutResourceJobDone( |
- JobID job_id, |
- const google_apis::AboutResourceCallback& callback, |
- google_apis::DriveApiErrorCode error, |
- scoped_ptr<google_apis::AboutResource> about_resource); |
- |
- // Callback for job finishing with a GetShareUrlCallback. |
- void OnGetShareUrlJobDone( |
- JobID job_id, |
- const google_apis::GetShareUrlCallback& callback, |
- google_apis::DriveApiErrorCode error, |
- const GURL& share_url); |
- |
- // Callback for job finishing with a AppListCallback. |
- void OnGetAppListJobDone( |
- JobID job_id, |
- const google_apis::AppListCallback& callback, |
- google_apis::DriveApiErrorCode error, |
- scoped_ptr<google_apis::AppList> app_list); |
- |
- // Callback for job finishing with a EntryActionCallback. |
- void OnEntryActionJobDone(JobID job_id, |
- const google_apis::EntryActionCallback& callback, |
- google_apis::DriveApiErrorCode error); |
- |
- // Callback for job finishing with a DownloadActionCallback. |
- void OnDownloadActionJobDone( |
- JobID job_id, |
- const google_apis::DownloadActionCallback& callback, |
- google_apis::DriveApiErrorCode error, |
- const base::FilePath& temp_file); |
- |
- // Callback for job finishing with a UploadCompletionCallback. |
- void OnUploadCompletionJobDone( |
- JobID job_id, |
- const ResumeUploadParams& resume_params, |
- const google_apis::FileResourceCallback& callback, |
- google_apis::DriveApiErrorCode error, |
- const GURL& upload_location, |
- scoped_ptr<google_apis::FileResource> entry); |
- |
- // Callback for DriveUploader::ResumeUploadFile(). |
- void OnResumeUploadFileDone( |
- JobID job_id, |
- const base::Callback<google_apis::CancelCallback()>& original_task, |
- const google_apis::FileResourceCallback& callback, |
- google_apis::DriveApiErrorCode error, |
- const GURL& upload_location, |
- scoped_ptr<google_apis::FileResource> entry); |
- |
- // Updates the progress status of the specified job. |
- void UpdateProgress(JobID job_id, int64 progress, int64 total); |
- |
- // net::NetworkChangeNotifier::ConnectionTypeObserver override. |
- void OnConnectionTypeChanged( |
- net::NetworkChangeNotifier::ConnectionType type) override; |
- |
- // Get the type of queue the specified job should be put in. |
- QueueType GetJobQueueType(JobType type); |
- |
- // For testing only. Disables throttling so that testing is faster. |
- void SetDisableThrottling(bool disable) { disable_throttling_ = disable; } |
- |
- // Aborts a job which is not in STATE_RUNNING. |
- void AbortNotRunningJob(JobEntry* job, google_apis::DriveApiErrorCode error); |
- |
- // Notifies updates to observers. |
- void NotifyJobAdded(const JobInfo& job_info); |
- void NotifyJobDone(const JobInfo& job_info, |
- google_apis::DriveApiErrorCode error); |
- void NotifyJobUpdated(const JobInfo& job_info); |
- |
- // Gets information of the queue of the given type as string. |
- std::string GetQueueInfo(QueueType type) const; |
- |
- // Returns a string representation of QueueType. |
- static std::string QueueTypeToString(QueueType type); |
- |
- // The number of times operations have failed in a row, capped at |
- // kMaxThrottleCount. This is used to calculate the delay before running the |
- // next task. |
- int throttle_count_; |
- |
- // Jobs should not start running until this time. Used for throttling. |
- base::Time wait_until_; |
- |
- // Disables throttling for testing. |
- bool disable_throttling_; |
- |
- // The queues of jobs. |
- scoped_ptr<JobQueue> queue_[NUM_QUEUES]; |
- |
- // The list of queued job info indexed by job IDs. |
- typedef IDMap<JobEntry, IDMapOwnPointer> JobIDMap; |
- JobIDMap job_map_; |
- |
- // The list of observers for the scheduler. |
- base::ObserverList<JobListObserver> observer_list_; |
- |
- EventLogger* logger_; |
- DriveServiceInterface* drive_service_; |
- base::SequencedTaskRunner* blocking_task_runner_; |
- scoped_ptr<DriveUploaderInterface> uploader_; |
- |
- PrefService* pref_service_; |
- |
- base::ThreadChecker thread_checker_; |
- |
- // Note: This should remain the last member so it'll be destroyed and |
- // invalidate its weak pointers before any other members are destroyed. |
- base::WeakPtrFactory<JobScheduler> weak_ptr_factory_; |
- DISALLOW_COPY_AND_ASSIGN(JobScheduler); |
-}; |
- |
-} // namespace drive |
- |
-#endif // CHROME_BROWSER_CHROMEOS_DRIVE_JOB_SCHEDULER_H_ |