Commit 55a4bb68 authored by Andy Paicu's avatar Andy Paicu Committed by Commit Bot

Kill quiet permission requests if a new request is made

Bug: 1014026
Change-Id: I5fe93b9bc7b39873900d9e15dcba66dfddd7c4ef
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1860015
Commit-Queue: Andy Paicu <andypaicu@chromium.org>
Reviewed-by: default avatarBalazs Engedy <engedy@chromium.org>
Cr-Commit-Position: refs/heads/master@{#706445}
parent 5fd54f28
......@@ -23,6 +23,7 @@ PermissionPromptAndroid::PermissionPromptAndroid(
: web_contents_(web_contents),
delegate_(delegate),
permission_request_notification_(nullptr),
permission_infobar_(nullptr),
weak_factory_(this) {
DCHECK(web_contents);
......@@ -31,8 +32,8 @@ PermissionPromptAndroid::PermissionPromptAndroid(
if (infobar_service &&
GroupedPermissionInfoBarDelegate::ShouldShowMiniInfobar(
GetContentSettingType(0u /* position */))) {
GroupedPermissionInfoBarDelegate::Create(weak_factory_.GetWeakPtr(),
infobar_service);
permission_infobar_ = GroupedPermissionInfoBarDelegate::Create(
weak_factory_.GetWeakPtr(), infobar_service);
return;
}
......@@ -46,7 +47,14 @@ PermissionPromptAndroid::PermissionPromptAndroid(
PermissionDialogDelegate::Create(web_contents_, this);
}
PermissionPromptAndroid::~PermissionPromptAndroid() {}
PermissionPromptAndroid::~PermissionPromptAndroid() {
if (permission_infobar_) {
InfoBarService* infobar_service =
InfoBarService::FromWebContents(web_contents_);
infobar_service->RemoveInfoBar(permission_infobar_);
}
}
void PermissionPromptAndroid::UpdateAnchorPosition() {
NOTREACHED() << "UpdateAnchorPosition is not implemented";
......
......@@ -17,6 +17,9 @@
namespace content {
class WebContents;
}
namespace infobars {
class InfoBar;
}
class PermissionRequestNotificationAndroid;
class PermissionPromptAndroid : public PermissionPrompt {
......@@ -55,6 +58,10 @@ class PermissionPromptAndroid : public PermissionPrompt {
std::unique_ptr<PermissionRequestNotificationAndroid>
permission_request_notification_;
// The infobar used to display the permission request, if displayed in that
// format. Never assume that this pointer is currently alive.
infobars::InfoBar* permission_infobar_;
base::WeakPtrFactory<PermissionPromptAndroid> weak_factory_{this};
DISALLOW_COPY_AND_ASSIGN(PermissionPromptAndroid);
......
......@@ -80,7 +80,6 @@ PermissionRequestManager::~PermissionRequestManager() {
}
void PermissionRequestManager::AddRequest(PermissionRequest* request) {
if (base::CommandLine::ForCurrentProcess()->HasSwitch(
switches::kDenyPermissionPrompts)) {
request->PermissionDenied();
......@@ -140,6 +139,12 @@ void PermissionRequestManager::AddRequest(PermissionRequest* request) {
}
queued_requests_.push_back(request);
// If we're displaying a quiet permission request, kill it in favor of this
// permission request.
if (ShouldShowQuietPermissionPrompt()) {
FinalizeBubble(PermissionAction::IGNORED);
}
if (!IsBubbleVisible())
ScheduleShowBubble();
}
......@@ -553,17 +558,21 @@ void PermissionRequestManager::RemoveObserver(Observer* observer) {
}
bool PermissionRequestManager::ShouldShowQuietPermissionPrompt() {
if (!requests_.size())
if (!requests_.size() ||
requests_.front()->GetPermissionRequestType() !=
PermissionRequestType::PERMISSION_NOTIFICATIONS) {
return false;
}
#if !defined(OS_ANDROID)
const auto ui_flavor = QuietNotificationsPromptConfig::UIFlavorToUse();
return (requests_.front()->GetPermissionRequestType() ==
PermissionRequestType::PERMISSION_NOTIFICATIONS &&
(ui_flavor == QuietNotificationsPromptConfig::STATIC_ICON ||
ui_flavor == QuietNotificationsPromptConfig::ANIMATED_ICON));
#if !defined(OS_ANDROID)
return ui_flavor == QuietNotificationsPromptConfig::STATIC_ICON ||
ui_flavor == QuietNotificationsPromptConfig::ANIMATED_ICON;
#else // OS_ANDROID
return false;
return ui_flavor == QuietNotificationsPromptConfig::QUIET_NOTIFICATION ||
ui_flavor == QuietNotificationsPromptConfig::HEADS_UP_NOTIFICATION ||
ui_flavor == QuietNotificationsPromptConfig::MINI_INFOBAR;
#endif // OS_ANDROID
}
......
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