[go: nahoru, domu]

blob: f349d3fee85fd7f839bbfef291b3bbe4b7aee33e [file] [log] [blame]
// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#import "ios/chrome/browser/ui/ntp/metrics/new_tab_page_metrics_recorder.h"
#import "base/apple/foundation_util.h"
#import "base/metrics/histogram_functions.h"
#import "base/metrics/histogram_macros.h"
#import "base/metrics/user_metrics.h"
#import "base/metrics/user_metrics_action.h"
#import "base/time/time.h"
#import "ios/chrome/browser/ui/content_suggestions/content_suggestions_constants.h"
#import "ios/chrome/browser/ui/content_suggestions/ntp_home_constant.h"
#import "ios/chrome/browser/ui/ntp/metrics/new_tab_page_metrics_constants.h"
@implementation NewTabPageMetricsRecorder
#pragma mark - Public
- (void)recordTimeSpentInHome:(base::TimeDelta)timeSpent
isStartSurface:(BOOL)startSurface {
if (startSurface) {
UmaHistogramMediumTimes(kStartTimeSpentHistogram, timeSpent);
} else {
UmaHistogramMediumTimes(kNTPTimeSpentHistogram, timeSpent);
}
}
- (void)recordHomeImpression:(IOSNTPImpressionType)impressionType
isStartSurface:(BOOL)startSurface {
if (startSurface) {
UMA_HISTOGRAM_ENUMERATION(kStartImpressionHistogram, impressionType,
IOSNTPImpressionType::kMaxValue);
} else {
UMA_HISTOGRAM_ENUMERATION(kNTPImpressionHistogram, impressionType,
IOSNTPImpressionType::kMaxValue);
}
[self recordImpressionForTileAblation];
}
- (void)recordOverscrollActionForType:(OverscrollActionType)type {
UMA_HISTOGRAM_ENUMERATION(kNTPOverscrollActionHistogram, type);
}
- (void)recordLensTapped {
base::RecordAction(base::UserMetricsAction(kNTPEntrypointTappedAction));
}
- (void)recordVoiceSearchTapped {
base::RecordAction(base::UserMetricsAction(kMostVisitedVoiceSearchAction));
}
- (void)recordFakeTapViewTapped {
base::RecordAction(base::UserMetricsAction(kFakeViewNTPTappedAction));
}
- (void)recordFakeOmniboxTapped {
base::RecordAction(base::UserMetricsAction(kFakeboxNTPTappedAction));
}
- (void)recordIdentityDiscTapped {
base::RecordAction(base::UserMetricsAction(kNTPIdentityDiscTappedAction));
}
#pragma mark - Private
// Records an NTP impression for the tile ablation retention feature.
- (void)recordImpressionForTileAblation {
base::Time now = base::Time::Now();
NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
if ([defaults boolForKey:kDoneWithTileAblationKey]) {
return;
}
// Find/Set first NTP impression ever.
NSDate* firstImpressionRecordedTileAblationExperiment =
base::apple::ObjCCast<NSDate>(
[defaults objectForKey:kFirstImpressionRecordedTileAblationKey]);
int impressions = [defaults integerForKey:kNumberOfNTPImpressionsRecordedKey];
// Record first NTP impression.
if (firstImpressionRecordedTileAblationExperiment == nil) {
[defaults setObject:now.ToNSDate()
forKey:kFirstImpressionRecordedTileAblationKey];
[defaults setObject:now.ToNSDate() forKey:kLastNTPImpressionRecordedKey];
[defaults setInteger:1 forKey:kNumberOfNTPImpressionsRecordedKey];
return;
}
NSDate* lastImpressionTileAblation = base::apple::ObjCCast<NSDate>(
[defaults objectForKey:kLastNTPImpressionRecordedKey]);
// Check when the last impression happened.
if (now - base::Time::FromNSDate(lastImpressionTileAblation) >=
base::Minutes(kTileAblationImpressionThresholdMinutes)) {
// Count impression for MVT/Shortcuts Experiment.
[defaults setObject:now.ToNSDate() forKey:kLastNTPImpressionRecordedKey];
[defaults setInteger:impressions + 1
forKey:kNumberOfNTPImpressionsRecordedKey];
}
}
@end