Implement periodic cancelable task for task queue

using shared pointer to boolean flag.

Bug: None
Change-Id: I9d7ad7d7b187fefa7daa0247a1379e1ddd7e2b24
Reviewed-on: https://webrtc-review.googlesource.com/96300
Commit-Queue: Danil Chapovalov <danilchap@webrtc.org>
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Reviewed-by: Per Kjellander <perkj@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24511}
diff --git a/rtc_base/BUILD.gn b/rtc_base/BUILD.gn
index 2ef79fa..8275599 100644
--- a/rtc_base/BUILD.gn
+++ b/rtc_base/BUILD.gn
@@ -526,6 +526,26 @@
   ]
 }
 
+rtc_source_set("rtc_cancelable_task") {
+  sources = [
+    "cancelable_periodic_task.h",
+    "cancelable_task_handle.cc",
+    "cancelable_task_handle.h",
+  ]
+  deps = [
+    ":checks",
+    ":logging",
+    ":macromagic",
+    ":ptr_util",
+    ":refcount",
+    ":rtc_task_queue",
+    ":safe_conversions",
+    ":sequenced_task_checker",
+    ":thread_checker",
+    "//third_party/abseil-cpp/absl/memory",
+  ]
+}
+
 if (rtc_enable_libevent) {
   rtc_source_set("rtc_task_queue_libevent") {
     visibility = [ ":rtc_task_queue_impl" ]
@@ -1178,12 +1198,14 @@
     testonly = true
 
     sources = [
+      "cancelable_periodic_task_unittest.cc",
       "task_queue_unittest.cc",
     ]
     deps = [
       ":rtc_base_approved",
       ":rtc_base_tests_main",
       ":rtc_base_tests_utils",
+      ":rtc_cancelable_task",
       ":rtc_task_queue",
       ":rtc_task_queue_for_test",
       "../test:test_support",