Switch the Updaters to use COM STA Task Runners

On Windows, the background downloader uses the COM Global Interface
Table, and Chromium requires these instances to have COM explictly
initialized.

Using a COM STA TaskRunner works for this case.

BUG=739461

Change-Id: I28fdc54af5ec34034498d904bba648fc40c3c2f0
Reviewed-on: https://chromium-review.googlesource.com/562537
Reviewed-by: Joshua Pawlicki <[email protected]>
Reviewed-by: Sorin Jianu <[email protected]>
Reviewed-by: Devlin <[email protected]>
Commit-Queue: Robert Liao <[email protected]>
Cr-Commit-Position: refs/heads/master@{#485319}
diff --git a/extensions/browser/updater/update_client_config.cc b/extensions/browser/updater/update_client_config.cc
index fd18447b..8c21593c 100644
--- a/extensions/browser/updater/update_client_config.cc
+++ b/extensions/browser/updater/update_client_config.cc
@@ -6,6 +6,8 @@
 
 #include "base/sequenced_task_runner.h"
 #include "base/task_scheduler/post_task.h"
+#include "base/task_scheduler/task_traits.h"
+#include "build/build_config.h"
 
 namespace extensions {
 
@@ -13,9 +15,16 @@
 
 scoped_refptr<base::SequencedTaskRunner>
 UpdateClientConfig::GetSequencedTaskRunner() const {
-  return base::CreateSequencedTaskRunnerWithTraits(
-      {base::MayBlock(), base::TaskPriority::BACKGROUND,
-       base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN});
+  constexpr base::TaskTraits traits = {
+      base::MayBlock(), base::TaskPriority::BACKGROUND,
+      base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN};
+#if defined(OS_WIN)
+  // Use the COM STA task runner as the Windows background downloader requires
+  // COM initialization.
+  return base::CreateCOMSTATaskRunnerWithTraits(traits);
+#else
+  return base::CreateSequencedTaskRunnerWithTraits(traits);
+#endif
 }
 
 UpdateClientConfig::~UpdateClientConfig() {}