blob: f7c5ed4d30eadaf06320cacd4346969dcc39a1e5 [file] [log] [blame]
// Copyright 2018 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/badging/badge_manager.h"
#include <utility>
#include "base/i18n/number_formatting.h"
#include "base/logging.h"
#include "base/strings/utf_string_conversions.h"
#include "build/build_config.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/extensions/hosted_app_browser_controller.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/strings/grit/ui_strings.h"
#if defined(OS_MACOSX)
#include "chrome/browser/badging/badge_manager_delegate_mac.h"
#elif defined(OS_WIN)
#include "chrome/browser/badging/badge_manager_delegate_win.h"
#endif
namespace badging {
std::string GetBadgeString(base::Optional<uint64_t> badge_content) {
if (!badge_content)
return "•";
if (badge_content > 99u) {
return base::UTF16ToUTF8(l10n_util::GetStringFUTF16(
IDS_SATURATED_BADGE_CONTENT, base::FormatNumber(99)));
}
return base::UTF16ToUTF8(base::FormatNumber(badge_content.value()));
}
BadgeManager::BadgeManager(Profile* profile) {
#if defined(OS_MACOSX)
SetDelegate(std::make_unique<BadgeManagerDelegateMac>(profile));
#elif defined(OS_WIN)
SetDelegate(std::make_unique<BadgeManagerDelegateWin>(profile));
#endif
}
BadgeManager::~BadgeManager() = default;
void BadgeManager::UpdateBadge(const extensions::ExtensionId& extension_id,
base::Optional<uint64_t> contents) {
badged_apps_[extension_id] = contents;
if (!delegate_)
return;
delegate_->OnBadgeSet(extension_id, contents);
}
void BadgeManager::ClearBadge(const extensions::ExtensionId& extension_id) {
badged_apps_.erase(extension_id);
if (!delegate_)
return;
delegate_->OnBadgeCleared(extension_id);
}
void BadgeManager::SetDelegate(std::unique_ptr<BadgeManagerDelegate> delegate) {
delegate_ = std::move(delegate);
}
} // namespace badging