summaryrefslogtreecommitdiffstats
path: root/chrome/browser/notifications
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/notifications')
-rw-r--r--chrome/browser/notifications/balloon.cc90
-rw-r--r--chrome/browser/notifications/balloon.h143
-rw-r--r--chrome/browser/notifications/balloon_collection.cc12
-rw-r--r--chrome/browser/notifications/balloon_collection.h113
-rw-r--r--chrome/browser/notifications/balloon_collection_base.cc117
-rw-r--r--chrome/browser/notifications/balloon_collection_base.h76
-rw-r--r--chrome/browser/notifications/balloon_collection_impl.cc463
-rw-r--r--chrome/browser/notifications/balloon_collection_impl.h219
-rw-r--r--chrome/browser/notifications/balloon_host.cc181
-rw-r--r--chrome/browser/notifications/balloon_host.h104
-rw-r--r--chrome/browser/notifications/balloon_notification_ui_manager.cc307
-rw-r--r--chrome/browser/notifications/balloon_notification_ui_manager.h111
-rw-r--r--chrome/browser/notifications/desktop_notification_service.cc60
-rw-r--r--chrome/browser/notifications/desktop_notification_service.h18
-rw-r--r--chrome/browser/notifications/desktop_notifications_unittest.cc588
-rw-r--r--chrome/browser/notifications/desktop_notifications_unittest.h139
-rw-r--r--chrome/browser/notifications/fake_balloon_view.cc33
-rw-r--r--chrome/browser/notifications/fake_balloon_view.h34
-rw-r--r--chrome/browser/notifications/message_center_notification_manager.cc7
-rw-r--r--chrome/browser/notifications/message_center_notification_manager.h4
-rw-r--r--chrome/browser/notifications/message_center_notifications_browsertest.cc95
-rw-r--r--chrome/browser/notifications/message_center_notifications_unittest_win.cc5
-rw-r--r--chrome/browser/notifications/notification.cc8
-rw-r--r--chrome/browser/notifications/notification_browsertest.cc221
-rw-r--r--chrome/browser/notifications/notification_options_menu_model.cc280
-rw-r--r--chrome/browser/notifications/notification_options_menu_model.h64
-rw-r--r--chrome/browser/notifications/notification_prefs_manager.cc30
-rw-r--r--chrome/browser/notifications/notification_prefs_manager.h39
-rw-r--r--chrome/browser/notifications/notification_ui_manager.cc43
-rw-r--r--chrome/browser/notifications/notification_ui_manager.h7
-rw-r--r--chrome/browser/notifications/sync_notifier/synced_notification.cc209
-rw-r--r--chrome/browser/notifications/sync_notifier/synced_notification_unittest.cc23
-rw-r--r--chrome/browser/notifications/sync_notifier/welcome_delegate.cc8
33 files changed, 159 insertions, 3692 deletions
diff --git a/chrome/browser/notifications/balloon.cc b/chrome/browser/notifications/balloon.cc
deleted file mode 100644
index 3da956b..0000000
--- a/chrome/browser/notifications/balloon.cc
+++ /dev/null
@@ -1,90 +0,0 @@
-// Copyright (c) 2012 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/balloon.h"
-
-#include "base/logging.h"
-#include "chrome/browser/extensions/extension_service.h"
-#include "chrome/browser/notifications/balloon_collection.h"
-#include "chrome/browser/notifications/notification.h"
-#include "chrome/browser/profiles/profile.h"
-#include "ui/gfx/rect.h"
-#include "ui/gfx/size.h"
-
-#if !defined(USE_AURA)
-// static
-int BalloonView::GetHorizontalMargin() {
- // TODO: implement for linux (non-aura) and mac.
- return 0;
-}
-#endif
-
-Balloon::Balloon(const Notification& notification, Profile* profile,
- BalloonCollection* collection)
- : profile_(profile),
- notification_(new Notification(notification)),
- collection_(collection) {
-}
-
-Balloon::~Balloon() {
-}
-
-void Balloon::SetPosition(const gfx::Point& upper_left, bool reposition) {
- position_ = upper_left;
- if (reposition && balloon_view_.get())
- balloon_view_->RepositionToBalloon();
-}
-
-void Balloon::ResizeDueToAutoResize(const gfx::Size& size) {
- collection_->ResizeBalloon(this, size);
-}
-
-void Balloon::set_view(BalloonView* balloon_view) {
- balloon_view_.reset(balloon_view);
-}
-
-void Balloon::Show() {
- notification_->Display();
- if (balloon_view_.get()) {
- balloon_view_->Show(this);
- balloon_view_->RepositionToBalloon();
- }
-}
-
-void Balloon::Update(const Notification& notification) {
- notification_->Close(false);
- notification_.reset(new Notification(notification));
- notification_->Display();
- if (balloon_view_.get()) {
- balloon_view_->Update();
- }
-}
-
-void Balloon::OnClick() {
- notification_->Click();
-}
-
-void Balloon::OnClose(bool by_user) {
- notification_->Close(by_user);
- collection_->OnBalloonClosed(this);
-}
-
-void Balloon::OnButtonClick(int button_index) {
- notification_->ButtonClick(button_index);
-}
-
-void Balloon::CloseByScript() {
- // A user-initiated close begins with the view and then closes this object;
- // we simulate that with a script-initiated close but pass |by_user|=false.
- DCHECK(balloon_view_.get());
- balloon_view_->Close(false);
-}
-
-std::string Balloon::GetExtensionId() {
- const ExtensionService* service = profile()->GetExtensionService();
- const extensions::Extension* extension =
- service->extensions()->GetExtensionOrAppByURL(
- notification().origin_url());
- return extension ? extension->id() : std::string();
-}
diff --git a/chrome/browser/notifications/balloon.h b/chrome/browser/notifications/balloon.h
deleted file mode 100644
index 51b520d..0000000
--- a/chrome/browser/notifications/balloon.h
+++ /dev/null
@@ -1,143 +0,0 @@
-// Copyright (c) 2012 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.
-
-// Handles the visible notification (or balloons).
-
-#ifndef CHROME_BROWSER_NOTIFICATIONS_BALLOON_H_
-#define CHROME_BROWSER_NOTIFICATIONS_BALLOON_H_
-
-#include "base/basictypes.h"
-#include "base/memory/scoped_ptr.h"
-#include "ui/gfx/point.h"
-#include "ui/gfx/rect.h"
-#include "ui/gfx/size.h"
-
-class Balloon;
-class BalloonCollection;
-class BalloonHost;
-class Notification;
-class Profile;
-
-// Interface for a view that displays a balloon.
-class BalloonView {
- public:
- virtual ~BalloonView() {}
-
- // Show the view on the screen.
- virtual void Show(Balloon* balloon) = 0;
-
- // Notify that the content of notification has chagned.
- virtual void Update() = 0;
-
- // Reposition the view to match the position of its balloon.
- virtual void RepositionToBalloon() = 0;
-
- // Close the view.
- virtual void Close(bool by_user) = 0;
-
- // The total size of the view.
- virtual gfx::Size GetSize() const = 0;
-
- // The host for the view's contents. May be NULL if an implementation does
- // not have a host associated with it (i.e. does not do html rendering).
- virtual BalloonHost* GetHost() const = 0;
-
- // Returns the horizontal margin the content is inset by.
- static int GetHorizontalMargin();
-};
-
-// Represents a Notification on the screen.
-class Balloon {
- public:
- Balloon(const Notification& notification,
- Profile* profile,
- BalloonCollection* collection);
- virtual ~Balloon();
-
- const Notification& notification() const { return *notification_.get(); }
- Profile* profile() const { return profile_; }
-
- gfx::Point GetPosition() const {
- return position_ + offset_;
- }
- void SetPosition(const gfx::Point& upper_left, bool reposition);
-
- const gfx::Vector2d& offset() const { return offset_; }
- void set_offset(const gfx::Vector2d& offset) { offset_ = offset; }
- void add_offset(const gfx::Vector2d& offset) { offset_.Add(offset); }
-
- const gfx::Size& content_size() const { return content_size_; }
- void set_content_size(const gfx::Size& size) { content_size_ = size; }
-
- const BalloonCollection* collection() const { return collection_; }
-
- const gfx::Size& min_scrollbar_size() const { return min_scrollbar_size_; }
- void set_min_scrollbar_size(const gfx::Size& size) {
- min_scrollbar_size_ = size;
- }
-
- // Request a new content size for this balloon. This will get passed
- // to the balloon collection for checking against available space and
- // min/max restrictions.
- void ResizeDueToAutoResize(const gfx::Size& size);
-
- // Provides a view for this balloon. Ownership transfers to this object.
- void set_view(BalloonView* balloon_view);
-
- // Returns the balloon view associated with the balloon.
- BalloonView* balloon_view() const { return balloon_view_.get(); }
-
- // Returns the viewing size for the balloon (content + frame).
- gfx::Size GetViewSize() const { return balloon_view_->GetSize(); }
-
- // Shows the balloon.
- virtual void Show();
-
- // Notify that the content of notification has changed.
- virtual void Update(const Notification& notification);
-
- // Called when the balloon is clicked by the user.
- virtual void OnClick();
-
- // Called when the user clicks a button in the balloon.
- virtual void OnButtonClick(int button_index);
-
- // Called when the balloon is closed, either by user (through the UI)
- // or by a script.
- virtual void OnClose(bool by_user);
-
- // Called by script to cause the balloon to close.
- virtual void CloseByScript();
-
- // Returns the ID of the extension that created this balloon's notification.
- std::string GetExtensionId();
-
- private:
- // Non-owned pointer to the profile.
- Profile* profile_;
-
- // The notification being shown in this balloon.
- scoped_ptr<Notification> notification_;
-
- // The collection that this balloon belongs to. Non-owned pointer.
- BalloonCollection* collection_;
-
- // The actual UI element for the balloon.
- scoped_ptr<BalloonView> balloon_view_;
-
- // Position and size of the balloon on the screen.
- gfx::Point position_;
- gfx::Size content_size_;
-
- // Temporary offset for balloons that need to be positioned in a non-standard
- // position for keeping the close buttons under the mouse cursor.
- gfx::Vector2d offset_;
-
- // Smallest size for this balloon where scrollbars will be shown.
- gfx::Size min_scrollbar_size_;
-
- DISALLOW_COPY_AND_ASSIGN(Balloon);
-};
-
-#endif // CHROME_BROWSER_NOTIFICATIONS_BALLOON_H_
diff --git a/chrome/browser/notifications/balloon_collection.cc b/chrome/browser/notifications/balloon_collection.cc
deleted file mode 100644
index 48059f5..0000000
--- a/chrome/browser/notifications/balloon_collection.cc
+++ /dev/null
@@ -1,12 +0,0 @@
-// 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/notifications/balloon_collection.h"
-
-BalloonCollection::BalloonCollection()
- : space_change_listener_(NULL) {
-}
-
-BalloonCollection::~BalloonCollection() {
-}
diff --git a/chrome/browser/notifications/balloon_collection.h b/chrome/browser/notifications/balloon_collection.h
deleted file mode 100644
index 5d54b7d..0000000
--- a/chrome/browser/notifications/balloon_collection.h
+++ /dev/null
@@ -1,113 +0,0 @@
-// 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.
-
-// Handles the visible notification (or balloons).
-
-#ifndef CHROME_BROWSER_NOTIFICATIONS_BALLOON_COLLECTION_H_
-#define CHROME_BROWSER_NOTIFICATIONS_BALLOON_COLLECTION_H_
-
-#include <deque>
-#include <string>
-
-#include "base/callback.h"
-
-class Balloon;
-class GURL;
-class Notification;
-class Profile;
-
-namespace gfx {
-class Size;
-}
-
-class BalloonCollection {
- public:
- class BalloonSpaceChangeListener {
- public:
- virtual ~BalloonSpaceChangeListener() {}
-
- // Called when there is more or less space for balloons due to
- // monitor size changes or balloons disappearing.
- virtual void OnBalloonSpaceChanged() = 0;
- };
-
- // Do not change existing values without migration path; these
- // are stored as integers in user preferences.
- enum PositionPreference {
- UPPER_RIGHT = 0,
- LOWER_RIGHT = 1,
- UPPER_LEFT = 2,
- LOWER_LEFT = 3,
-
- // The default position is different on different platforms.
- DEFAULT_POSITION = -1
- };
-
- static BalloonCollection* Create();
-
- BalloonCollection();
-
- virtual ~BalloonCollection();
-
- // Adds a new balloon for the specified notification.
- virtual void Add(const Notification& notification,
- Profile* profile) = 0;
-
- // Returns true if any balloon has this notification id.
- virtual const Notification* FindById(const std::string& id) const = 0;
-
- // Removes any balloons that have this notification id. Returns
- // true if anything was removed.
- virtual bool RemoveById(const std::string& id) = 0;
-
- // Removes any balloons that have this source origin. Returns
- // true if anything was removed.
- virtual bool RemoveBySourceOrigin(const GURL& source_origin) = 0;
-
- // Removes any balloons matching |profile. Returns true if any were removed.
- virtual bool RemoveByProfile(Profile* profile) = 0;
-
- // Removes all balloons.
- virtual void RemoveAll() = 0;
-
- // Is there room to add another notification?
- virtual bool HasSpace() const = 0;
-
- // Request the resizing of a balloon.
- virtual void ResizeBalloon(Balloon* balloon, const gfx::Size& size) = 0;
-
- // Set the position preference for the collection.
- virtual void SetPositionPreference(PositionPreference position) = 0;
-
- // Update for new screen dimensions.
- virtual void DisplayChanged() = 0;
-
- // Inform the collection that a balloon was closed.
- virtual void OnBalloonClosed(Balloon* source) = 0;
-
- // Get const collection of the active balloons.
- typedef std::deque<Balloon*> Balloons;
- virtual const Balloons& GetActiveBalloons() = 0;
-
- BalloonSpaceChangeListener* space_change_listener() {
- return space_change_listener_;
- }
- void set_space_change_listener(BalloonSpaceChangeListener* listener) {
- space_change_listener_ = listener;
- }
-
- void set_on_collection_changed_callback(const base::Closure& callback) {
- on_collection_changed_callback_ = callback;
- }
-
- protected:
- // Non-owned pointer to an object listening for space changes.
- BalloonSpaceChangeListener* space_change_listener_;
-
- // For use only with testing. This callback is invoked when a balloon
- // is added or removed from the collection.
- base::Closure on_collection_changed_callback_;
-};
-
-#endif // CHROME_BROWSER_NOTIFICATIONS_BALLOON_COLLECTION_H_
diff --git a/chrome/browser/notifications/balloon_collection_base.cc b/chrome/browser/notifications/balloon_collection_base.cc
deleted file mode 100644
index b7f8669..0000000
--- a/chrome/browser/notifications/balloon_collection_base.cc
+++ /dev/null
@@ -1,117 +0,0 @@
-// Copyright (c) 2012 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/balloon_collection_base.h"
-
-#include "base/stl_util.h"
-#include "chrome/browser/notifications/balloon.h"
-#include "chrome/browser/notifications/notification.h"
-#include "url/gurl.h"
-
-BalloonCollectionBase::BalloonCollectionBase() {
-}
-
-BalloonCollectionBase::~BalloonCollectionBase() {
- STLDeleteElements(&balloons_);
-}
-
-void BalloonCollectionBase::Add(Balloon* balloon, bool add_to_front) {
- if (add_to_front)
- balloons_.push_front(balloon);
- else
- balloons_.push_back(balloon);
-}
-
-void BalloonCollectionBase::Remove(Balloon* balloon) {
- // Free after removing.
- scoped_ptr<Balloon> to_delete(balloon);
- Balloons::iterator iter;
- for (iter = balloons_.begin(); iter != balloons_.end(); ++iter) {
- if ((*iter) == balloon) {
- balloons_.erase(iter);
- return;
- }
- }
-}
-
-const Notification* BalloonCollectionBase::FindById(
- const std::string& id) const {
- Balloons::const_iterator iter;
- for (iter = balloons_.begin(); iter != balloons_.end(); ++iter) {
- if ((*iter)->notification().notification_id() == id) {
- return &((*iter)->notification());
- }
- }
- return NULL;
-}
-
-bool BalloonCollectionBase::CloseById(const std::string& id) {
- // Use a local list of balloons to close to avoid breaking
- // iterator changes on each close.
- Balloons to_close;
- Balloons::iterator iter;
- for (iter = balloons_.begin(); iter != balloons_.end(); ++iter) {
- if ((*iter)->notification().notification_id() == id)
- to_close.push_back(*iter);
- }
- for (iter = to_close.begin(); iter != to_close.end(); ++iter)
- (*iter)->CloseByScript();
-
- return !to_close.empty();
-}
-
-bool BalloonCollectionBase::CloseAllBySourceOrigin(
- const GURL& source_origin) {
- // Use a local list of balloons to close to avoid breaking
- // iterator changes on each close.
- Balloons to_close;
- Balloons::iterator iter;
- for (iter = balloons_.begin(); iter != balloons_.end(); ++iter) {
- if ((*iter)->notification().origin_url() == source_origin)
- to_close.push_back(*iter);
- }
- for (iter = to_close.begin(); iter != to_close.end(); ++iter)
- (*iter)->CloseByScript();
-
- return !to_close.empty();
-}
-
-bool BalloonCollectionBase::CloseAllByProfile(Profile* profile) {
- // Use a local list of balloons to close to avoid breaking
- // iterator changes on each close.
- Balloons to_close;
- Balloons::iterator iter;
- for (iter = balloons_.begin(); iter != balloons_.end(); ++iter) {
- if ((*iter)->profile() == profile)
- to_close.push_back(*iter);
- }
- for (iter = to_close.begin(); iter != to_close.end(); ++iter)
- (*iter)->CloseByScript();
-
- return !to_close.empty();
-}
-
-void BalloonCollectionBase::CloseAll() {
- // Use a local list of balloons to close to avoid breaking
- // iterator changes on each close.
- Balloons to_close = balloons_;
- for (Balloons::iterator iter = to_close.begin();
- iter != to_close.end(); ++iter)
- (*iter)->CloseByScript();
-}
-
-Balloon* BalloonCollectionBase::FindBalloonById(
- const std::string& notification_id) {
- Balloons::iterator iter;
- for (iter = balloons_.begin(); iter != balloons_.end(); ++iter) {
- if ((*iter)->notification().notification_id() == notification_id) {
- return *iter;
- }
- }
- return NULL;
-}
-
-Balloon* BalloonCollectionBase::FindBalloon(const Notification& notification) {
- return FindBalloonById(notification.notification_id());
-}
diff --git a/chrome/browser/notifications/balloon_collection_base.h b/chrome/browser/notifications/balloon_collection_base.h
deleted file mode 100644
index 89f3341..0000000
--- a/chrome/browser/notifications/balloon_collection_base.h
+++ /dev/null
@@ -1,76 +0,0 @@
-// Copyright (c) 2012 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.
-
-// Handles the visible notification (or balloons).
-
-#ifndef CHROME_BROWSER_NOTIFICATIONS_BALLOON_COLLECTION_BASE_H_
-#define CHROME_BROWSER_NOTIFICATIONS_BALLOON_COLLECTION_BASE_H_
-
-#include <deque>
-#include <string>
-
-#include "base/basictypes.h"
-
-class Balloon;
-class GURL;
-class Notification;
-class Profile;
-
-// This class provides support for implementing a BalloonCollection
-// including the parts common between Chrome UI and ChromeOS UI.
-class BalloonCollectionBase {
- public:
- BalloonCollectionBase();
- virtual ~BalloonCollectionBase();
-
- typedef std::deque<Balloon*> Balloons;
-
- // Adds a balloon to the collection. Takes ownership of pointer.
- virtual void Add(Balloon* balloon, bool add_to_front);
-
- // Removes a balloon from the collection (if present). Frees
- // the pointer after removal.
- virtual void Remove(Balloon* balloon);
-
- // Returns true if any balloon matches the given notification id.
- virtual const Notification* FindById(const std::string& id) const;
-
- // Finds any balloon matching the given notification id, and
- // calls CloseByScript on it. Returns true if anything was
- // found.
- virtual bool CloseById(const std::string& id);
-
- // Finds all balloons matching the given notification source,
- // and calls CloseByScript on them. Returns true if anything
- // was found.
- virtual bool CloseAllBySourceOrigin(const GURL& source_origin);
-
- // Finds all balloons matching the given profile and calls CloseByScript
- // on them. Returns true if anything was found.
- virtual bool CloseAllByProfile(Profile* profile);
-
- // Calls CloseByScript on all balloons.
- virtual void CloseAll();
-
- const Balloons& balloons() const { return balloons_; }
-
- // Returns the balloon matching the given notification id, or
- // NULL if there is no matching balloon.
- Balloon* FindBalloonById(const std::string& notification_id);
-
- // Returns the balloon matching the given notification, or
- // NULL if there is no matching balloon.
- Balloon* FindBalloon(const Notification& notification);
-
- // The number of balloons being displayed.
- int count() const { return static_cast<int>(balloons_.size()); }
-
- private:
- // Queue of active balloons. Pointers are owned by this class.
- Balloons balloons_;
-
- DISALLOW_COPY_AND_ASSIGN(BalloonCollectionBase);
-};
-
-#endif // CHROME_BROWSER_NOTIFICATIONS_BALLOON_COLLECTION_BASE_H_
diff --git a/chrome/browser/notifications/balloon_collection_impl.cc b/chrome/browser/notifications/balloon_collection_impl.cc
deleted file mode 100644
index 86e850b..0000000
--- a/chrome/browser/notifications/balloon_collection_impl.cc
+++ /dev/null
@@ -1,463 +0,0 @@
-// Copyright (c) 2012 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/balloon_collection_impl.h"
-
-#include "base/bind.h"
-#include "base/logging.h"
-#include "base/stl_util.h"
-#include "chrome/browser/chrome_notification_types.h"
-#include "chrome/browser/notifications/balloon.h"
-#include "chrome/browser/notifications/balloon_host.h"
-#include "chrome/browser/notifications/notification.h"
-#include "chrome/browser/ui/browser.h"
-#include "chrome/browser/ui/panels/docked_panel_collection.h"
-#include "chrome/browser/ui/panels/panel.h"
-#include "chrome/browser/ui/panels/panel_manager.h"
-#include "content/public/browser/notification_registrar.h"
-#include "content/public/browser/notification_service.h"
-#include "ui/gfx/rect.h"
-#include "ui/gfx/screen.h"
-#include "ui/gfx/size.h"
-
-// Portion of the screen allotted for notifications. When notification balloons
-// extend over this, no new notifications are shown until some are closed.
-const double kPercentBalloonFillFactor = 0.7;
-
-// Allow at least this number of balloons on the screen.
-const int kMinAllowedBalloonCount = 2;
-
-// The spacing between the balloon and the panel.
-const int kVerticalSpacingBetweenBalloonAndPanel = 5;
-
-// Delay from the mouse leaving the balloon collection before
-// there is a relayout, in milliseconds.
-const int kRepositionDelayMs = 300;
-
-
-BalloonCollectionImpl::BalloonCollectionImpl()
- : reposition_factory_(this),
- added_as_message_loop_observer_(false) {
- registrar_.Add(this, chrome::NOTIFICATION_PANEL_COLLECTION_UPDATED,
- content::NotificationService::AllSources());
- registrar_.Add(this, chrome::NOTIFICATION_PANEL_CHANGED_EXPANSION_STATE,
- content::NotificationService::AllSources());
-
- SetPositionPreference(BalloonCollection::DEFAULT_POSITION);
-}
-
-BalloonCollectionImpl::~BalloonCollectionImpl() {
- RemoveMessageLoopObserver();
-}
-
-void BalloonCollectionImpl::AddImpl(const Notification& notification,
- Profile* profile,
- bool add_to_front) {
- Balloon* new_balloon = MakeBalloon(notification, profile);
- // The +1 on width is necessary because width is fixed on notifications,
- // so since we always have the max size, we would always hit the scrollbar
- // condition. We are only interested in comparing height to maximum.
- new_balloon->set_min_scrollbar_size(gfx::Size(1 + layout_.max_balloon_width(),
- layout_.max_balloon_height()));
- new_balloon->SetPosition(layout_.OffScreenLocation(), false);
- new_balloon->Show();
- int count = base_.count();
- if (count > 0 && layout_.RequiresOffsets())
- new_balloon->set_offset(base_.balloons()[count - 1]->offset());
- base_.Add(new_balloon, add_to_front);
- PositionBalloons(false);
-
- // There may be no listener in a unit test.
- if (space_change_listener_)
- space_change_listener_->OnBalloonSpaceChanged();
-
- // This is used only for testing.
- if (!on_collection_changed_callback_.is_null())
- on_collection_changed_callback_.Run();
-}
-
-void BalloonCollectionImpl::Add(const Notification& notification,
- Profile* profile) {
- AddImpl(notification, profile, false);
-}
-
-const Notification* BalloonCollectionImpl::FindById(
- const std::string& id) const {
- return base_.FindById(id);
-}
-
-bool BalloonCollectionImpl::RemoveById(const std::string& id) {
- return base_.CloseById(id);
-}
-
-bool BalloonCollectionImpl::RemoveBySourceOrigin(const GURL& origin) {
- return base_.CloseAllBySourceOrigin(origin);
-}
-
-bool BalloonCollectionImpl::RemoveByProfile(Profile* profile) {
- return base_.CloseAllByProfile(profile);
-}
-
-void BalloonCollectionImpl::RemoveAll() {
- base_.CloseAll();
-}
-
-bool BalloonCollectionImpl::HasSpace() const {
- int count = base_.count();
- if (count < kMinAllowedBalloonCount)
- return true;
-
- int max_balloon_size = 0;
- int total_size = 0;
- layout_.GetMaxLinearSize(&max_balloon_size, &total_size);
-
- int current_max_size = max_balloon_size * count;
- int max_allowed_size = static_cast<int>(total_size *
- kPercentBalloonFillFactor);
- return current_max_size < max_allowed_size - max_balloon_size;
-}
-
-void BalloonCollectionImpl::ResizeBalloon(Balloon* balloon,
- const gfx::Size& size) {
- balloon->set_content_size(Layout::ConstrainToSizeLimits(size));
- PositionBalloons(true);
-}
-
-void BalloonCollectionImpl::DisplayChanged() {
- layout_.RefreshSystemMetrics();
- PositionBalloons(true);
-}
-
-void BalloonCollectionImpl::OnBalloonClosed(Balloon* source) {
- // We want to free the balloon when finished.
- const Balloons& balloons = base_.balloons();
-
- Balloons::const_iterator it = balloons.begin();
- if (layout_.RequiresOffsets()) {
- gfx::Vector2d offset;
- bool apply_offset = false;
- while (it != balloons.end()) {
- if (*it == source) {
- ++it;
- if (it != balloons.end()) {
- apply_offset = true;
- offset.set_y((source)->offset().y() - (*it)->offset().y() +
- (*it)->content_size().height() - source->content_size().height());
- }
- } else {
- if (apply_offset)
- (*it)->add_offset(offset);
- ++it;
- }
- }
- // Start listening for UI events so we cancel the offset when the mouse
- // leaves the balloon area.
- if (apply_offset)
- AddMessageLoopObserver();
- }
-
- base_.Remove(source);
- PositionBalloons(true);
-
- // There may be no listener in a unit test.
- if (space_change_listener_)
- space_change_listener_->OnBalloonSpaceChanged();
-
- // This is used only for testing.
- if (!on_collection_changed_callback_.is_null())
- on_collection_changed_callback_.Run();
-}
-
-const BalloonCollection::Balloons& BalloonCollectionImpl::GetActiveBalloons() {
- return base_.balloons();
-}
-
-void BalloonCollectionImpl::Observe(
- int type,
- const content::NotificationSource& source,
- const content::NotificationDetails& details) {
- gfx::Rect bounds;
- switch (type) {
- case chrome::NOTIFICATION_PANEL_COLLECTION_UPDATED:
- case chrome::NOTIFICATION_PANEL_CHANGED_EXPANSION_STATE:
- layout_.enable_computing_panel_offset();
- if (layout_.ComputeOffsetToMoveAbovePanels())
- PositionBalloons(true);
- break;
- default:
- NOTREACHED();
- break;
- }
-}
-
-void BalloonCollectionImpl::PositionBalloonsInternal(bool reposition) {
- const Balloons& balloons = base_.balloons();
-
- layout_.RefreshSystemMetrics();
- gfx::Point origin = layout_.GetLayoutOrigin();
- for (Balloons::const_iterator it = balloons.begin();
- it != balloons.end();
- ++it) {
- gfx::Point upper_left = layout_.NextPosition((*it)->GetViewSize(), &origin);
- (*it)->SetPosition(upper_left, reposition);
- }
-}
-
-gfx::Rect BalloonCollectionImpl::GetBalloonsBoundingBox() const {
- // Start from the layout origin.
- gfx::Rect bounds = gfx::Rect(layout_.GetLayoutOrigin(), gfx::Size(0, 0));
-
- // For each balloon, extend the rectangle. This approach is indifferent to
- // the orientation of the balloons.
- const Balloons& balloons = base_.balloons();
- Balloons::const_iterator iter;
- for (iter = balloons.begin(); iter != balloons.end(); ++iter) {
- gfx::Rect balloon_box = gfx::Rect((*iter)->GetPosition(),
- (*iter)->GetViewSize());
- bounds.Union(balloon_box);
- }
-
- return bounds;
-}
-
-void BalloonCollectionImpl::AddMessageLoopObserver() {
- if (!added_as_message_loop_observer_) {
- base::MessageLoopForUI::current()->AddObserver(this);
- added_as_message_loop_observer_ = true;
- }
-}
-
-void BalloonCollectionImpl::RemoveMessageLoopObserver() {
- if (added_as_message_loop_observer_) {
- base::MessageLoopForUI::current()->RemoveObserver(this);
- added_as_message_loop_observer_ = false;
- }
-}
-
-void BalloonCollectionImpl::CancelOffsets() {
- reposition_factory_.InvalidateWeakPtrs();
-
- // Unhook from listening to all UI events.
- RemoveMessageLoopObserver();
-
- const Balloons& balloons = base_.balloons();
- for (Balloons::const_iterator it = balloons.begin();
- it != balloons.end();
- ++it)
- (*it)->set_offset(gfx::Vector2d());
-
- PositionBalloons(true);
-}
-
-void BalloonCollectionImpl::HandleMouseMoveEvent() {
- if (!IsCursorInBalloonCollection()) {
- // Mouse has left the region. Schedule a reposition after
- // a short delay.
- if (!reposition_factory_.HasWeakPtrs()) {
- base::MessageLoop::current()->PostDelayedTask(
- FROM_HERE,
- base::Bind(&BalloonCollectionImpl::CancelOffsets,
- reposition_factory_.GetWeakPtr()),
- base::TimeDelta::FromMilliseconds(kRepositionDelayMs));
- }
- } else {
- // Mouse moved back into the region. Cancel the reposition.
- reposition_factory_.InvalidateWeakPtrs();
- }
-}
-
-BalloonCollectionImpl::Layout::Layout()
- : placement_(INVALID),
- need_to_compute_panel_offset_(false),
- offset_to_move_above_panels_(0) {
- RefreshSystemMetrics();
-}
-
-void BalloonCollectionImpl::Layout::GetMaxLinearSize(int* max_balloon_size,
- int* total_size) const {
- DCHECK(max_balloon_size && total_size);
-
- // All placement schemes are vertical, so we only care about height.
- *total_size = work_area_.height();
- *max_balloon_size = max_balloon_height();
-}
-
-gfx::Point BalloonCollectionImpl::Layout::GetLayoutOrigin() const {
- // For lower-left and lower-right positioning, we need to add an offset
- // to ensure balloons to stay on top of panels to avoid overlapping.
- int x = 0;
- int y = 0;
- switch (placement_) {
- case VERTICALLY_FROM_TOP_LEFT: {
- x = work_area_.x() + HorizontalEdgeMargin();
- y = work_area_.y() + VerticalEdgeMargin() + offset_to_move_above_panels_;
- break;
- }
- case VERTICALLY_FROM_TOP_RIGHT: {
- x = work_area_.right() - HorizontalEdgeMargin();
- y = work_area_.y() + VerticalEdgeMargin() + offset_to_move_above_panels_;
- break;
- }
- case VERTICALLY_FROM_BOTTOM_LEFT:
- x = work_area_.x() + HorizontalEdgeMargin();
- y = work_area_.bottom() - VerticalEdgeMargin() -
- offset_to_move_above_panels_;
- break;
- case VERTICALLY_FROM_BOTTOM_RIGHT:
- x = work_area_.right() - HorizontalEdgeMargin();
- y = work_area_.bottom() - VerticalEdgeMargin() -
- offset_to_move_above_panels_;
- break;
- default:
- NOTREACHED();
- break;
- }
- return gfx::Point(x, y);
-}
-
-gfx::Point BalloonCollectionImpl::Layout::NextPosition(
- const gfx::Size& balloon_size,
- gfx::Point* position_iterator) const {
- DCHECK(position_iterator);
-
- int x = 0;
- int y = 0;
- switch (placement_) {
- case VERTICALLY_FROM_TOP_LEFT:
- x = position_iterator->x();
- y = position_iterator->y();
- position_iterator->set_y(position_iterator->y() + balloon_size.height() +
- InterBalloonMargin());
- break;
- case VERTICALLY_FROM_TOP_RIGHT:
- x = position_iterator->x() - balloon_size.width();
- y = position_iterator->y();
- position_iterator->set_y(position_iterator->y() + balloon_size.height() +
- InterBalloonMargin());
- break;
- case VERTICALLY_FROM_BOTTOM_LEFT:
- position_iterator->set_y(position_iterator->y() - balloon_size.height() -
- InterBalloonMargin());
- x = position_iterator->x();
- y = position_iterator->y();
- break;
- case VERTICALLY_FROM_BOTTOM_RIGHT:
- position_iterator->set_y(position_iterator->y() - balloon_size.height() -
- InterBalloonMargin());
- x = position_iterator->x() - balloon_size.width();
- y = position_iterator->y();
- break;
- default:
- NOTREACHED();
- break;
- }
- return gfx::Point(x, y);
-}
-
-gfx::Point BalloonCollectionImpl::Layout::OffScreenLocation() const {
- gfx::Point location = GetLayoutOrigin();
- switch (placement_) {
- case VERTICALLY_FROM_TOP_LEFT:
- case VERTICALLY_FROM_BOTTOM_LEFT:
- location.Offset(0, kBalloonMaxHeight);
- break;
- case VERTICALLY_FROM_TOP_RIGHT:
- case VERTICALLY_FROM_BOTTOM_RIGHT:
- location.Offset(-kBalloonMaxWidth - BalloonView::GetHorizontalMargin(),
- kBalloonMaxHeight);
- break;
- default:
- NOTREACHED();
- break;
- }
- return location;
-}
-
-bool BalloonCollectionImpl::Layout::RequiresOffsets() const {
- // Layout schemes that grow up from the bottom require offsets;
- // schemes that grow down do not require offsets.
- bool offsets = (placement_ == VERTICALLY_FROM_BOTTOM_LEFT ||
- placement_ == VERTICALLY_FROM_BOTTOM_RIGHT);
- return offsets;
-}
-
-// static
-gfx::Size BalloonCollectionImpl::Layout::ConstrainToSizeLimits(
- const gfx::Size& size) {
- // restrict to the min & max sizes
- return gfx::Size(
- std::max(min_balloon_width(),
- std::min(max_balloon_width(), size.width())),
- std::max(min_balloon_height(),
- std::min(max_balloon_height(), size.height())));
-}
-
-bool BalloonCollectionImpl::Layout::ComputeOffsetToMoveAbovePanels() {
- // If the offset is not enabled due to that we have not received a
- // notification about panel, don't proceed because we don't want to call
- // PanelManager::GetInstance() to create an instance when panel is not
- // present.
- if (!need_to_compute_panel_offset_)
- return false;
-
- const DockedPanelCollection::Panels& panels =
- PanelManager::GetInstance()->docked_collection()->panels();
- int offset_to_move_above_panels = 0;
-
- // The offset is the maximum height of panels that could overlap with the
- // balloons.
- if (NeedToMoveAboveLeftSidePanels()) {
- for (DockedPanelCollection::Panels::const_reverse_iterator iter =
- panels.rbegin();
- iter != panels.rend(); ++iter) {
- // No need to check panels beyond the area occupied by the balloons.
- if ((*iter)->GetBounds().x() >= work_area_.x() + max_balloon_width())
- break;
-
- int current_height = (*iter)->GetBounds().height();
- if (current_height > offset_to_move_above_panels)
- offset_to_move_above_panels = current_height;
- }
- } else if (NeedToMoveAboveRightSidePanels()) {
- for (DockedPanelCollection::Panels::const_iterator iter = panels.begin();
- iter != panels.end(); ++iter) {
- // No need to check panels beyond the area occupied by the balloons.
- if ((*iter)->GetBounds().right() <=
- work_area_.right() - max_balloon_width())
- break;
-
- int current_height = (*iter)->GetBounds().height();
- if (current_height > offset_to_move_above_panels)
- offset_to_move_above_panels = current_height;
- }
- }
-
- // Ensure that we have some sort of margin between the 1st balloon and the
- // panel beneath it even the vertical edge margin is 0 as on Mac.
- if (offset_to_move_above_panels && !VerticalEdgeMargin())
- offset_to_move_above_panels += kVerticalSpacingBetweenBalloonAndPanel;
-
- // If no change is detected, return false to indicate that we do not need to
- // reposition balloons.
- if (offset_to_move_above_panels_ == offset_to_move_above_panels)
- return false;
-
- offset_to_move_above_panels_ = offset_to_move_above_panels;
- return true;
-}
-
-bool BalloonCollectionImpl::Layout::RefreshSystemMetrics() {
- bool changed = false;
-
- // TODO(scottmg): NativeScreen is wrong. http://crbug.com/133312
- gfx::Rect new_work_area =
- gfx::Screen::GetNativeScreen()->GetPrimaryDisplay().work_area();
- if (work_area_ != new_work_area) {
- work_area_.SetRect(new_work_area.x(), new_work_area.y(),
- new_work_area.width(), new_work_area.height());
- changed = true;
- }
-
- return changed;
-}
diff --git a/chrome/browser/notifications/balloon_collection_impl.h b/chrome/browser/notifications/balloon_collection_impl.h
deleted file mode 100644
index 3ab9600..0000000
--- a/chrome/browser/notifications/balloon_collection_impl.h
+++ /dev/null
@@ -1,219 +0,0 @@
-// Copyright (c) 2012 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.
-
-// Handles the visible notification (or balloons).
-
-#ifndef CHROME_BROWSER_NOTIFICATIONS_BALLOON_COLLECTION_IMPL_H_
-#define CHROME_BROWSER_NOTIFICATIONS_BALLOON_COLLECTION_IMPL_H_
-
-#include <deque>
-
-#include "base/basictypes.h"
-#include "base/compiler_specific.h"
-#include "base/memory/weak_ptr.h"
-#include "base/message_loop/message_loop.h"
-#include "chrome/browser/notifications/balloon_collection.h"
-#include "chrome/browser/notifications/balloon_collection_base.h"
-#include "content/public/browser/notification_observer.h"
-#include "content/public/browser/notification_registrar.h"
-#include "ui/gfx/point.h"
-#include "ui/gfx/rect.h"
-
-// A balloon collection represents a set of notification balloons being
-// shown on the screen. It positions new notifications according to
-// a layout, and monitors for balloons being closed, which it reports
-// up to its parent, the notification UI manager.
-class BalloonCollectionImpl : public BalloonCollection,
- public content::NotificationObserver,
- public base::MessageLoopForUI::Observer {
- public:
- BalloonCollectionImpl();
- virtual ~BalloonCollectionImpl();
-
- // BalloonCollection interface.
- virtual void Add(const Notification& notification,
- Profile* profile) OVERRIDE;
- virtual const Notification* FindById(const std::string& id) const OVERRIDE;
- virtual bool RemoveById(const std::string& id) OVERRIDE;
- virtual bool RemoveBySourceOrigin(const GURL& source_origin) OVERRIDE;
- virtual bool RemoveByProfile(Profile* profile) OVERRIDE;
- virtual void RemoveAll() OVERRIDE;
- virtual bool HasSpace() const OVERRIDE;
- virtual void ResizeBalloon(Balloon* balloon, const gfx::Size& size) OVERRIDE;
- virtual void SetPositionPreference(PositionPreference position) OVERRIDE;
- virtual void DisplayChanged() OVERRIDE;
- virtual void OnBalloonClosed(Balloon* source) OVERRIDE;
- virtual const Balloons& GetActiveBalloons() OVERRIDE;
-
- // content::NotificationObserver interface.
- virtual void Observe(int type,
- const content::NotificationSource& source,
- const content::NotificationDetails& details) OVERRIDE;
-
- // base_ is embedded, so this is a simple accessor for the number of
- // balloons in the collection.
- int count() const { return base_.count(); }
-
- static int min_balloon_width() { return Layout::min_balloon_width(); }
- static int max_balloon_width() { return Layout::max_balloon_width(); }
- static int min_balloon_height() { return Layout::min_balloon_height(); }
- static int max_balloon_height() { return Layout::max_balloon_height(); }
-
- protected:
- // Calculates layout values for the balloons including
- // the scaling, the max/min sizes, and the upper left corner of each.
- class Layout {
- public:
- Layout();
-
- // These enumerations all are based on a screen orientation where
- // the origin is the top-left.
- enum Placement {
- INVALID,
- VERTICALLY_FROM_TOP_LEFT,
- VERTICALLY_FROM_TOP_RIGHT,
- VERTICALLY_FROM_BOTTOM_LEFT,
- VERTICALLY_FROM_BOTTOM_RIGHT
- };
-
- // Refresh the work area and balloon placement.
- void OnDisplaySettingsChanged();
-
- // TODO(johnnyg): Scale the size to account for the system font factor.
- static int min_balloon_width() { return kBalloonMinWidth; }
- static int max_balloon_width() { return kBalloonMaxWidth; }
- static int min_balloon_height() { return kBalloonMinHeight; }
- static int max_balloon_height() { return kBalloonMaxHeight; }
-
- // Utility function constrains the input rectangle to the min and max sizes.
- static gfx::Size ConstrainToSizeLimits(const gfx::Size& rect);
-
- void set_placement(Placement placement) { placement_ = placement; }
-
- // Returns both the total space available and the maximum
- // allowed per balloon.
- //
- // The size may be a height or length depending on the way that
- // balloons are laid out.
- void GetMaxLinearSize(int* max_balloon_size, int* total_size) const;
-
- // Refresh the cached values for work area and drawing metrics.
- // The application should call this method to re-acquire metrics after
- // any resolution or settings change.
- // Returns true if and only if a metric changed.
- bool RefreshSystemMetrics();
-
- // Returns the origin for the sequence of balloons depending on layout.
- // Should not be used to place a balloon -- only to call NextPosition().
- gfx::Point GetLayoutOrigin() const;
-
- // Compute the position for the next balloon.
- // Start with *position_iterator = GetLayoutOrigin() and call repeatedly
- // to get a sequence of positions. Return value is the upper-left coordinate
- // for each next balloon.
- gfx::Point NextPosition(const gfx::Size& balloon_size,
- gfx::Point* position_iterator) const;
-
- // Return a offscreen location which is offscreen for this layout,
- // to be used as the initial position for an animation into view.
- gfx::Point OffScreenLocation() const;
-
- // Returns true if the layout requires offsetting for keeping the close
- // buttons under the cursor during rapid-close interaction.
- bool RequiresOffsets() const;
-
- // Returns true if there is change to the offset that requires the balloons
- // to be repositioned.
- bool ComputeOffsetToMoveAbovePanels();
-
- void enable_computing_panel_offset() {
- need_to_compute_panel_offset_ = true;
- }
-
- private:
- // Layout parameters
- int VerticalEdgeMargin() const;
- int HorizontalEdgeMargin() const;
- int InterBalloonMargin() const;
-
- bool NeedToMoveAboveLeftSidePanels() const;
- bool NeedToMoveAboveRightSidePanels() const;
-
- // Minimum and maximum size of balloon content.
- static const int kBalloonMinWidth = 300;
- static const int kBalloonMaxWidth = 300;
- static const int kBalloonMinHeight = 24;
- static const int kBalloonMaxHeight = 160;
-
- Placement placement_;
- gfx::Rect work_area_;
-
- // The flag that indicates that the panel offset computation should be
- // performed.
- bool need_to_compute_panel_offset_;
-
- // The offset that guarantees that the notificaitions shown in the
- // lower-right or lower-left corner of the screen will go above currently
- // shown panels and will not be obscured by them.
- int offset_to_move_above_panels_;
-
- DISALLOW_COPY_AND_ASSIGN(Layout);
- };
-
- // Creates a new balloon. Overridable by derived classes and unit tests.
- // The caller is responsible for freeing the pointer returned.
- virtual Balloon* MakeBalloon(const Notification& notification,
- Profile* profile);
-
- // Protected implementation of Add with additional add_to_front parameter
- // for use by derived classes.
- void AddImpl(const Notification& notification,
- Profile* profile,
- bool add_to_front);
-
- // Gets a bounding box for all the current balloons in screen coordinates.
- gfx::Rect GetBalloonsBoundingBox() const;
-
- BalloonCollectionBase& base() { return base_; }
- Layout& layout() { return layout_; }
-
- private:
- // Adjusts the positions of the balloons (e.g., when one is closed).
- // Implemented by each platform for specific UI requirements.
- void PositionBalloons(bool is_reposition);
-
- // Cross-platform internal implementation for PositionBalloons.
- void PositionBalloonsInternal(bool is_reposition);
-
- // Base implementation for the collection of active balloons.
- BalloonCollectionBase base_;
-
- // The layout parameters for balloons in this collection.
- Layout layout_;
-
- content::NotificationRegistrar registrar_;
-
- // Start and stop observing all UI events.
- void AddMessageLoopObserver();
- void RemoveMessageLoopObserver();
-
- // Cancel all offset and reposition the balloons normally.
- void CancelOffsets();
-
- // Handles a mouse motion while the balloons are temporarily offset.
- void HandleMouseMoveEvent();
-
- // Is the current cursor in the balloon area?
- bool IsCursorInBalloonCollection() const;
-
- // Factory for generating delayed reposition tasks on mouse motion.
- base::WeakPtrFactory<BalloonCollectionImpl> reposition_factory_;
-
- // Is the balloon collection currently listening for UI events?
- bool added_as_message_loop_observer_;
-
- DISALLOW_COPY_AND_ASSIGN(BalloonCollectionImpl);
-};
-
-#endif // CHROME_BROWSER_NOTIFICATIONS_BALLOON_COLLECTION_IMPL_H_
diff --git a/chrome/browser/notifications/balloon_host.cc b/chrome/browser/notifications/balloon_host.cc
deleted file mode 100644
index 0522ad0..0000000
--- a/chrome/browser/notifications/balloon_host.cc
+++ /dev/null
@@ -1,181 +0,0 @@
-// Copyright (c) 2012 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/balloon_host.h"
-
-#include "chrome/browser/chrome_notification_types.h"
-#include "chrome/browser/extensions/chrome_extension_web_contents_observer.h"
-#include "chrome/browser/notifications/balloon.h"
-#include "chrome/browser/notifications/balloon_collection_impl.h"
-#include "chrome/browser/notifications/notification.h"
-#include "chrome/browser/profiles/profile.h"
-#include "chrome/browser/renderer_preferences_util.h"
-#include "chrome/browser/ui/browser.h"
-#include "chrome/browser/ui/browser_finder.h"
-#include "chrome/browser/ui/browser_tabstrip.h"
-#include "chrome/browser/ui/host_desktop.h"
-#include "chrome/browser/ui/webui/chrome_web_ui_controller_factory.h"
-#include "chrome/common/render_messages.h"
-#include "chrome/common/url_constants.h"
-#include "content/public/browser/navigation_controller.h"
-#include "content/public/browser/notification_service.h"
-#include "content/public/browser/notification_source.h"
-#include "content/public/browser/render_process_host.h"
-#include "content/public/browser/render_view_host.h"
-#include "content/public/browser/site_instance.h"
-#include "content/public/browser/web_contents.h"
-#include "content/public/common/bindings_policy.h"
-#include "content/public/common/renderer_preferences.h"
-#include "extensions/browser/view_type_utils.h"
-#include "extensions/common/extension_messages.h"
-#include "ipc/ipc_message.h"
-
-using content::SiteInstance;
-using content::WebContents;
-
-BalloonHost::BalloonHost(Balloon* balloon)
- : balloon_(balloon),
- initialized_(false),
- should_notify_on_disconnect_(false),
- enable_web_ui_(false),
- extension_function_dispatcher_(balloon_->profile(), this) {
- site_instance_ = SiteInstance::CreateForURL(
- balloon_->profile(), balloon_->notification().content_url());
-}
-
-void BalloonHost::Shutdown() {
- NotifyDisconnect();
- web_contents_.reset();
- site_instance_ = NULL;
- balloon_ = NULL; // No longer safe to access |balloon_|
-}
-
-extensions::WindowController*
-BalloonHost::GetExtensionWindowController() const {
- // Notifications don't have a window controller.
- return NULL;
-}
-
-content::WebContents* BalloonHost::GetAssociatedWebContents() const {
- return NULL;
-}
-
-const base::string16& BalloonHost::GetSource() const {
- return balloon_->notification().display_source();
-}
-
-void BalloonHost::CloseContents(WebContents* source) {
- if (!balloon_)
- return;
- balloon_->CloseByScript();
- NotifyDisconnect();
-}
-
-void BalloonHost::HandleMouseDown() {
- if (balloon_)
- balloon_->OnClick();
-}
-
-void BalloonHost::ResizeDueToAutoResize(WebContents* source,
- const gfx::Size& pref_size) {
- if (balloon_)
- balloon_->ResizeDueToAutoResize(pref_size);
-}
-
-void BalloonHost::AddNewContents(WebContents* source,
- WebContents* new_contents,
- WindowOpenDisposition disposition,
- const gfx::Rect& initial_pos,
- bool user_gesture,
- bool* was_blocked) {
- Browser* browser = chrome::FindLastActiveWithProfile(
- Profile::FromBrowserContext(new_contents->GetBrowserContext()),
- chrome::GetActiveDesktop());
- if (browser) {
- chrome::AddWebContents(browser, NULL, new_contents, disposition,
- initial_pos, user_gesture, was_blocked);
- }
-}
-
-void BalloonHost::RenderViewCreated(content::RenderViewHost* render_view_host) {
- gfx::Size min_size(BalloonCollectionImpl::min_balloon_width(),
- BalloonCollectionImpl::min_balloon_height());
- gfx::Size max_size(BalloonCollectionImpl::max_balloon_width(),
- BalloonCollectionImpl::max_balloon_height());
- render_view_host->EnableAutoResize(min_size, max_size);
-
- if (enable_web_ui_)
- render_view_host->AllowBindings(content::BINDINGS_POLICY_WEB_UI);
-}
-
-void BalloonHost::RenderViewReady() {
- should_notify_on_disconnect_ = true;
- content::NotificationService::current()->Notify(
- chrome::NOTIFICATION_NOTIFY_BALLOON_CONNECTED,
- content::Source<BalloonHost>(this),
- content::NotificationService::NoDetails());
-}
-
-void BalloonHost::RenderProcessGone(base::TerminationStatus status) {
- CloseContents(web_contents_.get());
-}
-
-bool BalloonHost::OnMessageReceived(const IPC::Message& message) {
- bool handled = true;
- IPC_BEGIN_MESSAGE_MAP(BalloonHost, message)
- IPC_MESSAGE_HANDLER(ExtensionHostMsg_Request, OnRequest)
- IPC_MESSAGE_UNHANDLED(handled = false)
- IPC_END_MESSAGE_MAP()
- return handled;
-}
-
-void BalloonHost::OnRequest(const ExtensionHostMsg_Request_Params& params) {
- extension_function_dispatcher_.Dispatch(params,
- web_contents_->GetRenderViewHost());
-}
-
-void BalloonHost::Init() {
- DCHECK(!web_contents_.get()) << "BalloonViewHost already initialized.";
- web_contents_.reset(WebContents::Create(
- WebContents::CreateParams(balloon_->profile(), site_instance_.get())));
- extensions::SetViewType(
- web_contents_.get(), extensions::VIEW_TYPE_NOTIFICATION);
- web_contents_->SetDelegate(this);
- extensions::ChromeExtensionWebContentsObserver::CreateForWebContents(
- web_contents_.get());
- Observe(web_contents_.get());
- renderer_preferences_util::UpdateFromSystemSettings(
- web_contents_->GetMutableRendererPrefs(), balloon_->profile());
- web_contents_->GetRenderViewHost()->SyncRendererPrefs();
-
- web_contents_->GetController().LoadURL(
- balloon_->notification().content_url(), content::Referrer(),
- content::PAGE_TRANSITION_LINK, std::string());
-
- initialized_ = true;
-}
-
-void BalloonHost::EnableWebUI() {
- DCHECK(!web_contents_.get()) <<
- "EnableWebUI has to be called before a renderer is created.";
- enable_web_ui_ = true;
-}
-
-BalloonHost::~BalloonHost() {
-}
-
-void BalloonHost::NotifyDisconnect() {
- if (!should_notify_on_disconnect_)
- return;
-
- should_notify_on_disconnect_ = false;
- content::NotificationService::current()->Notify(
- chrome::NOTIFICATION_NOTIFY_BALLOON_DISCONNECTED,
- content::Source<BalloonHost>(this),
- content::NotificationService::NoDetails());
-}
-
-bool BalloonHost::IsRenderViewReady() const {
- return should_notify_on_disconnect_;
-}
diff --git a/chrome/browser/notifications/balloon_host.h b/chrome/browser/notifications/balloon_host.h
deleted file mode 100644
index 65c832b..0000000
--- a/chrome/browser/notifications/balloon_host.h
+++ /dev/null
@@ -1,104 +0,0 @@
-// Copyright (c) 2012 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_NOTIFICATIONS_BALLOON_HOST_H_
-#define CHROME_BROWSER_NOTIFICATIONS_BALLOON_HOST_H_
-
-#include <string>
-#include <vector>
-
-#include "base/compiler_specific.h"
-#include "base/memory/scoped_ptr.h"
-#include "content/public/browser/notification_registrar.h"
-#include "content/public/browser/web_contents_delegate.h"
-#include "content/public/browser/web_contents_observer.h"
-#include "extensions/browser/extension_function_dispatcher.h"
-
-class Balloon;
-class Browser;
-
-namespace content {
-class SiteInstance;
-};
-
-class BalloonHost : public content::WebContentsDelegate,
- public content::WebContentsObserver,
- public extensions::ExtensionFunctionDispatcher::Delegate {
- public:
- explicit BalloonHost(Balloon* balloon);
-
- // Initialize the view.
- void Init();
-
- // Stops showing the balloon.
- void Shutdown();
-
- // extensions::ExtensionFunctionDispatcher::Delegate overrides.
- virtual extensions::WindowController* GetExtensionWindowController()
- const OVERRIDE;
- virtual content::WebContents* GetAssociatedWebContents() const OVERRIDE;
-
- const base::string16& GetSource() const;
-
- content::WebContents* web_contents() const { return web_contents_.get(); }
-
- // Enable Web UI. This has to be called before renderer is created.
- void EnableWebUI();
-
- // Returns whether the associated render view is ready. Used only for testing.
- bool IsRenderViewReady() const;
-
- protected:
- virtual ~BalloonHost();
-
- scoped_ptr<content::WebContents> web_contents_;
-
- private:
- // content::WebContentsDelegate implementation:
- virtual void CloseContents(content::WebContents* source) OVERRIDE;
- virtual void HandleMouseDown() OVERRIDE;
- virtual void ResizeDueToAutoResize(content::WebContents* source,
- const gfx::Size& pref_size) OVERRIDE;
- virtual void AddNewContents(content::WebContents* source,
- content::WebContents* new_contents,
- WindowOpenDisposition disposition,
- const gfx::Rect& initial_pos,
- bool user_gesture,
- bool* was_blocked) OVERRIDE;
-
- // content::WebContentsObserver implementation:
- virtual void RenderViewCreated(
- content::RenderViewHost* render_view_host) OVERRIDE;
- virtual void RenderViewReady() OVERRIDE;
- virtual void RenderProcessGone(base::TerminationStatus status) OVERRIDE;
- virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
-
- // Message handlers
- void OnRequest(const ExtensionHostMsg_Request_Params& params);
-
- // Called to send an event that the balloon has been disconnected from
- // a renderer (if should_notify_on_disconnect_ is true).
- void NotifyDisconnect();
-
- // Non-owned pointer to the associated balloon.
- Balloon* balloon_;
-
- // True after Init() has completed.
- bool initialized_;
-
- // Indicates whether we should notify about disconnection of this balloon.
- // This is used to ensure disconnection notifications only happen if
- // a connection notification has happened and that they happen only once.
- bool should_notify_on_disconnect_;
-
- // Site instance for the balloon/profile, to be used for opening new links.
- scoped_refptr<content::SiteInstance> site_instance_;
-
- // A flag to enable Web UI.
- bool enable_web_ui_;
-
- extensions::ExtensionFunctionDispatcher extension_function_dispatcher_;
-};
-
-#endif // CHROME_BROWSER_NOTIFICATIONS_BALLOON_HOST_H_
diff --git a/chrome/browser/notifications/balloon_notification_ui_manager.cc b/chrome/browser/notifications/balloon_notification_ui_manager.cc
deleted file mode 100644
index a420ce5..0000000
--- a/chrome/browser/notifications/balloon_notification_ui_manager.cc
+++ /dev/null
@@ -1,307 +0,0 @@
-// Copyright (c) 2012 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/balloon_notification_ui_manager.h"
-
-#include "base/logging.h"
-#include "base/memory/scoped_ptr.h"
-#include "base/prefs/pref_service.h"
-#include "base/stl_util.h"
-#include "chrome/browser/browser_process.h"
-#include "chrome/browser/chrome_notification_types.h"
-#include "chrome/browser/fullscreen.h"
-#include "chrome/browser/idle.h"
-#include "chrome/browser/notifications/balloon_collection.h"
-#include "chrome/browser/notifications/notification.h"
-#include "chrome/browser/profiles/profile.h"
-#include "chrome/common/pref_names.h"
-#include "content/public/browser/notification_service.h"
-
-// A class which represents a notification waiting to be shown.
-class QueuedNotification {
- public:
- QueuedNotification(const Notification& notification, Profile* profile)
- : notification_(notification),
- profile_(profile) {
- }
-
- const Notification& notification() const { return notification_; }
- Profile* profile() const { return profile_; }
-
- void Replace(const Notification& new_notification) {
- notification_ = new_notification;
- }
-
- private:
- // The notification to be shown.
- Notification notification_;
-
- // Non owned pointer to the user's profile.
- Profile* profile_;
-
- DISALLOW_COPY_AND_ASSIGN(QueuedNotification);
-};
-
-BalloonNotificationUIManager::BalloonNotificationUIManager(
- PrefService* local_state)
- : NotificationPrefsManager(local_state),
- // Passes NULL to blockers since |message_center| is not used from balloon
- // notifications.
- screen_lock_blocker_(NULL),
- fullscreen_blocker_(NULL),
- system_observer_(this) {
- position_pref_.Init(
- prefs::kDesktopNotificationPosition,
- local_state,
- base::Bind(
- &BalloonNotificationUIManager::OnDesktopNotificationPositionChanged,
- base::Unretained(this)));
-}
-
-BalloonNotificationUIManager::~BalloonNotificationUIManager() {
-}
-
-void BalloonNotificationUIManager::SetBalloonCollection(
- BalloonCollection* balloon_collection) {
- DCHECK(!balloon_collection_.get() ||
- balloon_collection_->GetActiveBalloons().size() == 0);
- DCHECK(balloon_collection);
- balloon_collection_.reset(balloon_collection);
- balloon_collection_->SetPositionPreference(
- static_cast<BalloonCollection::PositionPreference>(
- position_pref_.GetValue()));
- balloon_collection_->set_space_change_listener(this);
-}
-
-void BalloonNotificationUIManager::Add(const Notification& notification,
- Profile* profile) {
- if (Update(notification, profile)) {
- return;
- }
-
- VLOG(1) << "Added notification. URL: "
- << notification.content_url().spec();
- show_queue_.push_back(linked_ptr<QueuedNotification>(
- new QueuedNotification(notification, profile)));
- CheckAndShowNotifications();
-}
-
-bool BalloonNotificationUIManager::Update(const Notification& notification,
- Profile* profile) {
- const GURL& origin = notification.origin_url();
- const base::string16& replace_id = notification.replace_id();
-
- if (replace_id.empty())
- return false;
-
- // First check the queue of pending notifications for replacement.
- // Then check the list of notifications already being shown.
- for (NotificationDeque::const_iterator iter = show_queue_.begin();
- iter != show_queue_.end(); ++iter) {
- if (profile == (*iter)->profile() &&
- origin == (*iter)->notification().origin_url() &&
- replace_id == (*iter)->notification().replace_id()) {
- (*iter)->Replace(notification);
- return true;
- }
- }
-
- return UpdateNotification(notification, profile);
-}
-
-const Notification* BalloonNotificationUIManager::FindById(
- const std::string& id) const {
- for (NotificationDeque::const_iterator iter = show_queue_.begin();
- iter != show_queue_.end(); ++iter) {
- if ((*iter)->notification().notification_id() == id) {
- return &((*iter)->notification());
- }
- }
- return balloon_collection_->FindById(id);
-}
-
-bool BalloonNotificationUIManager::CancelById(const std::string& id) {
- // See if this ID hasn't been shown yet.
- for (NotificationDeque::iterator iter = show_queue_.begin();
- iter != show_queue_.end(); ++iter) {
- if ((*iter)->notification().notification_id() == id) {
- show_queue_.erase(iter);
- return true;
- }
- }
- // If it has been shown, remove it from the balloon collections.
- return balloon_collection_->RemoveById(id);
-}
-
-std::set<std::string>
-BalloonNotificationUIManager::GetAllIdsByProfileAndSourceOrigin(
- Profile* profile,
- const GURL& source) {
- std::set<std::string> notification_ids;
- for (NotificationDeque::iterator iter = show_queue_.begin();
- iter != show_queue_.end(); iter++) {
- if ((*iter)->notification().origin_url() == source &&
- profile->IsSameProfile((*iter)->profile())) {
- notification_ids.insert((*iter)->notification().notification_id());
- }
- }
-
- const BalloonCollection::Balloons& balloons =
- balloon_collection_->GetActiveBalloons();
- for (BalloonCollection::Balloons::const_iterator iter = balloons.begin();
- iter != balloons.end(); ++iter) {
- if (profile->IsSameProfile((*iter)->profile()) &&
- source == (*iter)->notification().origin_url()) {
- notification_ids.insert((*iter)->notification().notification_id());
- }
- }
- return notification_ids;
-}
-
-bool BalloonNotificationUIManager::CancelAllBySourceOrigin(const GURL& source) {
- // Same pattern as CancelById, but more complicated than the above
- // because there may be multiple notifications from the same source.
- bool removed = false;
- for (NotificationDeque::iterator loopiter = show_queue_.begin();
- loopiter != show_queue_.end(); ) {
- if ((*loopiter)->notification().origin_url() != source) {
- ++loopiter;
- continue;
- }
-
- loopiter = show_queue_.erase(loopiter);
- removed = true;
- }
- return balloon_collection_->RemoveBySourceOrigin(source) || removed;
-}
-
-bool BalloonNotificationUIManager::CancelAllByProfile(Profile* profile) {
- // Same pattern as CancelAllBySourceOrigin.
- bool removed = false;
- for (NotificationDeque::iterator loopiter = show_queue_.begin();
- loopiter != show_queue_.end(); ) {
- if ((*loopiter)->profile() != profile) {
- ++loopiter;
- continue;
- }
-
- loopiter = show_queue_.erase(loopiter);
- removed = true;
- }
- return balloon_collection_->RemoveByProfile(profile) || removed;
-}
-
-void BalloonNotificationUIManager::CancelAll() {
- balloon_collection_->RemoveAll();
-}
-
-BalloonCollection* BalloonNotificationUIManager::balloon_collection() {
- return balloon_collection_.get();
-}
-
-NotificationPrefsManager* BalloonNotificationUIManager::prefs_manager() {
- return this;
-}
-
-bool BalloonNotificationUIManager::ShowNotification(
- const Notification& notification,
- Profile* profile) {
- if (!balloon_collection_->HasSpace())
- return false;
- balloon_collection_->Add(notification, profile);
- return true;
-}
-
-void BalloonNotificationUIManager::OnBalloonSpaceChanged() {
- CheckAndShowNotifications();
-}
-
-void BalloonNotificationUIManager::OnBlockingStateChanged(
- message_center::NotificationBlocker* blocker) {
- CheckAndShowNotifications();
-}
-
-bool BalloonNotificationUIManager::UpdateNotification(
- const Notification& notification,
- Profile* profile) {
- const GURL& origin = notification.origin_url();
- const base::string16& replace_id = notification.replace_id();
-
- DCHECK(!replace_id.empty());
-
- const BalloonCollection::Balloons& balloons =
- balloon_collection_->GetActiveBalloons();
- for (BalloonCollection::Balloons::const_iterator iter = balloons.begin();
- iter != balloons.end(); ++iter) {
- if (profile == (*iter)->profile() &&
- origin == (*iter)->notification().origin_url() &&
- replace_id == (*iter)->notification().replace_id()) {
- (*iter)->Update(notification);
- return true;
- }
- }
-
- return false;
-}
-
-BalloonCollection::PositionPreference
-BalloonNotificationUIManager::GetPositionPreference() const {
- return static_cast<BalloonCollection::PositionPreference>(
- position_pref_.GetValue());
-}
-
-void BalloonNotificationUIManager::SetPositionPreference(
- BalloonCollection::PositionPreference preference) {
- position_pref_.SetValue(static_cast<int>(preference));
- balloon_collection_->SetPositionPreference(preference);
-}
-
-void BalloonNotificationUIManager::CheckAndShowNotifications() {
- screen_lock_blocker_.CheckState();
- fullscreen_blocker_.CheckState();
- if (screen_lock_blocker_.is_locked() ||
- fullscreen_blocker_.is_fullscreen_mode()) {
- return;
- }
- ShowNotifications();
-}
-
-void BalloonNotificationUIManager::OnDesktopNotificationPositionChanged() {
- balloon_collection_->SetPositionPreference(
- static_cast<BalloonCollection::PositionPreference>(
- position_pref_.GetValue()));
-}
-
-void BalloonNotificationUIManager::ShowNotifications() {
- while (!show_queue_.empty()) {
- linked_ptr<QueuedNotification> queued_notification(show_queue_.front());
- show_queue_.pop_front();
- if (!ShowNotification(queued_notification->notification(),
- queued_notification->profile())) {
- show_queue_.push_front(queued_notification);
- return;
- }
- }
-}
-
-// static
-BalloonNotificationUIManager*
- BalloonNotificationUIManager::GetInstanceForTesting() {
- if (NotificationUIManager::DelegatesToMessageCenter()) {
- LOG(ERROR) << "Attempt to run a test that requires "
- << "BalloonNotificationUIManager while delegating to a "
- << "native MessageCenter. Test will fail. Ask dimich@";
- return NULL;
- }
- return static_cast<BalloonNotificationUIManager*>(
- g_browser_process->notification_ui_manager());
-}
-
-void BalloonNotificationUIManager::GetQueuedNotificationsForTesting(
- std::vector<const Notification*>* notifications) {
- for (NotificationDeque::const_iterator iter = show_queue_.begin();
- iter != show_queue_.end(); ++iter) {
- notifications->push_back(&(*iter)->notification());
- }
-}
diff --git a/chrome/browser/notifications/balloon_notification_ui_manager.h b/chrome/browser/notifications/balloon_notification_ui_manager.h
deleted file mode 100644
index 6b34b0e..0000000
--- a/chrome/browser/notifications/balloon_notification_ui_manager.h
+++ /dev/null
@@ -1,111 +0,0 @@
-// Copyright (c) 2012 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_NOTIFICATIONS_BALLOON_NOTIFICATION_UI_MANAGER_H_
-#define CHROME_BROWSER_NOTIFICATIONS_BALLOON_NOTIFICATION_UI_MANAGER_H_
-
-#include <deque>
-#include <string>
-
-#include "base/memory/linked_ptr.h"
-#include "base/memory/scoped_ptr.h"
-#include "base/prefs/pref_member.h"
-#include "chrome/browser/notifications/balloon.h"
-#include "chrome/browser/notifications/balloon_collection.h"
-#include "chrome/browser/notifications/fullscreen_notification_blocker.h"
-#include "chrome/browser/notifications/notification_prefs_manager.h"
-#include "chrome/browser/notifications/notification_system_observer.h"
-#include "chrome/browser/notifications/notification_ui_manager.h"
-#include "chrome/browser/notifications/screen_lock_notification_blocker.h"
-
-class Notification;
-class PrefService;
-class Profile;
-class QueuedNotification;
-
-// The notification manager manages use of the desktop for notifications.
-// It maintains a queue of pending notifications when space becomes constrained.
-class BalloonNotificationUIManager
- : public NotificationUIManager,
- public NotificationPrefsManager,
- public BalloonCollection::BalloonSpaceChangeListener,
- public message_center::NotificationBlocker::Observer {
- public:
- explicit BalloonNotificationUIManager(PrefService* local_state);
- virtual ~BalloonNotificationUIManager();
-
- // Initializes the UI manager with a balloon collection; this object
- // takes ownership of the balloon collection.
- void SetBalloonCollection(BalloonCollection* balloon_collection);
-
- // NotificationUIManager overrides:
- virtual void Add(const Notification& notification,
- Profile* profile) OVERRIDE;
- virtual bool Update(const Notification& notification,
- Profile* profile) OVERRIDE;
- virtual const Notification* FindById(
- const std::string& notification_id) const OVERRIDE;
- virtual bool CancelById(const std::string& notification_id) OVERRIDE;
- virtual std::set<std::string> GetAllIdsByProfileAndSourceOrigin(
- Profile* profile,
- const GURL& source) OVERRIDE;
- virtual bool CancelAllBySourceOrigin(const GURL& source_origin) OVERRIDE;
- virtual bool CancelAllByProfile(Profile* profile) OVERRIDE;
- virtual void CancelAll() OVERRIDE;
-
- // NotificationPrefsManager overrides:
- virtual BalloonCollection::PositionPreference
- GetPositionPreference() const OVERRIDE;
- virtual void SetPositionPreference(
- BalloonCollection::PositionPreference preference) OVERRIDE;
-
- BalloonCollection* balloon_collection();
- NotificationPrefsManager* prefs_manager();
-
- // Helper used to pull the static instance for testing.
- // In tests, use this instead of g_browser_process->notification_ui_manager().
- static BalloonNotificationUIManager* GetInstanceForTesting();
-
- void GetQueuedNotificationsForTesting(
- std::vector<const Notification*>* notifications);
-
- private:
- bool ShowNotification(const Notification& notification, Profile* profile);
- bool UpdateNotification(const Notification& notification, Profile* profile);
-
- // Attempts to display notifications from the show_queue. Invoked if they
- // previously returned 'false' from ShowNotifications, which may happen when
- // there is no room to show another notification or notifications are blocked.
- void CheckAndShowNotifications();
-
- void ShowNotifications();
-
- void OnDesktopNotificationPositionChanged();
-
- // BalloonCollectionObserver overrides:
- virtual void OnBalloonSpaceChanged() OVERRIDE;
-
- // NotificationBlocker::Observer overrides:
- virtual void OnBlockingStateChanged(
- message_center::NotificationBlocker* blocker) OVERRIDE;
-
- // A queue of notifications which are waiting to be shown.
- typedef std::deque<linked_ptr<QueuedNotification> > NotificationDeque;
- NotificationDeque show_queue_;
-
- // An owned pointer to the collection of active balloons.
- scoped_ptr<BalloonCollection> balloon_collection_;
-
- ScreenLockNotificationBlocker screen_lock_blocker_;
- FullscreenNotificationBlocker fullscreen_blocker_;
-
- // Prefs listener for the position preference.
- IntegerPrefMember position_pref_;
-
- NotificationSystemObserver system_observer_;
-
- DISALLOW_COPY_AND_ASSIGN(BalloonNotificationUIManager);
-};
-
-#endif // CHROME_BROWSER_NOTIFICATIONS_BALLOON_NOTIFICATION_UI_MANAGER_H_
diff --git a/chrome/browser/notifications/desktop_notification_service.cc b/chrome/browser/notifications/desktop_notification_service.cc
index 2f82841..a52747d 100644
--- a/chrome/browser/notifications/desktop_notification_service.cc
+++ b/chrome/browser/notifications/desktop_notification_service.cc
@@ -384,33 +384,6 @@ base::string16 DesktopNotificationService::CreateDataUrl(
}
// static
-std::string DesktopNotificationService::AddNotification(
- const GURL& origin_url,
- const base::string16& title,
- const base::string16& message,
- const GURL& icon_url,
- const base::string16& replace_id,
- NotificationDelegate* delegate,
- Profile* profile) {
- if (message_center::IsRichNotificationEnabled()) {
- // For message center create a non-HTML notification with |icon_url|.
- Notification notification(origin_url, icon_url, title, message,
- blink::WebTextDirectionDefault,
- base::string16(), replace_id, delegate);
- g_browser_process->notification_ui_manager()->Add(notification, profile);
- return notification.notification_id();
- }
-
- // Generate a data URL embedding the icon URL, title, and message.
- GURL content_url(CreateDataUrl(
- icon_url, title, message, blink::WebTextDirectionDefault));
- Notification notification(
- GURL(), content_url, base::string16(), replace_id, delegate);
- g_browser_process->notification_ui_manager()->Add(notification, profile);
- return notification.notification_id();
-}
-
-// static
std::string DesktopNotificationService::AddIconNotification(
const GURL& origin_url,
const base::string16& title,
@@ -419,26 +392,11 @@ std::string DesktopNotificationService::AddIconNotification(
const base::string16& replace_id,
NotificationDelegate* delegate,
Profile* profile) {
- if (message_center::IsRichNotificationEnabled()) {
- // For message center create a non-HTML notification with |icon|.
- Notification notification(origin_url, icon, title, message,
- blink::WebTextDirectionDefault,
- base::string16(), replace_id, delegate);
- g_browser_process->notification_ui_manager()->Add(notification, profile);
- return notification.notification_id();
- }
-
- GURL icon_url;
- if (!icon.IsEmpty())
- icon_url = GURL(webui::GetBitmapDataUrl(*icon.ToSkBitmap()));
- return AddNotification(
- origin_url, title, message, icon_url, replace_id, delegate, profile);
-}
-
-// static
-void DesktopNotificationService::RemoveNotification(
- const std::string& notification_id) {
- g_browser_process->notification_ui_manager()->CancelById(notification_id);
+ Notification notification(origin_url, icon, title, message,
+ blink::WebTextDirectionDefault,
+ base::string16(), replace_id, delegate);
+ g_browser_process->notification_ui_manager()->Add(notification, profile);
+ return notification.notification_id();
}
DesktopNotificationService::DesktopNotificationService(
@@ -635,10 +593,7 @@ bool DesktopNotificationService::ShowDesktopNotification(
base::string16 DesktopNotificationService::DisplayNameForOriginInProcessId(
const GURL& origin, int process_id) {
// If the source is an extension, lookup the display name.
- // Message center prefers to use extension name if the notification
- // is allowed by an extension.
- if (NotificationUIManager::DelegatesToMessageCenter() ||
- origin.SchemeIs(extensions::kExtensionScheme)) {
+ if (origin.SchemeIs(extensions::kExtensionScheme)) {
extensions::InfoMap* extension_info_map =
extensions::ExtensionSystem::Get(profile_)->info_map();
if (extension_info_map) {
@@ -746,8 +701,7 @@ void DesktopNotificationService::SetNotifierEnabled(
void DesktopNotificationService::ShowWelcomeNotificationIfNecessary(
const Notification& notification) {
- if (!chrome_now_welcome_notification_ &&
- message_center::IsRichNotificationEnabled()) {
+ if (!chrome_now_welcome_notification_) {
chrome_now_welcome_notification_ =
ExtensionWelcomeNotification::Create(kChromeNowExtensionID, profile_);
}
diff --git a/chrome/browser/notifications/desktop_notification_service.h b/chrome/browser/notifications/desktop_notification_service.h
index 941f78d..745200f 100644
--- a/chrome/browser/notifications/desktop_notification_service.h
+++ b/chrome/browser/notifications/desktop_notification_service.h
@@ -105,20 +105,7 @@ class DesktopNotificationService : public KeyedService,
static base::string16 CreateDataUrl(int resource,
const std::vector<std::string>& subst);
- // Add a desktop notification. On non-Ash platforms this will generate a HTML
- // notification from the input parameters. On Ash it will generate a normal
- // ash notification. Returns the notification id.
- // TODO(mukai): remove these methods. HTML notifications are no longer
- // supported.
- static std::string AddNotification(const GURL& origin_url,
- const base::string16& title,
- const base::string16& message,
- const GURL& icon_url,
- const base::string16& replace_id,
- NotificationDelegate* delegate,
- Profile* profile);
-
- // Same as above, but takes a gfx::Image for the icon instead.
+ // Add a desktop notification.
static std::string AddIconNotification(const GURL& origin_url,
const base::string16& title,
const base::string16& message,
@@ -127,9 +114,6 @@ class DesktopNotificationService : public KeyedService,
NotificationDelegate* delegate,
Profile* profile);
- // Remove any active notification corresponding to |notification_id|.
- static void RemoveNotification(const std::string& notification_id);
-
// The default content setting determines how to handle origins that haven't
// been allowed or denied yet. If |provider_id| is not NULL, the id of the
// provider which provided the default setting is assigned to it.
diff --git a/chrome/browser/notifications/desktop_notifications_unittest.cc b/chrome/browser/notifications/desktop_notifications_unittest.cc
deleted file mode 100644
index 0e96bc3..0000000
--- a/chrome/browser/notifications/desktop_notifications_unittest.cc
+++ /dev/null
@@ -1,588 +0,0 @@
-// Copyright (c) 2012 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/desktop_notifications_unittest.h"
-
-#include "base/prefs/testing_pref_service.h"
-#include "base/strings/string_util.h"
-#include "base/strings/utf_string_conversions.h"
-#include "chrome/browser/notifications/balloon_notification_ui_manager.h"
-#include "chrome/browser/notifications/fake_balloon_view.h"
-#include "chrome/browser/prefs/browser_prefs.h"
-#include "chrome/common/pref_names.h"
-#include "chrome/test/base/chrome_unit_test_suite.h"
-#include "chrome/test/base/testing_browser_process.h"
-#include "chrome/test/base/testing_profile.h"
-#include "chrome/test/base/testing_profile_manager.h"
-#include "content/public/common/show_desktop_notification_params.h"
-#include "ui/base/ime/input_method_initializer.h"
-#include "ui/gl/gl_surface.h"
-#include "ui/message_center/message_center.h"
-
-#if defined(USE_ASH)
-#include "ash/shell.h"
-#include "ash/test/test_shell_delegate.h"
-#include "ui/aura/env.h"
-#include "ui/aura/window_event_dispatcher.h"
-#include "ui/compositor/scoped_animation_duration_scale_mode.h"
-#include "ui/compositor/test/context_factories_for_test.h"
-#endif
-
-#if defined(USE_AURA)
-#include "ui/wm/core/wm_state.h"
-#endif
-
-
-using content::BrowserThread;
-
-// static
-const int MockBalloonCollection::kMockBalloonSpace = 5;
-
-// static
-std::string DesktopNotificationsTest::log_output_;
-
-MockBalloonCollection::MockBalloonCollection() {}
-
-MockBalloonCollection::~MockBalloonCollection() {}
-
-void MockBalloonCollection::Add(const Notification& notification,
- Profile* profile) {
- // Swap in a logging proxy for the purpose of logging calls that
- // would be made into javascript, then pass this down to the
- // balloon collection.
- Notification test_notification(
- notification.origin_url(),
- notification.content_url(),
- notification.display_source(),
- notification.replace_id(),
- new LoggingNotificationProxy(notification.notification_id()));
- BalloonCollectionImpl::Add(test_notification, profile);
-}
-
-bool MockBalloonCollection::HasSpace() const {
- return count() < kMockBalloonSpace;
-}
-
-Balloon* MockBalloonCollection::MakeBalloon(const Notification& notification,
- Profile* profile) {
- // Start with a normal balloon but mock out the view.
- Balloon* balloon = BalloonCollectionImpl::MakeBalloon(notification, profile);
- balloon->set_view(new FakeBalloonView(balloon));
- balloons_.push_back(balloon);
- return balloon;
-}
-
-void MockBalloonCollection::OnBalloonClosed(Balloon* source) {
- std::deque<Balloon*>::iterator it;
- for (it = balloons_.begin(); it != balloons_.end(); ++it) {
- if (*it == source) {
- balloons_.erase(it);
- BalloonCollectionImpl::OnBalloonClosed(source);
- break;
- }
- }
-}
-
-const BalloonCollection::Balloons& MockBalloonCollection::GetActiveBalloons() {
- return balloons_;
-}
-
-int MockBalloonCollection::UppermostVerticalPosition() {
- int min = 0;
- std::deque<Balloon*>::iterator iter;
- for (iter = balloons_.begin(); iter != balloons_.end(); ++iter) {
- int pos = (*iter)->GetPosition().y();
- if (iter == balloons_.begin() || pos < min)
- min = pos;
- }
- return min;
-}
-
-DesktopNotificationsTest::DesktopNotificationsTest()
- : ui_thread_(BrowserThread::UI, &message_loop_),
- balloon_collection_(NULL) {
-}
-
-DesktopNotificationsTest::~DesktopNotificationsTest() {
-}
-
-void DesktopNotificationsTest::SetUp() {
- ChromeUnitTestSuite::InitializeProviders();
- ChromeUnitTestSuite::InitializeResourceBundle();
- ui::InitializeInputMethodForTesting();
-#if defined(USE_AURA)
- wm_state_.reset(new wm::WMState);
-#endif
-#if defined(USE_ASH)
- ui::ScopedAnimationDurationScaleMode normal_duration_mode(
- ui::ScopedAnimationDurationScaleMode::ZERO_DURATION);
- // The message center is notmally initialized on |g_browser_process| which
- // is not created for these tests.
- message_center::MessageCenter::Initialize();
- // The ContextFactory must exist before any Compositors are created.
- bool enable_pixel_output = false;
- ui::InitializeContextFactoryForTests(enable_pixel_output);
- // MockBalloonCollection retrieves information about the screen on creation.
- // So it is necessary to make sure the desktop gets created first.
- ash::Shell::CreateInstance(new ash::test::TestShellDelegate);
-#endif
- chrome::RegisterLocalState(local_state_.registry());
- profile_.reset(new TestingProfile());
- ui_manager_.reset(new BalloonNotificationUIManager(&local_state_));
- balloon_collection_ = new MockBalloonCollection();
- ui_manager_->SetBalloonCollection(balloon_collection_);
- service_.reset(new DesktopNotificationService(profile(), ui_manager_.get()));
- log_output_.clear();
-}
-
-void DesktopNotificationsTest::TearDown() {
- service_.reset(NULL);
- ui_manager_.reset(NULL);
- profile_.reset(NULL);
-#if defined(USE_ASH)
- ash::Shell::DeleteInstance();
- // The message center is notmally shutdown on |g_browser_process| which
- // is not created for these tests.
- message_center::MessageCenter::Shutdown();
- aura::Env::DeleteInstance();
- ui::TerminateContextFactoryForTests();
-#endif
-#if defined(USE_AURA)
- wm_state_.reset();
-#endif
- ui::ShutdownInputMethodForTesting();
-}
-
-content::ShowDesktopNotificationHostMsgParams
-DesktopNotificationsTest::StandardTestNotification() {
- content::ShowDesktopNotificationHostMsgParams params;
- params.notification_id = 0;
- params.origin = GURL("http://www.google.com");
- params.icon_url = GURL("/icon.png");
- params.title = base::ASCIIToUTF16("Title");
- params.body = base::ASCIIToUTF16("Text");
- params.direction = blink::WebTextDirectionDefault;
- return params;
-}
-
-TEST_F(DesktopNotificationsTest, TestShow) {
- content::ShowDesktopNotificationHostMsgParams params =
- StandardTestNotification();
- params.notification_id = 1;
-
- EXPECT_TRUE(service_->ShowDesktopNotification(
- params, 0, 0, DesktopNotificationService::PageNotification));
- base::MessageLoopForUI::current()->RunUntilIdle();
- EXPECT_EQ(1, balloon_collection_->count());
-
- content::ShowDesktopNotificationHostMsgParams params2 =
- StandardTestNotification();
- params2.notification_id = 2;
- params2.origin = GURL("http://www.google.com");
- params2.body = base::ASCIIToUTF16("Text");
-
- EXPECT_TRUE(service_->ShowDesktopNotification(
- params2, 0, 0, DesktopNotificationService::PageNotification));
- base::MessageLoopForUI::current()->RunUntilIdle();
- EXPECT_EQ(2, balloon_collection_->count());
-
- EXPECT_EQ("notification displayed\n"
- "notification displayed\n",
- log_output_);
-}
-
-TEST_F(DesktopNotificationsTest, TestClose) {
- content::ShowDesktopNotificationHostMsgParams params =
- StandardTestNotification();
- params.notification_id = 1;
-
- // Request a notification; should open a balloon.
- EXPECT_TRUE(service_->ShowDesktopNotification(
- params, 0, 0, DesktopNotificationService::PageNotification));
- base::MessageLoopForUI::current()->RunUntilIdle();
- EXPECT_EQ(1, balloon_collection_->count());
-
- // Close all the open balloons.
- while (balloon_collection_->count() > 0) {
- (*(balloon_collection_->GetActiveBalloons().begin()))->OnClose(true);
- }
-
- EXPECT_EQ("notification displayed\n"
- "notification closed by user\n",
- log_output_);
-}
-
-TEST_F(DesktopNotificationsTest, TestCancel) {
- int process_id = 0;
- int route_id = 0;
- int notification_id = 1;
-
- content::ShowDesktopNotificationHostMsgParams params =
- StandardTestNotification();
- params.notification_id = notification_id;
-
- // Request a notification; should open a balloon.
- EXPECT_TRUE(service_->ShowDesktopNotification(
- params, process_id, route_id,
- DesktopNotificationService::PageNotification));
- base::MessageLoopForUI::current()->RunUntilIdle();
- EXPECT_EQ(1, balloon_collection_->count());
-
- // Cancel the same notification
- service_->CancelDesktopNotification(process_id,
- route_id,
- notification_id);
- base::MessageLoopForUI::current()->RunUntilIdle();
- // Verify that the balloon collection is now empty.
- EXPECT_EQ(0, balloon_collection_->count());
-
- EXPECT_EQ("notification displayed\n"
- "notification closed by script\n",
- log_output_);
-}
-
-#if defined(OS_WIN) || defined(TOOLKIT_VIEWS)
-TEST_F(DesktopNotificationsTest, TestPositioning) {
- content::ShowDesktopNotificationHostMsgParams params =
- StandardTestNotification();
- std::string expected_log;
- // Create some toasts. After each but the first, make sure there
- // is a minimum separation between the toasts.
- int last_top = 0;
- for (int id = 0; id <= 3; ++id) {
- params.notification_id = id;
- EXPECT_TRUE(service_->ShowDesktopNotification(
- params, 0, 0, DesktopNotificationService::PageNotification));
- expected_log.append("notification displayed\n");
- int top = balloon_collection_->UppermostVerticalPosition();
- if (id > 0)
- EXPECT_LE(top, last_top - balloon_collection_->MinHeight());
- last_top = top;
- }
-
- EXPECT_EQ(expected_log, log_output_);
-}
-
-TEST_F(DesktopNotificationsTest, TestVariableSize) {
- content::ShowDesktopNotificationHostMsgParams params;
- params.origin = GURL("http://long.google.com");
- params.icon_url = GURL("/icon.png");
- params.title = base::ASCIIToUTF16("Really Really Really Really Really Really "
- "Really Really Really Really Really Really "
- "Really Really Really Really Really Really "
- "Really Long Title"),
- params.body = base::ASCIIToUTF16("Text");
- params.notification_id = 0;
-
- std::string expected_log;
- // Create some toasts. After each but the first, make sure there
- // is a minimum separation between the toasts.
- EXPECT_TRUE(service_->ShowDesktopNotification(
- params, 0, 0, DesktopNotificationService::PageNotification));
- expected_log.append("notification displayed\n");
-
- params.origin = GURL("http://short.google.com");
- params.title = base::ASCIIToUTF16("Short title");
- params.notification_id = 1;
- EXPECT_TRUE(service_->ShowDesktopNotification(
- params, 0, 0, DesktopNotificationService::PageNotification));
- expected_log.append("notification displayed\n");
-
- std::deque<Balloon*>& balloons = balloon_collection_->balloons();
- std::deque<Balloon*>::iterator iter;
- for (iter = balloons.begin(); iter != balloons.end(); ++iter) {
- if ((*iter)->notification().origin_url().host() == "long.google.com") {
- EXPECT_GE((*iter)->GetViewSize().height(),
- balloon_collection_->MinHeight());
- EXPECT_LE((*iter)->GetViewSize().height(),
- balloon_collection_->MaxHeight());
- } else {
- EXPECT_EQ((*iter)->GetViewSize().height(),
- balloon_collection_->MinHeight());
- }
- }
- EXPECT_EQ(expected_log, log_output_);
-}
-#endif
-
-TEST_F(DesktopNotificationsTest, TestCancelByProfile) {
- int process_id = 0;
- int route_id = 0;
-
- TestingBrowserProcess* browser_process =
- TestingBrowserProcess::GetGlobal();
- TestingProfileManager profile_manager(browser_process);
- ASSERT_TRUE(profile_manager.SetUp());
-
- TestingProfile* second_profile =
- profile_manager.CreateTestingProfile("SecondTestingProfile");
-
- scoped_ptr<DesktopNotificationService> second_service(
- new DesktopNotificationService(second_profile, ui_manager_.get()));
-
- // Request lots of identical notifications.
- content::ShowDesktopNotificationHostMsgParams params =
- StandardTestNotification();
- params.notification_id = 1;
- // Notice that the first one is the only one that doesn't use
- // the second profile.
- EXPECT_TRUE(service_->ShowDesktopNotification(
- params, process_id, route_id,
- DesktopNotificationService::PageNotification));
-
- // |kLotsOfToasts| must be large enough to trigger a resize of the underlying
- // std::deque while we're clearing it.
- const int kLotsOfToasts = 20;
- for (int id = 2; id <= kLotsOfToasts; ++id) {
- params.notification_id = id;
- EXPECT_TRUE(second_service->ShowDesktopNotification(
- params, process_id, route_id,
- DesktopNotificationService::PageNotification));
- }
- base::MessageLoopForUI::current()->RunUntilIdle();
-
- ui_manager_->CancelAllByProfile(second_profile);
-
- // Verify that the balloon collection only contains the single
- // notification from the first profile.
- EXPECT_EQ(1, balloon_collection_->count());
-}
-
-TEST_F(DesktopNotificationsTest, TestCancelBySourceOrigin) {
- int process_id = 0;
- int route_id = 0;
-
- // Request lots of identical notifications.
- content::ShowDesktopNotificationHostMsgParams params =
- StandardTestNotification();
-
- // After the first, all the notifications are from attacker.com.
- content::ShowDesktopNotificationHostMsgParams odd_params =
- StandardTestNotification();
- odd_params.origin = GURL("attacker.com");
-
- // Show the only non-attacker.com notification.
- params.notification_id = 1;
- EXPECT_TRUE(service_->ShowDesktopNotification(
- params, process_id, route_id,
- DesktopNotificationService::PageNotification));
-
- // |kLotsOfToasts| must be large enough to trigger a resize of the underlying
- // std::deque while we're clearing it.
- const int kLotsOfToasts = 20;
- for (int id = 2; id <= kLotsOfToasts; ++id) {
- odd_params.notification_id = id;
- EXPECT_TRUE(service_->ShowDesktopNotification(
- odd_params, process_id, route_id,
- DesktopNotificationService::PageNotification));
- }
- base::MessageLoopForUI::current()->RunUntilIdle();
-
- ui_manager_->CancelAllBySourceOrigin(odd_params.origin);
-
- // Verify that the balloon collection only contains the single
- // notification which is not from the canceled origin.
- EXPECT_EQ(1, balloon_collection_->count());
-}
-
-TEST_F(DesktopNotificationsTest, TestQueueing) {
- int process_id = 0;
- int route_id = 0;
-
- // Request lots of identical notifications.
- content::ShowDesktopNotificationHostMsgParams params =
- StandardTestNotification();
- const int kLotsOfToasts = 20;
- for (int id = 1; id <= kLotsOfToasts; ++id) {
- params.notification_id = id;
- EXPECT_TRUE(service_->ShowDesktopNotification(
- params, process_id, route_id,
- DesktopNotificationService::PageNotification));
- }
- base::MessageLoopForUI::current()->RunUntilIdle();
-
- // Build up an expected log of what should be happening.
- std::string expected_log;
- for (int i = 0; i < balloon_collection_->max_balloon_count(); ++i) {
- expected_log.append("notification displayed\n");
- }
-
- // The max number that our balloon collection can hold should be
- // shown.
- EXPECT_EQ(balloon_collection_->max_balloon_count(),
- balloon_collection_->count());
- EXPECT_EQ(expected_log, log_output_);
-
- // Cancel the notifications from the start; the balloon space should
- // remain full.
- {
- int id;
- for (id = 1;
- id <= kLotsOfToasts - balloon_collection_->max_balloon_count();
- ++id) {
- service_->CancelDesktopNotification(process_id, route_id, id);
- base::MessageLoopForUI::current()->RunUntilIdle();
- expected_log.append("notification closed by script\n");
- expected_log.append("notification displayed\n");
- EXPECT_EQ(balloon_collection_->max_balloon_count(),
- balloon_collection_->count());
- EXPECT_EQ(expected_log, log_output_);
- }
-
- // Now cancel the rest. It should empty the balloon space.
- for (; id <= kLotsOfToasts; ++id) {
- service_->CancelDesktopNotification(process_id, route_id, id);
- expected_log.append("notification closed by script\n");
- base::MessageLoopForUI::current()->RunUntilIdle();
- EXPECT_EQ(expected_log, log_output_);
- }
- }
-
- // Verify that the balloon collection is now empty.
- EXPECT_EQ(0, balloon_collection_->count());
-}
-
-TEST_F(DesktopNotificationsTest, TestEarlyDestruction) {
- // Create some toasts and then prematurely delete the notification service,
- // just to make sure nothing crashes/leaks.
- content::ShowDesktopNotificationHostMsgParams params =
- StandardTestNotification();
- for (int id = 0; id <= 3; ++id) {
- params.notification_id = id;
- EXPECT_TRUE(service_->ShowDesktopNotification(
- params, 0, 0, DesktopNotificationService::PageNotification));
- }
- service_.reset(NULL);
-}
-
-TEST_F(DesktopNotificationsTest, TestUserInputEscaping) {
- // Create a test script with some HTML; assert that it doesn't get into the
- // data:// URL that's produced for the balloon.
- content::ShowDesktopNotificationHostMsgParams params =
- StandardTestNotification();
- params.title = base::ASCIIToUTF16("<script>window.alert('uh oh');</script>");
- params.body = base::ASCIIToUTF16("<i>this text is in italics</i>");
- params.notification_id = 1;
- EXPECT_TRUE(service_->ShowDesktopNotification(
- params, 0, 0, DesktopNotificationService::PageNotification));
-
- base::MessageLoopForUI::current()->RunUntilIdle();
- EXPECT_EQ(1, balloon_collection_->count());
- Balloon* balloon = (*balloon_collection_->balloons().begin());
- GURL data_url = balloon->notification().content_url();
- EXPECT_EQ(std::string::npos, data_url.spec().find("<script>"));
- EXPECT_EQ(std::string::npos, data_url.spec().find("<i>"));
- // URL-encoded versions of tags should also not be found.
- EXPECT_EQ(std::string::npos, data_url.spec().find("%3cscript%3e"));
- EXPECT_EQ(std::string::npos, data_url.spec().find("%3ci%3e"));
-}
-
-TEST_F(DesktopNotificationsTest, TestBoundingBox) {
- // Create some notifications.
- content::ShowDesktopNotificationHostMsgParams params =
- StandardTestNotification();
- for (int id = 0; id <= 3; ++id) {
- params.notification_id = id;
- EXPECT_TRUE(service_->ShowDesktopNotification(
- params, 0, 0, DesktopNotificationService::PageNotification));
- }
-
- gfx::Rect box = balloon_collection_->GetBalloonsBoundingBox();
-
- // Try this for all positions.
- BalloonCollection::PositionPreference pref;
- for (pref = BalloonCollection::UPPER_RIGHT;
- pref <= BalloonCollection::LOWER_LEFT;
- pref = static_cast<BalloonCollection::PositionPreference>(pref + 1)) {
- // Make sure each balloon's 4 corners are inside the box.
- std::deque<Balloon*>& balloons = balloon_collection_->balloons();
- std::deque<Balloon*>::iterator iter;
- for (iter = balloons.begin(); iter != balloons.end(); ++iter) {
- int min_x = (*iter)->GetPosition().x();
- int max_x = min_x + (*iter)->GetViewSize().width() - 1;
- int min_y = (*iter)->GetPosition().y();
- int max_y = min_y + (*iter)->GetViewSize().height() - 1;
-
- EXPECT_TRUE(box.Contains(gfx::Point(min_x, min_y)));
- EXPECT_TRUE(box.Contains(gfx::Point(min_x, max_y)));
- EXPECT_TRUE(box.Contains(gfx::Point(max_x, min_y)));
- EXPECT_TRUE(box.Contains(gfx::Point(max_x, max_y)));
- }
- }
-}
-
-TEST_F(DesktopNotificationsTest, TestPositionPreference) {
- // Set position preference to lower right.
- local_state_.SetInteger(prefs::kDesktopNotificationPosition,
- BalloonCollection::LOWER_RIGHT);
-
- // Create some notifications.
- content::ShowDesktopNotificationHostMsgParams params =
- StandardTestNotification();
- for (int id = 0; id <= 3; ++id) {
- params.notification_id = id;
- EXPECT_TRUE(service_->ShowDesktopNotification(
- params, 0, 0, DesktopNotificationService::PageNotification));
- }
-
- std::deque<Balloon*>& balloons = balloon_collection_->balloons();
- std::deque<Balloon*>::iterator iter;
-
- // Check that they decrease in y-position (for MAC, with reversed
- // coordinates, they should increase).
- int last_y = -1;
- int last_x = -1;
-
- for (iter = balloons.begin(); iter != balloons.end(); ++iter) {
- int current_x = (*iter)->GetPosition().x();
- int current_y = (*iter)->GetPosition().y();
- if (last_x > 0)
- EXPECT_EQ(last_x, current_x);
-
- if (last_y > 0) {
-#if defined(OS_MACOSX)
- EXPECT_GT(current_y, last_y);
-#else
- EXPECT_LT(current_y, last_y);
-#endif
- }
-
- last_x = current_x;
- last_y = current_y;
- }
-
- // Now change the position to upper right. This should cause an immediate
- // repositioning, and we check for the reverse ordering.
- local_state_.SetInteger(prefs::kDesktopNotificationPosition,
- BalloonCollection::UPPER_RIGHT);
- last_x = -1;
- last_y = -1;
-
- for (iter = balloons.begin(); iter != balloons.end(); ++iter) {
- int current_x = (*iter)->GetPosition().x();
- int current_y = (*iter)->GetPosition().y();
-
- if (last_x > 0)
- EXPECT_EQ(last_x, current_x);
-
- if (last_y > 0) {
-#if defined(OS_MACOSX)
- EXPECT_LT(current_y, last_y);
-#else
- EXPECT_GT(current_y, last_y);
-#endif
- }
-
- last_x = current_x;
- last_y = current_y;
- }
-
- // Now change the position to upper left. Confirm that the X value for the
- // balloons gets smaller.
- local_state_.SetInteger(prefs::kDesktopNotificationPosition,
- BalloonCollection::UPPER_LEFT);
-
- int current_x = (*balloons.begin())->GetPosition().x();
- EXPECT_LT(current_x, last_x);
-}
diff --git a/chrome/browser/notifications/desktop_notifications_unittest.h b/chrome/browser/notifications/desktop_notifications_unittest.h
deleted file mode 100644
index 47eaf77..0000000
--- a/chrome/browser/notifications/desktop_notifications_unittest.h
+++ /dev/null
@@ -1,139 +0,0 @@
-// Copyright (c) 2012 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_NOTIFICATIONS_DESKTOP_NOTIFICATIONS_UNITTEST_H_
-#define CHROME_BROWSER_NOTIFICATIONS_DESKTOP_NOTIFICATIONS_UNITTEST_H_
-
-#include <deque>
-#include <string>
-
-#include "base/message_loop/message_loop.h"
-#include "base/prefs/testing_pref_service.h"
-#include "chrome/browser/notifications/balloon_collection_impl.h"
-#include "chrome/browser/notifications/balloon_notification_ui_manager.h"
-#include "chrome/browser/notifications/desktop_notification_service.h"
-#include "chrome/browser/notifications/notification.h"
-#include "chrome/browser/notifications/notification_test_util.h"
-#include "chrome/test/base/testing_browser_process.h"
-#include "chrome/test/base/testing_profile.h"
-#include "content/public/test/render_view_test.h"
-#include "content/public/test/test_browser_thread.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-#if defined(USE_AURA)
-namespace wm {
-class WMState;
-}
-#endif
-
-class ActiveDesktopMonitor;
-class DesktopNotificationsTest;
-typedef LoggingNotificationDelegate<DesktopNotificationsTest>
- LoggingNotificationProxy;
-
-// Test version of the balloon collection which counts the number
-// of notifications that are added to it.
-class MockBalloonCollection : public BalloonCollectionImpl {
- public:
- MockBalloonCollection();
- virtual ~MockBalloonCollection();
-
- // Our mock collection has an area large enough for a fixed number
- // of balloons.
- static const int kMockBalloonSpace;
- int max_balloon_count() const { return kMockBalloonSpace; }
-
- // BalloonCollectionImpl overrides
- virtual void Add(const Notification& notification,
- Profile* profile) OVERRIDE;
- virtual bool HasSpace() const OVERRIDE;
- virtual Balloon* MakeBalloon(const Notification& notification,
- Profile* profile) OVERRIDE;
- virtual void DisplayChanged() OVERRIDE {}
- virtual void OnBalloonClosed(Balloon* source) OVERRIDE;
- virtual const BalloonCollection::Balloons& GetActiveBalloons() OVERRIDE;
-
- // Number of balloons being shown.
- std::deque<Balloon*>& balloons() { return balloons_; }
- int count() const { return balloons_.size(); }
-
- // Returns the highest y-coordinate of all the balloons in the collection.
- int UppermostVerticalPosition();
-
- // Returns the height bounds of a balloon.
- int MinHeight() { return Layout::min_balloon_height(); }
- int MaxHeight() { return Layout::max_balloon_height(); }
-
- // Returns the bounding box.
- gfx::Rect GetBalloonsBoundingBox() {
- return BalloonCollectionImpl::GetBalloonsBoundingBox();
- }
-
- private:
- std::deque<Balloon*> balloons_;
-};
-
-class DesktopNotificationsTest : public testing::Test {
- public:
- DesktopNotificationsTest();
- virtual ~DesktopNotificationsTest();
-
- static void log(const std::string& message) {
- log_output_.append(message);
- }
-
- Profile* profile() { return profile_.get(); }
-
- protected:
- // testing::Test overrides
- virtual void SetUp() OVERRIDE;
- virtual void TearDown() OVERRIDE;
-
- void AllowOrigin(const GURL& origin) {
- service_->GrantPermission(origin);
- }
-
- void DenyOrigin(const GURL& origin) {
- service_->DenyPermission(origin);
- }
-
- // Constructs a notification parameter structure for use in tests.
- content::ShowDesktopNotificationHostMsgParams StandardTestNotification();
-
- // Must be first member. Because we're running a unit test in browser_tests
- // we need to handle TestingBrowserProcess initialization ourselves.
- TestingBrowserProcessInitializer initializer_;
-
- // Create a message loop to allow notifications code to post tasks,
- // and a thread so that notifications code runs on the expected thread.
- base::MessageLoopForUI message_loop_;
- content::TestBrowserThread ui_thread_;
-
- // Local state mock.
- TestingPrefServiceSimple local_state_;
-
- // Test profile.
- scoped_ptr<TestingProfile> profile_;
-
- // Mock balloon collection -- owned by the NotificationUIManager
- MockBalloonCollection* balloon_collection_;
-
- // Real UI manager.
- scoped_ptr<BalloonNotificationUIManager> ui_manager_;
-
- // Real DesktopNotificationService
- scoped_ptr<DesktopNotificationService> service_;
-
- // Contains the cumulative output of the unit test.
- static std::string log_output_;
-
- private:
-#if defined(USE_AURA)
- scoped_ptr<wm::WMState> wm_state_;
-#endif
-
- DISALLOW_COPY_AND_ASSIGN(DesktopNotificationsTest);
-};
-
-#endif // CHROME_BROWSER_NOTIFICATIONS_DESKTOP_NOTIFICATIONS_UNITTEST_H_
diff --git a/chrome/browser/notifications/fake_balloon_view.cc b/chrome/browser/notifications/fake_balloon_view.cc
deleted file mode 100644
index e9b43d1..0000000
--- a/chrome/browser/notifications/fake_balloon_view.cc
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright (c) 2012 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/fake_balloon_view.h"
-
-FakeBalloonView::FakeBalloonView(Balloon* balloon)
- : balloon_(balloon) {
-}
-
-FakeBalloonView::~FakeBalloonView() {
-}
-
-void FakeBalloonView::Show(Balloon* balloon) {
-}
-
-void FakeBalloonView::Update() {
-}
-
-void FakeBalloonView::RepositionToBalloon() {
-}
-
-void FakeBalloonView::Close(bool by_user) {
- balloon_->OnClose(by_user);
-}
-
-gfx::Size FakeBalloonView::GetSize() const {
- return balloon_->content_size();
-}
-
-BalloonHost* FakeBalloonView::GetHost() const {
- return NULL;
-}
diff --git a/chrome/browser/notifications/fake_balloon_view.h b/chrome/browser/notifications/fake_balloon_view.h
deleted file mode 100644
index 58ca320..0000000
--- a/chrome/browser/notifications/fake_balloon_view.h
+++ /dev/null
@@ -1,34 +0,0 @@
-// Copyright (c) 2012 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_NOTIFICATIONS_FAKE_BALLOON_VIEW_H_
-#define CHROME_BROWSER_NOTIFICATIONS_FAKE_BALLOON_VIEW_H_
-
-#include "base/basictypes.h"
-#include "base/compiler_specific.h"
-#include "chrome/browser/notifications/balloon.h"
-
-// Test version of a balloon view which doesn't do anything viewable, but does
-// know how to close itself the same as a regular BalloonView.
-class FakeBalloonView : public BalloonView {
- public:
- explicit FakeBalloonView(Balloon* balloon);
- virtual ~FakeBalloonView();
-
- private:
- // Overridden from BalloonView:
- virtual void Show(Balloon* balloon) OVERRIDE;
- virtual void Update() OVERRIDE;
- virtual void RepositionToBalloon() OVERRIDE;
- virtual void Close(bool by_user) OVERRIDE;
- virtual gfx::Size GetSize() const OVERRIDE;
- virtual BalloonHost* GetHost() const OVERRIDE;
-
- // Non-owned pointer.
- Balloon* balloon_;
-
- DISALLOW_COPY_AND_ASSIGN(FakeBalloonView);
-};
-
-#endif // CHROME_BROWSER_NOTIFICATIONS_FAKE_BALLOON_VIEW_H_
diff --git a/chrome/browser/notifications/message_center_notification_manager.cc b/chrome/browser/notifications/message_center_notification_manager.cc
index 6d500ec..bfbac75 100644
--- a/chrome/browser/notifications/message_center_notification_manager.cc
+++ b/chrome/browser/notifications/message_center_notification_manager.cc
@@ -6,6 +6,7 @@
#include "base/logging.h"
#include "base/memory/scoped_ptr.h"
+#include "base/prefs/pref_registry_simple.h"
#include "base/prefs/pref_service.h"
#include "chrome/browser/chrome_notification_types.h"
#include "chrome/browser/notifications/desktop_notification_service.h"
@@ -90,6 +91,12 @@ MessageCenterNotificationManager::~MessageCenterNotificationManager() {
message_center_->RemoveObserver(this);
}
+void MessageCenterNotificationManager::RegisterPrefs(
+ PrefRegistrySimple* registry) {
+ registry->RegisterBooleanPref(prefs::kMessageCenterShowedFirstRunBalloon,
+ false);
+}
+
////////////////////////////////////////////////////////////////////////////////
// NotificationUIManager
diff --git a/chrome/browser/notifications/message_center_notification_manager.h b/chrome/browser/notifications/message_center_notification_manager.h
index a87520d..52f3c165 100644
--- a/chrome/browser/notifications/message_center_notification_manager.h
+++ b/chrome/browser/notifications/message_center_notification_manager.h
@@ -27,6 +27,7 @@
class MessageCenterSettingsController;
class Notification;
+class PrefRegistrySimple;
class PrefService;
class Profile;
@@ -48,6 +49,9 @@ class MessageCenterNotificationManager
scoped_ptr<message_center::NotifierSettingsProvider> settings_provider);
virtual ~MessageCenterNotificationManager();
+ // Registers preferences.
+ static void RegisterPrefs(PrefRegistrySimple* registry);
+
// NotificationUIManager
virtual void Add(const Notification& notification,
Profile* profile) OVERRIDE;
diff --git a/chrome/browser/notifications/message_center_notifications_browsertest.cc b/chrome/browser/notifications/message_center_notifications_browsertest.cc
index d4e7ee4..ae50396 100644
--- a/chrome/browser/notifications/message_center_notifications_browsertest.cc
+++ b/chrome/browser/notifications/message_center_notifications_browsertest.cc
@@ -152,28 +152,17 @@ class MessageCenterNotificationsTest : public InProcessBrowserTest {
#if !defined(OS_MACOSX)
IN_PROC_BROWSER_TEST_F(MessageCenterNotificationsTest, RetrieveBaseParts) {
- // Make sure comamnd-line switch has an effect.
- EXPECT_EQ(NotificationUIManager::DelegatesToMessageCenter(),
- message_center::IsRichNotificationEnabled());
EXPECT_TRUE(manager());
EXPECT_TRUE(message_center());
}
-// MessaceCenter-specific test.
-#if defined(RUN_MESSAGE_CENTER_TESTS)
-#define MAYBE_BasicAddCancel BasicAddCancel
-#else
-#define MAYBE_BasicAddCancel DISABLED_BasicAddCancel
-#endif
-
-IN_PROC_BROWSER_TEST_F(MessageCenterNotificationsTest, MAYBE_BasicAddCancel) {
+IN_PROC_BROWSER_TEST_F(MessageCenterNotificationsTest, BasicAddCancel) {
#if defined(OS_WIN) && defined(USE_ASH)
// Disable this test in Metro+Ash for now (http://crbug.com/262796).
if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kAshBrowserTests))
return;
#endif
- EXPECT_TRUE(NotificationUIManager::DelegatesToMessageCenter());
// Someone may create system notifications like "you're in multi-profile
// mode..." or something which may change the expectation.
// TODO(mukai): move this to SetUpOnMainThread() after fixing the side-effect
@@ -185,21 +174,13 @@ IN_PROC_BROWSER_TEST_F(MessageCenterNotificationsTest, MAYBE_BasicAddCancel) {
EXPECT_EQ(0u, message_center()->NotificationCount());
}
-// MessaceCenter-specific test.
-#if defined(RUN_MESSAGE_CENTER_TESTS)
-#define MAYBE_BasicDelegate BasicDelegate
-#else
-#define MAYBE_BasicDelegate DISABLED_BasicDelegate
-#endif
-
-IN_PROC_BROWSER_TEST_F(MessageCenterNotificationsTest, MAYBE_BasicDelegate) {
+IN_PROC_BROWSER_TEST_F(MessageCenterNotificationsTest, BasicDelegate) {
#if defined(OS_WIN) && defined(USE_ASH)
// Disable this test in Metro+Ash for now (http://crbug.com/262796).
if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kAshBrowserTests))
return;
#endif
- EXPECT_TRUE(NotificationUIManager::DelegatesToMessageCenter());
TestDelegate* delegate;
manager()->Add(CreateTestNotification("hey", &delegate), profile());
// Verify that delegate accumulated correct log of events.
@@ -210,22 +191,13 @@ IN_PROC_BROWSER_TEST_F(MessageCenterNotificationsTest, MAYBE_BasicDelegate) {
delegate->Release();
}
-// MessaceCenter-specific test.
-#if defined(RUN_MESSAGE_CENTER_TESTS)
-#define MAYBE_ButtonClickedDelegate ButtonClickedDelegate
-#else
-#define MAYBE_ButtonClickedDelegate DISABLED_ButtonClickedDelegate
-#endif
-
-IN_PROC_BROWSER_TEST_F(MessageCenterNotificationsTest,
- MAYBE_ButtonClickedDelegate) {
+IN_PROC_BROWSER_TEST_F(MessageCenterNotificationsTest, ButtonClickedDelegate) {
#if defined(OS_WIN) && defined(USE_ASH)
// Disable this test in Metro+Ash for now (http://crbug.com/262796).
if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kAshBrowserTests))
return;
#endif
- EXPECT_TRUE(NotificationUIManager::DelegatesToMessageCenter());
TestDelegate* delegate;
manager()->Add(CreateTestNotification("n", &delegate), profile());
message_center()->ClickOnNotificationButton("n", 1);
@@ -234,22 +206,14 @@ IN_PROC_BROWSER_TEST_F(MessageCenterNotificationsTest,
delegate->Release();
}
-// MessaceCenter-specific test.
-#if defined(RUN_MESSAGE_CENTER_TESTS)
-#define MAYBE_UpdateExistingNotification UpdateExistingNotification
-#else
-#define MAYBE_UpdateExistingNotification DISABLED_UpdateExistingNotification
-#endif
-
IN_PROC_BROWSER_TEST_F(MessageCenterNotificationsTest,
- MAYBE_UpdateExistingNotification) {
+ UpdateExistingNotification) {
#if defined(OS_WIN) && defined(USE_ASH)
// Disable this test in Metro+Ash for now (http://crbug.com/262796).
if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kAshBrowserTests))
return;
#endif
- EXPECT_TRUE(NotificationUIManager::DelegatesToMessageCenter());
TestDelegate* delegate;
manager()->Add(CreateTestNotification("n", &delegate), profile());
TestDelegate* delegate2;
@@ -263,22 +227,13 @@ IN_PROC_BROWSER_TEST_F(MessageCenterNotificationsTest,
delegate2->Release();
}
-// MessaceCenter-specific test.
-#if defined(RUN_MESSAGE_CENTER_TESTS)
-#define MAYBE_QueueWhenCenterVisible QueueWhenCenterVisible
-#else
-#define MAYBE_QueueWhenCenterVisible DISABLED_QueueWhenCenterVisible
-#endif
-
-IN_PROC_BROWSER_TEST_F(MessageCenterNotificationsTest,
- MAYBE_QueueWhenCenterVisible) {
+IN_PROC_BROWSER_TEST_F(MessageCenterNotificationsTest, QueueWhenCenterVisible) {
#if defined(OS_WIN) && defined(USE_ASH)
// Disable this test in Metro+Ash for now (http://crbug.com/262796).
if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kAshBrowserTests))
return;
#endif
- EXPECT_TRUE(NotificationUIManager::DelegatesToMessageCenter());
TestAddObserver observer(message_center());
TestDelegate* delegate;
@@ -300,24 +255,14 @@ IN_PROC_BROWSER_TEST_F(MessageCenterNotificationsTest,
delegate2->Release();
}
-// MessaceCenter-specific test.
-#if defined(RUN_MESSAGE_CENTER_TESTS)
-#define MAYBE_UpdateNonProgressNotificationWhenCenterVisible \
- UpdateNonProgressNotificationWhenCenterVisible
-#else
-#define MAYBE_UpdateNonProgressNotificationWhenCenterVisible \
- DISABLED_UpdateNonProgressNotificationWhenCenterVisible
-#endif
-
IN_PROC_BROWSER_TEST_F(MessageCenterNotificationsTest,
- MAYBE_UpdateNonProgressNotificationWhenCenterVisible) {
+ UpdateNonProgressNotificationWhenCenterVisible) {
#if defined(OS_WIN) && defined(USE_ASH)
// Disable this test in Metro+Ash for now (http://crbug.com/262796).
if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kAshBrowserTests))
return;
#endif
- EXPECT_TRUE(NotificationUIManager::DelegatesToMessageCenter());
TestAddObserver observer(message_center());
TestDelegate* delegate;
@@ -341,25 +286,15 @@ IN_PROC_BROWSER_TEST_F(MessageCenterNotificationsTest,
delegate->Release();
}
-// MessaceCenter-specific test.
-#if defined(RUN_MESSAGE_CENTER_TESTS)
-#define MAYBE_UpdateNonProgressToProgressNotificationWhenCenterVisible \
- UpdateNonProgressToProgressNotificationWhenCenterVisible
-#else
-#define MAYBE_UpdateNonProgressToProgressNotificationWhenCenterVisible \
- DISABLED_UpdateNonProgressToProgressNotificationWhenCenterVisible
-#endif
-
IN_PROC_BROWSER_TEST_F(
MessageCenterNotificationsTest,
- MAYBE_UpdateNonProgressToProgressNotificationWhenCenterVisible) {
+ UpdateNonProgressToProgressNotificationWhenCenterVisible) {
#if defined(OS_WIN) && defined(USE_ASH)
// Disable this test in Metro+Ash for now (http://crbug.com/262796).
if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kAshBrowserTests))
return;
#endif
- EXPECT_TRUE(NotificationUIManager::DelegatesToMessageCenter());
TestAddObserver observer(message_center());
TestDelegate* delegate;
@@ -383,24 +318,14 @@ IN_PROC_BROWSER_TEST_F(
delegate->Release();
}
-// MessaceCenter-specific test.
-#if defined(RUN_MESSAGE_CENTER_TESTS)
-#define MAYBE_UpdateProgressNotificationWhenCenterVisible \
- UpdateProgressNotificationWhenCenterVisible
-#else
-#define MAYBE_UpdateProgressNotificationWhenCenterVisible \
- DISABLED_UpdateProgressNotificationWhenCenterVisible
-#endif
-
IN_PROC_BROWSER_TEST_F(MessageCenterNotificationsTest,
- MAYBE_UpdateProgressNotificationWhenCenterVisible) {
+ UpdateProgressNotificationWhenCenterVisible) {
#if defined(OS_WIN) && defined(USE_ASH)
// Disable this test in Metro+Ash for now (http://crbug.com/262796).
if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kAshBrowserTests))
return;
#endif
- EXPECT_TRUE(NotificationUIManager::DelegatesToMessageCenter());
TestAddObserver observer(message_center());
TestDelegate* delegate;
@@ -422,7 +347,7 @@ IN_PROC_BROWSER_TEST_F(MessageCenterNotificationsTest,
delegate->Release();
}
-#if !defined(OS_CHROMEOS) && defined(RUN_MESSAGE_CENTER_TESTS)
+#if !defined(OS_CHROMEOS)
#define MAYBE_HideWhenFullscreenEnabled HideWhenFullscreenEnabled
#else
#define MAYBE_HideWhenFullscreenEnabled DISABLED_HideWhenFullscreenEnabled
@@ -430,8 +355,6 @@ IN_PROC_BROWSER_TEST_F(MessageCenterNotificationsTest,
IN_PROC_BROWSER_TEST_F(MessageCenterNotificationsTest,
MAYBE_HideWhenFullscreenEnabled) {
- EXPECT_TRUE(NotificationUIManager::DelegatesToMessageCenter());
-
TestDelegate* delegate;
manager()->Add(CreateTestNotification("n", &delegate), profile());
diff --git a/chrome/browser/notifications/message_center_notifications_unittest_win.cc b/chrome/browser/notifications/message_center_notifications_unittest_win.cc
index 2f2c4ec..500db7b 100644
--- a/chrome/browser/notifications/message_center_notifications_unittest_win.cc
+++ b/chrome/browser/notifications/message_center_notifications_unittest_win.cc
@@ -9,7 +9,6 @@
#include "base/values.h"
#include "chrome/browser/notifications/message_center_notification_manager.h"
#include "chrome/browser/notifications/notification.h"
-#include "chrome/browser/notifications/notification_prefs_manager.h"
#include "chrome/browser/notifications/notification_test_util.h"
#include "chrome/common/pref_names.h"
#include "chrome/test/base/scoped_testing_local_state.h"
@@ -28,9 +27,7 @@ namespace message_center {
class MessageCenterNotificationManagerTest : public testing::Test {
protected:
- MessageCenterNotificationManagerTest() {
- NotificationPrefsManager::RegisterPrefs(local_state_.registry());
- }
+ MessageCenterNotificationManagerTest() {}
virtual void SetUp() {
// Clear the preference and initialize.
diff --git a/chrome/browser/notifications/notification.cc b/chrome/browser/notifications/notification.cc
index 4708376..d555353 100644
--- a/chrome/browser/notifications/notification.cc
+++ b/chrome/browser/notifications/notification.cc
@@ -83,14 +83,6 @@ Notification::Notification(
delegate_(delegate) {
// It's important to leave |icon_url_| empty with rich notifications enabled,
// to prevent "Downloading" the data url and overwriting the existing |icon|.
- if (!message_center::IsRichNotificationEnabled()) {
- // "Upconvert" the string parameters to a data: URL. Some balloon views
- // require content URL to render anything, so this serves as a backup.
- if (!icon.IsEmpty())
- icon_url_ = GURL(webui::GetBitmapDataUrl(*icon.ToSkBitmap()));
- content_url_ = GURL(
- DesktopNotificationService::CreateDataUrl(icon_url_, title, body, dir));
- }
}
Notification::Notification(const GURL& origin_url,
diff --git a/chrome/browser/notifications/notification_browsertest.cc b/chrome/browser/notifications/notification_browsertest.cc
index 587ed7c..f3d20d2 100644
--- a/chrome/browser/notifications/notification_browsertest.cc
+++ b/chrome/browser/notifications/notification_browsertest.cc
@@ -18,10 +18,6 @@
#include "chrome/browser/infobars/confirm_infobar_delegate.h"
#include "chrome/browser/infobars/infobar.h"
#include "chrome/browser/infobars/infobar_service.h"
-#include "chrome/browser/notifications/balloon.h"
-#include "chrome/browser/notifications/balloon_collection.h"
-#include "chrome/browser/notifications/balloon_host.h"
-#include "chrome/browser/notifications/balloon_notification_ui_manager.h"
#include "chrome/browser/notifications/desktop_notification_service.h"
#include "chrome/browser/notifications/desktop_notification_service_factory.h"
#include "chrome/browser/notifications/notification.h"
@@ -118,83 +114,6 @@ class MessageCenterChangeObserver
DISALLOW_COPY_AND_ASSIGN(MessageCenterChangeObserver);
};
-class NotificationBalloonChangeObserver
- : public content::NotificationObserver,
- public NotificationChangeObserver {
- public:
- NotificationBalloonChangeObserver()
- : collection_(BalloonNotificationUIManager::GetInstanceForTesting()->
- balloon_collection()),
- collection_changed_(false),
- notification_received_(false),
- running_(false),
- done_(false) {
- registrar_.Add(this, chrome::NOTIFICATION_NOTIFY_BALLOON_CONNECTED,
- content::NotificationService::AllSources());
- registrar_.Add(this, chrome::NOTIFICATION_NOTIFY_BALLOON_DISCONNECTED,
- content::NotificationService::AllSources());
- collection_->set_on_collection_changed_callback(
- base::Bind(&NotificationBalloonChangeObserver::OnCollectionChanged,
- base::Unretained(this)));
- }
-
- virtual ~NotificationBalloonChangeObserver() {
- collection_->set_on_collection_changed_callback(base::Closure());
- }
-
- // NotificationChangeObserver:
- virtual bool Wait() OVERRIDE {
- if (!Check()) {
- running_ = true;
- message_loop_runner_ = new content::MessageLoopRunner;
- message_loop_runner_->Run();
- EXPECT_TRUE(done_);
- }
- return done_;
- }
-
- bool Check() {
- if (done_)
- return true;
-
- if (collection_changed_ && notification_received_) {
- done_ = true;
- if (running_) {
- message_loop_runner_->Quit();
- running_ = false;
- }
- }
- return done_;
- }
-
- void OnCollectionChanged() {
- collection_changed_ = true;
- Check();
- }
-
- // content::NotificationObserver:
- virtual void Observe(int type,
- const content::NotificationSource& source,
- const content::NotificationDetails& details) OVERRIDE {
- DCHECK(type == chrome::NOTIFICATION_NOTIFY_BALLOON_DISCONNECTED ||
- type == chrome::NOTIFICATION_NOTIFY_BALLOON_CONNECTED);
- notification_received_ = true;
- Check();
- }
-
- private:
- content::NotificationRegistrar registrar_;
- BalloonCollection* collection_;
-
- bool collection_changed_;
- bool notification_received_;
- bool running_;
- bool done_;
- scoped_refptr<content::MessageLoopRunner> message_loop_runner_;
-
- DISALLOW_COPY_AND_ASSIGN(NotificationBalloonChangeObserver);
-};
-
} // namespace
class NotificationsTest : public InProcessBrowserTest {
@@ -204,13 +123,8 @@ class NotificationsTest : public InProcessBrowserTest {
protected:
int GetNotificationCount();
- NotificationChangeObserver* CreateObserver();
-
void CloseBrowserWindow(Browser* browser);
void CrashTab(Browser* browser, int index);
- const std::deque<Balloon*>& GetActiveBalloons();
- void CrashNotification(Balloon* balloon);
- bool CloseNotificationAndWait(const Notification& notification);
void SetDefaultPermissionSetting(ContentSetting setting);
void DenyOrigin(const GURL& origin);
@@ -248,19 +162,7 @@ class NotificationsTest : public InProcessBrowserTest {
};
int NotificationsTest::GetNotificationCount() {
- if (message_center::IsRichNotificationEnabled()) {
- return message_center::MessageCenter::Get()->NotificationCount();
- } else {
- return BalloonNotificationUIManager::GetInstanceForTesting()->
- balloon_collection()->GetActiveBalloons().size();
- }
-}
-
-NotificationChangeObserver* NotificationsTest::CreateObserver() {
- if (message_center::IsRichNotificationEnabled())
- return new MessageCenterChangeObserver();
- else
- return new NotificationBalloonChangeObserver();
+ return message_center::MessageCenter::Get()->NotificationCount();
}
void NotificationsTest::CloseBrowserWindow(Browser* browser) {
@@ -275,25 +177,6 @@ void NotificationsTest::CrashTab(Browser* browser, int index) {
content::CrashTab(browser->tab_strip_model()->GetWebContentsAt(index));
}
-const std::deque<Balloon*>& NotificationsTest::GetActiveBalloons() {
- return BalloonNotificationUIManager::GetInstanceForTesting()->
- balloon_collection()->GetActiveBalloons();
-}
-
-void NotificationsTest::CrashNotification(Balloon* balloon) {
- content::CrashTab(balloon->balloon_view()->GetHost()->web_contents());
-}
-
-bool NotificationsTest::CloseNotificationAndWait(
- const Notification& notification) {
- scoped_ptr<NotificationChangeObserver> observer(CreateObserver());
- bool success = g_browser_process->notification_ui_manager()->
- CancelById(notification.notification_id());
- if (success)
- return observer->Wait();
- return false;
-}
-
void NotificationsTest::SetDefaultPermissionSetting(ContentSetting setting) {
DesktopNotificationService* service = GetDesktopNotificationService();
service->SetDefaultContentSetting(setting);
@@ -339,14 +222,14 @@ std::string NotificationsTest::CreateNotification(
"createNotification('%s', '%s', '%s', '%s');",
icon, title, body, replace_id);
- scoped_ptr<NotificationChangeObserver> observer(CreateObserver());
+ MessageCenterChangeObserver observer;
std::string result;
bool success = content::ExecuteScriptAndExtractString(
browser->tab_strip_model()->GetActiveWebContents(),
script,
&result);
if (success && result != "-1" && wait_for_new_balloon)
- success = observer->Wait();
+ success = observer.Wait();
EXPECT_TRUE(success);
return result;
@@ -384,7 +267,7 @@ bool NotificationsTest::CancelNotification(
"cancelNotification('%s');",
notification_id);
- scoped_ptr<NotificationChangeObserver> observer(CreateObserver());
+ MessageCenterChangeObserver observer;
std::string result;
bool success = content::ExecuteScriptAndExtractString(
browser->tab_strip_model()->GetActiveWebContents(),
@@ -392,7 +275,7 @@ bool NotificationsTest::CancelNotification(
&result);
if (!success || result != "1")
return false;
- return observer->Wait();
+ return observer.Wait();
}
bool NotificationsTest::PerformActionOnInfoBar(
@@ -529,22 +412,12 @@ IN_PROC_BROWSER_TEST_F(NotificationsTest, TestCreateSimpleNotification) {
GURL EXPECTED_ICON_URL = embedded_test_server()->GetURL(kExpectedIconUrl);
ASSERT_EQ(1, GetNotificationCount());
- if (message_center::IsRichNotificationEnabled()) {
- message_center::NotificationList::Notifications notifications =
- message_center::MessageCenter::Get()->GetVisibleNotifications();
- EXPECT_EQ(base::ASCIIToUTF16("My Title"),
- (*notifications.rbegin())->title());
- EXPECT_EQ(base::ASCIIToUTF16("My Body"),
- (*notifications.rbegin())->message());
- } else {
- const std::deque<Balloon*>& balloons = GetActiveBalloons();
- ASSERT_EQ(1U, balloons.size());
- Balloon* balloon = balloons[0];
- const Notification& notification = balloon->notification();
- EXPECT_EQ(EXPECTED_ICON_URL, notification.icon_url());
- EXPECT_EQ(base::ASCIIToUTF16("My Title"), notification.title());
- EXPECT_EQ(base::ASCIIToUTF16("My Body"), notification.message());
- }
+ message_center::NotificationList::Notifications notifications =
+ message_center::MessageCenter::Get()->GetVisibleNotifications();
+ EXPECT_EQ(base::ASCIIToUTF16("My Title"),
+ (*notifications.rbegin())->title());
+ EXPECT_EQ(base::ASCIIToUTF16("My Body"),
+ (*notifications.rbegin())->message());
}
IN_PROC_BROWSER_TEST_F(NotificationsTest, TestCloseNotification) {
@@ -558,16 +431,11 @@ IN_PROC_BROWSER_TEST_F(NotificationsTest, TestCloseNotification) {
EXPECT_NE("-1", result);
ASSERT_EQ(1, GetNotificationCount());
- if (message_center::IsRichNotificationEnabled()) {
- message_center::NotificationList::Notifications notifications =
- message_center::MessageCenter::Get()->GetVisibleNotifications();
- message_center::MessageCenter::Get()->RemoveNotification(
- (*notifications.rbegin())->id(),
- true); // by_user
- } else {
- const std::deque<Balloon*>& balloons = GetActiveBalloons();
- EXPECT_TRUE(CloseNotificationAndWait(balloons[0]->notification()));
- }
+ message_center::NotificationList::Notifications notifications =
+ message_center::MessageCenter::Get()->GetVisibleNotifications();
+ message_center::MessageCenter::Get()->RemoveNotification(
+ (*notifications.rbegin())->id(),
+ true); // by_user
ASSERT_EQ(0, GetNotificationCount());
}
@@ -742,16 +610,11 @@ IN_PROC_BROWSER_TEST_F(NotificationsTest, TestCreateDenyCloseNotifications) {
ASSERT_TRUE(CheckOriginInSetting(settings, GetTestPageURL().GetOrigin()));
EXPECT_EQ(1, GetNotificationCount());
- if (message_center::IsRichNotificationEnabled()) {
- message_center::NotificationList::Notifications notifications =
- message_center::MessageCenter::Get()->GetVisibleNotifications();
- message_center::MessageCenter::Get()->RemoveNotification(
- (*notifications.rbegin())->id(),
- true); // by_user
- } else {
- const std::deque<Balloon*>& balloons = GetActiveBalloons();
- ASSERT_TRUE(CloseNotificationAndWait(balloons[0]->notification()));
- }
+ message_center::NotificationList::Notifications notifications =
+ message_center::MessageCenter::Get()->GetVisibleNotifications();
+ message_center::MessageCenter::Get()->RemoveNotification(
+ (*notifications.rbegin())->id(),
+ true); // by_user
ASSERT_EQ(0, GetNotificationCount());
}
@@ -819,25 +682,6 @@ IN_PROC_BROWSER_TEST_F(NotificationsTest,
CrashTab(browser(), 0);
}
-IN_PROC_BROWSER_TEST_F(NotificationsTest, TestKillNotificationProcess) {
- // Notifications don't have their own process with the message center.
- if (message_center::IsRichNotificationEnabled())
- return;
-
- ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
-
- // Test killing a notification doesn't crash Chrome.
- AllowAllOrigins();
- ui_test_utils::NavigateToURL(browser(), GetTestPageURL());
- CreateSimpleNotification(browser(), true);
- ASSERT_EQ(1, GetNotificationCount());
-
- const std::deque<Balloon*>& balloons = GetActiveBalloons();
- ASSERT_EQ(1U, balloons.size());
- CrashNotification(balloons[0]);
- ASSERT_EQ(0, GetNotificationCount());
-}
-
IN_PROC_BROWSER_TEST_F(NotificationsTest, TestIncognitoNotification) {
ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
@@ -938,21 +782,10 @@ IN_PROC_BROWSER_TEST_F(NotificationsTest, TestNotificationReplacement) {
browser(), false, "no_such_file.png", "Title2", "Body2", "chat");
EXPECT_NE("-1", result);
- if (message_center::IsRichNotificationEnabled()) {
- ASSERT_EQ(1, GetNotificationCount());
- message_center::NotificationList::Notifications notifications =
- message_center::MessageCenter::Get()->GetVisibleNotifications();
- EXPECT_EQ(base::ASCIIToUTF16("Title2"), (*notifications.rbegin())->title());
- EXPECT_EQ(base::ASCIIToUTF16("Body2"),
- (*notifications.rbegin())->message());
- } else {
- const std::deque<Balloon*>& balloons = GetActiveBalloons();
- ASSERT_EQ(1U, balloons.size());
- Balloon* balloon = balloons[0];
- const Notification& notification = balloon->notification();
- GURL EXPECTED_ICON_URL = embedded_test_server()->GetURL(kExpectedIconUrl);
- EXPECT_EQ(EXPECTED_ICON_URL, notification.icon_url());
- EXPECT_EQ(base::ASCIIToUTF16("Title2"), notification.title());
- EXPECT_EQ(base::ASCIIToUTF16("Body2"), notification.message());
- }
+ ASSERT_EQ(1, GetNotificationCount());
+ message_center::NotificationList::Notifications notifications =
+ message_center::MessageCenter::Get()->GetVisibleNotifications();
+ EXPECT_EQ(base::ASCIIToUTF16("Title2"), (*notifications.rbegin())->title());
+ EXPECT_EQ(base::ASCIIToUTF16("Body2"),
+ (*notifications.rbegin())->message());
}
diff --git a/chrome/browser/notifications/notification_options_menu_model.cc b/chrome/browser/notifications/notification_options_menu_model.cc
deleted file mode 100644
index 5a199f6..0000000
--- a/chrome/browser/notifications/notification_options_menu_model.cc
+++ /dev/null
@@ -1,280 +0,0 @@
-// Copyright (c) 2012 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/notification_options_menu_model.h"
-
-#include <string>
-
-#include "base/logging.h"
-#include "base/strings/utf_string_conversions.h"
-#include "chrome/browser/browser_process.h"
-#include "chrome/browser/extensions/extension_service.h"
-#include "chrome/browser/notifications/balloon.h"
-#include "chrome/browser/notifications/balloon_collection.h"
-#include "chrome/browser/notifications/balloon_notification_ui_manager.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_prefs_manager.h"
-#include "chrome/browser/notifications/notification_ui_manager.h"
-#include "chrome/browser/profiles/profile.h"
-#include "chrome/browser/ui/browser.h"
-#include "chrome/browser/ui/browser_finder.h"
-#include "chrome/browser/ui/chrome_pages.h"
-#include "chrome/browser/ui/host_desktop.h"
-#include "chrome/common/chrome_switches.h"
-#include "chrome/common/content_settings_types.h"
-#include "chrome/common/url_constants.h"
-#include "content/public/browser/web_contents_delegate.h"
-#include "extensions/common/constants.h"
-#include "extensions/common/extension.h"
-#include "grit/generated_resources.h"
-#include "ui/base/l10n/l10n_util.h"
-
-// Menu commands
-const int kTogglePermissionCommand = 0;
-const int kToggleExtensionCommand = 1;
-const int kOpenContentSettingsCommand = 2;
-const int kCornerSelectionSubMenu = 3;
-
-const int kCornerGroupId = 10;
-const int kCornerUpperLeft = 11;
-const int kCornerUpperRight = 12;
-const int kCornerLowerLeft = 13;
-const int kCornerLowerRight = 14;
-const int kCornerDefault = 20;
-
-CornerSelectionMenuModel::CornerSelectionMenuModel(Balloon* balloon)
- : ui::SimpleMenuModel(this),
- balloon_(balloon) {
- AddRadioItem(kCornerDefault,
- l10n_util::GetStringUTF16(IDS_NOTIFICATION_POSITION_DEFAULT),
- kCornerGroupId);
- AddSeparator(ui::NORMAL_SEPARATOR);
- AddRadioItem(kCornerUpperLeft,
- l10n_util::GetStringUTF16(IDS_NOTIFICATION_POSITION_UPPER_LEFT),
- kCornerGroupId);
- AddRadioItem(kCornerUpperRight,
- l10n_util::GetStringUTF16(IDS_NOTIFICATION_POSITION_UPPER_RIGHT),
- kCornerGroupId);
- AddRadioItem(kCornerLowerLeft,
- l10n_util::GetStringUTF16(IDS_NOTIFICATION_POSITION_LOWER_LEFT),
- kCornerGroupId);
- AddRadioItem(kCornerLowerRight,
- l10n_util::GetStringUTF16(IDS_NOTIFICATION_POSITION_LOWER_RIGHT),
- kCornerGroupId);
-}
-
-CornerSelectionMenuModel::~CornerSelectionMenuModel() {
-}
-
-bool CornerSelectionMenuModel::IsCommandIdChecked(int command_id) const {
- // TODO(dimich): MessageCenter does not use this preference (yet?)
- if (NotificationUIManager::DelegatesToMessageCenter())
- return false;
-
- NotificationPrefsManager* prefs =
- static_cast<BalloonNotificationUIManager*>(
- g_browser_process->notification_ui_manager())->prefs_manager();
-
- BalloonCollection::PositionPreference current =
- prefs->GetPositionPreference();
-
- if (command_id == kCornerUpperLeft)
- return (current == BalloonCollection::UPPER_LEFT);
- else if (command_id == kCornerUpperRight)
- return (current == BalloonCollection::UPPER_RIGHT);
- else if (command_id == kCornerLowerLeft)
- return (current == BalloonCollection::LOWER_LEFT);
- else if (command_id == kCornerLowerRight)
- return (current == BalloonCollection::LOWER_RIGHT);
- else if (command_id == kCornerDefault)
- return (current == BalloonCollection::DEFAULT_POSITION);
-
- NOTREACHED();
- return false;
-}
-
-bool CornerSelectionMenuModel::IsCommandIdEnabled(int command_id) const {
- // All the menu options are always enabled.
- return true;
-}
-
-bool CornerSelectionMenuModel::GetAcceleratorForCommandId(
- int command_id, ui::Accelerator* accelerator) {
- // Currently no accelerators.
- return false;
-}
-
-void CornerSelectionMenuModel::ExecuteCommand(int command_id, int event_flags) {
- // TODO(dimich): MessageCenter does not use this preference (yet?)
- if (NotificationUIManager::DelegatesToMessageCenter())
- return;
-
- NotificationPrefsManager* prefs =
- static_cast<BalloonNotificationUIManager*>(
- g_browser_process->notification_ui_manager())->prefs_manager();
-
- if (command_id == kCornerUpperLeft)
- prefs->SetPositionPreference(BalloonCollection::UPPER_LEFT);
- else if (command_id == kCornerUpperRight)
- prefs->SetPositionPreference(BalloonCollection::UPPER_RIGHT);
- else if (command_id == kCornerLowerLeft)
- prefs->SetPositionPreference(BalloonCollection::LOWER_LEFT);
- else if (command_id == kCornerLowerRight)
- prefs->SetPositionPreference(BalloonCollection::LOWER_RIGHT);
- else if (command_id == kCornerDefault)
- prefs->SetPositionPreference(BalloonCollection::DEFAULT_POSITION);
- else
- NOTREACHED();
-}
-
-NotificationOptionsMenuModel::NotificationOptionsMenuModel(Balloon* balloon)
- : ui::SimpleMenuModel(this),
- balloon_(balloon) {
- const Notification& notification = balloon->notification();
- const GURL& origin = notification.origin_url();
-
- if (origin.SchemeIs(extensions::kExtensionScheme)) {
- ExtensionService* extension_service =
- balloon_->profile()->GetExtensionService();
- const extensions::Extension* extension =
- extension_service->extensions()->GetExtensionOrAppByURL(origin);
- // We get back no extension here when we show the notification after
- // the extension has crashed.
- if (extension) {
- const base::string16 disable_label = l10n_util::GetStringUTF16(
- IDS_EXTENSIONS_DISABLE);
- AddItem(kToggleExtensionCommand, disable_label);
- }
- } else if (!notification.display_source().empty()) {
- const base::string16 disable_label = l10n_util::GetStringFUTF16(
- IDS_NOTIFICATION_BALLOON_REVOKE_MESSAGE,
- notification.display_source());
- AddItem(kTogglePermissionCommand, disable_label);
- }
-
- if (!notification.display_source().empty()) {
- const base::string16 settings_label = l10n_util::GetStringUTF16(
- IDS_NOTIFICATIONS_SETTINGS_BUTTON);
- AddItem(kOpenContentSettingsCommand, settings_label);
- }
-
- corner_menu_model_.reset(new CornerSelectionMenuModel(balloon));
- AddSubMenu(kCornerSelectionSubMenu,
- l10n_util::GetStringUTF16(IDS_NOTIFICATION_CHOOSE_POSITION),
- corner_menu_model_.get());
-}
-
-NotificationOptionsMenuModel::~NotificationOptionsMenuModel() {
-}
-
-bool NotificationOptionsMenuModel::IsItemForCommandIdDynamic(int command_id)
- const {
- return command_id == kTogglePermissionCommand ||
- command_id == kToggleExtensionCommand;
-}
-
-base::string16 NotificationOptionsMenuModel::GetLabelForCommandId(
- int command_id) const {
- // TODO(tfarina,johnnyg): Remove this code if we decide to close notifications
- // after permissions are revoked.
- if (command_id == kTogglePermissionCommand ||
- command_id == kToggleExtensionCommand) {
- const Notification& notification = balloon_->notification();
- const GURL& origin = notification.origin_url();
-
- DesktopNotificationService* service =
- DesktopNotificationServiceFactory::GetForProfile(balloon_->profile());
- if (origin.SchemeIs(extensions::kExtensionScheme)) {
- ExtensionService* extension_service =
- balloon_->profile()->GetExtensionService();
- const extensions::Extension* extension =
- extension_service->extensions()->GetExtensionOrAppByURL(origin);
- if (extension) {
- return l10n_util::GetStringUTF16(
- extension_service->IsExtensionEnabled(extension->id()) ?
- IDS_EXTENSIONS_DISABLE :
- IDS_EXTENSIONS_ENABLE);
- }
- } else {
- if (service->GetContentSetting(origin) == CONTENT_SETTING_ALLOW) {
- return l10n_util::GetStringFUTF16(
- IDS_NOTIFICATION_BALLOON_REVOKE_MESSAGE,
- notification.display_source());
- } else {
- return l10n_util::GetStringFUTF16(
- IDS_NOTIFICATION_BALLOON_ENABLE_MESSAGE,
- notification.display_source());
- }
- }
- } else if (command_id == kOpenContentSettingsCommand) {
- return l10n_util::GetStringUTF16(IDS_NOTIFICATIONS_SETTINGS_BUTTON);
- }
- return base::string16();
-}
-
-bool NotificationOptionsMenuModel::IsCommandIdChecked(int /* command_id */)
- const {
- // Nothing in the menu is checked.
- return false;
-}
-
-bool NotificationOptionsMenuModel::IsCommandIdEnabled(int /* command_id */)
- const {
- // All the menu options are always enabled.
- return true;
-}
-
-bool NotificationOptionsMenuModel::GetAcceleratorForCommandId(
- int /* command_id */, ui::Accelerator* /* accelerator */) {
- // Currently no accelerators.
- return false;
-}
-
-void NotificationOptionsMenuModel::ExecuteCommand(int command_id,
- int event_flags) {
- DesktopNotificationService* service =
- DesktopNotificationServiceFactory::GetForProfile(balloon_->profile());
- ExtensionService* extension_service =
- balloon_->profile()->GetExtensionService();
- const GURL& origin = balloon_->notification().origin_url();
- switch (command_id) {
- case kTogglePermissionCommand:
- if (service->GetContentSetting(origin) == CONTENT_SETTING_ALLOW)
- service->DenyPermission(origin);
- else
- service->GrantPermission(origin);
- break;
- case kToggleExtensionCommand: {
- const extensions::Extension* extension =
- extension_service->extensions()->GetExtensionOrAppByURL(origin);
- if (extension) {
- const std::string& id = extension->id();
- if (extension_service->IsExtensionEnabled(id))
- extension_service->DisableExtension(
- id, extensions::Extension::DISABLE_USER_ACTION);
- else
- extension_service->EnableExtension(id);
- }
- break;
- }
- case kOpenContentSettingsCommand: {
- chrome::HostDesktopType active_desktop = chrome::GetActiveDesktop();
- Browser* browser = chrome::FindLastActiveWithProfile(
- balloon_->profile(), active_desktop);
- if (!browser) {
- // It is possible that there is no browser window (e.g. when there are
- // background pages).
- browser = new Browser(Browser::CreateParams(balloon_->profile(),
- active_desktop));
- }
- chrome::ShowContentSettings(browser, CONTENT_SETTINGS_TYPE_NOTIFICATIONS);
- break;
- }
- default:
- NOTREACHED();
- break;
- }
-}
diff --git a/chrome/browser/notifications/notification_options_menu_model.h b/chrome/browser/notifications/notification_options_menu_model.h
deleted file mode 100644
index 67b171a..0000000
--- a/chrome/browser/notifications/notification_options_menu_model.h
+++ /dev/null
@@ -1,64 +0,0 @@
-// 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_NOTIFICATIONS_NOTIFICATION_OPTIONS_MENU_MODEL_H_
-#define CHROME_BROWSER_NOTIFICATIONS_NOTIFICATION_OPTIONS_MENU_MODEL_H_
-
-#include "base/basictypes.h"
-#include "base/compiler_specific.h"
-#include "base/memory/scoped_ptr.h"
-#include "ui/base/models/simple_menu_model.h"
-
-class Balloon;
-
-// Model for the corner-selection submenu.
-class CornerSelectionMenuModel : public ui::SimpleMenuModel,
- public ui::SimpleMenuModel::Delegate {
- public:
- explicit CornerSelectionMenuModel(Balloon* balloon);
- virtual ~CornerSelectionMenuModel();
-
- // Overridden from ui::SimpleMenuModel::Delegate:
- virtual bool IsCommandIdChecked(int command_id) const OVERRIDE;
- virtual bool IsCommandIdEnabled(int command_id) const OVERRIDE;
- virtual bool GetAcceleratorForCommandId(
- int command_id,
- ui::Accelerator* accelerator) OVERRIDE;
- virtual void ExecuteCommand(int command_id, int event_flags) OVERRIDE;
-
- private:
- // Not owned.
- Balloon* balloon_;
-
- DISALLOW_COPY_AND_ASSIGN(CornerSelectionMenuModel);
-};
-
-// Model for the notification options menu itself.
-class NotificationOptionsMenuModel : public ui::SimpleMenuModel,
- public ui::SimpleMenuModel::Delegate {
- public:
- explicit NotificationOptionsMenuModel(Balloon* balloon);
- virtual ~NotificationOptionsMenuModel();
-
- // Overridden from ui::SimpleMenuModel:
- virtual bool IsItemForCommandIdDynamic(int command_id) const OVERRIDE;
- virtual base::string16 GetLabelForCommandId(int command_id) const OVERRIDE;
-
- // Overridden from ui::SimpleMenuModel::Delegate:
- virtual bool IsCommandIdChecked(int command_id) const OVERRIDE;
- virtual bool IsCommandIdEnabled(int command_id) const OVERRIDE;
- virtual bool GetAcceleratorForCommandId(
- int command_id,
- ui::Accelerator* accelerator) OVERRIDE;
- virtual void ExecuteCommand(int command_id, int event_flags) OVERRIDE;
-
- private:
- Balloon* balloon_; // Not owned.
-
- scoped_ptr<CornerSelectionMenuModel> corner_menu_model_;
-
- DISALLOW_COPY_AND_ASSIGN(NotificationOptionsMenuModel);
-};
-
-#endif // CHROME_BROWSER_NOTIFICATIONS_NOTIFICATION_OPTIONS_MENU_MODEL_H_
diff --git a/chrome/browser/notifications/notification_prefs_manager.cc b/chrome/browser/notifications/notification_prefs_manager.cc
deleted file mode 100644
index a77eb63..0000000
--- a/chrome/browser/notifications/notification_prefs_manager.cc
+++ /dev/null
@@ -1,30 +0,0 @@
-// Copyright (c) 2012 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/notification_prefs_manager.h"
-
-#include "base/prefs/pref_registry_simple.h"
-#include "base/prefs/pref_service.h"
-#include "chrome/common/pref_names.h"
-
-NotificationPrefsManager::NotificationPrefsManager(PrefService* prefs) {
-#if defined(OS_CHROMEOS)
- static bool have_cleared = false;
-
- if (!have_cleared) {
- // Option menu for changing desktop notification position on ChromeOS is
- // disabled. Force preference to default.
- prefs->ClearPref(prefs::kDesktopNotificationPosition);
- have_cleared = true;
- }
-#endif
-}
-
-// static
-void NotificationPrefsManager::RegisterPrefs(PrefRegistrySimple* registry) {
- registry->RegisterIntegerPref(prefs::kDesktopNotificationPosition,
- BalloonCollection::DEFAULT_POSITION);
- registry->RegisterBooleanPref(prefs::kMessageCenterShowedFirstRunBalloon,
- false);
-}
diff --git a/chrome/browser/notifications/notification_prefs_manager.h b/chrome/browser/notifications/notification_prefs_manager.h
deleted file mode 100644
index 9bb1be2..0000000
--- a/chrome/browser/notifications/notification_prefs_manager.h
+++ /dev/null
@@ -1,39 +0,0 @@
-// Copyright (c) 2012 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_NOTIFICATIONS_NOTIFICATION_PREFS_MANAGER_H_
-#define CHROME_BROWSER_NOTIFICATIONS_NOTIFICATION_PREFS_MANAGER_H_
-
-#include "chrome/browser/notifications/balloon_collection.h"
-
-class PrefService;
-class PrefRegistrySimple;
-
-// This interface is used to access and mutate the preferences related to
-// desktop notifications.
-class NotificationPrefsManager {
- public:
- explicit NotificationPrefsManager(PrefService* prefs);
- virtual ~NotificationPrefsManager() {}
-
- // Registers preferences.
- static void RegisterPrefs(PrefRegistrySimple* registry);
-
- // Gets the preference indicating where notifications should be placed.
- virtual BalloonCollection::PositionPreference
- GetPositionPreference() const = 0;
-
- // Sets the preference that indicates where notifications should
- // be placed on the screen.
- virtual void SetPositionPreference(
- BalloonCollection::PositionPreference preference) = 0;
-
- protected:
- NotificationPrefsManager() {}
-
- private:
- DISALLOW_COPY_AND_ASSIGN(NotificationPrefsManager);
-};
-
-#endif // CHROME_BROWSER_NOTIFICATIONS_NOTIFICATION_PREFS_MANAGER_H_
diff --git a/chrome/browser/notifications/notification_ui_manager.cc b/chrome/browser/notifications/notification_ui_manager.cc
index c4e841f..eae219d 100644
--- a/chrome/browser/notifications/notification_ui_manager.cc
+++ b/chrome/browser/notifications/notification_ui_manager.cc
@@ -13,41 +13,14 @@
#include "chrome/browser/profiles/profile_manager.h"
#include "ui/message_center/message_center_util.h"
-#if !defined(OS_CHROMEOS)
-#include "chrome/browser/notifications/balloon_notification_ui_manager.h"
-#endif
-
-// static
-bool NotificationUIManager::DelegatesToMessageCenter() {
- // In ChromeOS, it always uses MessageCenterNotificationManager. The flag of
- // --enable-rich-notifications switches the contents and behaviors inside of
- // the message center.
-#if defined(OS_CHROMEOS)
- return true;
-#endif
- return message_center::IsRichNotificationEnabled();
-}
-
// static
NotificationUIManager* NotificationUIManager::Create(PrefService* local_state) {
- if (DelegatesToMessageCenter()) {
- ProfileInfoCache* profile_info_cache =
- &g_browser_process->profile_manager()->GetProfileInfoCache();
- scoped_ptr<message_center::NotifierSettingsProvider> settings_provider(
- new MessageCenterSettingsController(profile_info_cache));
- return new MessageCenterNotificationManager(
- g_browser_process->message_center(),
- local_state,
- settings_provider.Pass());
- }
-
-#if defined(TOOLKIT_GTK)
- BalloonNotificationUIManager* balloon_manager =
- new BalloonNotificationUIManager(local_state);
- balloon_manager->SetBalloonCollection(BalloonCollection::Create());
- return balloon_manager;
-#else
- CHECK(false);
- return NULL;
-#endif
+ ProfileInfoCache* profile_info_cache =
+ &g_browser_process->profile_manager()->GetProfileInfoCache();
+ scoped_ptr<message_center::NotifierSettingsProvider> settings_provider(
+ new MessageCenterSettingsController(profile_info_cache));
+ return new MessageCenterNotificationManager(
+ g_browser_process->message_center(),
+ local_state,
+ settings_provider.Pass());
}
diff --git a/chrome/browser/notifications/notification_ui_manager.h b/chrome/browser/notifications/notification_ui_manager.h
index 5018e0e..56db9da 100644
--- a/chrome/browser/notifications/notification_ui_manager.h
+++ b/chrome/browser/notifications/notification_ui_manager.h
@@ -58,13 +58,6 @@ class NotificationUIManager {
// Used when the app is terminating.
virtual void CancelAll() = 0;
- // Temporary, while we have two implementations of Notifications UI Managers.
- // One is older BalloonCollection-based and uses renderers to show
- // notifications, another delegates to the new MessageCenter and uses native
- // UI widgets.
- // TODO(dimich): remove these eventually.
- static bool DelegatesToMessageCenter();
-
protected:
NotificationUIManager() {}
diff --git a/chrome/browser/notifications/sync_notifier/synced_notification.cc b/chrome/browser/notifications/sync_notifier/synced_notification.cc
index 69224f7..d99813c 100644
--- a/chrome/browser/notifications/sync_notifier/synced_notification.cc
+++ b/chrome/browser/notifications/sync_notifier/synced_notification.cc
@@ -37,10 +37,6 @@ const char kDefaultSyncedNotificationScheme[] = "https:";
// try to supply them with more than this number of buttons.
const unsigned int kMaxNotificationButtonIndex = 2;
-bool UseRichNotifications() {
- return message_center::IsRichNotificationEnabled();
-}
-
// Schema-less specs default badly in windows. If we find one, add the schema
// we expect instead of allowing windows specific GURL code to make it default
// to "file:".
@@ -100,7 +96,7 @@ void SyncedNotification::Show(Profile* profile) {
}
// |notifier_service| can be NULL in tests.
- if (UseRichNotifications() && notifier_service_) {
+ if (notifier_service_) {
notifier_service_->ShowWelcomeToastIfNecessary(this, notification_manager_);
}
@@ -123,118 +119,104 @@ void SyncedNotification::Show(Profile* profile) {
new ChromeNotifierDelegate(GetKey(), notifier_service_);
// Some inputs and fields are only used if there is a notification center.
- if (UseRichNotifications()) {
- base::Time creation_time =
- base::Time::FromDoubleT(static_cast<double>(GetCreationTime()));
- int priority = GetPriority();
- unsigned int button_count = GetButtonCount();
-
- // Deduce which notification template to use from the data.
- message_center::NotificationType notification_type =
- message_center::NOTIFICATION_TYPE_BASE_FORMAT;
- if (!image_url.is_empty()) {
- notification_type = message_center::NOTIFICATION_TYPE_IMAGE;
- } else if (button_count > 0) {
- notification_type = message_center::NOTIFICATION_TYPE_BASE_FORMAT;
- }
-
- // Fill the optional fields with the information we need to make a
- // notification.
- message_center::RichNotificationData rich_notification_data;
- rich_notification_data.timestamp = creation_time;
- if (priority != SyncedNotification::kUndefinedPriority)
- rich_notification_data.priority = priority;
-
- // Fill in the button data.
- // TODO(petewil): Today Rich notifiations are limited to two buttons.
- // When rich notifications supports more, remove the
- // "&& i < kMaxNotificationButtonIndex" clause below.
- for (unsigned int i = 0;
- i < button_count
- && i < button_bitmaps_.size()
- && i < kMaxNotificationButtonIndex;
- ++i) {
- // Stop at the first button with no title
- std::string title = GetButtonTitle(i);
- if (title.empty())
- break;
- message_center::ButtonInfo button_info(base::UTF8ToUTF16(title));
- if (!button_bitmaps_[i].IsEmpty())
- button_info.icon = button_bitmaps_[i];
- rich_notification_data.buttons.push_back(button_info);
- }
+ base::Time creation_time =
+ base::Time::FromDoubleT(static_cast<double>(GetCreationTime()));
+ int priority = GetPriority();
+ unsigned int button_count = GetButtonCount();
+
+ // Deduce which notification template to use from the data.
+ message_center::NotificationType notification_type =
+ message_center::NOTIFICATION_TYPE_BASE_FORMAT;
+ if (!image_url.is_empty()) {
+ notification_type = message_center::NOTIFICATION_TYPE_IMAGE;
+ } else if (button_count > 0) {
+ notification_type = message_center::NOTIFICATION_TYPE_BASE_FORMAT;
+ }
- // Fill in the bitmap images.
- if (!image_bitmap_.IsEmpty())
- rich_notification_data.image = image_bitmap_;
-
- if (!app_icon_bitmap_.IsEmpty()) {
- // Since we can't control the size of images we download, resize using a
- // high quality filter down to the appropriate icon size.
- // TODO(dewittj): Remove this when correct resources are sent via the
- // protobuf.
- SkBitmap new_app_icon =
- skia::ImageOperations::Resize(app_icon_bitmap_.AsBitmap(),
- skia::ImageOperations::RESIZE_BEST,
- message_center::kSmallImageSize,
- message_center::kSmallImageSize);
-
- // The app icon should be in grayscale.
- // TODO(dewittj): Remove this when correct resources are sent via the
- // protobuf.
- color_utils::HSL shift = {-1, 0, 0.6};
- SkBitmap grayscale =
- SkBitmapOperations::CreateHSLShiftedBitmap(new_app_icon, shift);
- gfx::Image small_image =
- gfx::Image(gfx::ImageSkia(gfx::ImageSkiaRep(grayscale, 1.0f)));
- rich_notification_data.small_image = small_image;
- }
+ // Fill the optional fields with the information we need to make a
+ // notification.
+ message_center::RichNotificationData rich_notification_data;
+ rich_notification_data.timestamp = creation_time;
+ if (priority != SyncedNotification::kUndefinedPriority)
+ rich_notification_data.priority = priority;
+
+ // Fill in the button data.
+ // TODO(petewil): Today Rich notifiations are limited to two buttons.
+ // When rich notifications supports more, remove the
+ // "&& i < kMaxNotificationButtonIndex" clause below.
+ for (unsigned int i = 0;
+ i < button_count
+ && i < button_bitmaps_.size()
+ && i < kMaxNotificationButtonIndex;
+ ++i) {
+ // Stop at the first button with no title
+ std::string title = GetButtonTitle(i);
+ if (title.empty())
+ break;
+ message_center::ButtonInfo button_info(base::UTF8ToUTF16(title));
+ if (!button_bitmaps_[i].IsEmpty())
+ button_info.icon = button_bitmaps_[i];
+ rich_notification_data.buttons.push_back(button_info);
+ }
- // Set the ContextMessage inside the rich notification data for the
- // annotation.
- rich_notification_data.context_message = annotation;
+ // Fill in the bitmap images.
+ if (!image_bitmap_.IsEmpty())
+ rich_notification_data.image = image_bitmap_;
+
+ if (!app_icon_bitmap_.IsEmpty()) {
+ // Since we can't control the size of images we download, resize using a
+ // high quality filter down to the appropriate icon size.
+ // TODO(dewittj): Remove this when correct resources are sent via the
+ // protobuf.
+ SkBitmap new_app_icon =
+ skia::ImageOperations::Resize(app_icon_bitmap_.AsBitmap(),
+ skia::ImageOperations::RESIZE_BEST,
+ message_center::kSmallImageSize,
+ message_center::kSmallImageSize);
+
+ // The app icon should be in grayscale.
+ // TODO(dewittj): Remove this when correct resources are sent via the
+ // protobuf.
+ color_utils::HSL shift = {-1, 0, 0.6};
+ SkBitmap grayscale =
+ SkBitmapOperations::CreateHSLShiftedBitmap(new_app_icon, shift);
+ gfx::Image small_image =
+ gfx::Image(gfx::ImageSkia(gfx::ImageSkiaRep(grayscale, 1.0f)));
+ rich_notification_data.small_image = small_image;
+ }
- // Set the clickable flag to change the cursor on hover if a valid
- // destination is found.
- rich_notification_data.clickable = GetDefaultDestinationUrl().is_valid();
+ // Set the ContextMessage inside the rich notification data for the
+ // annotation.
+ rich_notification_data.context_message = annotation;
- // If there is at least one person sending, use the first picture.
- // TODO(petewil): Someday combine multiple profile photos here.
- gfx::Image icon_bitmap = app_icon_bitmap_;
- if (GetProfilePictureCount() >= 1) {
- icon_bitmap = sender_bitmap_;
- }
+ // Set the clickable flag to change the cursor on hover if a valid
+ // destination is found.
+ rich_notification_data.clickable = GetDefaultDestinationUrl().is_valid();
- Notification ui_notification(notification_type,
- GetOriginUrl(),
- notification_heading,
- notification_text,
- icon_bitmap,
- blink::WebTextDirectionDefault,
- message_center::NotifierId(GetOriginUrl()),
- display_source,
- replace_key,
- rich_notification_data,
- delegate.get());
- // In case the notification is not supposed to be toasted, pretend that it
- // has already been shown.
- ui_notification.set_shown_as_popup(!toast_state_);
-
- notification_manager_->Add(ui_notification, profile);
- } else {
- // In this case we have a Webkit Notification, not a Rich Notification.
- Notification ui_notification(GetOriginUrl(),
- GetAppIconUrl(),
- notification_heading,
- notification_text,
- blink::WebTextDirectionDefault,
- display_source,
- replace_key,
- delegate.get());
-
- notification_manager_->Add(ui_notification, profile);
+ // If there is at least one person sending, use the first picture.
+ // TODO(petewil): Someday combine multiple profile photos here.
+ gfx::Image icon_bitmap = app_icon_bitmap_;
+ if (GetProfilePictureCount() >= 1) {
+ icon_bitmap = sender_bitmap_;
}
+ Notification ui_notification(notification_type,
+ GetOriginUrl(),
+ notification_heading,
+ notification_text,
+ icon_bitmap,
+ blink::WebTextDirectionDefault,
+ message_center::NotifierId(GetOriginUrl()),
+ display_source,
+ replace_key,
+ rich_notification_data,
+ delegate.get());
+ // In case the notification is not supposed to be toasted, pretend that it
+ // has already been shown.
+ ui_notification.set_shown_as_popup(!toast_state_);
+
+ notification_manager_->Add(ui_notification, profile);
+
DVLOG(1) << "Showing Synced Notification! " << heading << " " << text
<< " " << GetAppIconUrl() << " " << replace_key << " "
<< GetProfilePictureUrl(0) << " " << GetReadState();
@@ -265,13 +247,6 @@ void SyncedNotification::HideAllForAppId(std::string app_id_name) {
void SyncedNotification::QueueBitmapFetchJobs(
ChromeNotifierService* notifier_service,
Profile* profile) {
- // If we are not using the MessageCenter, call show now, and the existing
- // code will handle the bitmap fetch for us.
- if (!UseRichNotifications()) {
- Show(profile);
- return;
- }
-
// Save off the arguments for the call to Show.
notifier_service_ = notifier_service;
profile_ = profile;
diff --git a/chrome/browser/notifications/sync_notifier/synced_notification_unittest.cc b/chrome/browser/notifications/sync_notifier/synced_notification_unittest.cc
index f558fec..bda9330 100644
--- a/chrome/browser/notifications/sync_notifier/synced_notification_unittest.cc
+++ b/chrome/browser/notifications/sync_notifier/synced_notification_unittest.cc
@@ -29,10 +29,6 @@ namespace {
const int kNotificationPriority = static_cast<int>(
message_center::LOW_PRIORITY);
-bool UseRichNotifications() {
- return message_center::IsRichNotificationEnabled();
-}
-
} // namespace
namespace notifier {
@@ -257,10 +253,6 @@ TEST_F(SyncedNotificationTest, UpdateTest) {
}
TEST_F(SyncedNotificationTest, ShowTest) {
-
- if (!UseRichNotifications())
- return;
-
// Call the method under test using the pre-populated data.
notification1_->Show(NULL);
@@ -279,9 +271,6 @@ TEST_F(SyncedNotificationTest, ShowTest) {
TEST_F(SyncedNotificationTest, DismissTest) {
- if (!UseRichNotifications())
- return;
-
// Call the method under test using a dismissed notification.
notification4_->Show(NULL);
@@ -304,9 +293,6 @@ TEST_F(SyncedNotificationTest, CreateBitmapFetcherTest) {
}
TEST_F(SyncedNotificationTest, OnFetchCompleteTest) {
- if (!UseRichNotifications())
- return;
-
// Set up the internal state that FetchBitmaps() would have set.
notification1_->notification_manager_ = notification_manager();
@@ -357,9 +343,6 @@ TEST_F(SyncedNotificationTest, OnFetchCompleteTest) {
// TODO(petewil): Empty bitmap should count as a successful fetch.
TEST_F(SyncedNotificationTest, EmptyBitmapTest) {
- if (!UseRichNotifications())
- return;
-
// Set up the internal state that FetchBitmaps() would have set.
notification1_->notification_manager_ = notification_manager();
@@ -406,9 +389,6 @@ TEST_F(SyncedNotificationTest, EmptyBitmapTest) {
}
TEST_F(SyncedNotificationTest, ShowIfNewlyEnabledTest) {
- if (!UseRichNotifications())
- return;
-
// Call the method using the wrong app id, nothing should get shown.
notification1_->ShowAllForAppId(NULL, kAppId2);
@@ -433,9 +413,6 @@ TEST_F(SyncedNotificationTest, ShowIfNewlyEnabledTest) {
}
TEST_F(SyncedNotificationTest, HideIfNewlyRemovedTest) {
- if (!UseRichNotifications())
- return;
-
// Add the notification to the notification manger, so it exists before we
// we remove it.
notification1_->Show(NULL);
diff --git a/chrome/browser/notifications/sync_notifier/welcome_delegate.cc b/chrome/browser/notifications/sync_notifier/welcome_delegate.cc
index cc1ae6c..12076e4 100644
--- a/chrome/browser/notifications/sync_notifier/welcome_delegate.cc
+++ b/chrome/browser/notifications/sync_notifier/welcome_delegate.cc
@@ -22,12 +22,10 @@ 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<MessageCenterNotificationManager*>(notification_ui_manager);
+ MessageCenterNotificationManager* message_center_notification_manager =
+ static_cast<MessageCenterNotificationManager*>(notification_ui_manager);
- message_center_notification_manager->EnsureMessageCenterClosed();
- }
+ message_center_notification_manager->EnsureMessageCenterClosed();
}
} // namespace