Provide default implementation of QuicheThread.

This uses STL thread class, which is not allowed inside google3 or Chromium (since those have their own thread abstractions), but is the best we can get in an open-source project otherwise.

PiperOrigin-RevId: 449014471
diff --git a/build/source_list.bzl b/build/source_list.bzl
index 59d5cd7..2a2bb10 100644
--- a/build/source_list.bzl
+++ b/build/source_list.bzl
@@ -1400,6 +1400,7 @@
 ]
 default_platform_impl_test_support_hdrs = [
     "common/platform/default/quiche_platform_impl/quiche_test_loopback_impl.h",
+    "common/platform/default/quiche_platform_impl/quiche_thread_impl.h",
 ]
 default_platform_impl_test_support_srcs = [
     "common/platform/default/quiche_platform_impl/quiche_test_loopback_impl.cc",
diff --git a/build/source_list.gni b/build/source_list.gni
index 0246d0d..9f1ee66 100644
--- a/build/source_list.gni
+++ b/build/source_list.gni
@@ -1400,6 +1400,7 @@
 ]
 default_platform_impl_test_support_hdrs = [
     "src/quiche/common/platform/default/quiche_platform_impl/quiche_test_loopback_impl.h",
+    "src/quiche/common/platform/default/quiche_platform_impl/quiche_thread_impl.h",
 ]
 default_platform_impl_test_support_srcs = [
     "src/quiche/common/platform/default/quiche_platform_impl/quiche_test_loopback_impl.cc",
diff --git a/build/source_list.json b/build/source_list.json
index 9df338c..72b7055 100644
--- a/build/source_list.json
+++ b/build/source_list.json
@@ -1398,7 +1398,8 @@
     "quiche/common/platform/default/quiche_platform_impl/quiche_file_utils_impl.cc"
   ],
   "default_platform_impl_test_support_hdrs": [
-    "quiche/common/platform/default/quiche_platform_impl/quiche_test_loopback_impl.h"
+    "quiche/common/platform/default/quiche_platform_impl/quiche_test_loopback_impl.h",
+    "quiche/common/platform/default/quiche_platform_impl/quiche_thread_impl.h"
   ],
   "default_platform_impl_test_support_srcs": [
     "quiche/common/platform/default/quiche_platform_impl/quiche_test_loopback_impl.cc"
diff --git a/quiche/common/platform/default/quiche_platform_impl/quiche_thread_impl.h b/quiche/common/platform/default/quiche_platform_impl/quiche_thread_impl.h
new file mode 100644
index 0000000..7b5748c
--- /dev/null
+++ b/quiche/common/platform/default/quiche_platform_impl/quiche_thread_impl.h
@@ -0,0 +1,26 @@
+#ifndef QUICHE_COMMON_PLATFORM_DEFAULT_QUICHE_PLATFORM_IMPL_QUICHE_THREAD_IMPL_H_
+#define QUICHE_COMMON_PLATFORM_DEFAULT_QUICHE_PLATFORM_IMPL_QUICHE_THREAD_IMPL_H_
+
+#include <string>
+#include <thread>  // NOLINT: only used outside of google3
+
+#include "absl/types/optional.h"
+#include "quiche/common/platform/api/quiche_export.h"
+
+class QUICHE_NO_EXPORT QuicheThreadImpl {
+ public:
+  QuicheThreadImpl(const std::string&) {}
+  virtual ~QuicheThreadImpl() {}
+
+  virtual void Run() = 0;
+
+  void Start() {
+    thread_.emplace([this]() { Run(); });
+  }
+  void Join() { thread_->join(); }
+
+ private:
+  absl::optional<std::thread> thread_;
+};
+
+#endif  // QUICHE_COMMON_PLATFORM_DEFAULT_QUICHE_PLATFORM_IMPL_QUICHE_THREAD_IMPL_H_