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( ...@@ -23,6 +23,7 @@ PermissionPromptAndroid::PermissionPromptAndroid(
: web_contents_(web_contents), : web_contents_(web_contents),
delegate_(delegate), delegate_(delegate),
permission_request_notification_(nullptr), permission_request_notification_(nullptr),
permission_infobar_(nullptr),
weak_factory_(this) { weak_factory_(this) {
DCHECK(web_contents); DCHECK(web_contents);
...@@ -31,8 +32,8 @@ PermissionPromptAndroid::PermissionPromptAndroid( ...@@ -31,8 +32,8 @@ PermissionPromptAndroid::PermissionPromptAndroid(
if (infobar_service && if (infobar_service &&
GroupedPermissionInfoBarDelegate::ShouldShowMiniInfobar( GroupedPermissionInfoBarDelegate::ShouldShowMiniInfobar(
GetContentSettingType(0u /* position */))) { GetContentSettingType(0u /* position */))) {
GroupedPermissionInfoBarDelegate::Create(weak_factory_.GetWeakPtr(), permission_infobar_ = GroupedPermissionInfoBarDelegate::Create(
infobar_service); weak_factory_.GetWeakPtr(), infobar_service);
return; return;
} }
...@@ -46,7 +47,14 @@ PermissionPromptAndroid::PermissionPromptAndroid( ...@@ -46,7 +47,14 @@ PermissionPromptAndroid::PermissionPromptAndroid(
PermissionDialogDelegate::Create(web_contents_, this); 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() { void PermissionPromptAndroid::UpdateAnchorPosition() {
NOTREACHED() << "UpdateAnchorPosition is not implemented"; NOTREACHED() << "UpdateAnchorPosition is not implemented";
......
...@@ -17,6 +17,9 @@ ...@@ -17,6 +17,9 @@
namespace content { namespace content {
class WebContents; class WebContents;
} }
namespace infobars {
class InfoBar;
}
class PermissionRequestNotificationAndroid; class PermissionRequestNotificationAndroid;
class PermissionPromptAndroid : public PermissionPrompt { class PermissionPromptAndroid : public PermissionPrompt {
...@@ -55,6 +58,10 @@ class PermissionPromptAndroid : public PermissionPrompt { ...@@ -55,6 +58,10 @@ class PermissionPromptAndroid : public PermissionPrompt {
std::unique_ptr<PermissionRequestNotificationAndroid> std::unique_ptr<PermissionRequestNotificationAndroid>
permission_request_notification_; 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}; base::WeakPtrFactory<PermissionPromptAndroid> weak_factory_{this};
DISALLOW_COPY_AND_ASSIGN(PermissionPromptAndroid); DISALLOW_COPY_AND_ASSIGN(PermissionPromptAndroid);
......
...@@ -80,7 +80,6 @@ PermissionRequestManager::~PermissionRequestManager() { ...@@ -80,7 +80,6 @@ PermissionRequestManager::~PermissionRequestManager() {
} }
void PermissionRequestManager::AddRequest(PermissionRequest* request) { void PermissionRequestManager::AddRequest(PermissionRequest* request) {
if (base::CommandLine::ForCurrentProcess()->HasSwitch( if (base::CommandLine::ForCurrentProcess()->HasSwitch(
switches::kDenyPermissionPrompts)) { switches::kDenyPermissionPrompts)) {
request->PermissionDenied(); request->PermissionDenied();
...@@ -140,6 +139,12 @@ void PermissionRequestManager::AddRequest(PermissionRequest* request) { ...@@ -140,6 +139,12 @@ void PermissionRequestManager::AddRequest(PermissionRequest* request) {
} }
queued_requests_.push_back(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()) if (!IsBubbleVisible())
ScheduleShowBubble(); ScheduleShowBubble();
} }
...@@ -553,17 +558,21 @@ void PermissionRequestManager::RemoveObserver(Observer* observer) { ...@@ -553,17 +558,21 @@ void PermissionRequestManager::RemoveObserver(Observer* observer) {
} }
bool PermissionRequestManager::ShouldShowQuietPermissionPrompt() { bool PermissionRequestManager::ShouldShowQuietPermissionPrompt() {
if (!requests_.size()) if (!requests_.size() ||
requests_.front()->GetPermissionRequestType() !=
PermissionRequestType::PERMISSION_NOTIFICATIONS) {
return false; return false;
}
#if !defined(OS_ANDROID)
const auto ui_flavor = QuietNotificationsPromptConfig::UIFlavorToUse(); const auto ui_flavor = QuietNotificationsPromptConfig::UIFlavorToUse();
return (requests_.front()->GetPermissionRequestType() == #if !defined(OS_ANDROID)
PermissionRequestType::PERMISSION_NOTIFICATIONS && return ui_flavor == QuietNotificationsPromptConfig::STATIC_ICON ||
(ui_flavor == QuietNotificationsPromptConfig::STATIC_ICON || ui_flavor == QuietNotificationsPromptConfig::ANIMATED_ICON;
ui_flavor == QuietNotificationsPromptConfig::ANIMATED_ICON));
#else // OS_ANDROID #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 #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