gdata: Replace SequencedWorkerPool-SequenceToken pair with SequencedTaskRunner
This pattern is used in GDataCache, GDataCacheMetadata and GDataFIleSystem.
It has some bad points:
- |pool_| and |sequence_token_| are not informative names.
- It makes functions' argument lists bloating.
BUG=None
TEST=unit_tests --gtest_filter="GData*"
Review URL: https://chromiumcodereview.appspot.com/10735086
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@146574 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/chrome/browser/chromeos/gdata/gdata_cache.cc b/chrome/browser/chromeos/gdata/gdata_cache.cc
index 6ec993a..e18307c 100644
--- a/chrome/browser/chromeos/gdata/gdata_cache.cc
+++ b/chrome/browser/chromeos/gdata/gdata_cache.cc
@@ -290,14 +290,11 @@
} // namespace
-GDataCache::GDataCache(
- const FilePath& cache_root_path,
- base::SequencedWorkerPool* pool,
- const base::SequencedWorkerPool::SequenceToken& sequence_token)
+GDataCache::GDataCache(const FilePath& cache_root_path,
+ base::SequencedTaskRunner* blocking_task_runner)
: cache_root_path_(cache_root_path),
cache_paths_(GetCachePaths(cache_root_path_)),
- pool_(pool),
- sequence_token_(sequence_token),
+ blocking_task_runner_(blocking_task_runner),
ui_weak_ptr_factory_(this),
ui_weak_ptr_(ui_weak_ptr_factory_.GetWeakPtr()) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
@@ -343,7 +340,8 @@
}
void GDataCache::AssertOnSequencedWorkerPool() {
- DCHECK(!pool_ || pool_->IsRunningSequenceOnCurrentThread(sequence_token_));
+ DCHECK(!blocking_task_runner_ ||
+ blocking_task_runner_->RunsTasksOnCurrentThread());
}
bool GDataCache::IsUnderGDataCacheDirectory(const FilePath& path) const {
@@ -368,7 +366,7 @@
bool* success = new bool(false);
GDataCacheEntry* cache_entry = new GDataCacheEntry;
- pool_->GetSequencedTaskRunner(sequence_token_)->PostTaskAndReply(
+ blocking_task_runner_->PostTaskAndReply(
FROM_HERE,
base::Bind(&GDataCache::GetCacheEntryHelper,
base::Unretained(this),
@@ -388,7 +386,7 @@
std::vector<std::string>* to_fetch = new std::vector<std::string>;
std::vector<std::string>* to_upload = new std::vector<std::string>;
- pool_->GetSequencedTaskRunner(sequence_token_)->PostTaskAndReply(
+ blocking_task_runner_->PostTaskAndReply(
FROM_HERE,
base::Bind(&GDataCache::GetResourceIdsOfBacklog,
base::Unretained(this),
@@ -405,7 +403,7 @@
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
std::vector<std::string>* resource_ids = new std::vector<std::string>;
- pool_->GetSequencedTaskRunner(sequence_token_)->PostTaskAndReply(
+ blocking_task_runner_->PostTaskAndReply(
FROM_HERE,
base::Bind(&GDataCache::GetResourceIdsOfExistingPinnedFiles,
base::Unretained(this),
@@ -443,7 +441,7 @@
base::PlatformFileError* error =
new base::PlatformFileError(base::PLATFORM_FILE_OK);
FilePath* cache_file_path = new FilePath;
- pool_->GetSequencedTaskRunner(sequence_token_)->PostTaskAndReply(
+ blocking_task_runner_->PostTaskAndReply(
FROM_HERE,
base::Bind(&GDataCache::GetFile,
base::Unretained(this),
@@ -468,7 +466,7 @@
base::PlatformFileError* error =
new base::PlatformFileError(base::PLATFORM_FILE_OK);
- pool_->GetSequencedTaskRunner(sequence_token_)->PostTaskAndReply(
+ blocking_task_runner_->PostTaskAndReply(
FROM_HERE,
base::Bind(&GDataCache::Store,
base::Unretained(this),
@@ -491,7 +489,7 @@
base::PlatformFileError* error =
new base::PlatformFileError(base::PLATFORM_FILE_OK);
- pool_->GetSequencedTaskRunner(sequence_token_)->PostTaskAndReply(
+ blocking_task_runner_->PostTaskAndReply(
FROM_HERE,
base::Bind(&GDataCache::Pin,
base::Unretained(this),
@@ -513,7 +511,7 @@
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
base::PlatformFileError* error =
new base::PlatformFileError(base::PLATFORM_FILE_OK);
- pool_->GetSequencedTaskRunner(sequence_token_)->PostTaskAndReply(
+ blocking_task_runner_->PostTaskAndReply(
FROM_HERE,
base::Bind(&GDataCache::Unpin,
base::Unretained(this),
@@ -538,7 +536,7 @@
base::PlatformFileError* error =
new base::PlatformFileError(base::PLATFORM_FILE_OK);
FilePath* cache_file_path = new FilePath;
- pool_->GetSequencedTaskRunner(sequence_token_)->PostTaskAndReply(
+ blocking_task_runner_->PostTaskAndReply(
FROM_HERE,
base::Bind(&GDataCache::SetMountedState,
base::Unretained(this),
@@ -560,7 +558,7 @@
base::PlatformFileError* error =
new base::PlatformFileError(base::PLATFORM_FILE_OK);
FilePath* cache_file_path = new FilePath;
- pool_->GetSequencedTaskRunner(sequence_token_)->PostTaskAndReply(
+ blocking_task_runner_->PostTaskAndReply(
FROM_HERE,
base::Bind(&GDataCache::MarkDirty,
base::Unretained(this),
@@ -584,7 +582,7 @@
base::PlatformFileError* error =
new base::PlatformFileError(base::PLATFORM_FILE_OK);
- pool_->GetSequencedTaskRunner(sequence_token_)->PostTaskAndReply(
+ blocking_task_runner_->PostTaskAndReply(
FROM_HERE,
base::Bind(&GDataCache::CommitDirty,
base::Unretained(this),
@@ -607,7 +605,7 @@
base::PlatformFileError* error =
new base::PlatformFileError(base::PLATFORM_FILE_OK);
- pool_->GetSequencedTaskRunner(sequence_token_)->PostTaskAndReply(
+ blocking_task_runner_->PostTaskAndReply(
FROM_HERE,
base::Bind(&GDataCache::ClearDirty,
base::Unretained(this),
@@ -629,7 +627,7 @@
base::PlatformFileError* error =
new base::PlatformFileError(base::PLATFORM_FILE_OK);
- pool_->GetSequencedTaskRunner(sequence_token_)->PostTaskAndReply(
+ blocking_task_runner_->PostTaskAndReply(
FROM_HERE,
base::Bind(&GDataCache::Remove,
base::Unretained(this),
@@ -645,7 +643,7 @@
void GDataCache::RequestInitializeOnUIThread() {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- pool_->GetSequencedTaskRunner(sequence_token_)->PostTask(
+ blocking_task_runner_->PostTask(
FROM_HERE,
base::Bind(&GDataCache::Initialize, base::Unretained(this)));
}
@@ -661,10 +659,9 @@
// static
GDataCache* GDataCache::CreateGDataCacheOnUIThread(
const FilePath& cache_root_path,
- base::SequencedWorkerPool* pool,
- const base::SequencedWorkerPool::SequenceToken& sequence_token) {
+ base::SequencedTaskRunner* blocking_task_runner) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- return new GDataCache(cache_root_path, pool, sequence_token);
+ return new GDataCache(cache_root_path, blocking_task_runner);
}
void GDataCache::DestroyOnUIThread() {
@@ -674,7 +671,7 @@
ui_weak_ptr_factory_.InvalidateWeakPtrs();
// Destroy myself on the blocking pool.
- pool_->GetSequencedTaskRunner(sequence_token_)->PostTask(
+ blocking_task_runner_->PostTask(
FROM_HERE,
base::Bind(&GDataCache::Destroy,
base::Unretained(this)));
@@ -684,7 +681,7 @@
AssertOnSequencedWorkerPool();
GDataCacheMetadataMap* cache_data =
- new GDataCacheMetadataMap(pool_, sequence_token_);
+ new GDataCacheMetadataMap(blocking_task_runner_);
cache_data->Initialize(cache_paths_);
metadata_.reset(cache_data);
}
@@ -1405,7 +1402,7 @@
// Now the file is moved from "persistent" to "tmp" directory.
// It's a chance to free up space if needed.
bool* has_enough_space = new bool(false);
- pool_->GetSequencedTaskRunner(sequence_token_)->PostTask(
+ blocking_task_runner_->PostTask(
FROM_HERE,
base::Bind(&GDataCache::FreeDiskSpaceIfNeededFor,
base::Unretained(this),
diff --git a/chrome/browser/chromeos/gdata/gdata_cache.h b/chrome/browser/chromeos/gdata/gdata_cache.h
index 00df32e..ef329f4 100644
--- a/chrome/browser/chromeos/gdata/gdata_cache.h
+++ b/chrome/browser/chromeos/gdata/gdata_cache.h
@@ -8,15 +8,21 @@
#include <map>
#include <string>
+#include "base/callback.h"
#include "base/file_path.h"
#include "base/memory/scoped_ptr.h"
#include "base/memory/weak_ptr.h"
#include "base/observer_list.h"
#include "base/platform_file.h"
-#include "base/threading/sequenced_worker_pool.h"
class Profile;
+namespace base {
+
+class SequencedTaskRunner;
+
+} // namespace base
+
namespace gdata {
class GDataCacheEntry;
@@ -268,8 +274,7 @@
// the default value of SequenceToken.
static GDataCache* CreateGDataCacheOnUIThread(
const FilePath& cache_root_path,
- base::SequencedWorkerPool* pool,
- const base::SequencedWorkerPool::SequenceToken& sequence_token);
+ base::SequencedTaskRunner* blocking_task_runner);
// Deletes the cache.
void DestroyOnUIThread();
@@ -295,10 +300,8 @@
const GDataCacheEntry& cache_entry);
private:
- GDataCache(
- const FilePath& cache_root_path,
- base::SequencedWorkerPool* pool_,
- const base::SequencedWorkerPool::SequenceToken& sequence_token);
+ GDataCache(const FilePath& cache_root_path,
+ base::SequencedTaskRunner* blocking_task_runner);
virtual ~GDataCache();
// Checks whether the current thread is on the right sequenced worker pool
@@ -403,8 +406,7 @@
// Paths for all subdirectories of GCache, one for each
// GDataCache::CacheSubDirectoryType enum.
const std::vector<FilePath> cache_paths_;
- base::SequencedWorkerPool* pool_;
- const base::SequencedWorkerPool::SequenceToken sequence_token_;
+ scoped_refptr<base::SequencedTaskRunner> blocking_task_runner_;
// The cache state data. This member must be access only on the blocking pool.
scoped_ptr<GDataCacheMetadata> metadata_;
diff --git a/chrome/browser/chromeos/gdata/gdata_cache_metadata.cc b/chrome/browser/chromeos/gdata/gdata_cache_metadata.cc
index 8ce29ee6..11c2d63 100644
--- a/chrome/browser/chromeos/gdata/gdata_cache_metadata.cc
+++ b/chrome/browser/chromeos/gdata/gdata_cache_metadata.cc
@@ -5,6 +5,7 @@
#include "chrome/browser/chromeos/gdata/gdata_cache_metadata.h"
#include "base/file_util.h"
+#include "base/sequenced_task_runner.h"
#include "chrome/browser/chromeos/gdata/gdata.pb.h"
#include "chrome/browser/chromeos/gdata/gdata_util.h"
@@ -297,10 +298,8 @@
} // namespace
GDataCacheMetadata::GDataCacheMetadata(
- base::SequencedWorkerPool* pool,
- const base::SequencedWorkerPool::SequenceToken& sequence_token)
- : pool_(pool),
- sequence_token_(sequence_token) {
+ base::SequencedTaskRunner* blocking_task_runner)
+ : blocking_task_runner_(blocking_task_runner) {
AssertOnSequencedWorkerPool();
}
@@ -309,16 +308,16 @@
}
void GDataCacheMetadata::AssertOnSequencedWorkerPool() {
- DCHECK(!pool_ || pool_->IsRunningSequenceOnCurrentThread(sequence_token_));
+ DCHECK(!blocking_task_runner_ ||
+ blocking_task_runner_->RunsTasksOnCurrentThread());
}
////////////////////////////////////////////////////////////////////////////////
// GDataCacheMetadataMap
GDataCacheMetadataMap::GDataCacheMetadataMap(
- base::SequencedWorkerPool* pool,
- const base::SequencedWorkerPool::SequenceToken& sequence_token)
- : GDataCacheMetadata(pool, sequence_token) {
+ base::SequencedTaskRunner* blocking_task_runner)
+ : GDataCacheMetadata(blocking_task_runner) {
AssertOnSequencedWorkerPool();
}
diff --git a/chrome/browser/chromeos/gdata/gdata_cache_metadata.h b/chrome/browser/chromeos/gdata/gdata_cache_metadata.h
index 20a5a02..0727620 100644
--- a/chrome/browser/chromeos/gdata/gdata_cache_metadata.h
+++ b/chrome/browser/chromeos/gdata/gdata_cache_metadata.h
@@ -34,9 +34,7 @@
//
// For testing, the thread assertion can be disabled by passing NULL and
// the default value of SequenceToken.
- GDataCacheMetadata(
- base::SequencedWorkerPool* pool,
- const base::SequencedWorkerPool::SequenceToken& sequence_token);
+ explicit GDataCacheMetadata(base::SequencedTaskRunner* blocking_task_runner);
virtual ~GDataCacheMetadata();
// Initialize the cache metadata store.
@@ -71,8 +69,7 @@
void AssertOnSequencedWorkerPool();
private:
- base::SequencedWorkerPool* pool_;
- const base::SequencedWorkerPool::SequenceToken& sequence_token_;
+ scoped_refptr<base::SequencedTaskRunner> blocking_task_runner_;
DISALLOW_COPY_AND_ASSIGN(GDataCacheMetadata);
};
@@ -81,12 +78,10 @@
// GDataCacheMetadata implementation with std::map;
class GDataCacheMetadataMap : public GDataCacheMetadata {
public:
- GDataCacheMetadataMap(
- base::SequencedWorkerPool* pool,
- const base::SequencedWorkerPool::SequenceToken& sequence_token);
+ explicit GDataCacheMetadataMap(
+ base::SequencedTaskRunner* blocking_task_runner);
virtual ~GDataCacheMetadataMap();
-
// GDataCacheMetadata overrides:
virtual void Initialize(const std::vector<FilePath>& cache_paths) OVERRIDE;
virtual void AddOrUpdateCacheEntry(
diff --git a/chrome/browser/chromeos/gdata/gdata_cache_metadata_unittest.cc b/chrome/browser/chromeos/gdata/gdata_cache_metadata_unittest.cc
index 22b5a52..154e452 100644
--- a/chrome/browser/chromeos/gdata/gdata_cache_metadata_unittest.cc
+++ b/chrome/browser/chromeos/gdata/gdata_cache_metadata_unittest.cc
@@ -35,8 +35,7 @@
// Sets up the GDataCacheMetadata object.
void SetUpCacheMetadata() {
- metadata_.reset(new GDataCacheMetadataMap(
- NULL, base::SequencedWorkerPool::SequenceToken()));
+ metadata_.reset(new GDataCacheMetadataMap(NULL));
metadata_->Initialize(cache_paths_);
}
diff --git a/chrome/browser/chromeos/gdata/gdata_cache_unittest.cc b/chrome/browser/chromeos/gdata/gdata_cache_unittest.cc
index e95ac04..ff317012 100644
--- a/chrome/browser/chromeos/gdata/gdata_cache_unittest.cc
+++ b/chrome/browser/chromeos/gdata/gdata_cache_unittest.cc
@@ -5,6 +5,7 @@
#include "base/file_util.h"
#include "base/message_loop.h"
#include "base/path_service.h"
+#include "base/threading/sequenced_worker_pool.h"
#include "chrome/browser/chromeos/gdata/gdata.pb.h"
#include "chrome/browser/chromeos/gdata/gdata_cache.h"
#include "chrome/browser/chromeos/gdata/gdata_test_util.h"
@@ -109,8 +110,6 @@
GDataCacheTest()
: ui_thread_(content::BrowserThread::UI, &message_loop_),
io_thread_(content::BrowserThread::IO),
- sequence_token_(
- content::BrowserThread::GetBlockingPool()->GetSequenceToken()),
cache_(NULL),
num_callback_invocations_(0),
expected_error_(base::PLATFORM_FILE_OK),
@@ -129,10 +128,12 @@
mock_free_disk_space_checker_ = new MockFreeDiskSpaceGetter;
SetFreeDiskSpaceGetterForTesting(mock_free_disk_space_checker_);
+ scoped_refptr<base::SequencedWorkerPool> pool =
+ content::BrowserThread::GetBlockingPool();
+ blocking_task_runner_ =
+ pool->GetSequencedTaskRunner(pool->GetSequenceToken());
cache_ = GDataCache::CreateGDataCacheOnUIThread(
- GDataCache::GetCacheRootPath(profile_.get()),
- content::BrowserThread::GetBlockingPool(),
- sequence_token_);
+ GDataCache::GetCacheRootPath(profile_.get()), blocking_task_runner_);
mock_cache_observer_.reset(new StrictMock<MockGDataCacheObserver>);
cache_->AddObserver(mock_cache_observer_.get());
@@ -653,16 +654,14 @@
const std::string& md5,
GDataCacheEntry* cache_entry) {
bool result = false;
- content::BrowserThread::GetBlockingPool()
- ->GetSequencedTaskRunner(sequence_token_)->PostTask(
- FROM_HERE,
- base::Bind(
- &GDataCacheTest::GetCacheEntryFromOriginThreadInternal,
- base::Unretained(this),
- resource_id,
- md5,
- cache_entry,
- &result));
+ blocking_task_runner_->PostTask(
+ FROM_HERE,
+ base::Bind(&GDataCacheTest::GetCacheEntryFromOriginThreadInternal,
+ base::Unretained(this),
+ resource_id,
+ md5,
+ cache_entry,
+ &result));
test_util::RunBlockingPoolTask();
return result;
}
@@ -724,7 +723,7 @@
// See also content/browser/browser_thread_imple.cc.
content::TestBrowserThread ui_thread_;
content::TestBrowserThread io_thread_;
- const base::SequencedWorkerPool::SequenceToken sequence_token_;
+ scoped_refptr<base::SequencedTaskRunner> blocking_task_runner_;
scoped_ptr<TestingProfile> profile_;
GDataCache* cache_;
MockFreeDiskSpaceGetter* mock_free_disk_space_checker_;
diff --git a/chrome/browser/chromeos/gdata/gdata_file_system.cc b/chrome/browser/chromeos/gdata/gdata_file_system.cc
index 5df950b..a4ac3154c 100644
--- a/chrome/browser/chromeos/gdata/gdata_file_system.cc
+++ b/chrome/browser/chromeos/gdata/gdata_file_system.cc
@@ -568,13 +568,11 @@
// pool with the given sequence token.
void PostBlockingPoolSequencedTask(
const tracked_objects::Location& from_here,
- const base::SequencedWorkerPool::SequenceToken& sequence_token,
+ base::SequencedTaskRunner* blocking_task_runner,
const base::Closure& task) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- base::SequencedWorkerPool* pool = BrowserThread::GetBlockingPool();
- const bool posted = pool->GetSequencedTaskRunner(sequence_token)->
- PostTask(from_here, task);
+ const bool posted = blocking_task_runner->PostTask(from_here, task);
DCHECK(posted);
}
@@ -582,17 +580,13 @@
// callback that runs on the calling thread.
void PostBlockingPoolSequencedTaskAndReply(
const tracked_objects::Location& from_here,
- const base::SequencedWorkerPool::SequenceToken& sequence_token,
+ base::SequencedTaskRunner* blocking_task_runner,
const base::Closure& request_task,
const base::Closure& reply_task) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- base::SequencedWorkerPool* pool = BrowserThread::GetBlockingPool();
- const bool posted = pool->GetSequencedTaskRunner(sequence_token)->
- PostTaskAndReply(
- from_here,
- request_task,
- reply_task);
+ const bool posted = blocking_task_runner->PostTaskAndReply(
+ from_here, request_task, reply_task);
DCHECK(posted);
}
@@ -766,7 +760,7 @@
DocumentsServiceInterface* documents_service,
GDataUploaderInterface* uploader,
DriveWebAppsRegistryInterface* webapps_registry,
- const base::SequencedWorkerPool::SequenceToken& sequence_token)
+ base::SequencedTaskRunner* blocking_task_runner)
: profile_(profile),
cache_(cache),
uploader_(uploader),
@@ -776,7 +770,7 @@
hide_hosted_docs_(false),
ui_weak_ptr_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)),
ui_weak_ptr_(ui_weak_ptr_factory_.GetWeakPtr()),
- sequence_token_(sequence_token) {
+ blocking_task_runner_(blocking_task_runner) {
// Should be created from the file browser extension API on UI thread.
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
}
@@ -999,7 +993,7 @@
kAccountMetadataFile);
PostBlockingPoolSequencedTask(
FROM_HERE,
- sequence_token_,
+ blocking_task_runner_,
base::Bind(&SaveFeedOnBlockingPoolForDebugging,
path, base::Passed(&feed_data)));
#endif
@@ -1155,7 +1149,7 @@
std::string* resource_id = new std::string;
PostBlockingPoolSequencedTaskAndReply(
FROM_HERE,
- sequence_token_,
+ blocking_task_runner_,
base::Bind(&GetDocumentResourceIdOnBlockingPool,
local_src_file_path,
resource_id),
@@ -1204,7 +1198,7 @@
std::string* content_type = new std::string;
PostBlockingPoolSequencedTaskAndReply(
FROM_HERE,
- sequence_token_,
+ blocking_task_runner_,
base::Bind(&GetLocalFileInfoOnBlockingPool,
local_file_path,
error,
@@ -1413,7 +1407,7 @@
new base::PlatformFileError(base::PLATFORM_FILE_OK);
PostBlockingPoolSequencedTaskAndReply(
FROM_HERE,
- sequence_token_,
+ blocking_task_runner_,
base::Bind(&CopyLocalFileOnBlockingPool,
local_file_path,
local_dest_file_path,
@@ -1899,7 +1893,7 @@
GDataFileType* file_type = new GDataFileType(REGULAR_FILE);
PostBlockingPoolSequencedTaskAndReply(
FROM_HERE,
- sequence_token_,
+ blocking_task_runner_,
base::Bind(&CreateDocumentJsonFileOnBlockingPool,
cache_->GetCacheDirectoryPath(
GDataCache::CACHE_TYPE_TMP_DOCUMENTS),
@@ -2084,7 +2078,7 @@
bool* has_enough_space = new bool(false);
PostBlockingPoolSequencedTaskAndReply(
FROM_HERE,
- sequence_token_,
+ blocking_task_runner_,
base::Bind(&GDataCache::FreeDiskSpaceIfNeededFor,
base::Unretained(cache_),
file_size,
@@ -2725,7 +2719,7 @@
params->start_changestamp);
PostBlockingPoolSequencedTask(
FROM_HERE,
- sequence_token_,
+ blocking_task_runner_,
base::Bind(&SaveFeedOnBlockingPoolForDebugging,
cache_->GetCacheDirectoryPath(
GDataCache::CACHE_TYPE_META).Append(file_name),
@@ -2870,7 +2864,7 @@
root_->set_serialized_size(serialized_proto->size());
PostBlockingPoolSequencedTask(
FROM_HERE,
- sequence_token_,
+ blocking_task_runner_,
base::Bind(&SaveProtoOnBlockingPool, path,
base::Passed(serialized_proto.Pass())));
}
@@ -3022,7 +3016,7 @@
bool* has_enough_space = new bool(false);
PostBlockingPoolSequencedTaskAndReply(
FROM_HERE,
- sequence_token_,
+ blocking_task_runner_,
base::Bind(&GDataCache::FreeDiskSpaceIfNeededFor,
base::Unretained(cache_),
0,
@@ -3075,7 +3069,7 @@
// report "no space" error.
PostBlockingPoolSequencedTask(
FROM_HERE,
- sequence_token_,
+ blocking_task_runner_,
base::Bind(base::IgnoreResult(&file_util::Delete),
downloaded_file_path,
false /* recursive*/));
@@ -3908,7 +3902,7 @@
bool* get_file_info_result = new bool(false);
PostBlockingPoolSequencedTaskAndReply(
FROM_HERE,
- sequence_token_,
+ blocking_task_runner_,
base::Bind(&GetFileInfoOnBlockingPool,
local_cache_path,
base::Unretained(file_info),
diff --git a/chrome/browser/chromeos/gdata/gdata_file_system.h b/chrome/browser/chromeos/gdata/gdata_file_system.h
index 0805813..9d8ea3f 100644
--- a/chrome/browser/chromeos/gdata/gdata_file_system.h
+++ b/chrome/browser/chromeos/gdata/gdata_file_system.h
@@ -15,13 +15,18 @@
#include "base/observer_list.h"
#include "base/platform_file.h"
#include "base/timer.h"
-#include "base/threading/sequenced_worker_pool.h"
#include "chrome/browser/chromeos/gdata/gdata_cache.h"
#include "chrome/browser/chromeos/gdata/gdata_file_system_interface.h"
#include "chrome/browser/chromeos/gdata/gdata_files.h"
#include "chrome/browser/prefs/pref_change_registrar.h"
#include "content/public/browser/notification_observer.h"
+namespace base {
+
+class SequencedTaskRunner;
+
+} // namespace base
+
namespace gdata {
class DocumentsServiceInterface;
@@ -37,13 +42,12 @@
class GDataFileSystem : public GDataFileSystemInterface,
public content::NotificationObserver {
public:
- GDataFileSystem(
- Profile* profile,
- GDataCache* cache,
- DocumentsServiceInterface* documents_service,
- GDataUploaderInterface* uploader,
- DriveWebAppsRegistryInterface* webapps_registry,
- const base::SequencedWorkerPool::SequenceToken& sequence_token);
+ GDataFileSystem(Profile* profile,
+ GDataCache* cache,
+ DocumentsServiceInterface* documents_service,
+ GDataUploaderInterface* uploader,
+ DriveWebAppsRegistryInterface* webapps_registry,
+ base::SequencedTaskRunner* blocking_task_runner);
virtual ~GDataFileSystem();
// GDataFileSystem overrides.
@@ -851,8 +855,7 @@
ObserverList<Observer> observers_;
- // The token is used to post tasks to the blocking pool in sequence.
- const base::SequencedWorkerPool::SequenceToken sequence_token_;
+ scoped_refptr<base::SequencedTaskRunner> blocking_task_runner_;
};
} // namespace gdata
diff --git a/chrome/browser/chromeos/gdata/gdata_file_system_unittest.cc b/chrome/browser/chromeos/gdata/gdata_file_system_unittest.cc
index ece863af..5d555cd3 100644
--- a/chrome/browser/chromeos/gdata/gdata_file_system_unittest.cc
+++ b/chrome/browser/chromeos/gdata/gdata_file_system_unittest.cc
@@ -169,8 +169,6 @@
GDataFileSystemTest()
: ui_thread_(content::BrowserThread::UI, &message_loop_),
io_thread_(content::BrowserThread::IO),
- sequence_token_(
- content::BrowserThread::GetBlockingPool()->GetSequenceToken()),
cache_(NULL),
file_system_(NULL),
mock_doc_service_(NULL),
@@ -202,10 +200,13 @@
mock_free_disk_space_checker_ = new MockFreeDiskSpaceGetter;
SetFreeDiskSpaceGetterForTesting(mock_free_disk_space_checker_);
+ scoped_refptr<base::SequencedWorkerPool> pool =
+ content::BrowserThread::GetBlockingPool();
+ blocking_task_runner_ =
+ pool->GetSequencedTaskRunner(pool->GetSequenceToken());
+
cache_ = GDataCache::CreateGDataCacheOnUIThread(
- GDataCache::GetCacheRootPath(profile_.get()),
- content::BrowserThread::GetBlockingPool(),
- sequence_token_);
+ GDataCache::GetCacheRootPath(profile_.get()), blocking_task_runner_);
mock_uploader_.reset(new StrictMock<MockGDataUploader>);
mock_webapps_registry_.reset(new StrictMock<MockDriveWebAppsRegistry>);
@@ -216,7 +217,7 @@
mock_doc_service_,
mock_uploader_.get(),
mock_webapps_registry_.get(),
- sequence_token_);
+ blocking_task_runner_);
mock_sync_client_.reset(new StrictMock<MockGDataSyncClient>);
cache_->AddObserver(mock_sync_client_.get());
@@ -419,16 +420,14 @@
const std::string& md5,
GDataCacheEntry* cache_entry) {
bool result = false;
- content::BrowserThread::GetBlockingPool()
- ->GetSequencedTaskRunner(sequence_token_)->PostTask(
- FROM_HERE,
- base::Bind(
- &GDataFileSystemTest::GetCacheEntryFromOriginThreadInternal,
- base::Unretained(this),
- resource_id,
- md5,
- cache_entry,
- &result));
+ blocking_task_runner_->PostTask(
+ FROM_HERE,
+ base::Bind(&GDataFileSystemTest::GetCacheEntryFromOriginThreadInternal,
+ base::Unretained(this),
+ resource_id,
+ md5,
+ cache_entry,
+ &result));
test_util::RunBlockingPoolTask();
return result;
}
@@ -897,7 +896,7 @@
// See also content/browser/browser_thread_imple.cc.
content::TestBrowserThread ui_thread_;
content::TestBrowserThread io_thread_;
- const base::SequencedWorkerPool::SequenceToken sequence_token_;
+ scoped_refptr<base::SequencedTaskRunner> blocking_task_runner_;
scoped_ptr<TestingProfile> profile_;
scoped_refptr<CallbackHelper> callback_helper_;
GDataCache* cache_;
diff --git a/chrome/browser/chromeos/gdata/gdata_sync_client_unittest.cc b/chrome/browser/chromeos/gdata/gdata_sync_client_unittest.cc
index 6f42643b9..9c8ffc8c 100644
--- a/chrome/browser/chromeos/gdata/gdata_sync_client_unittest.cc
+++ b/chrome/browser/chromeos/gdata/gdata_sync_client_unittest.cc
@@ -12,6 +12,7 @@
#include "base/path_service.h"
#include "base/scoped_temp_dir.h"
#include "base/test/test_timeouts.h"
+#include "base/threading/sequenced_worker_pool.h"
#include "chrome/browser/chromeos/cros/cros_library.h"
#include "chrome/browser/chromeos/cros/mock_network_library.h"
#include "chrome/browser/chromeos/gdata/gdata.pb.h"
@@ -55,8 +56,6 @@
GDataSyncClientTest()
: ui_thread_(content::BrowserThread::UI, &message_loop_),
io_thread_(content::BrowserThread::IO),
- sequence_token_(
- content::BrowserThread::GetBlockingPool()->GetSequenceToken()),
profile_(new TestingProfile),
mock_file_system_(new StrictMock<MockGDataFileSystem>),
mock_network_library_(NULL) {
@@ -74,10 +73,11 @@
ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
// Initialize the sync client.
+ scoped_refptr<base::SequencedWorkerPool> pool =
+ content::BrowserThread::GetBlockingPool();
cache_ = GDataCache::CreateGDataCacheOnUIThread(
temp_dir_.path(),
- content::BrowserThread::GetBlockingPool(),
- sequence_token_);
+ pool->GetSequencedTaskRunner(pool->GetSequenceToken()));
sync_client_.reset(new GDataSyncClient(profile_.get(),
mock_file_system_.get(),
cache_));
@@ -277,7 +277,6 @@
MessageLoopForUI message_loop_;
content::TestBrowserThread ui_thread_;
content::TestBrowserThread io_thread_;
- const base::SequencedWorkerPool::SequenceToken sequence_token_;
ScopedTempDir temp_dir_;
scoped_ptr<TestingProfile> profile_;
scoped_ptr<StrictMock<MockGDataFileSystem> > mock_file_system_;
diff --git a/chrome/browser/chromeos/gdata/gdata_system_service.cc b/chrome/browser/chromeos/gdata/gdata_system_service.cc
index 0cbfb5f..cd1f2ff 100644
--- a/chrome/browser/chromeos/gdata/gdata_system_service.cc
+++ b/chrome/browser/chromeos/gdata/gdata_system_service.cc
@@ -27,6 +27,16 @@
using content::BrowserContext;
using content::BrowserThread;
+namespace {
+
+scoped_refptr<base::SequencedTaskRunner> GetTaskRunner(
+ const base::SequencedWorkerPool::SequenceToken& sequence_token) {
+ return BrowserThread::GetBlockingPool()->GetSequencedTaskRunner(
+ sequence_token);
+}
+
+} // nemaspace
+
namespace gdata {
//===================== GDataSystemService ====================================
@@ -35,8 +45,7 @@
sequence_token_(BrowserThread::GetBlockingPool()->GetSequenceToken()),
cache_(GDataCache::CreateGDataCacheOnUIThread(
GDataCache::GetCacheRootPath(profile_),
- BrowserThread::GetBlockingPool(),
- sequence_token_)),
+ GetTaskRunner(sequence_token_))),
documents_service_(new DocumentsService),
uploader_(new GDataUploader(docs_service())),
webapps_registry_(new DriveWebAppsRegistry),
@@ -45,7 +54,7 @@
docs_service(),
uploader(),
webapps_registry(),
- sequence_token_)),
+ GetTaskRunner(sequence_token_))),
download_observer_(new GDataDownloadObserver(uploader(), file_system())),
sync_client_(new GDataSyncClient(profile, file_system(), cache())) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));