Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(65)

Unified Diff: chrome/browser/ui/views/balloon_collection_impl_win.cc

Issue 11819048: Implement message center on Windows (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Now with more tests, and corrected copyright notices. Created 7 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/views/balloon_collection_impl_win.cc
diff --git a/chrome/browser/ui/views/balloon_collection_impl_win.cc b/chrome/browser/ui/views/balloon_collection_impl_win.cc
new file mode 100644
index 0000000000000000000000000000000000000000..7359eb653e5e5c9c45e2816e31d7a9446ec19621
--- /dev/null
+++ b/chrome/browser/ui/views/balloon_collection_impl_win.cc
@@ -0,0 +1,137 @@
+// Copyright (c) 2013 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/ui/views/balloon_collection_impl_win.h"
+
+#include "chrome/browser/extensions/extension_service.h"
+#include "chrome/browser/notifications/balloon.h"
+#include "chrome/browser/notifications/desktop_notification_service.h"
+#include "chrome/browser/notifications/desktop_notification_service_factory.h"
+#include "chrome/browser/notifications/notification.h"
+#include "chrome/browser/notifications/notification_ui_manager.h"
+#include "chrome/browser/profiles/profile_manager.h"
+#include "chrome/browser/ui/browser_finder.h"
+#include "chrome/browser/ui/chrome_pages.h"
+#include "chrome/browser/ui/views/balloon_view_win.h"
+#include "chrome/browser/ui/views/message_center/web_notification_tray_win.h"
+#include "chrome/browser/ui/views/notifications/balloon_view_host.h"
+#include "chrome/browser/ui/views/notifications/balloon_view_views.h"
+#include "ui/message_center/message_center_tray.h"
+
+BalloonCollectionImplWin::BalloonCollectionImplWin() {
+ ui::WebNotificationTrayWin* host =
+ ui::WebNotificationTrayWin::GetInstance();
+ host->message_center()->SetDelegate(this);
sky 2013/01/18 21:30:56 You never unset this.
dewittj 2013/01/20 19:02:06 File gone.
+}
+
+BalloonCollectionImplWin::~BalloonCollectionImplWin() {
+}
+
+bool BalloonCollectionImplWin::HasSpace() const {
+ return true; // Overflow is handled by messagecentertray
sky 2013/01/18 21:30:56 end with period.
dewittj 2013/01/20 19:02:06 File gone.
Pete Williamson 2013/01/23 19:52:16 nit: also camel case it: MessageCenterTray.
dewittj 2013/01/23 22:07:51 File gone.
+}
+
+void BalloonCollectionImplWin::Add(const Notification& notification,
+ Profile* profile) {
+ if (notification.is_html())
+ return; // HTML notifications are not supported in Win.
Pete Williamson 2013/01/23 19:52:16 nit - they aren't supported anywhere afaik, so we
dewittj 2013/01/23 22:07:51 File gone.
+ if (notification.title().empty() && notification.body().empty())
+ return; // Empty notification, don't show.
+ return BalloonCollectionImpl::Add(notification, profile);
+}
+
+void BalloonCollectionImplWin::DisableExtension(
+ const std::string& notification_id) {
+ Balloon* balloon = base().FindBalloonById(notification_id);
+ const extensions::Extension* extension = GetBalloonExtension(balloon);
+ if (!extension)
+ return;
+ balloon->profile()->GetExtensionService()->DisableExtension(
+ extension->id(), extensions::Extension::DISABLE_USER_ACTION);
+}
+
+void BalloonCollectionImplWin::DisableNotificationsFromSource(
+ const std::string& notification_id) {
+ Balloon* balloon = base().FindBalloonById(notification_id);
+ if (!balloon)
+ return;
+ DesktopNotificationService* service =
+ DesktopNotificationServiceFactory::GetForProfile(balloon->profile());
+ service->DenyPermission(balloon->notification().origin_url());
+}
+
Pete Williamson 2013/01/23 19:52:16 Overall comment - there is a lot of similarity bet
dewittj 2013/01/23 22:07:51 File gone.
+void BalloonCollectionImplWin::NotificationRemoved(
+ const std::string& notification_id) {
+ RemoveById(notification_id);
+}
+
+void BalloonCollectionImplWin::ShowSettings(
+ const std::string& notification_id) {
+ Balloon* balloon = base().FindBalloonById(notification_id);
+ Profile* profile =
+ balloon ? balloon->profile() : ProfileManager::GetDefaultProfile();
+ Browser* browser = chrome::FindOrCreateTabbedBrowser(
+ profile,
+ chrome::HOST_DESKTOP_TYPE_NATIVE);
+ if (GetBalloonExtension(balloon))
+ chrome::ShowExtensions(browser);
+ else
+ chrome::ShowContentSettings(browser, CONTENT_SETTINGS_TYPE_NOTIFICATIONS);
+}
+
+void BalloonCollectionImplWin::OnClicked(const std::string& notification_id) {
+ Balloon* balloon = base().FindBalloonById(notification_id);
+ if (!balloon)
+ return;
+ balloon->OnClick();
+}
+
+void BalloonCollectionImplWin::OnButtonClicked(
+ const std::string& notification_id, int button_index) {
+ Balloon* balloon = base().FindBalloonById(notification_id);
+ if (balloon)
+ balloon->OnButtonClick(button_index);
+}
+
+bool BalloonCollectionImplWin::UpdateNotification(
+ const Notification& notification) {
+ Balloon* balloon = base().FindBalloon(notification);
+ if (!balloon)
+ return false;
+ balloon->Update(notification);
+ return true;
+}
+
+bool BalloonCollectionImplWin::UpdateAndShowNotification(
+ const Notification& notification) {
+ return UpdateNotification(notification);
+}
+
+Balloon* BalloonCollectionImplWin::MakeBalloon(
+ const Notification& notification, Profile* profile) {
+ Balloon* balloon = new Balloon(notification, profile, this);
+ BalloonViewWin* balloon_view = new BalloonViewWin(this);
+ balloon->set_view(balloon_view);
+ return balloon;
+}
+
+const extensions::Extension* BalloonCollectionImplWin::GetBalloonExtension(
+ Balloon* balloon) {
+ if (!balloon)
+ return NULL;
+ ExtensionService* extension_service =
+ balloon->profile()->GetExtensionService();
+ const GURL& origin = balloon->notification().origin_url();
+ return extension_service->extensions()->GetExtensionOrAppByURL(
+ ExtensionURLInfo(origin));
+}
+
+#if defined(OS_WIN)
Pete Williamson 2013/01/23 19:52:16 Why do we need this #define? I would have expecte
dewittj 2013/01/23 22:07:51 File gone.
+// static
+BalloonCollection* BalloonCollection::Create() {
+ if (NotificationUIManager::DelegatesToMessageCenter())
+ return new BalloonCollectionImplWin();
+ return new BalloonCollectionImpl();
+}
+#endif

Powered by Google App Engine
This is Rietveld 408576698