summaryrefslogtreecommitdiffstats
path: root/chrome/browser/chromeos/drive
diff options
context:
space:
mode:
authorkinaba@chromium.org <kinaba@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-04-16 09:04:35 +0000
committerkinaba@chromium.org <kinaba@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-04-16 09:04:35 +0000
commite5c88e8926b1916eea2752234d4d07aa9cb5c553 (patch)
tree3d35b70daae1f56e07732fa7d7d1a642b27ee5a5 /chrome/browser/chromeos/drive
parentea0ec05827d81ff7e2d38f9367f94167aa7f88f7 (diff)
downloadchromium_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.cc10
-rw-r--r--chrome/browser/chromeos/drive/drive_scheduler.h7
-rw-r--r--chrome/browser/chromeos/drive/drive_scheduler_unittest.cc80
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