Supervised user permission approvals: Differentiate between legacy SUs and child accounts

BUG=461261

Review URL: https://codereview.chromium.org/1477133003

Cr-Commit-Position: refs/heads/master@{#362387}
diff --git a/chrome/browser/extensions/extension_service_sync_unittest.cc b/chrome/browser/extensions/extension_service_sync_unittest.cc
index 3bd4e75..7f229cc 100644
--- a/chrome/browser/extensions/extension_service_sync_unittest.cc
+++ b/chrome/browser/extensions/extension_service_sync_unittest.cc
@@ -2,6 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include <map>
 #include <string>
 
 #include "base/bind.h"
@@ -25,6 +26,7 @@
 #include "chrome/test/base/testing_profile.h"
 #include "components/browser_sync/browser/profile_sync_service.h"
 #include "components/crx_file/id_util.h"
+#include "components/variations/variations_associated_data.h"
 #include "extensions/browser/app_sorting.h"
 #include "extensions/browser/extension_prefs.h"
 #include "extensions/browser/extension_registry.h"
@@ -1423,6 +1425,9 @@
 class ExtensionServiceTestSupervised : public ExtensionServiceSyncTest,
                                        public SupervisedUserService::Delegate {
  public:
+  ExtensionServiceTestSupervised()
+      : field_trial_list_(new base::MockEntropyProvider()) {}
+
   void SetUp() override {
     ExtensionServiceSyncTest::SetUp();
 
@@ -1440,6 +1445,17 @@
   }
 
  protected:
+  void InitNeedCustodianApprovalFieldTrial(bool enabled) {
+    // Group name doesn't matter.
+    base::FieldTrialList::CreateFieldTrial(
+        "SupervisedUserExtensionPermissionIncrease", "group");
+    std::map<std::string, std::string> params;
+    params["legacy_supervised_user"] = enabled ? "true" : "false";
+    params["child_account"] = enabled ? "true" : "false";
+    variations::AssociateVariationParams(
+        "SupervisedUserExtensionPermissionIncrease", "group", params);
+  }
+
   void InitServices(bool profile_is_supervised) {
     ExtensionServiceInitParams params = CreateDefaultInitParams();
     params.profile_is_supervised = profile_is_supervised;
@@ -1497,6 +1513,8 @@
   base::FilePath pem_path() const {
     return base_path().AppendASCII("permissions.pem");
   }
+
+  base::FieldTrialList field_trial_list_;
 };
 
 class MockPermissionRequestCreator : public PermissionRequestCreator {
@@ -1581,10 +1599,7 @@
 }
 
 TEST_F(ExtensionServiceTestSupervised, UpdateWithPermissionIncreaseNoApproval) {
-  // Explicitly disable the "need custodian approval" field trial.
-  base::FieldTrialList field_trial_list(new base::MockEntropyProvider());
-  base::FieldTrialList::CreateFieldTrial(
-      "SupervisedUserExtensionPermissionIncrease", "");
+  InitNeedCustodianApprovalFieldTrial(false);
 
   InitServices(true /* profile_is_supervised */);
 
@@ -1606,10 +1621,7 @@
 
 TEST_F(ExtensionServiceTestSupervised,
        UpdateWithPermissionIncreaseApprovalOldVersion) {
-  // Explicitly enable the "need custodian approval" field trial.
-  base::FieldTrialList field_trial_list(new base::MockEntropyProvider());
-  base::FieldTrialList::CreateFieldTrial(
-      "SupervisedUserExtensionPermissionIncrease", "NeedCustodianApproval");
+  InitNeedCustodianApprovalFieldTrial(true);
 
   InitServices(true /* profile_is_supervised */);
 
@@ -1659,10 +1671,7 @@
 
 TEST_F(ExtensionServiceTestSupervised,
        UpdateWithPermissionIncreaseApprovalMatchingVersion) {
-  // Explicitly enable the "need custodian approval" field trial.
-  base::FieldTrialList field_trial_list(new base::MockEntropyProvider());
-  base::FieldTrialList::CreateFieldTrial(
-      "SupervisedUserExtensionPermissionIncrease", "NeedCustodianApproval");
+  InitNeedCustodianApprovalFieldTrial(true);
 
   InitServices(true /* profile_is_supervised */);
 
@@ -1700,10 +1709,7 @@
 
 TEST_F(ExtensionServiceTestSupervised,
        UpdateWithPermissionIncreaseApprovalNewVersion) {
-  // Explicitly enable the "need custodian approval" field trial.
-  base::FieldTrialList field_trial_list(new base::MockEntropyProvider());
-  base::FieldTrialList::CreateFieldTrial(
-      "SupervisedUserExtensionPermissionIncrease", "NeedCustodianApproval");
+  InitNeedCustodianApprovalFieldTrial(true);
 
   InitServices(true /* profile_is_supervised */);