[TaskScheduler]: Implement ExecutionEnvironment.

In order to use TaskSource from TaskTracker instead of Sequence,
the sequence specific data must be encoded in a new struct
ExecutionEnvironment and returned from a virtual method.

Bug: 839091
Change-Id: I64d06c540a1eb9a7f25036ee73e7a34f024f1dbb
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1524523
Commit-Queue: Etienne Pierre-Doray <[email protected]>
Reviewed-by: Gabriel Charette <[email protected]>
Reviewed-by: François Doray <[email protected]>
Cr-Commit-Position: refs/heads/master@{#641989}
diff --git a/base/task/task_scheduler/task_source.h b/base/task/task_scheduler/task_source.h
index b31ecabf..74b5bcd 100644
--- a/base/task/task_scheduler/task_source.h
+++ b/base/task/task_scheduler/task_source.h
@@ -11,15 +11,22 @@
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
 #include "base/optional.h"
+#include "base/sequence_token.h"
 #include "base/task/common/intrusive_heap.h"
 #include "base/task/task_scheduler/scheduler_lock.h"
 #include "base/task/task_scheduler/sequence_sort_key.h"
 #include "base/task/task_scheduler/task.h"
 #include "base/task/task_traits.h"
+#include "base/threading/sequence_local_storage_map.h"
 
 namespace base {
 namespace internal {
 
+struct BASE_EXPORT ExecutionEnvironment {
+  SequenceToken token;
+  SequenceLocalStorageMap* sequence_local_storage;
+};
+
 // A TaskSource is a virtual class that provides a series of Tasks that must be
 // executed.
 //
@@ -107,6 +114,8 @@
   // active TaskSource::Transaction.
   Transaction BeginTransaction();
 
+  virtual ExecutionEnvironment GetExecutionEnvironment() = 0;
+
   // Support for IntrusiveHeap.
   void SetHeapHandle(const HeapHandle& handle);
   void ClearHeapHandle();