| Index: chrome/browser/notifications/extension_welcome_notification.cc
|
| diff --git a/chrome/browser/notifications/extension_welcome_notification.cc b/chrome/browser/notifications/extension_welcome_notification.cc
|
| deleted file mode 100644
|
| index 84019cef056a3dfabd9538679a94f191c22a03f5..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/notifications/extension_welcome_notification.cc
|
| +++ /dev/null
|
| @@ -1,369 +0,0 @@
|
| -// Copyright 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/notifications/extension_welcome_notification.h"
|
| -
|
| -#include "base/guid.h"
|
| -#include "base/lazy_instance.h"
|
| -#include "base/message_loop/message_loop.h"
|
| -#include "base/prefs/pref_service.h"
|
| -#include "base/strings/utf_string_conversions.h"
|
| -#include "chrome/browser/browser_process.h"
|
| -#include "chrome/browser/notifications/notification.h"
|
| -#include "chrome/browser/prefs/pref_service_syncable.h"
|
| -#include "chrome/browser/profiles/profile.h"
|
| -#include "chrome/browser/ui/browser_navigator.h"
|
| -#include "chrome/common/pref_names.h"
|
| -#include "chrome/common/url_constants.h"
|
| -#include "chrome/grit/generated_resources.h"
|
| -#include "components/pref_registry/pref_registry_syncable.h"
|
| -#include "grit/theme_resources.h"
|
| -#include "ui/base/l10n/l10n_util.h"
|
| -#include "ui/base/resource/resource_bundle.h"
|
| -#include "ui/message_center/message_center.h"
|
| -#include "ui/message_center/notification.h"
|
| -#include "ui/message_center/notification_delegate.h"
|
| -#include "ui/message_center/notification_types.h"
|
| -
|
| -const int ExtensionWelcomeNotification::kRequestedShowTimeDays = 14;
|
| -
|
| -namespace {
|
| -
|
| -class NotificationCallbacks
|
| - : public message_center::NotificationDelegate {
|
| - public:
|
| - NotificationCallbacks(
|
| - Profile* profile,
|
| - const message_center::NotifierId notifier_id,
|
| - const std::string& welcome_notification_id,
|
| - ExtensionWelcomeNotification::Delegate* delegate)
|
| - : profile_(profile),
|
| - notifier_id_(notifier_id.type, notifier_id.id),
|
| - welcome_notification_id_(welcome_notification_id),
|
| - delegate_(delegate) {
|
| - }
|
| -
|
| - // Overridden from NotificationDelegate:
|
| - virtual void Display() OVERRIDE {}
|
| - virtual void Error() OVERRIDE {}
|
| -
|
| - virtual void Close(bool by_user) OVERRIDE {
|
| - if (by_user) {
|
| - // Setting the preference here may cause the notification erasing
|
| - // to reenter. Posting a task avoids this issue.
|
| - delegate_->PostTask(
|
| - FROM_HERE,
|
| - base::Bind(&NotificationCallbacks::MarkAsDismissed, this));
|
| - }
|
| - }
|
| -
|
| - virtual void Click() OVERRIDE {}
|
| - virtual void ButtonClick(int index) OVERRIDE {
|
| - if (index == 0) {
|
| - OpenNotificationLearnMoreTab();
|
| - } else if (index == 1) {
|
| - DisableNotificationProvider();
|
| - Close(true);
|
| - } else {
|
| - NOTREACHED();
|
| - }
|
| - }
|
| -
|
| - private:
|
| - void MarkAsDismissed() {
|
| - profile_->GetPrefs()->SetBoolean(prefs::kWelcomeNotificationDismissedLocal,
|
| - true);
|
| - }
|
| -
|
| - void OpenNotificationLearnMoreTab() {
|
| - chrome::NavigateParams params(
|
| - profile_,
|
| - GURL(chrome::kNotificationWelcomeLearnMoreURL),
|
| - content::PAGE_TRANSITION_LINK);
|
| - params.disposition = NEW_FOREGROUND_TAB;
|
| - params.window_action = chrome::NavigateParams::SHOW_WINDOW;
|
| - chrome::Navigate(¶ms);
|
| - }
|
| -
|
| - void DisableNotificationProvider() {
|
| - message_center::Notifier notifier(notifier_id_, base::string16(), true);
|
| - message_center::MessageCenter* message_center =
|
| - delegate_->GetMessageCenter();
|
| - message_center->DisableNotificationsByNotifier(notifier_id_);
|
| - message_center->RemoveNotification(welcome_notification_id_, false);
|
| - message_center->GetNotifierSettingsProvider()->SetNotifierEnabled(
|
| - notifier, false);
|
| - }
|
| -
|
| - virtual ~NotificationCallbacks() {}
|
| -
|
| - Profile* const profile_;
|
| -
|
| - const message_center::NotifierId notifier_id_;
|
| -
|
| - std::string welcome_notification_id_;
|
| -
|
| - // Weak ref owned by ExtensionWelcomeNotification.
|
| - ExtensionWelcomeNotification::Delegate* const delegate_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(NotificationCallbacks);
|
| -};
|
| -
|
| -class DefaultDelegate : public ExtensionWelcomeNotification::Delegate {
|
| - public:
|
| - DefaultDelegate() {}
|
| -
|
| - virtual message_center::MessageCenter* GetMessageCenter() OVERRIDE {
|
| - return g_browser_process->message_center();
|
| - }
|
| -
|
| - virtual base::Time GetCurrentTime() OVERRIDE {
|
| - return base::Time::Now();
|
| - }
|
| -
|
| - virtual void PostTask(
|
| - const tracked_objects::Location& from_here,
|
| - const base::Closure& task) OVERRIDE {
|
| - base::MessageLoop::current()->PostTask(from_here, task);
|
| - }
|
| -
|
| - private:
|
| - DISALLOW_COPY_AND_ASSIGN(DefaultDelegate);
|
| -};
|
| -
|
| -} // namespace
|
| -
|
| -ExtensionWelcomeNotification::ExtensionWelcomeNotification(
|
| - const std::string& extension_id,
|
| - Profile* const profile,
|
| - ExtensionWelcomeNotification::Delegate* const delegate)
|
| - : notifier_id_(message_center::NotifierId::APPLICATION, extension_id),
|
| - profile_(profile),
|
| - delegate_(delegate) {
|
| - welcome_notification_dismissed_pref_.Init(
|
| - prefs::kWelcomeNotificationDismissed,
|
| - profile_->GetPrefs(),
|
| - base::Bind(
|
| - &ExtensionWelcomeNotification::OnWelcomeNotificationDismissedChanged,
|
| - base::Unretained(this)));
|
| - welcome_notification_dismissed_local_pref_.Init(
|
| - prefs::kWelcomeNotificationDismissedLocal,
|
| - profile_->GetPrefs());
|
| -}
|
| -
|
| -// static
|
| -scoped_ptr<ExtensionWelcomeNotification> ExtensionWelcomeNotification::Create(
|
| - const std::string& extension_id,
|
| - Profile* const profile) {
|
| - return Create(extension_id, profile, new DefaultDelegate()).Pass();
|
| -}
|
| -
|
| -// static
|
| -scoped_ptr<ExtensionWelcomeNotification> ExtensionWelcomeNotification::Create(
|
| - const std::string& extension_id,
|
| - Profile* const profile,
|
| - Delegate* const delegate) {
|
| - return scoped_ptr<ExtensionWelcomeNotification>(
|
| - new ExtensionWelcomeNotification(extension_id, profile, delegate)).Pass();
|
| -}
|
| -
|
| -ExtensionWelcomeNotification::~ExtensionWelcomeNotification() {
|
| - if (delayed_notification_) {
|
| - delayed_notification_.reset();
|
| - PrefServiceSyncable::FromProfile(profile_)->RemoveObserver(this);
|
| - } else {
|
| - HideWelcomeNotification();
|
| - }
|
| -}
|
| -
|
| -void ExtensionWelcomeNotification::OnIsSyncingChanged() {
|
| - DCHECK(delayed_notification_);
|
| - PrefServiceSyncable* const pref_service_syncable =
|
| - PrefServiceSyncable::FromProfile(profile_);
|
| - if (pref_service_syncable->IsSyncing()) {
|
| - pref_service_syncable->RemoveObserver(this);
|
| - scoped_ptr<Notification> previous_notification(
|
| - delayed_notification_.release());
|
| - ShowWelcomeNotificationIfNecessary(*(previous_notification.get()));
|
| - }
|
| -}
|
| -
|
| -void ExtensionWelcomeNotification::ShowWelcomeNotificationIfNecessary(
|
| - const Notification& notification) {
|
| - if ((notification.notifier_id() == notifier_id_) && !delayed_notification_) {
|
| - PrefServiceSyncable* const pref_service_syncable =
|
| - PrefServiceSyncable::FromProfile(profile_);
|
| - if (pref_service_syncable->IsSyncing()) {
|
| - PrefService* const pref_service = profile_->GetPrefs();
|
| - if (!UserHasDismissedWelcomeNotification()) {
|
| - const PopUpRequest pop_up_request =
|
| - pref_service->GetBoolean(
|
| - prefs::kWelcomeNotificationPreviouslyPoppedUp)
|
| - ? POP_UP_HIDDEN
|
| - : POP_UP_SHOWN;
|
| - if (pop_up_request == POP_UP_SHOWN) {
|
| - pref_service->SetBoolean(
|
| - prefs::kWelcomeNotificationPreviouslyPoppedUp, true);
|
| - }
|
| -
|
| - if (IsWelcomeNotificationExpired()) {
|
| - ExpireWelcomeNotification();
|
| - } else {
|
| - ShowWelcomeNotification(
|
| - notification.display_source(), pop_up_request);
|
| - }
|
| - }
|
| - } else {
|
| - delayed_notification_.reset(new Notification(notification));
|
| - pref_service_syncable->AddObserver(this);
|
| - }
|
| - }
|
| -}
|
| -
|
| -// static
|
| -void ExtensionWelcomeNotification::RegisterProfilePrefs(
|
| - user_prefs::PrefRegistrySyncable* prefs) {
|
| - prefs->RegisterBooleanPref(prefs::kWelcomeNotificationDismissed,
|
| - false,
|
| - user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
|
| - prefs->RegisterBooleanPref(prefs::kWelcomeNotificationDismissedLocal,
|
| - false,
|
| - user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
|
| - prefs->RegisterBooleanPref(prefs::kWelcomeNotificationPreviouslyPoppedUp,
|
| - false,
|
| - user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
|
| - prefs->RegisterInt64Pref(prefs::kWelcomeNotificationExpirationTimestamp,
|
| - 0,
|
| - user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
|
| -}
|
| -
|
| -message_center::MessageCenter*
|
| -ExtensionWelcomeNotification::GetMessageCenter() const {
|
| - return delegate_->GetMessageCenter();
|
| -}
|
| -
|
| -void ExtensionWelcomeNotification::ShowWelcomeNotification(
|
| - const base::string16& display_source,
|
| - const PopUpRequest pop_up_request) {
|
| - message_center::ButtonInfo learn_more(
|
| - l10n_util::GetStringUTF16(IDS_NOTIFICATION_WELCOME_BUTTON_LEARN_MORE));
|
| - learn_more.icon = ui::ResourceBundle::GetSharedInstance().GetImageNamed(
|
| - IDR_NOTIFICATION_WELCOME_LEARN_MORE);
|
| - message_center::ButtonInfo disable(
|
| - l10n_util::GetStringUTF16(IDS_NOTIFIER_WELCOME_BUTTON));
|
| - disable.icon = ui::ResourceBundle::GetSharedInstance().GetImageNamed(
|
| - IDR_NOTIFIER_BLOCK_BUTTON);
|
| -
|
| - message_center::RichNotificationData rich_notification_data;
|
| - rich_notification_data.priority = 2;
|
| - rich_notification_data.buttons.push_back(learn_more);
|
| - rich_notification_data.buttons.push_back(disable);
|
| -
|
| - if (welcome_notification_id_.empty())
|
| - welcome_notification_id_ = base::GenerateGUID();
|
| -
|
| - if (!welcome_notification_id_.empty()) {
|
| - scoped_ptr<message_center::Notification> message_center_notification(
|
| - new message_center::Notification(
|
| - message_center::NOTIFICATION_TYPE_BASE_FORMAT,
|
| - welcome_notification_id_,
|
| - l10n_util::GetStringUTF16(IDS_NOTIFICATION_WELCOME_TITLE),
|
| - l10n_util::GetStringUTF16(IDS_NOTIFICATION_WELCOME_BODY),
|
| - ui::ResourceBundle::GetSharedInstance().GetImageNamed(
|
| - IDR_NOTIFICATION_WELCOME_ICON),
|
| - display_source,
|
| - notifier_id_,
|
| - rich_notification_data,
|
| - new NotificationCallbacks(
|
| - profile_, notifier_id_, welcome_notification_id_,
|
| - delegate_.get())));
|
| -
|
| - if (pop_up_request == POP_UP_HIDDEN)
|
| - message_center_notification->set_shown_as_popup(true);
|
| -
|
| - GetMessageCenter()->AddNotification(message_center_notification.Pass());
|
| - StartExpirationTimer();
|
| - }
|
| -}
|
| -
|
| -void ExtensionWelcomeNotification::HideWelcomeNotification() {
|
| - if (!welcome_notification_id_.empty() &&
|
| - GetMessageCenter()->FindVisibleNotificationById(
|
| - welcome_notification_id_) != NULL) {
|
| - GetMessageCenter()->RemoveNotification(welcome_notification_id_, false);
|
| - StopExpirationTimer();
|
| - }
|
| -}
|
| -
|
| -bool ExtensionWelcomeNotification::UserHasDismissedWelcomeNotification() const {
|
| - // This was previously a syncable preference; now it's per-machine.
|
| - // Only the local pref will be written moving forward, but check for both so
|
| - // users won't be double-toasted.
|
| - bool shown_synced = profile_->GetPrefs()->GetBoolean(
|
| - prefs::kWelcomeNotificationDismissed);
|
| - bool shown_local = profile_->GetPrefs()->GetBoolean(
|
| - prefs::kWelcomeNotificationDismissedLocal);
|
| - return (shown_synced || shown_local);
|
| -}
|
| -
|
| -void ExtensionWelcomeNotification::OnWelcomeNotificationDismissedChanged() {
|
| - if (UserHasDismissedWelcomeNotification()) {
|
| - HideWelcomeNotification();
|
| - }
|
| -}
|
| -
|
| -void ExtensionWelcomeNotification::StartExpirationTimer() {
|
| - if (!expiration_timer_ && !IsWelcomeNotificationExpired()) {
|
| - base::Time expiration_timestamp = GetExpirationTimestamp();
|
| - if (expiration_timestamp.is_null()) {
|
| - SetExpirationTimestampFromNow();
|
| - expiration_timestamp = GetExpirationTimestamp();
|
| - DCHECK(!expiration_timestamp.is_null());
|
| - }
|
| - expiration_timer_.reset(
|
| - new base::OneShotTimer<ExtensionWelcomeNotification>());
|
| - expiration_timer_->Start(
|
| - FROM_HERE,
|
| - expiration_timestamp - delegate_->GetCurrentTime(),
|
| - this,
|
| - &ExtensionWelcomeNotification::ExpireWelcomeNotification);
|
| - }
|
| -}
|
| -
|
| -void ExtensionWelcomeNotification::StopExpirationTimer() {
|
| - if (expiration_timer_) {
|
| - expiration_timer_->Stop();
|
| - expiration_timer_.reset();
|
| - }
|
| -}
|
| -
|
| -void ExtensionWelcomeNotification::ExpireWelcomeNotification() {
|
| - DCHECK(IsWelcomeNotificationExpired());
|
| - profile_->GetPrefs()->SetBoolean(
|
| - prefs::kWelcomeNotificationDismissedLocal, true);
|
| - HideWelcomeNotification();
|
| -}
|
| -
|
| -base::Time ExtensionWelcomeNotification::GetExpirationTimestamp() const {
|
| - PrefService* const pref_service = profile_->GetPrefs();
|
| - const int64 expiration_timestamp =
|
| - pref_service->GetInt64(prefs::kWelcomeNotificationExpirationTimestamp);
|
| - return (expiration_timestamp == 0)
|
| - ? base::Time()
|
| - : base::Time::FromInternalValue(expiration_timestamp);
|
| -}
|
| -
|
| -void ExtensionWelcomeNotification::SetExpirationTimestampFromNow() {
|
| - PrefService* const pref_service = profile_->GetPrefs();
|
| - pref_service->SetInt64(
|
| - prefs::kWelcomeNotificationExpirationTimestamp,
|
| - (delegate_->GetCurrentTime() +
|
| - base::TimeDelta::FromDays(kRequestedShowTimeDays)).ToInternalValue());
|
| -}
|
| -
|
| -bool ExtensionWelcomeNotification::IsWelcomeNotificationExpired() const {
|
| - const base::Time expiration_timestamp = GetExpirationTimestamp();
|
| - return !expiration_timestamp.is_null() &&
|
| - (expiration_timestamp <= delegate_->GetCurrentTime());
|
| -}
|
|
|