0

[iOS] Create GLIC Promo Infra Part 2

This CL:
- Registers GLICPromoDisplayHandler in
registerStandardPromoDisplayHandlerPromos
- Implements a basic scene agent to pipe promo manager infra
- Starts scene agent behind kPageActionMenu flag in scene controller

This CL was meant to have incomplete code in order to make the CL size
smaller.

Follow up from: crrev.com/c/6505700

Fixed: 414805017
Change-Id: I82e784748f68ac632bc0b3b2a41ba6ec5faf4133
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6508351
Reviewed-by: Mark Cogan <marq@chromium.org>
Reviewed-by: Robbie Gibson <rkgibson@google.com>
Commit-Queue: Joemer Ramos <joemerramos@google.com>
Cr-Commit-Position: refs/heads/main@{#1456980}
This commit is contained in:
Joemer Ramos
2025-05-07 07:23:11 -07:00
committed by Chromium LUCI CQ
parent c294bb9143
commit ecb39c8cb2
10 changed files with 102 additions and 0 deletions
ios/chrome/browser

@ -9,12 +9,17 @@ source_set("coordinator") {
"glic_consent_mediator.h",
"glic_consent_mediator.mm",
"glic_consent_mediator_delegate.h",
"glic_promo_scene_agent.h",
"glic_promo_scene_agent.mm",
]
deps = [
"//base",
"//components/prefs:prefs",
"//ios/chrome/browser/intelligence/glic/ui",
"//ios/chrome/browser/promos_manager/model",
"//ios/chrome/browser/promos_manager/model:constants",
"//ios/chrome/browser/shared/coordinator/chrome_coordinator",
"//ios/chrome/browser/shared/coordinator/scene:observing_scene_agent",
"//ios/chrome/browser/shared/model/prefs:pref_names",
"//ios/chrome/browser/shared/model/profile",
]

@ -0,0 +1,3 @@
include_rules = [
"+ios/chrome/browser/promos_manager/model",
]

@ -0,0 +1,22 @@
// Copyright 2025 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef IOS_CHROME_BROWSER_INTELLIGENCE_GLIC_COORDINATOR_GLIC_PROMO_SCENE_AGENT_H_
#define IOS_CHROME_BROWSER_INTELLIGENCE_GLIC_COORDINATOR_GLIC_PROMO_SCENE_AGENT_H_
#import <Foundation/Foundation.h>
#import "ios/chrome/browser/shared/coordinator/scene/observing_scene_state_agent.h"
class PromosManager;
// A scene agent that registers the GLIC promo in the promo manager on
// SceneActivationLevelForegroundActive.
@interface GLICPromoSceneAgent : ObservingSceneAgent
- (instancetype)initWithPromosManager:(PromosManager*)promosManager;
@end
#endif // IOS_CHROME_BROWSER_INTELLIGENCE_GLIC_COORDINATOR_GLIC_PROMO_SCENE_AGENT_H_

@ -0,0 +1,50 @@
// Copyright 2025 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/intelligence/glic/coordinator/glic_promo_scene_agent.h"
#import "base/memory/raw_ptr.h"
#import "ios/chrome/browser/promos_manager/model/constants.h"
#import "ios/chrome/browser/promos_manager/model/promos_manager.h"
@implementation GLICPromoSceneAgent {
raw_ptr<PromosManager> _promosManager;
}
- (instancetype)initWithPromosManager:(PromosManager*)promosManager {
self = [super init];
if (self) {
_promosManager = promosManager;
}
return self;
}
#pragma mark - SceneStateObserver
- (void)sceneState:(SceneState*)sceneState
transitionedToActivationLevel:(SceneActivationLevel)level {
switch (level) {
case SceneActivationLevelForegroundActive: {
[self registerPromoForSingleDisplay];
break;
}
case SceneActivationLevelUnattached:
case SceneActivationLevelBackground:
case SceneActivationLevelDisconnected:
case SceneActivationLevelForegroundInactive: {
break;
}
}
}
#pragma mark - Private
// Register the What's New promo for a single display in the promo manager.
- (void)registerPromoForSingleDisplay {
DCHECK(_promosManager);
_promosManager->RegisterPromoForSingleDisplay(
promos_manager::Promo::GLICPromo);
}
@end

@ -102,6 +102,7 @@ source_set("ui_bundled") {
"//ios/chrome/browser/docking_promo/ui",
"//ios/chrome/browser/first_run/ui_bundled:features",
"//ios/chrome/browser/first_run/ui_bundled/welcome_back/ui",
"//ios/chrome/browser/intelligence/features",
"//ios/chrome/browser/intelligence/glic/ui",
"//ios/chrome/browser/post_restore_signin/ui_bundled",
"//ios/chrome/browser/promos_manager/model:constants",

@ -5,6 +5,8 @@ include_rules = [
"+ios/chrome/browser/default_promo/ui_bundled",
"+ios/chrome/browser/docking_promo/ui/docking_promo_display_handler.h",
"+ios/chrome/browser/feature_engagement/model/tracker_factory.h",
"+ios/chrome/browser/intelligence/features",
"+ios/chrome/browser/intelligence/glic/ui",
"+ios/chrome/browser/post_restore_signin/ui_bundled",
"+ios/chrome/browser/signin/model",
"+ios/chrome/browser/sync/model/sync_service_factory.h",

@ -37,6 +37,8 @@
#import "ios/chrome/browser/feature_engagement/model/tracker_factory.h"
#import "ios/chrome/browser/first_run/ui_bundled/features.h"
#import "ios/chrome/browser/first_run/ui_bundled/welcome_back/ui/welcome_back_display_handler.h"
#import "ios/chrome/browser/intelligence/features/features.h"
#import "ios/chrome/browser/intelligence/glic/ui/glic_promo_display_handler.h"
#import "ios/chrome/browser/post_restore_signin/ui_bundled/post_restore_signin_provider.h"
#import "ios/chrome/browser/promos_manager/model/features.h"
#import "ios/chrome/browser/promos_manager/model/promo_config.h"
@ -618,6 +620,12 @@
_displayHandlerPromos[promos_manager::Promo::WelcomeBack] =
[[WelcomeBackDisplayHandler alloc] init];
}
// GLIC promo handler.
if (IsPageActionMenuEnabled()) {
_displayHandlerPromos[promos_manager::Promo::GLICPromo] =
[[GLICPromoDisplayHandler alloc] init];
}
}
- (void)registerStandardPromoViewProviderPromos {

@ -131,6 +131,8 @@ source_set("scene") {
"//ios/chrome/browser/incognito_interstitial/ui_bundled:coordinator",
"//ios/chrome/browser/incognito_reauth/ui_bundled:incognito_reauth_scene_agent",
"//ios/chrome/browser/infobars/model",
"//ios/chrome/browser/intelligence/features",
"//ios/chrome/browser/intelligence/glic/coordinator",
"//ios/chrome/browser/intents/model:user_activity_browser_agent",
"//ios/chrome/browser/lens/ui_bundled:lens_entrypoint",
"//ios/chrome/browser/lens_overlay/model",

@ -17,6 +17,8 @@ include_rules = [
"+ios/chrome/browser/incognito_interstitial/ui_bundled",
"+ios/chrome/browser/incognito_reauth/ui_bundled/incognito_reauth_scene_agent.h",
"+ios/chrome/browser/infobars/model",
"+ios/chrome/browser/intelligence/features",
"+ios/chrome/browser/intelligence/glic/coordinator",
"+ios/chrome/browser/intents/model",
"+ios/chrome/browser/lens/ui_bundled",
"+ios/chrome/browser/lens_overlay/coordinator/lens_overlay_availability.h",

@ -93,6 +93,8 @@
#import "ios/chrome/browser/incognito_interstitial/ui_bundled/incognito_interstitial_coordinator_delegate.h"
#import "ios/chrome/browser/incognito_reauth/ui_bundled/incognito_reauth_scene_agent.h"
#import "ios/chrome/browser/infobars/model/infobar_manager_impl.h"
#import "ios/chrome/browser/intelligence/features/features.h"
#import "ios/chrome/browser/intelligence/glic/coordinator/glic_promo_scene_agent.h"
#import "ios/chrome/browser/intents/model/user_activity_browser_agent.h"
#import "ios/chrome/browser/lens/ui_bundled/lens_entrypoint.h"
#import "ios/chrome/browser/lens_overlay/coordinator/lens_overlay_availability.h"
@ -1356,6 +1358,11 @@ SystemIdentityManager::IteratorResult IdentitiesOnDevice(
syncService:SyncServiceFactory::GetForProfile(profile)
prefService:prefService]];
}
if (IsPageActionMenuEnabled()) {
[sceneState addAgent:[[GLICPromoSceneAgent alloc]
initWithPromosManager:promosManager]];
}
}
// Determines the mode (normal or incognito) the initial UI should be in.