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));