Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(633)

Unified Diff: chrome/browser/chromeos/drive/job_scheduler.h

Issue 1215503010: OBSOLETE: Move (most of) chrome/browser/chromeos/drive into components/drive. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@drive-componentize-service
Patch Set: Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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_

Powered by Google App Engine
This is Rietveld 408576698