Upstream version 7.35.139.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / prefs / chrome_pref_service_factory.cc
index 7163870..b18151f 100644 (file)
@@ -158,12 +158,19 @@ const size_t kTrackedPrefsReportingIDsCount = 14;
 COMPILE_ASSERT(kTrackedPrefsReportingIDsCount >= arraysize(kTrackedPrefs),
                need_to_increment_ids_count);
 
+// Each group enforces a superset of the protection provided by the previous
+// one.
 enum SettingsEnforcementGroup {
   GROUP_NO_ENFORCEMENT,
   // Only enforce settings on profile loads; still allow seeding of unloaded
   // profiles.
   GROUP_ENFORCE_ON_LOAD,
-  GROUP_ENFORCE_ALWAYS
+  // Also disallow seeding of unloaded profiles.
+  GROUP_ENFORCE_ALWAYS,
+  // Also enforce extension settings.
+  GROUP_ENFORCE_ALWAYS_WITH_EXTENSIONS,
+  // The default enforcement group contains all protection features.
+  GROUP_ENFORCE_DEFAULT
 };
 
 SettingsEnforcementGroup GetSettingsEnforcementGroup() {
@@ -191,11 +198,22 @@ SettingsEnforcementGroup GetSettingsEnforcementGroup() {
       GROUP_ENFORCE_ON_LOAD },
     { chrome_prefs::internals::kSettingsEnforcementGroupEnforceAlways,
       GROUP_ENFORCE_ALWAYS },
+    { chrome_prefs::internals::
+          kSettingsEnforcementGroupEnforceAlwaysWithExtensions,
+      GROUP_ENFORCE_ALWAYS_WITH_EXTENSIONS },
   };
 
   // Use the strongest enforcement setting in the absence of a field trial
-  // config.
-  SettingsEnforcementGroup enforcement_group = GROUP_ENFORCE_ALWAYS;
+  // config on Windows. Remember to update the OFFICIAL_BUILD sections of
+  // pref_hash_browsertest.cc and extension_startup_browsertest.cc when updating
+  // the default value below.
+  // TODO(gab): Enforce this on all platforms.
+  SettingsEnforcementGroup enforcement_group =
+#if defined(OS_WIN)
+      GROUP_ENFORCE_DEFAULT;
+#else
+      GROUP_NO_ENFORCEMENT;
+#endif
   bool group_determined_from_trial = false;
   base::FieldTrial* trial =
       base::FieldTrialList::Find(
@@ -222,16 +240,29 @@ SettingsEnforcementGroup GetSettingsEnforcementGroup() {
 // Returns the effective preference tracking configuration.
 std::vector<PrefHashFilter::TrackedPreferenceMetadata>
 GetTrackingConfiguration() {
-  const PrefHashFilter::EnforcementLevel maximum_level =
-      GetSettingsEnforcementGroup() == GROUP_NO_ENFORCEMENT
-          ? PrefHashFilter::NO_ENFORCEMENT
-          : PrefHashFilter::ENFORCE_ON_LOAD;
+  const SettingsEnforcementGroup enforcement_group =
+      GetSettingsEnforcementGroup();
 
   std::vector<PrefHashFilter::TrackedPreferenceMetadata> result;
   for (size_t i = 0; i < arraysize(kTrackedPrefs); ++i) {
     PrefHashFilter::TrackedPreferenceMetadata data = kTrackedPrefs[i];
-    if (data.enforcement_level > maximum_level)
-      data.enforcement_level = maximum_level;
+
+    switch (enforcement_group) {
+      case GROUP_NO_ENFORCEMENT:
+        // Remove enforcement for all tracked preferences.
+        data.enforcement_level = PrefHashFilter::NO_ENFORCEMENT;
+        break;
+      case GROUP_ENFORCE_ON_LOAD:  // Falls through.
+      case GROUP_ENFORCE_ALWAYS:
+        // Keep the default enforcement level for this tracked preference.
+        break;
+      case GROUP_ENFORCE_ALWAYS_WITH_EXTENSIONS:  // Falls through.
+      case GROUP_ENFORCE_DEFAULT:
+        // Specifically enable extension settings enforcement.
+        if (data.name == extensions::pref_names::kExtensions)
+          data.enforcement_level = PrefHashFilter::ENFORCE_ON_LOAD;
+    }
+
     result.push_back(data);
   }
   return result;
@@ -361,6 +392,8 @@ const char kSettingsEnforcementTrialName[] = "SettingsEnforcement";
 const char kSettingsEnforcementGroupNoEnforcement[] = "no_enforcement";
 const char kSettingsEnforcementGroupEnforceOnload[] = "enforce_on_load";
 const char kSettingsEnforcementGroupEnforceAlways[] = "enforce_always";
+const char kSettingsEnforcementGroupEnforceAlwaysWithExtensions[] =
+    "enforce_always_with_extensions";
 
 }  // namespace internals