diff options
author | hashimoto@chromium.org <hashimoto@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-06-21 16:21:30 +0000 |
---|---|---|
committer | hashimoto@chromium.org <hashimoto@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-06-21 16:21:30 +0000 |
commit | 5bbabede9673d47ad169bdecd62103e2e297149d (patch) | |
tree | 775d63357ec49451e60590e8660b44a169a2726d /chrome/browser | |
parent | 827fab41494e7256d28b62b0bb94b824f32c5db1 (diff) | |
download | chromium_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')
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 { |