Skip to content

Commit

Permalink
[iOS] Lazy create follow service in FollowBrowserAgent
Browse files Browse the repository at this point in the history
Only create follow service when needed.

Bug: 1377181
Change-Id: Ica944bf1194cffd1be0b3308a7928f586f9eb3e0
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3970161
Commit-Queue: Tina Wang <tinazwang@chromium.org>
Reviewed-by: Sergio Collazos <sczs@chromium.org>
Reviewed-by: Adam Arcaro <adamta@google.com>
Cr-Commit-Position: refs/heads/main@{#1062310}
  • Loading branch information
Tina Wang authored and Chromium LUCI CQ committed Oct 21, 2022
1 parent 5529625 commit 1242220
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 36 deletions.
8 changes: 6 additions & 2 deletions ios/chrome/browser/follow/follow_browser_agent.h
Original file line number Diff line number Diff line change
Expand Up @@ -95,8 +95,12 @@ class FollowBrowserAgent final : public BrowserUserData<FollowBrowserAgent> {
FollowSource source,
FollowedWebSite* web_site);

raw_ptr<Browser> browser_;
raw_ptr<FollowService> service_;
// Helper method to lazy initiate variables.
raw_ptr<FollowService> GetFollowService();
FeedMetricsRecorder* GetMetricsRecorder();

raw_ptr<Browser> browser_ = nullptr;
raw_ptr<FollowService> service_ = nullptr;

__weak id<NewTabPageCommands> new_tab_page_commands_;
__weak id<SnackbarCommands> snack_bar_commands_;
Expand Down
80 changes: 46 additions & 34 deletions ios/chrome/browser/follow/follow_browser_agent.mm
Original file line number Diff line number Diff line change
Expand Up @@ -92,41 +92,42 @@ bool IsFollowSourceFromMenu(FollowSource source) {
FollowBrowserAgent::~FollowBrowserAgent() = default;

bool FollowBrowserAgent::IsWebSiteFollowed(WebPageURLs* web_page_urls) {
return service_->IsWebSiteFollowed(web_page_urls);
return GetFollowService()->IsWebSiteFollowed(web_page_urls);
}

NSURL* FollowBrowserAgent::GetRecommendedSiteURL(WebPageURLs* web_page_urls) {
return service_->GetRecommendedSiteURL(web_page_urls);
return GetFollowService()->GetRecommendedSiteURL(web_page_urls);
}

NSArray<FollowedWebSite*>* FollowBrowserAgent::GetFollowedWebSites() {
return service_->GetFollowedWebSites();
return GetFollowService()->GetFollowedWebSites();
}

void FollowBrowserAgent::FollowWebSite(WebPageURLs* web_page_urls,
FollowSource source) {
// Record if the source is from a menu.
if (IsFollowSourceFromMenu(source)) {
[metrics_recorder_ recordFollowFromMenu];
[metrics_recorder_
[GetMetricsRecorder() recordFollowFromMenu];
[GetMetricsRecorder()
recordFollowRequestedWithType:FollowRequestType::kFollowRequestFollow];
}

service_->FollowWebSite(web_page_urls, source,
base::BindOnce(&FollowBrowserAgent::OnFollowResponse,
AsWeakPtr(), web_page_urls, source));
GetFollowService()->FollowWebSite(
web_page_urls, source,
base::BindOnce(&FollowBrowserAgent::OnFollowResponse, AsWeakPtr(),
web_page_urls, source));
}

void FollowBrowserAgent::UnfollowWebSite(WebPageURLs* web_page_urls,
FollowSource source) {
// Record if the source is from a menu.
if (IsFollowSourceFromMenu(source)) {
[metrics_recorder_ recordUnfollowFromMenu];
[metrics_recorder_ recordFollowRequestedWithType:
FollowRequestType::kFollowRequestUnfollow];
[GetMetricsRecorder() recordUnfollowFromMenu];
[GetMetricsRecorder() recordFollowRequestedWithType:
FollowRequestType::kFollowRequestUnfollow];
}

service_->UnfollowWebSite(
GetFollowService()->UnfollowWebSite(
web_page_urls, source,
base::BindOnce(&FollowBrowserAgent::OnUnfollowResponse, AsWeakPtr(),
web_page_urls, source));
Expand All @@ -148,26 +149,18 @@ bool IsFollowSourceFromMenu(FollowSource source) {
}

void FollowBrowserAgent::AddObserver(Observer* observer) {
service_->AddObserver(observer);
GetFollowService()->AddObserver(observer);
}

void FollowBrowserAgent::RemoveObserver(Observer* observer) {
service_->RemoveObserver(observer);
GetFollowService()->RemoveObserver(observer);
}

base::WeakPtr<FollowBrowserAgent> FollowBrowserAgent::AsWeakPtr() {
return weak_ptr_factory_.GetWeakPtr();
}

FollowBrowserAgent::FollowBrowserAgent(Browser* browser) : browser_(browser) {
ChromeBrowserState* browser_state = browser_->GetBrowserState();
service_ = FollowServiceFactory::GetForBrowserState(browser_state);
DCHECK(service_);

metrics_recorder_ =
DiscoverFeedServiceFactory::GetForBrowserState(browser_state)
->GetFeedMetricsRecorder();
}
FollowBrowserAgent::FollowBrowserAgent(Browser* browser) : browser_(browser) {}

void FollowBrowserAgent::OnFollowResponse(WebPageURLs* web_page_urls,
FollowSource source,
Expand Down Expand Up @@ -204,14 +197,14 @@ bool IsFollowSourceFromMenu(FollowSource source) {
FollowedWebSite* web_site) {
// Record if the source is from a menu.
if (IsFollowSourceFromMenu(source)) {
const NSUInteger count = service_->GetFollowedWebSites().count;
[metrics_recorder_ recordFollowCount:count
forLogReason:FollowCountLogReasonAfterFollow];
const NSUInteger count = GetFollowService()->GetFollowedWebSites().count;
[GetMetricsRecorder() recordFollowCount:count
forLogReason:FollowCountLogReasonAfterFollow];
}

base::UmaHistogramBoolean(
"ContentSuggestions.Feed.WebFeed.NewFollow.IsRecommended",
service_->GetRecommendedSiteURL(web_page_urls) ? 1 : 0);
GetFollowService()->GetRecommendedSiteURL(web_page_urls) ? 1 : 0);

// Enable the feed prefs to show the feed and to expand it if they
// are disabled.
Expand Down Expand Up @@ -240,7 +233,7 @@ bool IsFollowSourceFromMenu(FollowSource source) {
NSString* button_text =
l10n_util::GetNSString(IDS_IOS_SNACKBAR_ACTION_GO_TO_FEED);

__weak FeedMetricsRecorder* metrics_recorder = metrics_recorder_;
__weak FeedMetricsRecorder* metrics_recorder = GetMetricsRecorder();
__weak id<NewTabPageCommands> new_tab_page_command = new_tab_page_commands_;

auto message_action = ^{
Expand Down Expand Up @@ -272,7 +265,7 @@ bool IsFollowSourceFromMenu(FollowSource source) {
NSString* button_text =
l10n_util::GetNSString(IDS_IOS_SNACKBAR_ACTION_TRY_AGAIN);

__weak FeedMetricsRecorder* metrics_recorder = metrics_recorder_;
__weak FeedMetricsRecorder* metrics_recorder = GetMetricsRecorder();
base::WeakPtr<FollowBrowserAgent> weak_ptr = AsWeakPtr();

auto message_action = ^{
Expand Down Expand Up @@ -302,9 +295,9 @@ bool IsFollowSourceFromMenu(FollowSource source) {
FollowedWebSite* web_site) {
// Record if the source is from a menu.
if (IsFollowSourceFromMenu(source)) {
const NSUInteger count = service_->GetFollowedWebSites().count;
[metrics_recorder_ recordFollowCount:count
forLogReason:FollowCountLogReasonAfterUnfollow];
const NSUInteger count = GetFollowService()->GetFollowedWebSites().count;
[GetMetricsRecorder() recordFollowCount:count
forLogReason:FollowCountLogReasonAfterUnfollow];
}

NSString* message =
Expand All @@ -313,7 +306,7 @@ bool IsFollowSourceFromMenu(FollowSource source) {

NSString* button_text = l10n_util::GetNSString(IDS_IOS_SNACKBAR_ACTION_UNDO);

__weak FeedMetricsRecorder* metrics_recorder = metrics_recorder_;
__weak FeedMetricsRecorder* metrics_recorder = GetMetricsRecorder();
base::WeakPtr<FollowBrowserAgent> weak_ptr = AsWeakPtr();

auto message_action = ^{
Expand Down Expand Up @@ -348,7 +341,7 @@ bool IsFollowSourceFromMenu(FollowSource source) {
NSString* button_text =
l10n_util::GetNSString(IDS_IOS_SNACKBAR_ACTION_TRY_AGAIN);

__weak FeedMetricsRecorder* metrics_recorder = metrics_recorder_;
__weak FeedMetricsRecorder* metrics_recorder = GetMetricsRecorder();
base::WeakPtr<FollowBrowserAgent> weak_ptr = AsWeakPtr();

auto message_action = ^{
Expand All @@ -374,3 +367,22 @@ bool IsFollowSourceFromMenu(FollowSource source) {
messageAction:message_action
completionAction:completion_action];
}

raw_ptr<FollowService> FollowBrowserAgent::GetFollowService() {
if (!service_) {
ChromeBrowserState* browser_state = browser_->GetBrowserState();
service_ = FollowServiceFactory::GetForBrowserState(browser_state);
DCHECK(service_);
}
return service_;
}

FeedMetricsRecorder* FollowBrowserAgent::GetMetricsRecorder() {
if (!metrics_recorder_) {
ChromeBrowserState* browser_state = browser_->GetBrowserState();
metrics_recorder_ =
DiscoverFeedServiceFactory::GetForBrowserState(browser_state)
->GetFeedMetricsRecorder();
}
return metrics_recorder_;
}

0 comments on commit 1242220

Please sign in to comment.