Commit 0238418b authored by Jérôme Lebel's avatar Jérôme Lebel Committed by Commit Bot

Simplyfing SigninPromoViewMediator API

Removing 3 properties for metrics, all related to the access point
value.

Bug: 661794
Change-Id: I4f97831e1bf775d9c660d6658e6dfa3bf857260d
Reviewed-on: https://chromium-review.googlesource.com/575137Reviewed-by: default avatarSylvain Defresne <sdefresne@chromium.org>
Commit-Queue: Jérôme Lebel <jlebel@chromium.org>
Cr-Commit-Position: refs/heads/master@{#487452}
parent 8fdeaa38
...@@ -17,14 +17,6 @@ ...@@ -17,14 +17,6 @@
namespace ios { namespace ios {
class ChromeBrowserState; class ChromeBrowserState;
// Enums to choose which histograms is used to record the user actions.
enum class SigninPromoViewHistograms {
// No histograms.
None,
// Histograms: MobileSignInPromo.BookmarkManager.*.
Bookmarks,
};
// Enums for the sign-in promo view state. // Enums for the sign-in promo view state.
enum class SigninPromoViewState { enum class SigninPromoViewState {
// None of the buttons has been used yet. // None of the buttons has been used yet.
...@@ -53,17 +45,6 @@ enum class SigninPromoViewState { ...@@ -53,17 +45,6 @@ enum class SigninPromoViewState {
// contains nil. // contains nil.
@property(nonatomic, readonly, strong) ChromeIdentity* defaultIdentity; @property(nonatomic, readonly, strong) ChromeIdentity* defaultIdentity;
// Access point used to send user action metrics.
@property(nonatomic) signin_metrics::AccessPoint accessPoint;
// Preference key to count how many time the sign-in promo view is seen. The
// value should point to static storage.
@property(nonatomic) const char* displayedCountPreferenceKey;
// Preference key, set to true when the sign-in promo view is seen too much. The
// value should point to static storage.
@property(nonatomic) const char* alreadySeenSigninViewPreferenceKey;
// Histograms to use for the user actions.
@property(nonatomic) ios::SigninPromoViewHistograms histograms;
// Sign-in promo view state. // Sign-in promo view state.
@property(nonatomic) ios::SigninPromoViewState signinPromoViewState; @property(nonatomic) ios::SigninPromoViewState signinPromoViewState;
...@@ -71,7 +52,11 @@ enum class SigninPromoViewState { ...@@ -71,7 +52,11 @@ enum class SigninPromoViewState {
- (instancetype)init NS_UNAVAILABLE; - (instancetype)init NS_UNAVAILABLE;
// Initialises with browser state. // Initialises with browser state.
// * |browserState| is the current browser state.
// * |accessPoint| only ACCESS_POINT_SETTINGS, ACCESS_POINT_BOOKMARK_MANAGER,
// ACCESS_POINT_RECENT_TABS, ACCESS_POINT_TAB_SWITCHER are supported.
- (instancetype)initWithBrowserState:(ios::ChromeBrowserState*)browserState - (instancetype)initWithBrowserState:(ios::ChromeBrowserState*)browserState
accessPoint:(signin_metrics::AccessPoint)accessPoint
NS_DESIGNATED_INITIALIZER; NS_DESIGNATED_INITIALIZER;
- (SigninPromoViewConfigurator*)createConfigurator; - (SigninPromoViewConfigurator*)createConfigurator;
......
...@@ -34,6 +34,20 @@ ...@@ -34,6 +34,20 @@
namespace { namespace {
const int kAutomaticSigninPromoViewDismissCount = 20; const int kAutomaticSigninPromoViewDismissCount = 20;
#if DCHECK_IS_ON()
bool IsSupportedAccessPoint(signin_metrics::AccessPoint access_point) {
switch (access_point) {
case signin_metrics::AccessPoint::ACCESS_POINT_SETTINGS:
case signin_metrics::AccessPoint::ACCESS_POINT_BOOKMARK_MANAGER:
case signin_metrics::AccessPoint::ACCESS_POINT_RECENT_TABS:
case signin_metrics::AccessPoint::ACCESS_POINT_TAB_SWITCHER:
return true;
default:
return false;
}
}
#endif // DCHECK_IS_ON()
void RecordSigninUserActionForAccessPoint( void RecordSigninUserActionForAccessPoint(
signin_metrics::AccessPoint access_point) { signin_metrics::AccessPoint access_point) {
switch (access_point) { switch (access_point) {
...@@ -121,6 +135,56 @@ void RecordSigninNewAccountUserActionForAccessPoint( ...@@ -121,6 +135,56 @@ void RecordSigninNewAccountUserActionForAccessPoint(
break; break;
} }
} }
void RecordImpressionsTilSigninButtonsHistogramForAccessPoint(
signin_metrics::AccessPoint access_point,
int displayed_count) {
DCHECK_EQ(signin_metrics::AccessPoint::ACCESS_POINT_BOOKMARK_MANAGER,
access_point);
UMA_HISTOGRAM_COUNTS_100(
"MobileSignInPromo.BookmarkManager.ImpressionsTilSigninButtons",
displayed_count);
}
void RecordImpressionsTilDismissHistogramForAccessPoint(
signin_metrics::AccessPoint access_point,
int displayed_count) {
DCHECK_EQ(signin_metrics::AccessPoint::ACCESS_POINT_BOOKMARK_MANAGER,
access_point);
UMA_HISTOGRAM_COUNTS_100(
"MobileSignInPromo.BookmarkManager.ImpressionsTilDismiss",
displayed_count);
}
void RecordImpressionsTilXButtonHistogramForAccessPoint(
signin_metrics::AccessPoint access_point,
int displayed_count) {
DCHECK_EQ(signin_metrics::AccessPoint::ACCESS_POINT_BOOKMARK_MANAGER,
access_point);
UMA_HISTOGRAM_COUNTS_100(
"MobileSignInPromo.BookmarkManager.ImpressionsTilXButton",
displayed_count);
}
const char* DisplayedCountPreferenceKey(
signin_metrics::AccessPoint access_point) {
switch (access_point) {
case signin_metrics::AccessPoint::ACCESS_POINT_BOOKMARK_MANAGER:
return prefs::kIosBookmarkSigninPromoDisplayedCount;
default:
return nullptr;
}
}
const char* AlreadySeenSigninViewPreferenceKey(
signin_metrics::AccessPoint access_point) {
switch (access_point) {
case signin_metrics::AccessPoint::ACCESS_POINT_BOOKMARK_MANAGER:
return prefs::kIosBookmarkPromoAlreadySeen;
default:
return nullptr;
}
}
} // namespace } // namespace
@interface SigninPromoViewMediator ()<ChromeIdentityServiceObserver, @interface SigninPromoViewMediator ()<ChromeIdentityServiceObserver,
...@@ -129,6 +193,7 @@ void RecordSigninNewAccountUserActionForAccessPoint( ...@@ -129,6 +193,7 @@ void RecordSigninNewAccountUserActionForAccessPoint(
@implementation SigninPromoViewMediator { @implementation SigninPromoViewMediator {
ios::ChromeBrowserState* _browserState; ios::ChromeBrowserState* _browserState;
signin_metrics::AccessPoint _accessPoint;
std::unique_ptr<ChromeIdentityServiceObserverBridge> _identityServiceObserver; std::unique_ptr<ChromeIdentityServiceObserverBridge> _identityServiceObserver;
std::unique_ptr<ChromeBrowserProviderObserverBridge> _browserProviderObserver; std::unique_ptr<ChromeBrowserProviderObserverBridge> _browserProviderObserver;
UIImage* _identityAvatar; UIImage* _identityAvatar;
...@@ -137,16 +202,14 @@ void RecordSigninNewAccountUserActionForAccessPoint( ...@@ -137,16 +202,14 @@ void RecordSigninNewAccountUserActionForAccessPoint(
@synthesize consumer = _consumer; @synthesize consumer = _consumer;
@synthesize defaultIdentity = _defaultIdentity; @synthesize defaultIdentity = _defaultIdentity;
@synthesize accessPoint = _accessPoint;
@synthesize displayedCountPreferenceKey = _displayedCountPreferenceKey;
@synthesize alreadySeenSigninViewPreferenceKey =
_alreadySeenSigninViewPreferenceKey;
@synthesize histograms = _histograms;
@synthesize signinPromoViewState = _signinPromoViewState; @synthesize signinPromoViewState = _signinPromoViewState;
- (instancetype)initWithBrowserState:(ios::ChromeBrowserState*)browserState { - (instancetype)initWithBrowserState:(ios::ChromeBrowserState*)browserState
accessPoint:(signin_metrics::AccessPoint)accessPoint {
self = [super init]; self = [super init];
if (self) { if (self) {
DCHECK(IsSupportedAccessPoint(accessPoint));
_accessPoint = accessPoint;
_browserState = browserState; _browserState = browserState;
NSArray* identities = ios::GetChromeBrowserProvider() NSArray* identities = ios::GetChromeBrowserProvider()
->GetChromeIdentityService() ->GetChromeIdentityService()
...@@ -215,19 +278,14 @@ void RecordSigninNewAccountUserActionForAccessPoint( ...@@ -215,19 +278,14 @@ void RecordSigninNewAccountUserActionForAccessPoint(
DCHECK(![self isInvalidOrClosed] || DCHECK(![self isInvalidOrClosed] ||
_signinPromoViewState != ios::SigninPromoViewState::Unused); _signinPromoViewState != ios::SigninPromoViewState::Unused);
_signinPromoViewState = ios::SigninPromoViewState::SigninStarted; _signinPromoViewState = ios::SigninPromoViewState::SigninStarted;
if (!_displayedCountPreferenceKey) const char* displayedCountPreferenceKey =
DisplayedCountPreferenceKey(_accessPoint);
if (!displayedCountPreferenceKey)
return; return;
PrefService* prefs = _browserState->GetPrefs(); PrefService* prefs = _browserState->GetPrefs();
int displayedCount = prefs->GetInteger(_displayedCountPreferenceKey); int displayedCount = prefs->GetInteger(displayedCountPreferenceKey);
switch (_histograms) { RecordImpressionsTilSigninButtonsHistogramForAccessPoint(_accessPoint,
case ios::SigninPromoViewHistograms::Bookmarks: displayedCount);
UMA_HISTOGRAM_COUNTS_100(
"MobileSignInPromo.BookmarkManager.ImpressionsTilSigninButtons",
displayedCount);
break;
case ios::SigninPromoViewHistograms::None:
break;
}
} }
- (void)signinPromoViewVisible { - (void)signinPromoViewVisible {
...@@ -235,15 +293,19 @@ void RecordSigninNewAccountUserActionForAccessPoint( ...@@ -235,15 +293,19 @@ void RecordSigninNewAccountUserActionForAccessPoint(
if (_isSigninPromoViewVisible) if (_isSigninPromoViewVisible)
return; return;
_isSigninPromoViewVisible = YES; _isSigninPromoViewVisible = YES;
if (!_displayedCountPreferenceKey) const char* displayedCountPreferenceKey =
DisplayedCountPreferenceKey(_accessPoint);
if (!displayedCountPreferenceKey)
return; return;
PrefService* prefs = _browserState->GetPrefs(); PrefService* prefs = _browserState->GetPrefs();
int displayedCount = prefs->GetInteger(_displayedCountPreferenceKey); int displayedCount = prefs->GetInteger(displayedCountPreferenceKey);
++displayedCount; ++displayedCount;
prefs->SetInteger(_displayedCountPreferenceKey, displayedCount); prefs->SetInteger(displayedCountPreferenceKey, displayedCount);
const char* alreadySeenSigninViewPreferenceKey =
AlreadySeenSigninViewPreferenceKey(_accessPoint);
if (displayedCount >= kAutomaticSigninPromoViewDismissCount && if (displayedCount >= kAutomaticSigninPromoViewDismissCount &&
_alreadySeenSigninViewPreferenceKey) { alreadySeenSigninViewPreferenceKey) {
prefs->SetBoolean(prefs::kIosBookmarkPromoAlreadySeen, true); prefs->SetBoolean(alreadySeenSigninViewPreferenceKey, true);
} }
} }
...@@ -255,19 +317,14 @@ void RecordSigninNewAccountUserActionForAccessPoint( ...@@ -255,19 +317,14 @@ void RecordSigninNewAccountUserActionForAccessPoint(
- (void)signinPromoViewClosed { - (void)signinPromoViewClosed {
DCHECK(_isSigninPromoViewVisible && ![self isInvalidOrClosed]); DCHECK(_isSigninPromoViewVisible && ![self isInvalidOrClosed]);
_signinPromoViewState = ios::SigninPromoViewState::Closed; _signinPromoViewState = ios::SigninPromoViewState::Closed;
if (!_displayedCountPreferenceKey) const char* displayedCountPreferenceKey =
DisplayedCountPreferenceKey(_accessPoint);
if (!displayedCountPreferenceKey)
return; return;
PrefService* prefs = _browserState->GetPrefs(); PrefService* prefs = _browserState->GetPrefs();
int displayedCount = prefs->GetInteger(_displayedCountPreferenceKey); int displayedCount = prefs->GetInteger(displayedCountPreferenceKey);
switch (_histograms) { RecordImpressionsTilXButtonHistogramForAccessPoint(_accessPoint,
case ios::SigninPromoViewHistograms::Bookmarks: displayedCount);
UMA_HISTOGRAM_COUNTS_100(
"MobileSignInPromo.BookmarkManager.ImpressionsTilXButton",
displayedCount);
break;
case ios::SigninPromoViewHistograms::None:
break;
}
} }
- (void)signinPromoViewRemoved { - (void)signinPromoViewRemoved {
...@@ -276,7 +333,9 @@ void RecordSigninNewAccountUserActionForAccessPoint( ...@@ -276,7 +333,9 @@ void RecordSigninNewAccountUserActionForAccessPoint(
_signinPromoViewState = ios::SigninPromoViewState::Invalid; _signinPromoViewState = ios::SigninPromoViewState::Invalid;
// If the sign-in promo view has been used at least once, it should not be // If the sign-in promo view has been used at least once, it should not be
// counted as dismissed (even if the sign-in has been canceled). // counted as dismissed (even if the sign-in has been canceled).
if (!_displayedCountPreferenceKey || !wasUnused) const char* displayedCountPreferenceKey =
DisplayedCountPreferenceKey(_accessPoint);
if (!displayedCountPreferenceKey || !wasUnused)
return; return;
// If the sign-in view is removed when the user is authenticated, then the // If the sign-in view is removed when the user is authenticated, then the
// sign-in has been done by another view, and this mediator cannot be counted // sign-in has been done by another view, and this mediator cannot be counted
...@@ -286,16 +345,9 @@ void RecordSigninNewAccountUserActionForAccessPoint( ...@@ -286,16 +345,9 @@ void RecordSigninNewAccountUserActionForAccessPoint(
if (authService->IsAuthenticated()) if (authService->IsAuthenticated())
return; return;
PrefService* prefs = _browserState->GetPrefs(); PrefService* prefs = _browserState->GetPrefs();
int displayedCount = prefs->GetInteger(_displayedCountPreferenceKey); int displayedCount = prefs->GetInteger(displayedCountPreferenceKey);
switch (_histograms) { RecordImpressionsTilDismissHistogramForAccessPoint(_accessPoint,
case ios::SigninPromoViewHistograms::Bookmarks: displayedCount);
UMA_HISTOGRAM_COUNTS_100(
"MobileSignInPromo.BookmarkManager.ImpressionsTilDismiss",
displayedCount);
break;
case ios::SigninPromoViewHistograms::None:
break;
}
} }
- (void)signinCallback { - (void)signinCallback {
......
...@@ -26,7 +26,10 @@ class SigninPromoViewMediatorTest : public PlatformTest { ...@@ -26,7 +26,10 @@ class SigninPromoViewMediatorTest : public PlatformTest {
protected: protected:
void SetUp() override { void SetUp() override {
consumer_ = OCMStrictProtocolMock(@protocol(SigninPromoViewConsumer)); consumer_ = OCMStrictProtocolMock(@protocol(SigninPromoViewConsumer));
mediator_ = [[SigninPromoViewMediator alloc] initWithBrowserState:nil]; mediator_ = [[SigninPromoViewMediator alloc]
initWithBrowserState:nil
accessPoint:signin_metrics::AccessPoint::
ACCESS_POINT_SETTINGS];
mediator_.consumer = consumer_; mediator_.consumer = consumer_;
signin_promo_view_ = OCMStrictClassMock([SigninPromoView class]); signin_promo_view_ = OCMStrictClassMock([SigninPromoView class]);
......
...@@ -354,17 +354,11 @@ CGFloat minFaviconSizePt = 16; ...@@ -354,17 +354,11 @@ CGFloat minFaviconSizePt = 16;
[_signinPromoViewMediator signinPromoViewRemoved]; [_signinPromoViewMediator signinPromoViewRemoved];
_signinPromoViewMediator = nil; _signinPromoViewMediator = nil;
} else { } else {
_signinPromoViewMediator = _signinPromoViewMediator = [[SigninPromoViewMediator alloc]
[[SigninPromoViewMediator alloc] initWithBrowserState:_browserState]; initWithBrowserState:_browserState
accessPoint:signin_metrics::AccessPoint::
ACCESS_POINT_BOOKMARK_MANAGER];
_signinPromoViewMediator.consumer = self; _signinPromoViewMediator.consumer = self;
_signinPromoViewMediator.displayedCountPreferenceKey =
prefs::kIosBookmarkSigninPromoDisplayedCount;
_signinPromoViewMediator.alreadySeenSigninViewPreferenceKey =
prefs::kIosBookmarkPromoAlreadySeen;
_signinPromoViewMediator.histograms =
ios::SigninPromoViewHistograms::Bookmarks;
_signinPromoViewMediator.accessPoint =
signin_metrics::AccessPoint::ACCESS_POINT_BOOKMARK_MANAGER;
[_signinPromoViewMediator signinPromoViewVisible]; [_signinPromoViewMediator signinPromoViewVisible];
} }
} }
......
...@@ -826,10 +826,10 @@ enum CellType { ...@@ -826,10 +826,10 @@ enum CellType {
case CELL_OTHER_DEVICES_SIGNIN_PROMO: { case CELL_OTHER_DEVICES_SIGNIN_PROMO: {
if (!_signinPromoViewMediator) { if (!_signinPromoViewMediator) {
_signinPromoViewMediator = [[SigninPromoViewMediator alloc] _signinPromoViewMediator = [[SigninPromoViewMediator alloc]
initWithBrowserState:_browserState]; initWithBrowserState:_browserState
accessPoint:signin_metrics::AccessPoint::
ACCESS_POINT_RECENT_TABS];
_signinPromoViewMediator.consumer = self; _signinPromoViewMediator.consumer = self;
_signinPromoViewMediator.accessPoint =
signin_metrics::AccessPoint::ACCESS_POINT_RECENT_TABS;
} }
contentViewTopMargin = kSigninPromoViewTopMargin; contentViewTopMargin = kSigninPromoViewTopMargin;
SigninPromoView* signinPromoView = SigninPromoView* signinPromoView =
......
...@@ -341,7 +341,9 @@ void SigninObserverBridge::GoogleSignedOut(const std::string& account_id, ...@@ -341,7 +341,9 @@ void SigninObserverBridge::GoogleSignedOut(const std::string& account_id,
displayedCount < kAutomaticSigninPromoViewDismissCount) { displayedCount < kAutomaticSigninPromoViewDismissCount) {
if (!_signinPromoViewMediator) { if (!_signinPromoViewMediator) {
_signinPromoViewMediator = [[SigninPromoViewMediator alloc] _signinPromoViewMediator = [[SigninPromoViewMediator alloc]
initWithBrowserState:_browserState]; initWithBrowserState:_browserState
accessPoint:signin_metrics::AccessPoint::
ACCESS_POINT_SETTINGS];
_signinPromoViewMediator.consumer = self; _signinPromoViewMediator.consumer = self;
prefs->SetInteger(prefs::kIosSettingsSigninPromoDisplayedCount, prefs->SetInteger(prefs::kIosSettingsSigninPromoDisplayedCount,
displayedCount + 1); displayedCount + 1);
......
...@@ -242,10 +242,10 @@ const CGFloat kSubtitleMinimunLineHeight = 24.0; ...@@ -242,10 +242,10 @@ const CGFloat kSubtitleMinimunLineHeight = 24.0;
constraintEqualToAnchor:self.centerYAnchor constraintEqualToAnchor:self.centerYAnchor
constant:kContainerOriginYOffset] constant:kContainerOriginYOffset]
.active = YES; .active = YES;
_signinPromoViewMediator = _signinPromoViewMediator = [[SigninPromoViewMediator alloc]
[[SigninPromoViewMediator alloc] initWithBrowserState:_browserState]; initWithBrowserState:_browserState
_signinPromoViewMediator.accessPoint = accessPoint:signin_metrics::AccessPoint::
signin_metrics::AccessPoint::ACCESS_POINT_TAB_SWITCHER; ACCESS_POINT_TAB_SWITCHER];
_signinPromoView.delegate = _signinPromoViewMediator; _signinPromoView.delegate = _signinPromoViewMediator;
_signinPromoViewMediator.consumer = self; _signinPromoViewMediator.consumer = self;
[[_signinPromoViewMediator createConfigurator] [[_signinPromoViewMediator createConfigurator]
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment