Add LearningSession to BrowserContext

This CL adds a singleton LearningSession to BrowserContext. This
provides a single location from which to get LearningTaskControllers,
which will allow aggregating observations accross multiple frames.

Bug: 994831
Change-Id: Ibeaf47a09ae7408d0afab9bc113a98e9f1532199
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1758625
Reviewed-by: Matt Falkenhagen <[email protected]>
Reviewed-by: Frank Liberato <[email protected]>
Commit-Queue: Thomas Guilbert <[email protected]>
Cr-Commit-Position: refs/heads/master@{#688733}
diff --git a/content/browser/browser_context.cc b/content/browser/browser_context.cc
index c1fee6e..9e5b738 100644
--- a/content/browser/browser_context.cc
+++ b/content/browser/browser_context.cc
@@ -60,6 +60,7 @@
 #include "media/base/media_switches.h"
 #include "media/capabilities/in_memory_video_decode_stats_db_impl.h"
 #include "media/capabilities/video_decode_stats_db_impl.h"
+#include "media/learning/impl/learning_session_impl.h"
 #include "media/mojo/services/video_decode_perf_history.h"
 #include "mojo/public/cpp/bindings/remote.h"
 #include "net/cookies/cookie_store.h"
@@ -173,6 +174,7 @@
 const char kServiceInstanceGroup[] = "service-instance-group";
 const char kStoragePartitionMapKeyName[] = "content_storage_partition_map";
 const char kVideoDecodePerfHistoryId[] = "video-decode-perf-history";
+const char kLearningSession[] = "learning-session";
 
 #if defined(OS_CHROMEOS)
 const char kMountPointsKey[] = "mount_points";
@@ -811,6 +813,24 @@
   return decode_history;
 }
 
+media::learning::LearningSession* BrowserContext::GetLearningSession() {
+  media::learning::LearningSession* learning_session =
+      static_cast<media::learning::LearningSession*>(
+          GetUserData(kLearningSession));
+
+  if (!learning_session) {
+    auto new_learning_session =
+        std::make_unique<media::learning::LearningSessionImpl>(
+            base::SequencedTaskRunnerHandle::Get());
+
+    learning_session = new_learning_session.get();
+
+    SetUserData(kLearningSession, std::move(new_learning_session));
+  }
+
+  return learning_session;
+}
+
 download::InProgressDownloadManager*
 BrowserContext::RetriveInProgressDownloadManager() {
   return nullptr;