summaryrefslogtreecommitdiffstats
path: root/chrome/browser
diff options
context:
space:
mode:
authorhashimoto@chromium.org <hashimoto@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-06-21 16:21:30 +0000
committerhashimoto@chromium.org <hashimoto@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-06-21 16:21:30 +0000
commit5bbabede9673d47ad169bdecd62103e2e297149d (patch)
tree775d63357ec49451e60590e8660b44a169a2726d /chrome/browser
parent827fab41494e7256d28b62b0bb94b824f32c5db1 (diff)
downloadchromium_src-5bbabede9673d47ad169bdecd62103e2e297149d.zip
chromium_src-5bbabede9673d47ad169bdecd62103e2e297149d.tar.gz
chromium_src-5bbabede9673d47ad169bdecd62103e2e297149d.tar.bz2
drive: Pass TaskRunner to DriveUploader explicitly
BUG=252588 TEST=unit_tests Review URL: https://chromiumcodereview.appspot.com/17520005 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@207852 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser')
-rw-r--r--chrome/browser/chromeos/drive/change_list_loader_unittest.cc3
-rw-r--r--chrome/browser/chromeos/drive/drive_app_registry_unittest.cc4
-rw-r--r--chrome/browser/chromeos/drive/drive_integration_service.cc3
-rw-r--r--chrome/browser/chromeos/drive/file_system/operation_test_base.cc4
-rw-r--r--chrome/browser/chromeos/drive/file_system_unittest.cc3
-rw-r--r--chrome/browser/chromeos/drive/job_scheduler.cc5
-rw-r--r--chrome/browser/chromeos/drive/job_scheduler.h7
-rw-r--r--chrome/browser/chromeos/drive/job_scheduler_unittest.cc69
-rw-r--r--chrome/browser/chromeos/drive/sync_client_unittest.cc3
-rw-r--r--chrome/browser/drive/drive_uploader.cc7
-rw-r--r--chrome/browser/drive/drive_uploader.h7
-rw-r--r--chrome/browser/drive/drive_uploader_unittest.cc37
-rw-r--r--chrome/browser/sync_file_system/drive/api_util.cc8
13 files changed, 90 insertions, 70 deletions
diff --git a/chrome/browser/chromeos/drive/change_list_loader_unittest.cc b/chrome/browser/chromeos/drive/change_list_loader_unittest.cc
index c9eef71..4a25350 100644
--- a/chrome/browser/chromeos/drive/change_list_loader_unittest.cc
+++ b/chrome/browser/chromeos/drive/change_list_loader_unittest.cc
@@ -32,7 +32,8 @@ class ChangeListLoaderTest : public testing::Test {
ASSERT_TRUE(drive_service_->LoadAccountMetadataForWapi(
"chromeos/gdata/account_metadata.json"));
- scheduler_.reset(new JobScheduler(profile_.get(), drive_service_.get()));
+ scheduler_.reset(new JobScheduler(profile_.get(), drive_service_.get(),
+ base::MessageLoopProxy::current()));
metadata_storage_.reset(new ResourceMetadataStorage(
temp_dir_.path(), base::MessageLoopProxy::current()));
ASSERT_TRUE(metadata_storage_->Initialize());
diff --git a/chrome/browser/chromeos/drive/drive_app_registry_unittest.cc b/chrome/browser/chromeos/drive/drive_app_registry_unittest.cc
index 65c3055..3324eed 100644
--- a/chrome/browser/chromeos/drive/drive_app_registry_unittest.cc
+++ b/chrome/browser/chromeos/drive/drive_app_registry_unittest.cc
@@ -24,8 +24,8 @@ class DriveAppRegistryTest : public testing::Test {
fake_drive_service_.reset(new FakeDriveService);
fake_drive_service_->LoadAppListForDriveApi("chromeos/drive/applist.json");
- scheduler_.reset(
- new JobScheduler(profile_.get(), fake_drive_service_.get()));
+ scheduler_.reset(new JobScheduler(profile_.get(), fake_drive_service_.get(),
+ base::MessageLoopProxy::current()));
web_apps_registry_.reset(new DriveAppRegistry(scheduler_.get()));
web_apps_registry_->Update();
diff --git a/chrome/browser/chromeos/drive/drive_integration_service.cc b/chrome/browser/chromeos/drive/drive_integration_service.cc
index dd13ea1..0514abf 100644
--- a/chrome/browser/chromeos/drive/drive_integration_service.cc
+++ b/chrome/browser/chromeos/drive/drive_integration_service.cc
@@ -165,7 +165,8 @@ DriveIntegrationService::DriveIntegrationService(
GURL(google_apis::GDataWapiUrlGenerator::kBaseUrlForProduction),
GetDriveUserAgent()));
}
- scheduler_.reset(new JobScheduler(profile_, drive_service_.get()));
+ scheduler_.reset(new JobScheduler(
+ profile_, drive_service_.get(), blocking_task_runner_.get()));
metadata_storage_.reset(new internal::ResourceMetadataStorage(
cache_root_directory_.Append(util::kMetadataDirectory),
blocking_task_runner_.get()));
diff --git a/chrome/browser/chromeos/drive/file_system/operation_test_base.cc b/chrome/browser/chromeos/drive/file_system/operation_test_base.cc
index d253f1d..8680005 100644
--- a/chrome/browser/chromeos/drive/file_system/operation_test_base.cc
+++ b/chrome/browser/chromeos/drive/file_system/operation_test_base.cc
@@ -57,8 +57,8 @@ void OperationTestBase::SetUp() {
fake_drive_service_->LoadAccountMetadataForWapi(
"chromeos/gdata/account_metadata.json");
- scheduler_.reset(
- new JobScheduler(profile_.get(), fake_drive_service_.get()));
+ scheduler_.reset(new JobScheduler(profile_.get(), fake_drive_service_.get(),
+ blocking_task_runner_));
metadata_storage_.reset(new internal::ResourceMetadataStorage(
temp_dir_.path(), blocking_task_runner_));
diff --git a/chrome/browser/chromeos/drive/file_system_unittest.cc b/chrome/browser/chromeos/drive/file_system_unittest.cc
index 4c56a7d..4361966 100644
--- a/chrome/browser/chromeos/drive/file_system_unittest.cc
+++ b/chrome/browser/chromeos/drive/file_system_unittest.cc
@@ -75,7 +75,8 @@ class FileSystemTest : public testing::Test {
fake_free_disk_space_getter_.reset(new FakeFreeDiskSpaceGetter);
scheduler_.reset(new JobScheduler(profile_.get(),
- fake_drive_service_.get()));
+ fake_drive_service_.get(),
+ base::MessageLoopProxy::current()));
ASSERT_TRUE(file_util::CreateDirectory(util::GetCacheRootPath(
profile_.get()).Append(util::kMetadataDirectory)));
diff --git a/chrome/browser/chromeos/drive/job_scheduler.cc b/chrome/browser/chromeos/drive/job_scheduler.cc
index 855d637..773cddc 100644
--- a/chrome/browser/chromeos/drive/job_scheduler.cc
+++ b/chrome/browser/chromeos/drive/job_scheduler.cc
@@ -143,11 +143,12 @@ struct JobScheduler::ResumeUploadParams {
JobScheduler::JobScheduler(
Profile* profile,
- DriveServiceInterface* drive_service)
+ DriveServiceInterface* drive_service,
+ base::SequencedTaskRunner* blocking_task_runner)
: throttle_count_(0),
disable_throttling_(false),
drive_service_(drive_service),
- uploader_(new DriveUploader(drive_service)),
+ uploader_(new DriveUploader(drive_service, blocking_task_runner)),
profile_(profile),
weak_ptr_factory_(this) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
diff --git a/chrome/browser/chromeos/drive/job_scheduler.h b/chrome/browser/chromeos/drive/job_scheduler.h
index 5dc2aa1..bc02628 100644
--- a/chrome/browser/chromeos/drive/job_scheduler.h
+++ b/chrome/browser/chromeos/drive/job_scheduler.h
@@ -19,6 +19,10 @@
class Profile;
+namespace base {
+class SeqencedTaskRunner;
+}
+
namespace drive {
// The JobScheduler is responsible for queuing and scheduling drive
@@ -48,7 +52,8 @@ class JobScheduler
public JobListInterface {
public:
JobScheduler(Profile* profile,
- DriveServiceInterface* drive_service);
+ DriveServiceInterface* drive_service,
+ base::SequencedTaskRunner* blocking_task_runner);
virtual ~JobScheduler();
// JobListInterface overrides.
diff --git a/chrome/browser/chromeos/drive/job_scheduler_unittest.cc b/chrome/browser/chromeos/drive/job_scheduler_unittest.cc
index b0bbd81..8f6848d 100644
--- a/chrome/browser/chromeos/drive/job_scheduler_unittest.cc
+++ b/chrome/browser/chromeos/drive/job_scheduler_unittest.cc
@@ -9,12 +9,12 @@
#include "base/bind.h"
#include "base/file_util.h"
#include "base/prefs/pref_service.h"
+#include "base/run_loop.h"
#include "base/stl_util.h"
-#include "base/threading/sequenced_worker_pool.h"
-#include "chrome/browser/chromeos/drive/test_util.h"
#include "chrome/browser/drive/fake_drive_service.h"
#include "chrome/browser/google_apis/drive_api_parser.h"
#include "chrome/browser/google_apis/gdata_wapi_parser.h"
+#include "chrome/browser/google_apis/test_util.h"
#include "chrome/common/pref_names.h"
#include "chrome/test/base/testing_profile.h"
#include "content/public/test/test_browser_thread_bundle.h"
@@ -116,7 +116,8 @@ class JobSchedulerTest : public testing::Test {
"chromeos/drive/applist.json");
scheduler_.reset(new JobScheduler(profile_.get(),
- fake_drive_service_.get()));
+ fake_drive_service_.get(),
+ base::MessageLoopProxy::current()));
scheduler_->SetDisableThrottling(true);
}
@@ -124,7 +125,7 @@ class JobSchedulerTest : public testing::Test {
// The scheduler should be deleted before NetworkLibrary, as it
// registers itself as observer of NetworkLibrary.
scheduler_.reset();
- google_apis::test_util::RunBlockingPoolTask();
+ base::RunLoop().RunUntilIdle();
fake_drive_service_.reset();
fake_network_change_notifier_.reset();
}
@@ -175,7 +176,7 @@ TEST_F(JobSchedulerTest, GetAboutResource) {
scheduler_->GetAboutResource(
google_apis::test_util::CreateCopyResultCallback(
&error, &about_resource));
- google_apis::test_util::RunBlockingPoolTask();
+ base::RunLoop().RunUntilIdle();
ASSERT_EQ(google_apis::HTTP_SUCCESS, error);
ASSERT_TRUE(about_resource);
}
@@ -188,7 +189,7 @@ TEST_F(JobSchedulerTest, GetAppList) {
scheduler_->GetAppList(
google_apis::test_util::CreateCopyResultCallback(&error, &app_list));
- google_apis::test_util::RunBlockingPoolTask();
+ base::RunLoop().RunUntilIdle();
ASSERT_EQ(google_apis::HTTP_SUCCESS, error);
ASSERT_TRUE(app_list);
@@ -203,7 +204,7 @@ TEST_F(JobSchedulerTest, GetAllResourceList) {
scheduler_->GetAllResourceList(
google_apis::test_util::CreateCopyResultCallback(
&error, &resource_list));
- google_apis::test_util::RunBlockingPoolTask();
+ base::RunLoop().RunUntilIdle();
ASSERT_EQ(google_apis::HTTP_SUCCESS, error);
ASSERT_TRUE(resource_list);
@@ -219,7 +220,7 @@ TEST_F(JobSchedulerTest, GetResourceListInDirectory) {
fake_drive_service_->GetRootResourceId(),
google_apis::test_util::CreateCopyResultCallback(
&error, &resource_list));
- google_apis::test_util::RunBlockingPoolTask();
+ base::RunLoop().RunUntilIdle();
ASSERT_EQ(google_apis::HTTP_SUCCESS, error);
ASSERT_TRUE(resource_list);
@@ -235,7 +236,7 @@ TEST_F(JobSchedulerTest, Search) {
"File", // search query
google_apis::test_util::CreateCopyResultCallback(
&error, &resource_list));
- google_apis::test_util::RunBlockingPoolTask();
+ base::RunLoop().RunUntilIdle();
ASSERT_EQ(google_apis::HTTP_SUCCESS, error);
ASSERT_TRUE(resource_list);
@@ -256,7 +257,7 @@ TEST_F(JobSchedulerTest, GetChangeList) {
"new directory",
google_apis::test_util::CreateCopyResultCallback(
&error, &resource_entry));
- google_apis::test_util::RunBlockingPoolTask();
+ base::RunLoop().RunUntilIdle();
ASSERT_EQ(google_apis::HTTP_CREATED, error);
}
@@ -266,7 +267,7 @@ TEST_F(JobSchedulerTest, GetChangeList) {
654321 + 1, // start_changestamp
google_apis::test_util::CreateCopyResultCallback(
&error, &resource_list));
- google_apis::test_util::RunBlockingPoolTask();
+ base::RunLoop().RunUntilIdle();
ASSERT_EQ(google_apis::HTTP_SUCCESS, error);
ASSERT_TRUE(resource_list);
@@ -282,7 +283,7 @@ TEST_F(JobSchedulerTest, ContinueGetResourceList) {
scheduler_->GetAllResourceList(
google_apis::test_util::CreateCopyResultCallback(
&error, &resource_list));
- google_apis::test_util::RunBlockingPoolTask();
+ base::RunLoop().RunUntilIdle();
ASSERT_EQ(google_apis::HTTP_SUCCESS, error);
ASSERT_TRUE(resource_list);
@@ -300,7 +301,7 @@ TEST_F(JobSchedulerTest, ContinueGetResourceList) {
next_url,
google_apis::test_util::CreateCopyResultCallback(
&error, &resource_list));
- google_apis::test_util::RunBlockingPoolTask();
+ base::RunLoop().RunUntilIdle();
ASSERT_EQ(google_apis::HTTP_SUCCESS, error);
ASSERT_TRUE(resource_list);
@@ -316,7 +317,7 @@ TEST_F(JobSchedulerTest, GetResourceEntry) {
"file:2_file_resource_id", // resource ID
ClientContext(USER_INITIATED),
google_apis::test_util::CreateCopyResultCallback(&error, &entry));
- google_apis::test_util::RunBlockingPoolTask();
+ base::RunLoop().RunUntilIdle();
ASSERT_EQ(google_apis::HTTP_SUCCESS, error);
ASSERT_TRUE(entry);
@@ -330,7 +331,7 @@ TEST_F(JobSchedulerTest, DeleteResource) {
scheduler_->DeleteResource(
"file:2_file_resource_id",
google_apis::test_util::CreateCopyResultCallback(&error));
- google_apis::test_util::RunBlockingPoolTask();
+ base::RunLoop().RunUntilIdle();
ASSERT_EQ(google_apis::HTTP_SUCCESS, error);
}
@@ -346,7 +347,7 @@ TEST_F(JobSchedulerTest, CopyResource) {
"folder:1_folder_resource_id", // parent resource ID
"New Document", // new name
google_apis::test_util::CreateCopyResultCallback(&error, &entry));
- google_apis::test_util::RunBlockingPoolTask();
+ base::RunLoop().RunUntilIdle();
ASSERT_EQ(google_apis::HTTP_SUCCESS, error);
ASSERT_TRUE(entry);
@@ -362,7 +363,7 @@ TEST_F(JobSchedulerTest, CopyHostedDocument) {
"document:5_document_resource_id", // resource ID
"New Document", // new name
google_apis::test_util::CreateCopyResultCallback(&error, &entry));
- google_apis::test_util::RunBlockingPoolTask();
+ base::RunLoop().RunUntilIdle();
ASSERT_EQ(google_apis::HTTP_SUCCESS, error);
ASSERT_TRUE(entry);
@@ -377,7 +378,7 @@ TEST_F(JobSchedulerTest, RenameResource) {
"file:2_file_resource_id",
"New Name",
google_apis::test_util::CreateCopyResultCallback(&error));
- google_apis::test_util::RunBlockingPoolTask();
+ base::RunLoop().RunUntilIdle();
ASSERT_EQ(google_apis::HTTP_SUCCESS, error);
}
@@ -391,7 +392,7 @@ TEST_F(JobSchedulerTest, AddResourceToDirectory) {
"folder:1_folder_resource_id",
"file:2_file_resource_id",
google_apis::test_util::CreateCopyResultCallback(&error));
- google_apis::test_util::RunBlockingPoolTask();
+ base::RunLoop().RunUntilIdle();
ASSERT_EQ(google_apis::HTTP_SUCCESS, error);
}
@@ -405,7 +406,7 @@ TEST_F(JobSchedulerTest, RemoveResourceFromDirectory) {
"folder:1_folder_resource_id",
"file:subdirectory_file_1_id", // resource ID
google_apis::test_util::CreateCopyResultCallback(&error));
- google_apis::test_util::RunBlockingPoolTask();
+ base::RunLoop().RunUntilIdle();
ASSERT_EQ(google_apis::HTTP_SUCCESS, error);
}
@@ -420,7 +421,7 @@ TEST_F(JobSchedulerTest, AddNewDirectory) {
fake_drive_service_->GetRootResourceId(), // Root directory.
"New Directory",
google_apis::test_util::CreateCopyResultCallback(&error, &entry));
- google_apis::test_util::RunBlockingPoolTask();
+ base::RunLoop().RunUntilIdle();
ASSERT_EQ(google_apis::HTTP_CREATED, error);
ASSERT_TRUE(entry);
@@ -463,7 +464,7 @@ TEST_F(JobSchedulerTest, GetResourceEntryPriority) {
// Reconnect to the network to start all jobs.
ConnectToWifi();
- google_apis::test_util::RunBlockingPoolTask();
+ base::RunLoop().RunUntilIdle();
ASSERT_EQ(resource_ids.size(), 4ul);
ASSERT_EQ(resource_ids[0], resource_1);
@@ -484,14 +485,14 @@ TEST_F(JobSchedulerTest, GetResourceEntryNoConnection) {
base::Bind(&CopyResourceIdFromGetResourceEntryCallback,
&resource_ids,
resource));
- google_apis::test_util::RunBlockingPoolTask();
+ base::RunLoop().RunUntilIdle();
ASSERT_EQ(resource_ids.size(), 0ul);
// Reconnect to the net.
ConnectToWifi();
- google_apis::test_util::RunBlockingPoolTask();
+ base::RunLoop().RunUntilIdle();
ASSERT_EQ(resource_ids.size(), 1ul);
ASSERT_EQ(resource_ids[0], resource);
@@ -528,7 +529,7 @@ TEST_F(JobSchedulerTest, DownloadFileCellularDisabled) {
scheduler_->GetAboutResource(
google_apis::test_util::CreateCopyResultCallback(
&metadata_error, &about_resource));
- google_apis::test_util::RunBlockingPoolTask();
+ base::RunLoop().RunUntilIdle();
// Check the metadata
ASSERT_EQ(google_apis::HTTP_SUCCESS, metadata_error);
@@ -540,7 +541,7 @@ TEST_F(JobSchedulerTest, DownloadFileCellularDisabled) {
// Switch to a Wifi connection
ConnectToWifi();
- google_apis::test_util::RunBlockingPoolTask();
+ base::RunLoop().RunUntilIdle();
// Check the download again
EXPECT_EQ(google_apis::HTTP_SUCCESS, download_error);
@@ -581,7 +582,7 @@ TEST_F(JobSchedulerTest, DownloadFileWimaxDisabled) {
scheduler_->GetAboutResource(
google_apis::test_util::CreateCopyResultCallback(
&metadata_error, &about_resource));
- google_apis::test_util::RunBlockingPoolTask();
+ base::RunLoop().RunUntilIdle();
// Check the metadata
ASSERT_EQ(google_apis::HTTP_SUCCESS, metadata_error);
@@ -593,7 +594,7 @@ TEST_F(JobSchedulerTest, DownloadFileWimaxDisabled) {
// Switch to a Wifi connection
ConnectToWifi();
- google_apis::test_util::RunBlockingPoolTask();
+ base::RunLoop().RunUntilIdle();
// Check the download again
EXPECT_EQ(google_apis::HTTP_SUCCESS, download_error);
@@ -634,7 +635,7 @@ TEST_F(JobSchedulerTest, DownloadFileCellularEnabled) {
scheduler_->GetAboutResource(
google_apis::test_util::CreateCopyResultCallback(
&metadata_error, &about_resource));
- google_apis::test_util::RunBlockingPoolTask();
+ base::RunLoop().RunUntilIdle();
// Check the metadata
ASSERT_EQ(google_apis::HTTP_SUCCESS, metadata_error);
@@ -679,7 +680,7 @@ TEST_F(JobSchedulerTest, DownloadFileWimaxEnabled) {
scheduler_->GetAboutResource(
google_apis::test_util::CreateCopyResultCallback(
&metadata_error, &about_resource));
- google_apis::test_util::RunBlockingPoolTask();
+ base::RunLoop().RunUntilIdle();
// Check the metadata
ASSERT_EQ(google_apis::HTTP_SUCCESS, metadata_error);
@@ -775,7 +776,7 @@ TEST_F(JobSchedulerTest, JobInfo) {
EXPECT_FALSE(logger.Has(JobListLogger::DONE, TYPE_COPY_HOSTED_DOCUMENT));
// Run the jobs.
- google_apis::test_util::RunBlockingPoolTask();
+ base::RunLoop().RunUntilIdle();
// All jobs except the BACKGROUND job should have started running (UPDATED)
// and then finished (DONE).
@@ -800,7 +801,7 @@ TEST_F(JobSchedulerTest, JobInfo) {
// Run the background downloading job as well.
ConnectToWifi();
- google_apis::test_util::RunBlockingPoolTask();
+ base::RunLoop().RunUntilIdle();
// All jobs should have finished.
EXPECT_EQ(0U, scheduler_->GetJobInfoList().size());
@@ -829,7 +830,7 @@ TEST_F(JobSchedulerTest, JobInfoProgress) {
ClientContext(BACKGROUND),
google_apis::test_util::CreateCopyResultCallback(&error, &path),
google_apis::GetContentCallback());
- google_apis::test_util::RunBlockingPoolTask();
+ base::RunLoop().RunUntilIdle();
std::vector<int64> download_progress;
logger.GetProgressInfo(TYPE_DOWNLOAD_FILE, &download_progress);
@@ -853,7 +854,7 @@ TEST_F(JobSchedulerTest, JobInfoProgress) {
"plain/plain",
ClientContext(BACKGROUND),
google_apis::test_util::CreateCopyResultCallback(&upload_error, &entry));
- google_apis::test_util::RunBlockingPoolTask();
+ base::RunLoop().RunUntilIdle();
std::vector<int64> upload_progress;
logger.GetProgressInfo(TYPE_UPLOAD_NEW_FILE, &upload_progress);
diff --git a/chrome/browser/chromeos/drive/sync_client_unittest.cc b/chrome/browser/chromeos/drive/sync_client_unittest.cc
index f1fba44..9d1aea2 100644
--- a/chrome/browser/chromeos/drive/sync_client_unittest.cc
+++ b/chrome/browser/chromeos/drive/sync_client_unittest.cc
@@ -85,7 +85,8 @@ class SyncClientTest : public testing::Test {
drive_service_->LoadAccountMetadataForWapi(
"chromeos/gdata/account_metadata.json");
- scheduler_.reset(new JobScheduler(profile_.get(), drive_service_.get()));
+ scheduler_.reset(new JobScheduler(profile_.get(), drive_service_.get(),
+ base::MessageLoopProxy::current()));
metadata_storage_.reset(new ResourceMetadataStorage(
temp_dir_.path(), base::MessageLoopProxy::current()));
diff --git a/chrome/browser/drive/drive_uploader.cc b/chrome/browser/drive/drive_uploader.cc
index c96d72d..45db431 100644
--- a/chrome/browser/drive/drive_uploader.cc
+++ b/chrome/browser/drive/drive_uploader.cc
@@ -11,7 +11,6 @@
#include "base/file_util.h"
#include "base/strings/string_number_conversions.h"
#include "base/task_runner_util.h"
-#include "base/threading/sequenced_worker_pool.h"
#include "chrome/browser/drive/drive_service_interface.h"
#include "chrome/browser/google_apis/gdata_wapi_parser.h"
#include "content/public/browser/browser_thread.h"
@@ -113,8 +112,10 @@ struct DriveUploader::UploadFileInfo {
DISALLOW_COPY_AND_ASSIGN(UploadFileInfo);
};
-DriveUploader::DriveUploader(DriveServiceInterface* drive_service)
+DriveUploader::DriveUploader(DriveServiceInterface* drive_service,
+ base::TaskRunner* blocking_task_runner)
: drive_service_(drive_service),
+ blocking_task_runner_(blocking_task_runner),
weak_ptr_factory_(this) {
}
@@ -199,7 +200,7 @@ CancelCallback DriveUploader::StartUploadFile(
UploadFileInfo* info_ptr = upload_file_info.get();
base::PostTaskAndReplyWithResult(
- BrowserThread::GetBlockingPool(),
+ blocking_task_runner_,
FROM_HERE,
base::Bind(&file_util::GetFileSize, info_ptr->file_path,
&info_ptr->content_length),
diff --git a/chrome/browser/drive/drive_uploader.h b/chrome/browser/drive/drive_uploader.h
index 89e18a1..cb8bc80 100644
--- a/chrome/browser/drive/drive_uploader.h
+++ b/chrome/browser/drive/drive_uploader.h
@@ -9,6 +9,7 @@
#include "base/basictypes.h"
#include "base/callback_forward.h"
+#include "base/memory/ref_counted.h"
#include "base/memory/weak_ptr.h"
#include "chrome/browser/drive/drive_service_interface.h"
#include "chrome/browser/google_apis/gdata_errorcode.h"
@@ -18,6 +19,7 @@ class GURL;
namespace base {
class FilePath;
+class TaskRunner;
}
namespace google_apis {
@@ -106,7 +108,8 @@ class DriveUploaderInterface {
class DriveUploader : public DriveUploaderInterface {
public:
- explicit DriveUploader(DriveServiceInterface* drive_service);
+ DriveUploader(DriveServiceInterface* drive_service,
+ base::TaskRunner* blocking_task_runner);
virtual ~DriveUploader();
// DriveUploaderInterface overrides.
@@ -191,6 +194,8 @@ class DriveUploader : public DriveUploaderInterface {
// DriveUploader instance.
DriveServiceInterface* drive_service_; // Not owned by this class.
+ scoped_refptr<base::TaskRunner> blocking_task_runner_;
+
// 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<DriveUploader> weak_ptr_factory_;
diff --git a/chrome/browser/drive/drive_uploader_unittest.cc b/chrome/browser/drive/drive_uploader_unittest.cc
index 2ce1287..d01d20f 100644
--- a/chrome/browser/drive/drive_uploader_unittest.cc
+++ b/chrome/browser/drive/drive_uploader_unittest.cc
@@ -4,16 +4,14 @@
#include "chrome/browser/drive/drive_uploader.h"
-#include <algorithm>
-#include <cstdlib>
#include <string>
-#include <utility>
#include <vector>
#include "base/bind.h"
#include "base/files/scoped_temp_dir.h"
#include "base/memory/scoped_ptr.h"
#include "base/message_loop.h"
+#include "base/run_loop.h"
#include "base/values.h"
#include "chrome/browser/drive/dummy_drive_service.h"
#include "chrome/browser/google_apis/test_util.h"
@@ -316,7 +314,7 @@ TEST_F(DriveUploaderTest, UploadExisting0KB) {
scoped_ptr<ResourceEntry> resource_entry;
MockDriveServiceWithUploadExpectation mock_service(local_path, data.size());
- DriveUploader uploader(&mock_service);
+ DriveUploader uploader(&mock_service, base::MessageLoopProxy::current());
std::vector<test_util::ProgressInfo> upload_progress_values;
uploader.UploadExistingFile(
kTestInitiateUploadResourceId,
@@ -327,7 +325,7 @@ TEST_F(DriveUploaderTest, UploadExisting0KB) {
&error, &upload_location, &resource_entry),
base::Bind(&test_util::AppendProgressCallbackResult,
&upload_progress_values));
- test_util::RunBlockingPoolTask();
+ base::RunLoop().RunUntilIdle();
EXPECT_EQ(1, mock_service.resume_upload_call_count());
EXPECT_EQ(0, mock_service.received_bytes());
@@ -350,7 +348,7 @@ TEST_F(DriveUploaderTest, UploadExisting512KB) {
scoped_ptr<ResourceEntry> resource_entry;
MockDriveServiceWithUploadExpectation mock_service(local_path, data.size());
- DriveUploader uploader(&mock_service);
+ DriveUploader uploader(&mock_service, base::MessageLoopProxy::current());
std::vector<test_util::ProgressInfo> upload_progress_values;
uploader.UploadExistingFile(
kTestInitiateUploadResourceId,
@@ -361,7 +359,7 @@ TEST_F(DriveUploaderTest, UploadExisting512KB) {
&error, &upload_location, &resource_entry),
base::Bind(&test_util::AppendProgressCallbackResult,
&upload_progress_values));
- test_util::RunBlockingPoolTask();
+ base::RunLoop().RunUntilIdle();
// 512KB upload should not be split into multiple chunks.
EXPECT_EQ(1, mock_service.resume_upload_call_count());
@@ -386,7 +384,7 @@ TEST_F(DriveUploaderTest, InitiateUploadFail) {
scoped_ptr<ResourceEntry> resource_entry;
MockDriveServiceNoConnectionAtInitiate mock_service;
- DriveUploader uploader(&mock_service);
+ DriveUploader uploader(&mock_service, base::MessageLoopProxy::current());
uploader.UploadExistingFile(
kTestInitiateUploadResourceId,
local_path,
@@ -395,7 +393,7 @@ TEST_F(DriveUploaderTest, InitiateUploadFail) {
test_util::CreateCopyResultCallback(
&error, &upload_location, &resource_entry),
google_apis::ProgressCallback());
- test_util::RunBlockingPoolTask();
+ base::RunLoop().RunUntilIdle();
EXPECT_EQ(GDATA_NO_CONNECTION, error);
EXPECT_TRUE(upload_location.is_empty());
@@ -413,7 +411,7 @@ TEST_F(DriveUploaderTest, InitiateUploadNoConflict) {
scoped_ptr<ResourceEntry> resource_entry;
MockDriveServiceWithUploadExpectation mock_service(local_path, data.size());
- DriveUploader uploader(&mock_service);
+ DriveUploader uploader(&mock_service, base::MessageLoopProxy::current());
uploader.UploadExistingFile(
kTestInitiateUploadResourceId,
local_path,
@@ -422,7 +420,7 @@ TEST_F(DriveUploaderTest, InitiateUploadNoConflict) {
test_util::CreateCopyResultCallback(
&error, &upload_location, &resource_entry),
google_apis::ProgressCallback());
- test_util::RunBlockingPoolTask();
+ base::RunLoop().RunUntilIdle();
EXPECT_EQ(HTTP_SUCCESS, error);
EXPECT_TRUE(upload_location.is_empty());
@@ -440,7 +438,7 @@ TEST_F(DriveUploaderTest, InitiateUploadConflict) {
scoped_ptr<ResourceEntry> resource_entry;
MockDriveServiceWithUploadExpectation mock_service(local_path, data.size());
- DriveUploader uploader(&mock_service);
+ DriveUploader uploader(&mock_service, base::MessageLoopProxy::current());
uploader.UploadExistingFile(
kTestInitiateUploadResourceId,
local_path,
@@ -449,7 +447,7 @@ TEST_F(DriveUploaderTest, InitiateUploadConflict) {
test_util::CreateCopyResultCallback(
&error, &upload_location, &resource_entry),
google_apis::ProgressCallback());
- test_util::RunBlockingPoolTask();
+ base::RunLoop().RunUntilIdle();
EXPECT_EQ(HTTP_CONFLICT, error);
EXPECT_TRUE(upload_location.is_empty());
@@ -466,7 +464,7 @@ TEST_F(DriveUploaderTest, ResumeUploadFail) {
scoped_ptr<ResourceEntry> resource_entry;
MockDriveServiceNoConnectionAtResume mock_service;
- DriveUploader uploader(&mock_service);
+ DriveUploader uploader(&mock_service, base::MessageLoopProxy::current());
uploader.UploadExistingFile(
kTestInitiateUploadResourceId,
local_path,
@@ -475,7 +473,7 @@ TEST_F(DriveUploaderTest, ResumeUploadFail) {
test_util::CreateCopyResultCallback(
&error, &upload_location, &resource_entry),
google_apis::ProgressCallback());
- test_util::RunBlockingPoolTask();
+ base::RunLoop().RunUntilIdle();
EXPECT_EQ(GDATA_NO_CONNECTION, error);
EXPECT_EQ(GURL(kTestUploadExistingFileURL), upload_location);
@@ -486,7 +484,8 @@ TEST_F(DriveUploaderTest, NonExistingSourceFile) {
GURL upload_location;
scoped_ptr<ResourceEntry> resource_entry;
- DriveUploader uploader(NULL); // NULL, the service won't be used.
+ DriveUploader uploader(NULL, // NULL, the service won't be used.
+ base::MessageLoopProxy::current());
uploader.UploadExistingFile(
kTestInitiateUploadResourceId,
temp_dir_.path().AppendASCII("_this_path_should_not_exist_"),
@@ -495,7 +494,7 @@ TEST_F(DriveUploaderTest, NonExistingSourceFile) {
test_util::CreateCopyResultCallback(
&error, &upload_location, &resource_entry),
google_apis::ProgressCallback());
- test_util::RunBlockingPoolTask();
+ base::RunLoop().RunUntilIdle();
// Should return failure without doing any attempt to connect to the server.
EXPECT_EQ(HTTP_NOT_FOUND, error);
@@ -513,7 +512,7 @@ TEST_F(DriveUploaderTest, ResumeUpload) {
scoped_ptr<ResourceEntry> resource_entry;
MockDriveServiceWithUploadExpectation mock_service(local_path, data.size());
- DriveUploader uploader(&mock_service);
+ DriveUploader uploader(&mock_service, base::MessageLoopProxy::current());
// Emulate the situation that the only first part is successfully uploaded,
// but not the latter half.
mock_service.set_received_bytes(512 * 1024);
@@ -527,7 +526,7 @@ TEST_F(DriveUploaderTest, ResumeUpload) {
&error, &upload_location, &resource_entry),
base::Bind(&test_util::AppendProgressCallbackResult,
&upload_progress_values));
- test_util::RunBlockingPoolTask();
+ base::RunLoop().RunUntilIdle();
EXPECT_EQ(1, mock_service.resume_upload_call_count());
EXPECT_EQ(1024 * 1024, mock_service.received_bytes());
diff --git a/chrome/browser/sync_file_system/drive/api_util.cc b/chrome/browser/sync_file_system/drive/api_util.cc
index 76d5c77..d7d7435 100644
--- a/chrome/browser/sync_file_system/drive/api_util.cc
+++ b/chrome/browser/sync_file_system/drive/api_util.cc
@@ -11,6 +11,7 @@
#include "base/strings/string_util.h"
#include "base/strings/utf_string_conversions.h"
+#include "base/threading/sequenced_worker_pool.h"
#include "base/values.h"
#include "chrome/browser/drive/drive_api_service.h"
#include "chrome/browser/drive/drive_api_util.h"
@@ -21,6 +22,7 @@
#include "chrome/browser/sync_file_system/drive_file_sync_util.h"
#include "chrome/browser/sync_file_system/logger.h"
#include "chrome/common/extensions/extension.h"
+#include "content/public/browser/browser_thread.h"
#include "extensions/common/constants.h"
#include "net/base/mime_util.h"
#include "webkit/browser/fileapi/syncable/syncable_file_system_util.h"
@@ -148,7 +150,8 @@ APIUtil::APIUtil(Profile* profile)
drive_service_->AddObserver(this);
net::NetworkChangeNotifier::AddConnectionTypeObserver(this);
- drive_uploader_.reset(new ::drive::DriveUploader(drive_service_.get()));
+ drive_uploader_.reset(new ::drive::DriveUploader(
+ drive_service_.get(), content::BrowserThread::GetBlockingPool()));
}
scoped_ptr<APIUtil> APIUtil::CreateForTesting(
@@ -1057,7 +1060,8 @@ void APIUtil::CancelAllUploads(google_apis::GDataErrorCode error) {
iter->second.Run(error, std::string(), std::string());
}
upload_callback_map_.clear();
- drive_uploader_.reset(new ::drive::DriveUploader(drive_service_.get()));
+ drive_uploader_.reset(new ::drive::DriveUploader(
+ drive_service_.get(), content::BrowserThread::GetBlockingPool()));
}
std::string APIUtil::GetRootResourceId() const {