[ios] Hide Setting kMetricsReportingWifiOnly behind Feature Flag

UMA over Cellular feature removes kMetricsReportingWifiOnly local pref.
Tests will fail if retrieving or setting occurs.

Bug: 931289
Change-Id: Ibda70e02dde35f50426f6501210130a8c2834be0
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1574837
Commit-Queue: Chris Lu <thegreenfrog@chromium.org>
Reviewed-by: Sergio Collazos <sczs@chromium.org>
Cr-Commit-Position: refs/heads/master@{#652469}
diff --git a/ios/chrome/browser/ui/settings/google_services/BUILD.gn b/ios/chrome/browser/ui/settings/google_services/BUILD.gn
index 1a1cc0b..0884a20 100644
--- a/ios/chrome/browser/ui/settings/google_services/BUILD.gn
+++ b/ios/chrome/browser/ui/settings/google_services/BUILD.gn
@@ -46,6 +46,7 @@
     "//components/prefs",
     "//components/strings",
     "//components/sync",
+    "//components/ukm/ios:features",
     "//components/unified_consent",
     "//ios/chrome/app/strings",
     "//ios/chrome/browser",
diff --git a/ios/chrome/browser/ui/settings/google_services/google_services_settings_mediator.mm b/ios/chrome/browser/ui/settings/google_services/google_services_settings_mediator.mm
index 2db8a92a..db8d5c98 100644
--- a/ios/chrome/browser/ui/settings/google_services/google_services_settings_mediator.mm
+++ b/ios/chrome/browser/ui/settings/google_services/google_services_settings_mediator.mm
@@ -9,6 +9,7 @@
 #include "components/metrics/metrics_pref_names.h"
 #include "components/prefs/pref_service.h"
 #include "components/sync/driver/sync_service.h"
+#include "components/ukm/ios/features.h"
 #include "components/unified_consent/pref_names.h"
 #include "ios/chrome/browser/pref_names.h"
 #import "ios/chrome/browser/signin/authentication_service.h"
@@ -163,9 +164,13 @@
         initWithPrefService:localPrefService
                    prefName:metrics::prefs::kMetricsReportingEnabled];
     _sendDataUsagePreference.observer = self;
-    _sendDataUsageWifiOnlyPreference = [[PrefBackedBoolean alloc]
-        initWithPrefService:localPrefService
-                   prefName:prefs::kMetricsReportingWifiOnly];
+    if (!base::FeatureList::IsEnabled(kUmaCellular)) {
+      // When flag is not, kMetricsReportingWifiOnly pref has not been
+      // initialized, so don't create a PrefBackedBoolean for it.
+      _sendDataUsageWifiOnlyPreference = [[PrefBackedBoolean alloc]
+          initWithPrefService:localPrefService
+                     prefName:prefs::kMetricsReportingWifiOnly];
+    }
     _anonymizedDataCollectionPreference = [[PrefBackedBoolean alloc]
         initWithPrefService:userPrefService
                    prefName:unified_consent::prefs::
@@ -630,7 +635,9 @@
       break;
     case ImproveChromeItemType:
       self.sendDataUsagePreference.value = value;
-      if (value) {
+      // Don't set value if sendDataUsageWifiOnlyPreference has not been
+      // allocated.
+      if (value && self.sendDataUsageWifiOnlyPreference) {
         // Should be wifi only, until https://crbug.com/872101 is fixed.
         self.sendDataUsageWifiOnlyPreference.value = YES;
       }