// 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 "base/message_loop/message_loop.h" #include "chrome/browser/browser_process.h" #include "chrome/browser/notifications/desktop_notification_service.h" #include "chrome/browser/notifications/desktop_notification_service_factory.h" #include "chrome/browser/notifications/message_center_notification_manager.h" #include "chrome/browser/notifications/notification_ui_manager.h" #include "chrome/browser/notifications/sync_notifier/chrome_notifier_service.h" #include "chrome/browser/notifications/sync_notifier/chrome_notifier_service_factory.h" #include "chrome/browser/notifications/sync_notifier/welcome_delegate.h" #include "chrome/browser/profiles/profile.h" #include "ui/message_center/message_center.h" #include "ui/message_center/message_center_util.h" namespace notifier { namespace { void UpdateMessageCenter() { NotificationUIManager* notification_ui_manager = g_browser_process->notification_ui_manager(); if (notification_ui_manager->DelegatesToMessageCenter()) { MessageCenterNotificationManager* message_center_notification_manager = static_cast(notification_ui_manager); message_center_notification_manager->EnsureMessageCenterClosed(); } } } // namespace WelcomeDelegate::WelcomeDelegate(const std::string& notification_id, Profile* profile, const message_center::NotifierId notifier_id) : notification_id_(notification_id), profile_(profile), notifier_id_(notifier_id) { DCHECK_EQ(message_center::NotifierId::SYNCED_NOTIFICATION_SERVICE, notifier_id.type); } WelcomeDelegate::~WelcomeDelegate() {} void WelcomeDelegate::Display() {} void WelcomeDelegate::Error() {} void WelcomeDelegate::Close(bool by_user) {} void WelcomeDelegate::Click() { g_browser_process->notification_ui_manager()->CancelById(notification_id_); // TODO(dewittj): Notifications that remove themselves are currently poorly // supported. We need to make it possible to completely remove a notification // while the center is open, and then this section can be removed. UpdateMessageCenter(); } void WelcomeDelegate::ButtonClick(int button_index) { DCHECK_EQ(0, button_index); // We take a reference to ourselves to prevent destruction until the end of // this method. scoped_refptr this_ptr(this); // WARNING: This line causes the |this| to be released. g_browser_process->notification_ui_manager()->CancelById(notification_id_); DesktopNotificationService* notification_service = DesktopNotificationServiceFactory::GetForProfile(profile_); if (notification_service) notification_service->SetNotifierEnabled(notifier_id_, false); ChromeNotifierService* notifier_service = ChromeNotifierServiceFactory::GetForProfile(profile_, Profile::EXPLICIT_ACCESS); if (notifier_service) { notifier_service->OnSyncedNotificationServiceEnabled(notifier_id_.id, false); } // TODO(dewittj): Notifications that remove themselves are currently poorly // supported. We need to make it possible to completely remove a notification // while the center is open, and then this section can be removed. UpdateMessageCenter(); } std::string WelcomeDelegate::id() const { return notification_id_; } content::RenderViewHost* WelcomeDelegate::GetRenderViewHost() const { return NULL; } } // namespace notifier