desktop_notifications_unittest.h revision c407dc5cd9bdc5668497f21b26b09d988ab439de
1c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Copyright (c) 2010 The Chromium Authors. All rights reserved. 2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file. 4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifndef CHROME_BROWSER_CHROMEOS_NOTIFICATIONS_DESKTOP_NOTIFICATIONS_UNITTEST_H_ 6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define CHROME_BROWSER_CHROMEOS_NOTIFICATIONS_DESKTOP_NOTIFICATIONS_UNITTEST_H_ 7c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <set> 9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <string> 10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/message_loop.h" 12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/string_util.h" 13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/browser_list.h" 14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/chrome_thread.h" 15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/chromeos/notifications/balloon_collection_impl.h" 16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/notifications/balloon.h" 17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/notifications/desktop_notification_service.h" 18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/notifications/notification.h" 19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/notifications/notification_object_proxy.h" 20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/notifications/notification_test_util.h" 21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/notifications/notification_ui_manager.h" 22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/notifications/notifications_prefs_cache.h" 23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/common/render_messages.h" 24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/test/testing_profile.h" 25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "testing/gtest/include/gtest/gtest.h" 26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace chromeos { 28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass DesktopNotificationsTest; 30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtypedef LoggingNotificationProxyBase<DesktopNotificationsTest> 31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch LoggingNotificationProxy; 32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Test version of the balloon collection which counts the number 34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// of notifications that are added to it. 35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass MockBalloonCollection : public BalloonCollectionImpl { 36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MockBalloonCollection(); 38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // BalloonCollectionImpl overrides 40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void Add(const Notification& notification, 41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Profile* profile); 42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual bool Remove(const Notification& notification); 43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual Balloon* MakeBalloon(const Notification& notification, 44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Profile* profile); 45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void OnBalloonClosed(Balloon* source); 46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Number of balloons being shown. 48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::set<Balloon*>& balloons() { return balloons_; } 49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int count() const { return balloons_.size(); } 50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Returns the highest y-coordinate of all the balloons in the collection. 52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int UppermostVerticalPosition(); 53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::set<Balloon*> balloons_; 56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<LoggingNotificationProxy> log_proxy_; 57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass DesktopNotificationsTest : public testing::Test { 60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DesktopNotificationsTest(); 62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ~DesktopNotificationsTest(); 63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static void log(const std::string& message) { 65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch log_output_.append(message); 66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Profile* profile() { return profile_.get(); } 69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch protected: 71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // testing::Test overrides 72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void SetUp(); 73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void TearDown(); 74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void AllowOrigin(const GURL& origin) { 76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch service_->GrantPermission(origin); 77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 79c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void DenyOrigin(const GURL& origin) { 80c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch service_->DenyPermission(origin); 81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 83c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int HasPermission(const GURL& origin) { 84c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return service_->prefs_cache()->HasPermission(origin); 85c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 87c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Constructs a notification parameter structure for use in tests. 88c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ViewHostMsg_ShowNotification_Params StandardTestNotification(); 89c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 90c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Create a message loop to allow notifications code to post tasks, 91c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // and a thread so that notifications code runs on the expected thread. 92c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MessageLoopForUI message_loop_; 93c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ChromeThread ui_thread_; 94c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 95c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Test profile. 96c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_ptr<TestingProfile> profile_; 97c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 98c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Mock balloon collection -- owned by the NotificationUIManager 99c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MockBalloonCollection* balloon_collection_; 100c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 101c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Real UI manager. 102c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_ptr<NotificationUIManager> ui_manager_; 103c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 104c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Real DesktopNotificationService 105c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_ptr<DesktopNotificationService> service_; 106c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 107c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Contains the cumulative output of the unit test. 108c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static std::string log_output_; 109c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 110c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 111c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} // namespace chromeos 112c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 113c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif // CHROME_BROWSER_CHROMEOS_NOTIFICATIONS_DESKTOP_NOTIFICATIONS_UNITTEST_H_ 114