blob: f7d44939f2662f93c802761ba22b5bf34d141d02 [file] [log] [blame]
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/permissions/grouped_permission_infobar_delegate_android.h"
#include "base/memory/ptr_util.h"
#include "chrome/browser/android/android_theme_resources.h"
#include "chrome/browser/infobars/infobar_service.h"
#include "chrome/browser/permissions/permission_features.h"
#include "chrome/browser/permissions/permission_prompt_android.h"
#include "chrome/browser/permissions/permission_request.h"
#include "chrome/browser/permissions/permission_util.h"
#include "chrome/browser/ui/android/infobars/grouped_permission_infobar.h"
#include "chrome/grit/generated_resources.h"
#include "components/infobars/core/infobar.h"
#include "components/url_formatter/elide_url.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/strings/grit/ui_strings.h"
GroupedPermissionInfoBarDelegate::~GroupedPermissionInfoBarDelegate() {}
// static
infobars::InfoBar* GroupedPermissionInfoBarDelegate::Create(
const base::WeakPtr<PermissionPromptAndroid>& permission_prompt,
InfoBarService* infobar_service) {
// WrapUnique needs to be used because the constructor is private.
return infobar_service->AddInfoBar(std::make_unique<GroupedPermissionInfoBar>(
base::WrapUnique(new GroupedPermissionInfoBarDelegate(permission_prompt,
infobar_service))));
}
size_t GroupedPermissionInfoBarDelegate::PermissionCount() const {
return permission_prompt_->PermissionCount();
}
ContentSettingsType GroupedPermissionInfoBarDelegate::GetContentSettingType(
size_t position) const {
return permission_prompt_->GetContentSettingType(position);
}
base::string16 GroupedPermissionInfoBarDelegate::GetCompactMessageText() const {
return l10n_util::GetStringUTF16(
IDS_NOTIFICATION_QUIET_PERMISSION_MINI_INFOBAR_MESSAGE);
}
base::string16 GroupedPermissionInfoBarDelegate::GetCompactLinkText() const {
return l10n_util::GetStringUTF16(
IDS_NOTIFICATION_QUIET_PERMISSION_MINI_INFOBAR_DETAILS_LINK);
}
base::string16 GroupedPermissionInfoBarDelegate::GetDescriptionText() const {
return l10n_util::GetStringUTF16(
IDS_NOTIFICATION_QUIET_PERMISSION_PROMPT_MESSAGE);
}
int GroupedPermissionInfoBarDelegate::GetIconId() const {
return permission_prompt_->GetIconId();
}
base::string16 GroupedPermissionInfoBarDelegate::GetMessageText() const {
return l10n_util::GetStringUTF16(
IDS_NOTIFICATION_QUIET_PERMISSION_INFOBAR_TITLE);
}
bool GroupedPermissionInfoBarDelegate::Accept() {
if (permission_prompt_)
permission_prompt_->Accept();
return true;
}
bool GroupedPermissionInfoBarDelegate::Cancel() {
// The infobar needs to be kept open after the "Manage" button is clicked.
return false;
}
void GroupedPermissionInfoBarDelegate::InfoBarDismissed() {
if (permission_prompt_)
permission_prompt_->Closing();
}
bool GroupedPermissionInfoBarDelegate::LinkClicked(
WindowOpenDisposition disposition) {
return false;
}
// static
bool GroupedPermissionInfoBarDelegate::ShouldShowMiniInfobar(
ContentSettingsType type) {
return QuietNotificationsPromptConfig::UIFlavorToUse() ==
QuietNotificationsPromptConfig::UIFlavor::MINI_INFOBAR &&
type == CONTENT_SETTINGS_TYPE_NOTIFICATIONS;
}
GroupedPermissionInfoBarDelegate::GroupedPermissionInfoBarDelegate(
const base::WeakPtr<PermissionPromptAndroid>& permission_prompt,
InfoBarService* infobar_service)
: permission_prompt_(permission_prompt), infobar_service_(infobar_service) {
DCHECK(permission_prompt_);
DCHECK(infobar_service_);
// Infobars are only used for NOTIFICATIONS right now, therefore strings can
// be hardcoded for that type.
DCHECK_EQ(permission_prompt_->GetContentSettingType(0u),
CONTENT_SETTINGS_TYPE_NOTIFICATIONS);
}
infobars::InfoBarDelegate::InfoBarIdentifier
GroupedPermissionInfoBarDelegate::GetIdentifier() const {
return GROUPED_PERMISSION_INFOBAR_DELEGATE_ANDROID;
}
int GroupedPermissionInfoBarDelegate::GetButtons() const {
return BUTTON_OK | BUTTON_CANCEL;
}
base::string16 GroupedPermissionInfoBarDelegate::GetButtonLabel(
InfoBarButton button) const {
return l10n_util::GetStringUTF16(
(button == BUTTON_OK)
? IDS_NOTIFICATIONS_QUIET_PERMISSION_BUBBLE_ALLOW_BUTTON
: IDS_NOTIFICATION_BUTTON_MANAGE);
}
bool GroupedPermissionInfoBarDelegate::EqualsDelegate(
infobars::InfoBarDelegate* delegate) const {
// The PermissionRequestManager doesn't create duplicate infobars so a pointer
// equality check is sufficient.
return this == delegate;
}