blob: 177dcaecdaa3e4f23945e4e9276efc19b7087fa7 [file] [log] [blame]
// Copyright (c) 2014 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/extensions/ntp_overridden_bubble_delegate.h"
#include "base/feature_list.h"
#include "base/metrics/histogram_macros.h"
#include "chrome/browser/extensions/extension_service.h"
#include "chrome/browser/extensions/extension_web_ui.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/common/chrome_features.h"
#include "chrome/common/url_constants.h"
#include "chrome/grit/generated_resources.h"
#include "extensions/browser/extension_registry.h"
#include "extensions/browser/extension_system.h"
#include "ui/base/l10n/l10n_util.h"
namespace {
// Whether the user has been notified about extension overriding the new tab
// page.
const char kNtpBubbleAcknowledged[] = "ack_ntp_bubble";
} // namespace
namespace extensions {
NtpOverriddenBubbleDelegate::NtpOverriddenBubbleDelegate(
Profile* profile)
: extensions::ExtensionMessageBubbleController::Delegate(profile) {
set_acknowledged_flag_pref_name(kNtpBubbleAcknowledged);
}
NtpOverriddenBubbleDelegate::~NtpOverriddenBubbleDelegate() {}
bool NtpOverriddenBubbleDelegate::ShouldIncludeExtension(
const extensions::Extension* extension) {
if (!extension_id_.empty() && extension_id_ != extension->id())
return false;
GURL url(chrome::kChromeUINewTabURL);
if (!ExtensionWebUI::HandleChromeURLOverride(&url, profile()))
return false; // No override for newtab found.
if (extension->id() != url.host_piece())
return false;
if (HasBubbleInfoBeenAcknowledged(extension->id()))
return false;
extension_id_ = extension->id();
return true;
}
void NtpOverriddenBubbleDelegate::AcknowledgeExtension(
const std::string& extension_id,
ExtensionMessageBubbleController::BubbleAction user_action) {
if (user_action != ExtensionMessageBubbleController::ACTION_EXECUTE)
SetBubbleInfoBeenAcknowledged(extension_id, true);
}
void NtpOverriddenBubbleDelegate::PerformAction(
const extensions::ExtensionIdList& list) {
for (size_t i = 0; i < list.size(); ++i) {
service()->DisableExtension(list[i],
extensions::Extension::DISABLE_USER_ACTION);
}
}
base::string16 NtpOverriddenBubbleDelegate::GetTitle() const {
return l10n_util::GetStringUTF16(
IDS_EXTENSIONS_NTP_CONTROLLED_TITLE_HOME_PAGE_BUBBLE);
}
base::string16 NtpOverriddenBubbleDelegate::GetMessageBody(
bool anchored_to_browser_action,
int extension_count) const {
base::string16 body =
l10n_util::GetStringUTF16(IDS_EXTENSIONS_NTP_CONTROLLED_FIRST_LINE);
body += l10n_util::GetStringUTF16(
IDS_EXTENSIONS_SETTINGS_API_THIRD_LINE_CONFIRMATION);
return body;
}
base::string16 NtpOverriddenBubbleDelegate::GetOverflowText(
const base::string16& overflow_count) const {
// Does not have more than one extension in the list at a time.
NOTREACHED();
return base::string16();
}
GURL NtpOverriddenBubbleDelegate::GetLearnMoreUrl() const {
return GURL(chrome::kExtensionControlledSettingLearnMoreURL);
}
base::string16 NtpOverriddenBubbleDelegate::GetActionButtonLabel() const {
return l10n_util::GetStringUTF16(IDS_EXTENSION_CONTROLLED_RESTORE_SETTINGS);
}
base::string16 NtpOverriddenBubbleDelegate::GetDismissButtonLabel() const {
return l10n_util::GetStringUTF16(IDS_EXTENSION_CONTROLLED_KEEP_CHANGES);
}
bool NtpOverriddenBubbleDelegate::ShouldCloseOnDeactivate() const {
return true;
}
bool NtpOverriddenBubbleDelegate::ShouldAcknowledgeOnDeactivate() const {
return base::FeatureList::IsEnabled(
features::kAcknowledgeNtpOverrideOnDeactivate);
}
bool NtpOverriddenBubbleDelegate::ShouldShowExtensionList() const {
return false;
}
bool NtpOverriddenBubbleDelegate::ShouldHighlightExtensions() const {
return false;
}
bool NtpOverriddenBubbleDelegate::ShouldLimitToEnabledExtensions() const {
return true;
}
void NtpOverriddenBubbleDelegate::LogExtensionCount(size_t count) {
}
void NtpOverriddenBubbleDelegate::LogAction(
ExtensionMessageBubbleController::BubbleAction action) {
UMA_HISTOGRAM_ENUMERATION(
"ExtensionOverrideBubble.NtpOverriddenUserSelection",
action,
ExtensionMessageBubbleController::ACTION_BOUNDARY);
}
const char* NtpOverriddenBubbleDelegate::GetKey() {
return "NtpOverriddenBubbleDelegate";
}
bool NtpOverriddenBubbleDelegate::SupportsPolicyIndicator() {
return true;
}
} // namespace extensions