Commit 3b78b67c authored by rohitrao@chromium.org's avatar rohitrao@chromium.org

Revert 107722 - Implement notifications for the DisplayBalloon method on Linux and Mac.

BUG=74970
TEST=install background app on window, see desktop notification.

Review URL: http://codereview.chromium.org/8375027

TBR=leandrogracia@chromium.org
Review URL: http://codereview.chromium.org/8417027

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@107727 0039d316-1c4b-4281-b951-d872f2087c98
parent b77651af
// Copyright (c) 2011 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/status_icons/desktop_notification_balloon.h"
#include "base/bind.h"
#include "base/string_number_conversions.h"
#include "base/threading/thread_restrictions.h"
#include "chrome/browser/browser_process.h"
#include "chrome/browser/notifications/desktop_notification_service.h"
#include "chrome/browser/notifications/notification.h"
#include "chrome/browser/notifications/notification_delegate.h"
#include "chrome/browser/notifications/notification_ui_manager.h"
#include "chrome/browser/profiles/profile_manager.h"
#include "chrome/browser/ui/webui/web_ui_util.h"
#include "third_party/skia/include/core/SkBitmap.h"
namespace {
void CloseBalloon(const std::string& id) {
g_browser_process->notification_ui_manager()->CancelById(id);
}
// Prefix added to the notification ids.
const char kNotificationPrefix[] = "desktop_notification_balloon.";
// Timeout for automatically dismissing the notification balloon.
const size_t kTimeoutMilliseconds = 6000;
class DummyNotificationDelegate : public NotificationDelegate {
public:
explicit DummyNotificationDelegate(const std::string& id)
: id_(kNotificationPrefix + id) {}
virtual ~DummyNotificationDelegate() {}
virtual void Display() OVERRIDE {
MessageLoop::current()->PostDelayedTask(FROM_HERE,
base::Bind(&CloseBalloon, id()), kTimeoutMilliseconds);
}
virtual void Error() OVERRIDE {}
virtual void Close(bool by_user) OVERRIDE {}
virtual void Click() OVERRIDE {}
virtual std::string id() const OVERRIDE { return id_; }
private:
std::string id_;
};
} // anonymous namespace
int DesktopNotificationBalloon::id_count_ = 1;
DesktopNotificationBalloon::DesktopNotificationBalloon() {
}
DesktopNotificationBalloon::~DesktopNotificationBalloon() {
if (notification_.get())
CloseBalloon(notification_->notification_id());
}
void DesktopNotificationBalloon::DisplayBalloon(const SkBitmap& icon,
const string16& title,
const string16& contents) {
GURL icon_url;
if (!icon.empty())
icon_url = GURL(web_ui_util::GetImageDataUrl(icon));
GURL content_url(DesktopNotificationService::CreateDataUrl(
icon_url, title, contents, WebKit::WebTextDirectionDefault));
notification_.reset(new Notification(
GURL(), content_url, string16(), string16(),
new DummyNotificationDelegate(base::IntToString(id_count_++))));
// Allowing IO access is required here to cover the corner case where
// there is no last used profile and the default one is loaded.
// IO access won't be required for normal uses.
base::ThreadRestrictions::ScopedAllowIO allow_io;
g_browser_process->notification_ui_manager()->Add(
*notification_.get(), ProfileManager::GetLastUsedProfile());
}
// Copyright (c) 2011 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.
#ifndef CHROME_BROWSER_STATUS_ICONS_DESKTOP_NOTIFICATION_BALLOON_H_
#define CHROME_BROWSER_STATUS_ICONS_DESKTOP_NOTIFICATION_BALLOON_H_
#pragma once
#include "base/compiler_specific.h"
#include "base/memory/scoped_ptr.h"
#include "base/string16.h"
class Notification;
class SkBitmap;
// Provides the notification balloon functionality by using desktop
// notifications to platforms that don't have a specific native API.
class DesktopNotificationBalloon {
public:
DesktopNotificationBalloon();
virtual ~DesktopNotificationBalloon();
void DisplayBalloon(const SkBitmap& icon,
const string16& title,
const string16& contents);
private:
// Notification balloon.
scoped_ptr<Notification> notification_;
// Counter to provide unique ids to notifications.
static int id_count_;
DISALLOW_COPY_AND_ASSIGN(DesktopNotificationBalloon);
};
#endif // CHROME_BROWSER_STATUS_ICONS_DESKTOP_NOTIFICATION_BALLOON_H_
...@@ -11,7 +11,6 @@ ...@@ -11,7 +11,6 @@
#include "base/compiler_specific.h" #include "base/compiler_specific.h"
#include "base/memory/scoped_nsobject.h" #include "base/memory/scoped_nsobject.h"
#include "base/string16.h" #include "base/string16.h"
#include "chrome/browser/status_icons/desktop_notification_balloon.h"
#include "chrome/browser/status_icons/status_icon.h" #include "chrome/browser/status_icons/status_icon.h"
class SkBitmap; class SkBitmap;
...@@ -23,7 +22,7 @@ class StatusIconMac : public StatusIcon { ...@@ -23,7 +22,7 @@ class StatusIconMac : public StatusIcon {
StatusIconMac(); StatusIconMac();
virtual ~StatusIconMac(); virtual ~StatusIconMac();
// Overridden from StatusIcon. // Overridden from StatusIcon
virtual void SetImage(const SkBitmap& image) OVERRIDE; virtual void SetImage(const SkBitmap& image) OVERRIDE;
virtual void SetPressedImage(const SkBitmap& image) OVERRIDE; virtual void SetPressedImage(const SkBitmap& image) OVERRIDE;
virtual void SetToolTip(const string16& tool_tip) OVERRIDE; virtual void SetToolTip(const string16& tool_tip) OVERRIDE;
...@@ -42,9 +41,6 @@ class StatusIconMac : public StatusIcon { ...@@ -42,9 +41,6 @@ class StatusIconMac : public StatusIcon {
scoped_nsobject<StatusItemController> controller_; scoped_nsobject<StatusItemController> controller_;
// Notification balloon.
DesktopNotificationBalloon notification_;
DISALLOW_COPY_AND_ASSIGN(StatusIconMac); DISALLOW_COPY_AND_ASSIGN(StatusIconMac);
}; };
......
...@@ -79,7 +79,9 @@ void StatusIconMac::SetToolTip(const string16& tool_tip) { ...@@ -79,7 +79,9 @@ void StatusIconMac::SetToolTip(const string16& tool_tip) {
void StatusIconMac::DisplayBalloon(const SkBitmap& icon, void StatusIconMac::DisplayBalloon(const SkBitmap& icon,
const string16& title, const string16& title,
const string16& contents) { const string16& contents) {
notification_.DisplayBalloon(icon, title, contents); // TODO(atwilson): Figure out the right UI to display here when actually
// needed (not yet called).
// http://crbug.com/74970
} }
void StatusIconMac::UpdatePlatformContextMenu(ui::MenuModel* menu) { void StatusIconMac::UpdatePlatformContextMenu(ui::MenuModel* menu) {
......
...@@ -45,7 +45,8 @@ void StatusIconGtk::SetToolTip(const string16& tool_tip) { ...@@ -45,7 +45,8 @@ void StatusIconGtk::SetToolTip(const string16& tool_tip) {
void StatusIconGtk::DisplayBalloon(const SkBitmap& icon, void StatusIconGtk::DisplayBalloon(const SkBitmap& icon,
const string16& title, const string16& title,
const string16& contents) { const string16& contents) {
notification_.DisplayBalloon(icon, title, contents); // TODO(atwilson): Figure out the right thing to do here.
// http://crbug.com/74970
} }
void StatusIconGtk::OnClick(GtkWidget* widget) { void StatusIconGtk::OnClick(GtkWidget* widget) {
......
...@@ -9,7 +9,6 @@ ...@@ -9,7 +9,6 @@
#include <gtk/gtk.h> #include <gtk/gtk.h>
#include "base/compiler_specific.h" #include "base/compiler_specific.h"
#include "chrome/browser/status_icons/desktop_notification_balloon.h"
#include "chrome/browser/status_icons/status_icon.h" #include "chrome/browser/status_icons/status_icon.h"
#include "ui/base/gtk/gtk_signal.h" #include "ui/base/gtk/gtk_signal.h"
...@@ -27,7 +26,7 @@ class StatusIconGtk : public StatusIcon { ...@@ -27,7 +26,7 @@ class StatusIconGtk : public StatusIcon {
virtual void SetToolTip(const string16& tool_tip) OVERRIDE; virtual void SetToolTip(const string16& tool_tip) OVERRIDE;
virtual void DisplayBalloon(const SkBitmap& icon, virtual void DisplayBalloon(const SkBitmap& icon,
const string16& title, const string16& title,
const string16& contents) OVERRIDE; const string16& contents);
// Exposed for testing. // Exposed for testing.
CHROMEGTK_CALLBACK_0(StatusIconGtk, void, OnClick); CHROMEGTK_CALLBACK_0(StatusIconGtk, void, OnClick);
...@@ -46,9 +45,6 @@ class StatusIconGtk : public StatusIcon { ...@@ -46,9 +45,6 @@ class StatusIconGtk : public StatusIcon {
// The context menu for this icon (if any). // The context menu for this icon (if any).
scoped_ptr<MenuGtk> menu_; scoped_ptr<MenuGtk> menu_;
// Notification balloon.
DesktopNotificationBalloon notification_;
DISALLOW_COPY_AND_ASSIGN(StatusIconGtk); DISALLOW_COPY_AND_ASSIGN(StatusIconGtk);
}; };
......
...@@ -2159,8 +2159,6 @@ ...@@ -2159,8 +2159,6 @@
'browser/ssl/ssl_error_info.cc', 'browser/ssl/ssl_error_info.cc',
'browser/ssl/ssl_error_info.h', 'browser/ssl/ssl_error_info.h',
'browser/ssl_client_certificate_selector.h', 'browser/ssl_client_certificate_selector.h',
'browser/status_icons/desktop_notification_balloon.cc',
'browser/status_icons/desktop_notification_balloon.h',
'browser/status_icons/status_icon.cc', 'browser/status_icons/status_icon.cc',
'browser/status_icons/status_icon.h', 'browser/status_icons/status_icon.h',
'browser/status_icons/status_tray.cc', 'browser/status_icons/status_tray.cc',
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment