Skip to content

Commit

Permalink
Support triggering HaTS surveys while a prompt is shown
Browse files Browse the repository at this point in the history
Bug: 1382446
Change-Id: I389fc136e449cecf59ab576a175543e23c00b341
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4202157
Reviewed-by: Theodore Olsauskas-Warren <sauski@google.com>
Reviewed-by: Andy Paicu <andypaicu@chromium.org>
Commit-Queue: Florian Jacky <fjacky@chromium.org>
Auto-Submit: Florian Jacky <fjacky@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1100593}
  • Loading branch information
fjacky authored and Chromium LUCI CQ committed Feb 2, 2023
1 parent 8c1bfff commit 050c7d7
Show file tree
Hide file tree
Showing 21 changed files with 342 additions and 198 deletions.
39 changes: 22 additions & 17 deletions chrome/browser/permissions/chrome_permissions_client.cc
Original file line number Diff line number Diff line change
Expand Up @@ -251,32 +251,33 @@ permissions::IconId ChromePermissionsClient::GetOverrideIconId(
}

#if !BUILDFLAG(IS_ANDROID)
// Triggers the post-prompt HaTS survey if enabled by field trials for this
// Triggers the prompt HaTS survey if enabled by field trials for this
// combination of prompt parameters.
void ChromePermissionsClient::TriggerPostPromptHatsSurveyIfEnabled(
Profile* profile,
void ChromePermissionsClient::TriggerPromptHatsSurveyIfEnabled(
content::BrowserContext* context,
permissions::RequestType request_type,
permissions::PermissionAction action,
absl::optional<permissions::PermissionAction> action,
permissions::PermissionPromptDisposition prompt_disposition,
permissions::PermissionPromptDispositionReason prompt_disposition_reason,
permissions::PermissionRequestGestureType gesture_type,
base::TimeDelta prompt_display_duration) {
if (!base::FeatureList::IsEnabled(
permissions::features::kPermissionsPostPromptSurvey)) {
return;
}

absl::optional<base::TimeDelta> prompt_display_duration,
bool is_post_prompt,
base::OnceCallback<void()> hats_shown_callback) {
auto prompt_parameters =
permissions::PermissionHatsTriggerHelper::PromptParametersForHaTS(
request_type, action, prompt_disposition, prompt_disposition_reason,
gesture_type, version_info::GetChannelString(chrome::GetChannel()),
is_post_prompt ? permissions::kOnPromptResolved
: permissions::kOnPromptAppearing,
prompt_display_duration);

if (!permissions::PermissionHatsTriggerHelper::
ArePostPromptTriggerCriteriaSatisfied(prompt_parameters)) {
ArePromptTriggerCriteriaSatisfied(prompt_parameters)) {
return;
}

Profile* profile = Profile::FromBrowserContext(context);

auto* hats_service =
HatsServiceFactory::GetForProfile(profile,
/*create_if_necessary=*/true);
Expand All @@ -287,8 +288,8 @@ void ChromePermissionsClient::TriggerPostPromptHatsSurveyIfEnabled(
auto survey_data = permissions::PermissionHatsTriggerHelper::
SurveyProductSpecificData::PopulateFrom(prompt_parameters);

hats_service->LaunchSurvey(kHatsSurveyTriggerPermissionsPostPrompt,
base::DoNothing(), base::DoNothing(),
hats_service->LaunchSurvey(kHatsSurveyTriggerPermissionsPrompt,
std::move(hats_shown_callback), base::DoNothing(),
survey_data.survey_bits_data,
survey_data.survey_string_data);
}
Expand Down Expand Up @@ -358,17 +359,21 @@ void ChromePermissionsClient::OnPromptResolved(
}

#if !BUILDFLAG(IS_ANDROID)
TriggerPostPromptHatsSurveyIfEnabled(
profile, request_type, action, prompt_disposition,
prompt_disposition_reason, gesture_type, prompt_display_duration);
TriggerPromptHatsSurveyIfEnabled(
web_contents->GetBrowserContext(), request_type,
absl::make_optional(action), prompt_disposition,
prompt_disposition_reason, gesture_type,
absl::make_optional(prompt_display_duration), true, base::DoNothing());
#endif // !BUILDFLAG(IS_ANDROID)
}

absl::optional<bool>
ChromePermissionsClient::HadThreeConsecutiveNotificationPermissionDenies(
content::BrowserContext* browser_context) {
if (!QuietNotificationPermissionUiConfig::IsAdaptiveActivationDryRunEnabled())
if (!QuietNotificationPermissionUiConfig::
IsAdaptiveActivationDryRunEnabled()) {
return absl::nullopt;
}
return Profile::FromBrowserContext(browser_context)
->GetPrefs()
->GetBoolean(prefs::kHadThreeConsecutiveNotificationPermissionDenies);
Expand Down
10 changes: 6 additions & 4 deletions chrome/browser/permissions/chrome_permissions_client.h
Original file line number Diff line number Diff line change
Expand Up @@ -57,14 +57,16 @@ class ChromePermissionsClient : public permissions::PermissionsClient {
content::BrowserContext* browser_context) override;

#if !BUILDFLAG(IS_ANDROID)
void TriggerPostPromptHatsSurveyIfEnabled(
Profile* profile,
void TriggerPromptHatsSurveyIfEnabled(
content::BrowserContext* context,
permissions::RequestType request_type,
permissions::PermissionAction action,
absl::optional<permissions::PermissionAction> action,
permissions::PermissionPromptDisposition prompt_disposition,
permissions::PermissionPromptDispositionReason prompt_disposition_reason,
permissions::PermissionRequestGestureType gesture_type,
base::TimeDelta prompt_display_duration);
absl::optional<base::TimeDelta> prompt_display_duration,
bool is_post_prompt,
base::OnceCallback<void()> hats_shown_callback_) override;

permissions::PermissionIgnoredReason DetermineIgnoreReason(
content::WebContents* web_contents) override;
Expand Down

0 comments on commit 050c7d7

Please sign in to comment.