1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125
|
// Copyright 2014 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/infobars/core/infobar_delegate.h"
#include "build/build_config.h"
#include "components/infobars/core/infobar.h"
#include "components/infobars/core/infobar_manager.h"
#include "ui/base/models/image_model.h"
#include "ui/base/resource/resource_bundle.h"
#include "ui/gfx/vector_icon_types.h"
#if !BUILDFLAG(IS_IOS) && !BUILDFLAG(IS_ANDROID)
#include "ui/gfx/color_palette.h"
#endif
namespace infobars {
const int InfoBarDelegate::kNoIconID = 0;
InfoBarDelegate::~InfoBarDelegate() = default;
int InfoBarDelegate::GetIconId() const {
return kNoIconID;
}
const gfx::VectorIcon& InfoBarDelegate::GetVectorIcon() const {
return gfx::VectorIcon::EmptyIcon();
}
ui::ImageModel InfoBarDelegate::GetIcon() const {
#if !BUILDFLAG(IS_IOS) && !BUILDFLAG(IS_ANDROID)
const gfx::VectorIcon& vector_icon = GetVectorIcon();
if (!vector_icon.is_empty()) {
return ui::ImageModel::FromVectorIcon(vector_icon, ui::kColorInfoBarIcon,
20);
}
#endif
int icon_id = GetIconId();
return icon_id == kNoIconID
? ui::ImageModel()
: ui::ImageModel::FromImage(
ui::ResourceBundle::GetSharedInstance().GetNativeImageNamed(
icon_id));
}
std::u16string InfoBarDelegate::GetLinkText() const {
return std::u16string();
}
GURL InfoBarDelegate::GetLinkURL() const {
return GURL();
}
std::optional<std::u16string> InfoBarDelegate::GetLinkAccessibleText() const {
return std::nullopt;
}
bool InfoBarDelegate::EqualsDelegate(InfoBarDelegate* delegate) const {
return false;
}
bool InfoBarDelegate::ShouldExpire(const NavigationDetails& details) const {
return details.is_navigation_to_different_page &&
!details.did_replace_entry &&
// This next condition ensures a navigation that passes the above
// conditions doesn't dismiss infobars added while that navigation was
// already in process. We carve out an exception for reloads since we
// want reloads to dismiss infobars, but they will have unchanged entry
// IDs.
((nav_entry_id_ != details.entry_id) || details.is_reload);
}
bool InfoBarDelegate::LinkClicked(WindowOpenDisposition disposition) {
infobar()->owner()->OpenURL(GetLinkURL(), disposition);
return false;
}
void InfoBarDelegate::InfoBarDismissed() {}
bool InfoBarDelegate::IsCloseable() const {
return true;
}
bool InfoBarDelegate::ShouldAnimate() const {
return true;
}
bool InfoBarDelegate::ShouldHideInFullscreen() const {
return false;
}
ConfirmInfoBarDelegate* InfoBarDelegate::AsConfirmInfoBarDelegate() {
return nullptr;
}
blocked_content::PopupBlockedInfoBarDelegate*
InfoBarDelegate::AsPopupBlockedInfoBarDelegate() {
return nullptr;
}
ThemeInstalledInfoBarDelegate*
InfoBarDelegate::AsThemePreviewInfobarDelegate() {
return nullptr;
}
#if BUILDFLAG(IS_IOS)
translate::TranslateInfoBarDelegate*
InfoBarDelegate::AsTranslateInfoBarDelegate() {
return nullptr;
}
#endif
#if BUILDFLAG(IS_ANDROID)
offline_pages::OfflinePageInfoBarDelegate*
InfoBarDelegate::AsOfflinePageInfoBarDelegate() {
return nullptr;
}
#endif
InfoBarDelegate::InfoBarDelegate() = default;
} // namespace infobars
|