diff options
author | kinaba@chromium.org <kinaba@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-04-16 09:04:35 +0000 |
---|---|---|
committer | kinaba@chromium.org <kinaba@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-04-16 09:04:35 +0000 |
commit | e5c88e8926b1916eea2752234d4d07aa9cb5c553 (patch) | |
tree | 3d35b70daae1f56e07732fa7d7d1a642b27ee5a5 /chrome/browser/chromeos/drive | |
parent | ea0ec05827d81ff7e2d38f9367f94167aa7f88f7 (diff) | |
download | chromium_src-e5c88e8926b1916eea2752234d4d07aa9cb5c553.zip chromium_src-e5c88e8926b1916eea2752234d4d07aa9cb5c553.tar.gz chromium_src-e5c88e8926b1916eea2752234d4d07aa9cb5c553.tar.bz2 |
Add an interface to DriveScheduler for querying job states.
This patch is just for adding the interface. It cannot be used yet
since some fileds of JobInfo are not filled with the correct values.
BUG=154243
Review URL: https://codereview.chromium.org/14256003
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@194332 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/chromeos/drive')
-rw-r--r-- | chrome/browser/chromeos/drive/drive_scheduler.cc | 10 | ||||
-rw-r--r-- | chrome/browser/chromeos/drive/drive_scheduler.h | 7 | ||||
-rw-r--r-- | chrome/browser/chromeos/drive/drive_scheduler_unittest.cc | 80 |
3 files changed, 92 insertions, 5 deletions
diff --git a/chrome/browser/chromeos/drive/drive_scheduler.cc b/chrome/browser/chromeos/drive/drive_scheduler.cc index 5400e12..9b5b5b3 100644 --- a/chrome/browser/chromeos/drive/drive_scheduler.cc +++ b/chrome/browser/chromeos/drive/drive_scheduler.cc @@ -58,8 +58,7 @@ bool DriveScheduler::QueueEntry::Compare( DriveScheduler::DriveScheduler( Profile* profile, google_apis::DriveServiceInterface* drive_service) - : next_job_id_(0), - throttle_count_(0), + : throttle_count_(0), disable_throttling_(false), drive_service_(drive_service), uploader_(new google_apis::DriveUploader(drive_service)), @@ -102,6 +101,13 @@ void DriveScheduler::Initialize() { initialized_ = true; } +std::vector<DriveScheduler::JobInfo> DriveScheduler::GetJobInfoList() { + std::vector<JobInfo> job_info_list; + for (JobIDMap::iterator iter(&job_map_); !iter.IsAtEnd(); iter.Advance()) + job_info_list.push_back(*iter.GetCurrentValue()); + return job_info_list; +} + void DriveScheduler::GetAccountMetadata( const google_apis::GetAccountMetadataCallback& callback) { DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); diff --git a/chrome/browser/chromeos/drive/drive_scheduler.h b/chrome/browser/chromeos/drive/drive_scheduler.h index b791d17..de757cd 100644 --- a/chrome/browser/chromeos/drive/drive_scheduler.h +++ b/chrome/browser/chromeos/drive/drive_scheduler.h @@ -6,6 +6,7 @@ #define CHROME_BROWSER_CHROMEOS_DRIVE_DRIVE_SCHEDULER_H_ #include <list> +#include <vector> #include "base/id_map.h" #include "base/memory/scoped_ptr.h" @@ -95,6 +96,9 @@ class DriveScheduler // other functions. void Initialize(); + // Returns the list of jobs currently managed by the scheduler. + std::vector<JobInfo> GetJobInfoList(); + // Adds a GetAccountMetadata operation to the queue. // |callback| must not be null. void GetAccountMetadata( @@ -431,9 +435,6 @@ class DriveScheduler // Number of jobs in flight for each queue. int jobs_running_[NUM_QUEUES]; - // Next value that should be assigned as a job id. - int next_job_id_; - // 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. diff --git a/chrome/browser/chromeos/drive/drive_scheduler_unittest.cc b/chrome/browser/chromeos/drive/drive_scheduler_unittest.cc index 6529e15..4f40b9b 100644 --- a/chrome/browser/chromeos/drive/drive_scheduler_unittest.cc +++ b/chrome/browser/chromeos/drive/drive_scheduler_unittest.cc @@ -4,6 +4,8 @@ #include "chrome/browser/chromeos/drive/drive_scheduler.h" +#include <set> + #include "base/bind.h" #include "base/file_util.h" #include "base/json/json_reader.h" @@ -648,4 +650,82 @@ TEST_F(DriveSchedulerTest, DownloadFileWimaxEnabled) { EXPECT_EQ("xxxxxxxxxx", content); } +TEST_F(DriveSchedulerTest, JobInfo) { + // Disable background upload/download. + ConnectToWimax(); + profile_->GetPrefs()->SetBoolean(prefs::kDisableDriveOverCellular, true); + + base::ScopedTempDir temp_dir; + ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); + + google_apis::GDataErrorCode error = google_apis::GDATA_OTHER_ERROR; + scoped_ptr<google_apis::ResourceEntry> entry; + scoped_ptr<google_apis::AccountMetadata> account_metadata; + base::FilePath path; + + std::set<DriveScheduler::JobType> expected_types; + + // Add many jobs. + expected_types.insert(DriveScheduler::TYPE_ADD_NEW_DIRECTORY); + scheduler_->AddNewDirectory( + fake_drive_service_->GetRootResourceId(), + "New Directory", + google_apis::test_util::CreateCopyResultCallback(&error, &entry)); + expected_types.insert(DriveScheduler::TYPE_GET_ACCOUNT_METADATA); + scheduler_->GetAccountMetadata( + google_apis::test_util::CreateCopyResultCallback( + &error, &account_metadata)); + expected_types.insert(DriveScheduler::TYPE_RENAME_RESOURCE); + scheduler_->RenameResource( + "file:2_file_resource_id", + "New Name", + google_apis::test_util::CreateCopyResultCallback(&error)); + expected_types.insert(DriveScheduler::TYPE_DOWNLOAD_FILE); + scheduler_->DownloadFile( + base::FilePath::FromUTF8Unsafe("/drive/whatever.txt"), // virtual path + temp_dir.path().AppendASCII("whatever.txt"), + GURL("https://file_content_url/"), + DriveClientContext(BACKGROUND), + google_apis::test_util::CreateCopyResultCallback(&error, &path), + google_apis::GetContentCallback()); + + // The number of jobs queued so far. + EXPECT_EQ(4U, scheduler_->GetJobInfoList().size()); + + // Add more jobs. + expected_types.insert(DriveScheduler::TYPE_ADD_RESOURCE_TO_DIRECTORY); + scheduler_->AddResourceToDirectory( + "folder:1_folder_resource_id", + "file:2_file_resource_id", + google_apis::test_util::CreateCopyResultCallback(&error)); + expected_types.insert(DriveScheduler::TYPE_COPY_HOSTED_DOCUMENT); + scheduler_->CopyHostedDocument( + "document:5_document_resource_id", + "New Document", + google_apis::test_util::CreateCopyResultCallback(&error, &entry)); + + // 6 jobs in total were queued. + std::vector<DriveScheduler::JobInfo> jobs = scheduler_->GetJobInfoList(); + EXPECT_EQ(6U, jobs.size()); + std::set<DriveScheduler::JobType> actual_types; + for (size_t i = 0; i < jobs.size(); ++i) + actual_types.insert(jobs[i].job_type); + EXPECT_EQ(expected_types, actual_types); + + // Run the jobs. + google_apis::test_util::RunBlockingPoolTask(); + + // All jobs except the BACKGROUND job should have finished. + jobs = scheduler_->GetJobInfoList(); + ASSERT_EQ(1U, jobs.size()); + EXPECT_EQ(DriveScheduler::TYPE_DOWNLOAD_FILE, jobs[0].job_type); + + // Run the background downloading job as well. + ConnectToWifi(); + google_apis::test_util::RunBlockingPoolTask(); + + // All jobs should have finished. + EXPECT_EQ(0U, scheduler_->GetJobInfoList().size()); +} + } // namespace drive |