Add CCTToSDialogEnabled policy to skip ToS for CCT/PWA.

Bug: 1106981
Change-Id: I534a03608058d3136dde4a1854735ed327f0a51d
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2321769
Commit-Queue: Sky Malice <[email protected]>
Reviewed-by: Owen Min <[email protected]>
Reviewed-by: Yusuf Ozuysal <[email protected]>
Reviewed-by: Dominic Battré <[email protected]>
Reviewed-by: Wenyu Fu <[email protected]>
Cr-Commit-Position: refs/heads/master@{#794008}
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
index 84f0a6b..19f1c708 100644
--- a/chrome/browser/BUILD.gn
+++ b/chrome/browser/BUILD.gn
@@ -2711,6 +2711,8 @@
       "enterprise/util/android_enterprise_info.h",
       "file_select_helper_contacts_android.cc",
       "file_select_helper_contacts_android.h",
+      "first_run/android/first_run_prefs.cc",
+      "first_run/android/first_run_prefs.h",
       "first_run/android/first_run_utils.cc",
       "flags/android/chrome_feature_list.cc",
       "flags/android/chrome_feature_list.h",
diff --git a/chrome/browser/first_run/android/first_run_prefs.cc b/chrome/browser/first_run/android/first_run_prefs.cc
new file mode 100644
index 0000000..3287072
--- /dev/null
+++ b/chrome/browser/first_run/android/first_run_prefs.cc
@@ -0,0 +1,12 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/first_run/android/first_run_prefs.h"
+
+namespace first_run {
+
+// Whether the ToS should be shown during the first-run for CCTs/PWAs.
+const char kCCTToSDialogEnabled[] = "policy.cct_tos_dialog_enabled";
+
+}  // namespace first_run
diff --git a/chrome/browser/first_run/android/first_run_prefs.h b/chrome/browser/first_run/android/first_run_prefs.h
new file mode 100644
index 0000000..fa87914a
--- /dev/null
+++ b/chrome/browser/first_run/android/first_run_prefs.h
@@ -0,0 +1,14 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_FIRST_RUN_ANDROID_FIRST_RUN_PREFS_H_
+#define CHROME_BROWSER_FIRST_RUN_ANDROID_FIRST_RUN_PREFS_H_
+
+namespace first_run {
+
+extern const char kCCTToSDialogEnabled[];
+
+}  // namespace first_run
+
+#endif  // CHROME_BROWSER_FIRST_RUN_ANDROID_FIRST_RUN_PREFS_H_
diff --git a/chrome/browser/first_run/android/first_run_utils.cc b/chrome/browser/first_run/android/first_run_utils.cc
index 8a03e7f..1649376 100644
--- a/chrome/browser/first_run/android/first_run_utils.cc
+++ b/chrome/browser/first_run/android/first_run_utils.cc
@@ -6,6 +6,8 @@
 
 #include "chrome/android/chrome_jni_headers/FirstRunUtils_jni.h"
 #include "chrome/browser/browser_process.h"
+#include "chrome/browser/first_run/android/first_run_prefs.h"
+#include "components/policy/core/common/policy_pref_names.h"
 #include "components/prefs/pref_service.h"
 #include "components/web_resource/web_resource_pref_names.h"
 
@@ -16,3 +18,8 @@
 static void JNI_FirstRunUtils_SetEulaAccepted(JNIEnv* env) {
   g_browser_process->local_state()->SetBoolean(prefs::kEulaAccepted, true);
 }
+
+static jboolean JNI_FirstRunUtils_GetCctTosDialogEnabled(JNIEnv* env) {
+  return g_browser_process->local_state()->GetBoolean(
+      first_run::kCCTToSDialogEnabled);
+}
diff --git a/chrome/browser/policy/configuration_policy_handler_list_factory.cc b/chrome/browser/policy/configuration_policy_handler_list_factory.cc
index 250e8e7..8b8efc2 100644
--- a/chrome/browser/policy/configuration_policy_handler_list_factory.cc
+++ b/chrome/browser/policy/configuration_policy_handler_list_factory.cc
@@ -95,6 +95,7 @@
 #include "ppapi/buildflags/buildflags.h"
 
 #if defined(OS_ANDROID)
+#include "chrome/browser/first_run/android/first_run_prefs.h"
 #include "chrome/browser/search/contextual_search_policy_handler_android.h"
 #else  // defined(OS_ANDROID)
 #include "chrome/browser/download/default_download_dir_policy_handler.h"
@@ -1334,6 +1335,12 @@
   { key::kInsecureFormsWarningsEnabled,
     prefs::kMixedFormsWarningsEnabled,
     base::Value::Type::BOOLEAN },
+
+#if defined(OS_ANDROID)
+  { key::kCCTToSDialogEnabled,
+    first_run::kCCTToSDialogEnabled,
+    base::Value::Type::BOOLEAN },
+#endif  // defined(OS_ANDROID)
 };
 // clang-format on
 
diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browser_prefs.cc
index 0dab3c2..9ea5f09 100644
--- a/chrome/browser/prefs/browser_prefs.cc
+++ b/chrome/browser/prefs/browser_prefs.cc
@@ -218,6 +218,7 @@
 #include "chrome/browser/android/oom_intervention/oom_intervention_decider.h"
 #include "chrome/browser/android/preferences/browser_prefs_android.h"
 #include "chrome/browser/android/usage_stats/usage_stats_bridge.h"
+#include "chrome/browser/first_run/android/first_run_prefs.h"
 #include "chrome/browser/media/android/cdm/media_drm_origin_id_manager.h"
 #include "chrome/browser/ssl/known_interception_disclosure_infobar_delegate.h"
 #include "components/cdm/browser/media_drm_storage_impl.h"
@@ -746,7 +747,9 @@
 
 #if defined(OS_ANDROID)
   ::android::RegisterPrefs(registry);
-#else
+
+  registry->RegisterBooleanPref(first_run::kCCTToSDialogEnabled, true);
+#else   // defined(OS_ANDROID)
   enterprise_connectors::RegisterLocalStatePrefs(registry);
   enterprise_reporting::RegisterLocalStatePrefs(registry);
   gcm::RegisterPrefs(registry);
@@ -759,7 +762,7 @@
   UpgradeDetector::RegisterPrefs(registry);
 
   registry->RegisterBooleanPref(kNtpActivateHideShortcutsFieldTrial, false);
-#endif  // !defined(OS_ANDROID)
+#endif  // defined(OS_ANDROID)
 
 #if defined(OS_CHROMEOS)
   arc::prefs::RegisterLocalStatePrefs(registry);