| // 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_TEST_UTIL_H_ |
| #define CHROME_BROWSER_NOTIFICATIONS_NOTIFICATION_TEST_UTIL_H_ |
| |
| #include <set> |
| #include <string> |
| |
| #include "chrome/browser/notifications/notification.h" |
| #include "chrome/browser/notifications/notification_object_proxy.h" |
| #include "chrome/browser/notifications/notification_ui_manager.h" |
| #include "chrome/browser/notifications/sync_notifier/chrome_notifier_service.h" |
| #include "chrome/browser/profiles/profile.h" |
| #include "ui/gfx/size.h" |
| |
| // NotificationDelegate which does nothing, useful for testing when |
| // the notification events are not important. |
| class MockNotificationDelegate : public NotificationDelegate { |
| public: |
| explicit MockNotificationDelegate(const std::string& id); |
| |
| // NotificationDelegate interface. |
| virtual void Display() OVERRIDE {} |
| virtual void Error() OVERRIDE {} |
| virtual void Close(bool by_user) OVERRIDE {} |
| virtual void Click() OVERRIDE {} |
| virtual std::string id() const OVERRIDE; |
| virtual content::WebContents* GetWebContents() const OVERRIDE; |
| |
| private: |
| virtual ~MockNotificationDelegate(); |
| |
| std::string id_; |
| |
| DISALLOW_COPY_AND_ASSIGN(MockNotificationDelegate); |
| }; |
| |
| // Mock implementation of Javascript object proxy which logs events that |
| // would have been fired on it. Useful for tests where the sequence of |
| // notification events needs to be verified. |
| // |
| // |Logger| class provided in template must implement method |
| // static void log(string); |
| template<class Logger> |
| class LoggingNotificationDelegate : public NotificationDelegate { |
| public: |
| explicit LoggingNotificationDelegate(std::string id) |
| : notification_id_(id) { |
| } |
| |
| // NotificationObjectProxy override |
| virtual void Display() OVERRIDE { |
| Logger::log("notification displayed\n"); |
| } |
| virtual void Error() OVERRIDE { |
| Logger::log("notification error\n"); |
| } |
| virtual void Click() OVERRIDE { |
| Logger::log("notification clicked\n"); |
| } |
| virtual void ButtonClick(int index) OVERRIDE { |
| Logger::log("notification button clicked\n"); |
| } |
| virtual void Close(bool by_user) OVERRIDE { |
| if (by_user) |
| Logger::log("notification closed by user\n"); |
| else |
| Logger::log("notification closed by script\n"); |
| } |
| virtual std::string id() const OVERRIDE { |
| return notification_id_; |
| } |
| virtual content::WebContents* GetWebContents() const OVERRIDE { |
| return NULL; |
| } |
| |
| private: |
| std::string notification_id_; |
| |
| DISALLOW_COPY_AND_ASSIGN(LoggingNotificationDelegate); |
| }; |
| |
| class StubNotificationUIManager : public NotificationUIManager { |
| public: |
| explicit StubNotificationUIManager(const GURL& welcome_origin); |
| virtual ~StubNotificationUIManager(); |
| |
| // Adds a notification to be displayed. Virtual for unit test override. |
| virtual void Add(const Notification& notification, Profile* profile) OVERRIDE; |
| virtual bool Update(const Notification& notification, |
| Profile* profile) OVERRIDE; |
| |
| // Returns NULL if no notifications match the supplied ID, either currently |
| // displayed or in the queue. |
| virtual const Notification* FindById(const std::string& id) const OVERRIDE; |
| |
| // Removes any notifications matching the supplied ID, either currently |
| // displayed or in the queue. Returns true if anything was removed. |
| virtual bool CancelById(const std::string& notification_id) OVERRIDE; |
| |
| // Adds the notification_id for each outstanding notification to the set |
| // |notification_ids| (must not be NULL). |
| virtual std::set<std::string> GetAllIdsByProfileAndSourceOrigin( |
| Profile* profile, |
| const GURL& source) OVERRIDE; |
| |
| // Removes notifications matching the |source_origin| (which could be an |
| // extension ID). Returns true if anything was removed. |
| virtual bool CancelAllBySourceOrigin(const GURL& source_origin) OVERRIDE; |
| |
| // Removes notifications matching |profile|. Returns true if any were removed. |
| virtual bool CancelAllByProfile(Profile* profile) OVERRIDE; |
| |
| // Cancels all pending notifications and closes anything currently showing. |
| // Used when the app is terminating. |
| virtual void CancelAll() OVERRIDE; |
| |
| // Test hook to get the notification so we can check it |
| const Notification& notification() const { return notification_; } |
| |
| // Test hook to check the ID of the last notification cancelled. |
| std::string& dismissed_id() { return dismissed_id_; } |
| |
| size_t added_notifications() const { return added_notifications_; } |
| bool welcomed() const { return welcomed_; } |
| |
| private: |
| DISALLOW_COPY_AND_ASSIGN(StubNotificationUIManager); |
| Notification notification_; |
| Profile* profile_; |
| std::string dismissed_id_; |
| GURL welcome_origin_; |
| bool welcomed_; |
| size_t added_notifications_; |
| }; |
| |
| #endif // CHROME_BROWSER_NOTIFICATIONS_NOTIFICATION_TEST_UTIL_H_ |