Replace usage of single-threaded SequencedWorkerPool with a non-joinable base::Thread in WebCrypto.

BUG=646443, 623700

Review-Url: https://codereview.chromium.org/2338893003
Cr-Commit-Position: refs/heads/master@{#418458}
diff --git a/components/webcrypto/webcrypto_impl.cc b/components/webcrypto/webcrypto_impl.cc
index ca12ee5..cac891e 100644
--- a/components/webcrypto/webcrypto_impl.cc
+++ b/components/webcrypto/webcrypto_impl.cc
@@ -13,11 +13,11 @@
 #include "base/lazy_instance.h"
 #include "base/location.h"
 #include "base/logging.h"
+#include "base/macros.h"
 #include "base/single_thread_task_runner.h"
 #include "base/task_runner.h"
-#include "base/threading/sequenced_worker_pool.h"
+#include "base/threading/thread.h"
 #include "base/threading/thread_task_runner_handle.h"
-#include "base/threading/worker_pool.h"
 #include "components/webcrypto/algorithm_dispatch.h"
 #include "components/webcrypto/crypto_data.h"
 #include "components/webcrypto/generate_key_result.h"
@@ -38,9 +38,9 @@
 // WebCrypto operations can be slow. For instance generating an RSA key can
 // take seconds.
 //
-// The strategy used here is to run a sequenced worker pool for all WebCrypto
-// operations (except structured cloning). This same pool is also used by
-// requests started from Blink Web Workers.
+// The strategy used here is to run a worker pool for all WebCrypto operations
+// (except structured cloning). This same pool is also used by requests started
+// from Blink Web Workers.
 //
 // A few notes to keep in mind:
 //
@@ -71,21 +71,24 @@
 //   be deleted while running in the crypto worker pool.
 class CryptoThreadPool {
  public:
-  CryptoThreadPool()
-      : worker_pool_(
-            new base::SequencedWorkerPool(1,
-                                          "WebCrypto",
-                                          base::TaskPriority::USER_BLOCKING)),
-        task_runner_(worker_pool_->GetSequencedTaskRunnerWithShutdownBehavior(
-            worker_pool_->GetSequenceToken(),
-            base::SequencedWorkerPool::CONTINUE_ON_SHUTDOWN)) {}
+  CryptoThreadPool() : worker_thread_("WebCrypto") {
+    base::Thread::Options options;
+    options.joinable = false;
+    worker_thread_.StartWithOptions(options);
+  }
 
   static bool PostTask(const tracked_objects::Location& from_here,
                        const base::Closure& task);
 
  private:
-  scoped_refptr<base::SequencedWorkerPool> worker_pool_;
-  scoped_refptr<base::SequencedTaskRunner> task_runner_;
+  // TODO(gab): the pool is currently using a single non-joinable thread to
+  // mimic the old behavior of using a CONTINUE_ON_SHUTDOWN SequencedTaskRunner
+  // on a single-threaded SequencedWorkerPool, but we'd like to consider using
+  // the TaskScheduler here and allowing multiple threads (SEQUENCED or even
+  // PARALLEL ExecutionMode: http://crbug.com/623700).
+  base::Thread worker_thread_;
+
+  DISALLOW_COPY_AND_ASSIGN(CryptoThreadPool);
 };
 
 base::LazyInstance<CryptoThreadPool>::Leaky crypto_thread_pool =
@@ -93,7 +96,8 @@
 
 bool CryptoThreadPool::PostTask(const tracked_objects::Location& from_here,
                                 const base::Closure& task) {
-  return crypto_thread_pool.Get().task_runner_->PostTask(from_here, task);
+  return crypto_thread_pool.Get().worker_thread_.task_runner()->PostTask(
+      from_here, task);
 }
 
 void CompleteWithThreadPoolError(blink::WebCryptoResult* result) {