[iOS] Move remaining NTP metrics into NTPMetricsRecorder
Moves NTPHeader actions to the metrics recorder, as well as one action
from the NTP coordinator. Some very minor refactoring included.
Bug: 1431193
Change-Id: Id801f13e90c4ab5824af8688a849721b01cb7273
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4455176
Reviewed-by: Sergio Collazos <sczs@chromium.org>
Code-Coverage: Findit <findit-for-me@appspot.gserviceaccount.com>
Commit-Queue: Adam Arcaro <adamta@google.com>
Cr-Commit-Position: refs/heads/main@{#1133341}
diff --git a/ios/chrome/browser/ui/ntp/metrics/new_tab_page_metrics_recorder.h b/ios/chrome/browser/ui/ntp/metrics/new_tab_page_metrics_recorder.h
index d640f69..07489a7 100644
--- a/ios/chrome/browser/ui/ntp/metrics/new_tab_page_metrics_recorder.h
+++ b/ios/chrome/browser/ui/ntp/metrics/new_tab_page_metrics_recorder.h
@@ -41,6 +41,22 @@
// Logs a metric for an overscroll action on the NTP.
- (void)recordOverscrollActionForType:(OverscrollActionType)type;
+// Logs a metric for the lens button being tapped in the fake omnibox.
+- (void)recordLensTapped;
+
+// Logs a metric for the voice search button being tapped in the NTP header.
+- (void)recordVoiceSearchTapped;
+
+// Logs a metric when the hidden tap view on top of the NTP is tapped to focus
+// the omnibox.
+- (void)recordFakeTapViewTapped;
+
+// Logs a metric for the fake omnibox being tapped in the NTP.
+- (void)recordFakeOmniboxTapped;
+
+// Logs a metric for the identity disc being tapped in the NTP.
+- (void)recordIdentityDiscTapped;
+
@end
#endif // IOS_CHROME_BROWSER_UI_NTP_METRICS_NEW_TAB_PAGE_METRICS_RECORDER_H_
diff --git a/ios/chrome/browser/ui/ntp/metrics/new_tab_page_metrics_recorder.mm b/ios/chrome/browser/ui/ntp/metrics/new_tab_page_metrics_recorder.mm
index 750491c..e4c8b028 100644
--- a/ios/chrome/browser/ui/ntp/metrics/new_tab_page_metrics_recorder.mm
+++ b/ios/chrome/browser/ui/ntp/metrics/new_tab_page_metrics_recorder.mm
@@ -35,6 +35,28 @@
UMA_HISTOGRAM_ENUMERATION("IOS.NTP.OverscrollAction", type);
}
+- (void)recordLensTapped {
+ base::RecordAction(
+ base::UserMetricsAction("Mobile.LensIOS.NewTabPageEntrypointTapped"));
+}
+
+- (void)recordVoiceSearchTapped {
+ base::RecordAction(
+ base::UserMetricsAction("MobileNTPMostVisitedVoiceSearch"));
+}
+
+- (void)recordFakeTapViewTapped {
+ base::RecordAction(base::UserMetricsAction("MobileFakeViewNTPTapped"));
+}
+
+- (void)recordFakeOmniboxTapped {
+ base::RecordAction(base::UserMetricsAction("MobileFakeboxNTPTapped"));
+}
+
+- (void)recordIdentityDiscTapped {
+ base::RecordAction(base::UserMetricsAction("MobileNTPIdentityDiscTapped"));
+}
+
#pragma mark - Private
// Records an NTP impression for the tile ablation retention feature.
diff --git a/ios/chrome/browser/ui/ntp/new_tab_page_coordinator.mm b/ios/chrome/browser/ui/ntp/new_tab_page_coordinator.mm
index fc64f58b..4e88376 100644
--- a/ios/chrome/browser/ui/ntp/new_tab_page_coordinator.mm
+++ b/ios/chrome/browser/ui/ntp/new_tab_page_coordinator.mm
@@ -350,7 +350,7 @@
if ([self isFeedHeaderVisible]) {
[self configureFeedAndHeader];
}
- [self configureheaderViewController];
+ [self configureHeaderViewController];
[self configureContentSuggestionsCoordinator];
[self configureNTPMediator];
[self configureFeedMetricsRecorder];
@@ -667,9 +667,10 @@
}
// Configures `self.headerViewController`.
-- (void)configureheaderViewController {
+- (void)configureHeaderViewController {
DCHECK(self.headerViewController);
DCHECK(self.NTPMediator);
+ DCHECK(self.NTPMetricsRecorder);
self.headerViewController.isGoogleDefaultSearchEngine =
[self isGoogleDefaultSearchEngine];
@@ -685,6 +686,7 @@
LayoutGuideCenterForBrowser(self.browser);
self.headerViewController.toolbarDelegate = self.toolbarDelegate;
self.headerViewController.baseViewController = self.baseViewController;
+ self.headerViewController.NTPMetricsRecorder = self.NTPMetricsRecorder;
}
// Configures `self.contentSuggestionsCoordiantor`.
@@ -797,6 +799,7 @@
}
- (void)fakeboxTapped {
+ // TODO(crbug.com/1431193): Move these logs to the `NTPMetricsRecorder`.
if (NewTabPageTabHelper::FromWebState(self.webState)
->ShouldShowStartSurface()) {
UMA_HISTOGRAM_ENUMERATION("IOS.ContentSuggestions.ActionOnStartSurface",
@@ -809,7 +812,7 @@
}
- (void)identityDiscWasTapped {
- base::RecordAction(base::UserMetricsAction("MobileNTPIdentityDiscTapped"));
+ [self.NTPMetricsRecorder recordIdentityDiscTapped];
id<ApplicationCommands> handler = HandlerForProtocol(
self.browser->GetCommandDispatcher(), ApplicationCommands);
BOOL isSignedIn =
diff --git a/ios/chrome/browser/ui/ntp/new_tab_page_header_view_controller.h b/ios/chrome/browser/ui/ntp/new_tab_page_header_view_controller.h
index 53774307..1daa6aa 100644
--- a/ios/chrome/browser/ui/ntp/new_tab_page_header_view_controller.h
+++ b/ios/chrome/browser/ui/ntp/new_tab_page_header_view_controller.h
@@ -18,6 +18,7 @@
@protocol FakeboxFocuser;
@protocol NewTabPageControllerDelegate;
@protocol NewTabPageHeaderCommands;
+@class NewTabPageMetricsRecorder;
@protocol OmniboxCommands;
@protocol LensCommands;
@class LayoutGuideCenter;
@@ -59,6 +60,14 @@
// The layout guide center for the current scene.
@property(nonatomic, strong) LayoutGuideCenter* layoutGuideCenter;
+// Metrics recorder for the new tab page.
+@property(nonatomic, weak) NewTabPageMetricsRecorder* NTPMetricsRecorder;
+
+// Identity disc shown in this ViewController.
+// TODO(crbug.com/1170995): Remove once the Feed header properly supports
+// ContentSuggestions.
+@property(nonatomic, strong, readonly) UIButton* identityDiscButton;
+
// Animation to expand this header in response to focusing the omnibox to match
// the fake omnibox with the omnibox's.
- (void)expandHeaderForFocus;
@@ -101,11 +110,6 @@
// Update any dynamic constraints.
- (void)updateConstraints;
-// Identity disc shown in this ViewController.
-// TODO(crbug.com/1170995): Remove once the Feed header properly supports
-// ContentSuggestions.
-@property(nonatomic, strong, readonly) UIButton* identityDiscButton;
-
@end
#endif // IOS_CHROME_BROWSER_UI_NTP_NEW_TAB_PAGE_HEADER_VIEW_CONTROLLER_H_
diff --git a/ios/chrome/browser/ui/ntp/new_tab_page_header_view_controller.mm b/ios/chrome/browser/ui/ntp/new_tab_page_header_view_controller.mm
index 088322a..9c00c38 100644
--- a/ios/chrome/browser/ui/ntp/new_tab_page_header_view_controller.mm
+++ b/ios/chrome/browser/ui/ntp/new_tab_page_header_view_controller.mm
@@ -31,6 +31,7 @@
#import "ios/chrome/browser/ui/content_suggestions/ntp_home_metrics.h"
#import "ios/chrome/browser/ui/lens/lens_entrypoint.h"
#import "ios/chrome/browser/ui/ntp/logo_vendor.h"
+#import "ios/chrome/browser/ui/ntp/metrics/new_tab_page_metrics_recorder.h"
#import "ios/chrome/browser/ui/ntp/new_tab_page_controller_delegate.h"
#import "ios/chrome/browser/ui/ntp/new_tab_page_header_commands.h"
#import "ios/chrome/browser/ui/ntp/new_tab_page_header_constants.h"
@@ -437,8 +438,7 @@
}
- (void)openLens {
- base::RecordAction(
- UserMetricsAction("Mobile.LensIOS.NewTabPageEntrypointTapped"));
+ [self.NTPMetricsRecorder recordLensTapped];
OpenLensInputSelectionCommand* command = [[OpenLensInputSelectionCommand
alloc]
initWithEntryPoint:LensEntrypoint::NewTabPage
@@ -449,7 +449,7 @@
- (void)loadVoiceSearch:(id)sender {
DCHECK(self.voiceSearchIsEnabled);
- base::RecordAction(UserMetricsAction("MobileNTPMostVisitedVoiceSearch"));
+ [self.NTPMetricsRecorder recordVoiceSearchTapped];
UIView* voiceSearchButton = base::mac::ObjCCastStrict<UIView>(sender);
[self.layoutGuideCenter referenceView:voiceSearchButton
underName:kVoiceSearchButtonGuide];
@@ -465,12 +465,12 @@
}
- (void)fakeTapViewTapped {
- base::RecordAction(base::UserMetricsAction("MobileFakeViewNTPTapped"));
+ [self.NTPMetricsRecorder recordFakeTapViewTapped];
[self.commandHandler fakeboxTapped];
}
- (void)fakeboxTapped {
- base::RecordAction(base::UserMetricsAction("MobileFakeboxNTPTapped"));
+ [self.NTPMetricsRecorder recordFakeOmniboxTapped];
[self.commandHandler fakeboxTapped];
}