weblayer: wires up some media types for weblayer

This wires up widevine and the platform key-systems for weblayer.

BUG=1049426
TEST=covered by wpt

Change-Id: I8bda35fbcd14d9fc36805375d1627170c7054018
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2111768
Reviewed-by: Xiaohan Wang <[email protected]>
Reviewed-by: John Abd-El-Malek <[email protected]>
Commit-Queue: Scott Violet <[email protected]>
Cr-Commit-Position: refs/heads/master@{#752153}
diff --git a/weblayer/BUILD.gn b/weblayer/BUILD.gn
index 3cf3884..633a73b 100644
--- a/weblayer/BUILD.gn
+++ b/weblayer/BUILD.gn
@@ -218,6 +218,7 @@
     "//components/autofill/core/browser",
     "//components/base32",
     "//components/captive_portal/core:buildflags",
+    "//components/cdm/renderer",
     "//components/content_settings/core/browser",
     "//components/crash/content/app",
     "//components/crash/content/browser",
@@ -346,6 +347,7 @@
       "//android_webview:generate_aw_strings",
       "//components/android_system_error_page",
       "//components/autofill/android:provider",
+      "//components/cdm/browser",
       "//components/crash/android:crash_android",
       "//components/crash/android:crashpad_main",
       "//components/embedder_support/android:context_menu",
diff --git a/weblayer/browser/DEPS b/weblayer/browser/DEPS
index 016c740..91a938bb 100644
--- a/weblayer/browser/DEPS
+++ b/weblayer/browser/DEPS
@@ -7,6 +7,7 @@
   "+components/base32",
   "+components/browser_ui",
   "+components/captive_portal",
+  "+components/cdm/browser",
   "+components/content_settings/core/common",
   "+components/crash/content/browser",
   "+components/crash/core/common",
diff --git a/weblayer/browser/content_browser_client_impl.cc b/weblayer/browser/content_browser_client_impl.cc
index d6c850ee..d223e8e 100644
--- a/weblayer/browser/content_browser_client_impl.cc
+++ b/weblayer/browser/content_browser_client_impl.cc
@@ -30,6 +30,7 @@
 #include "content/public/browser/navigation_handle.h"
 #include "content/public/browser/navigation_throttle.h"
 #include "content/public/browser/network_service_instance.h"
+#include "content/public/browser/render_process_host.h"
 #include "content/public/common/content_switches.h"
 #include "content/public/common/service_names.mojom.h"
 #include "content/public/common/url_constants.h"
@@ -70,6 +71,7 @@
 #include "base/android/path_utils.h"
 #include "base/bind.h"
 #include "base/task/post_task.h"
+#include "components/cdm/browser/cdm_message_filter_android.h"
 #include "components/crash/content/browser/crash_handler_host_linux.h"
 #include "components/navigation_interception/intercept_navigation_delegate.h"
 #include "components/spellcheck/browser/spell_check_host_impl.h"  // nogncheck
@@ -461,6 +463,15 @@
   PopulateWebLayerFrameBinders(render_frame_host, map);
 }
 
+void ContentBrowserClientImpl::RenderProcessWillLaunch(
+    content::RenderProcessHost* host) {
+#if defined(OS_ANDROID)
+  host->AddFilter(new cdm::CdmMessageFilterAndroid(
+      /*can_persist_data*/ true,
+      /*force_to_support_secure_codecs*/ false));
+#endif
+}
+
 void ContentBrowserClientImpl::CreateFeatureListAndFieldTrials() {
   feature_list_creator_->CreateFeatureListAndFieldTrials();
 }
diff --git a/weblayer/browser/content_browser_client_impl.h b/weblayer/browser/content_browser_client_impl.h
index 5d8be9cc..254e272 100644
--- a/weblayer/browser/content_browser_client_impl.h
+++ b/weblayer/browser/content_browser_client_impl.h
@@ -86,6 +86,7 @@
       content::RenderFrameHost* render_frame_host,
       service_manager::BinderMapWithContext<content::RenderFrameHost*>* map)
       override;
+  void RenderProcessWillLaunch(content::RenderProcessHost* host) override;
 
 #if defined(OS_LINUX) || defined(OS_ANDROID)
   void GetAdditionalMappedFilesForChildProcess(
@@ -97,10 +98,13 @@
   void CreateFeatureListAndFieldTrials();
 
  private:
+#if defined(OS_ANDROID)
+  SafeBrowsingService* GetSafeBrowsingService();
+#endif
+
   MainParams* params_;
 
 #if defined(OS_ANDROID)
-  SafeBrowsingService* GetSafeBrowsingService();
   std::unique_ptr<SafeBrowsingService> safe_browsing_service_;
 #endif
 
diff --git a/weblayer/renderer/DEPS b/weblayer/renderer/DEPS
index 8ec7ef2..1af6794 100644
--- a/weblayer/renderer/DEPS
+++ b/weblayer/renderer/DEPS
@@ -1,6 +1,7 @@
 include_rules = [
   "+components/android_system_error_page",
   "+components/autofill/content/renderer",
+  "+components/cdm/renderer",
   "+components/safe_browsing/content/common",
   "+components/safe_browsing/content/renderer",
   "+components/safe_browsing/core/common",
diff --git a/weblayer/renderer/content_renderer_client_impl.cc b/weblayer/renderer/content_renderer_client_impl.cc
index 831e661..d12867d 100644
--- a/weblayer/renderer/content_renderer_client_impl.cc
+++ b/weblayer/renderer/content_renderer_client_impl.cc
@@ -16,6 +16,7 @@
 
 #if defined(OS_ANDROID)
 #include "components/android_system_error_page/error_page_populator.h"
+#include "components/cdm/renderer/android_key_systems.h"
 #include "components/spellcheck/renderer/spellcheck.h"           // nogncheck
 #include "components/spellcheck/renderer/spellcheck_provider.h"  // nogncheck
 #include "content/public/renderer/render_thread.h"
@@ -120,4 +121,12 @@
   return nullptr;
 }
 
+void ContentRendererClientImpl::AddSupportedKeySystems(
+    std::vector<std::unique_ptr<::media::KeySystemProperties>>* key_systems) {
+#if defined(OS_ANDROID)
+  cdm::AddAndroidWidevine(key_systems);
+  cdm::AddAndroidPlatformKeySystems(key_systems);
+#endif
+}
+
 }  // namespace weblayer
diff --git a/weblayer/renderer/content_renderer_client_impl.h b/weblayer/renderer/content_renderer_client_impl.h
index 8f5a650..b666e23 100644
--- a/weblayer/renderer/content_renderer_client_impl.h
+++ b/weblayer/renderer/content_renderer_client_impl.h
@@ -34,6 +34,9 @@
   std::unique_ptr<content::URLLoaderThrottleProvider>
   CreateURLLoaderThrottleProvider(
       content::URLLoaderThrottleProviderType provider_type) override;
+  void AddSupportedKeySystems(
+      std::vector<std::unique_ptr<::media::KeySystemProperties>>* key_systems)
+      override;
 
  private:
 #if defined(OS_ANDROID)