1dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// Copyright (c) 2011 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_
73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#pragma once
8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <set>
10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <string>
11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/message_loop.h"
13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/string_util.h"
14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/chromeos/notifications/balloon_collection_impl.h"
15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/notifications/balloon.h"
16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/notifications/desktop_notification_service.h"
17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/notifications/notification.h"
18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/notifications/notification_test_util.h"
19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/notifications/notification_ui_manager.h"
20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/notifications/notifications_prefs_cache.h"
21ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/ui/browser_list.h"
22dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/test/testing_pref_service.h"
23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/test/testing_profile.h"
24dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/browser/browser_thread.h"
25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "testing/gtest/include/gtest/gtest.h"
26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
27ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenstruct DesktopNotificationHostMsg_Show_Params;
28ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace chromeos {
30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass DesktopNotificationsTest;
32201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdochtypedef LoggingNotificationDelegate<DesktopNotificationsTest>
33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    LoggingNotificationProxy;
34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Test version of the balloon collection which counts the number
36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// of notifications that are added to it.
37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass MockBalloonCollection : public BalloonCollectionImpl {
38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:
39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MockBalloonCollection();
40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // BalloonCollectionImpl overrides
42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void Add(const Notification& notification,
43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                   Profile* profile);
44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual Balloon* MakeBalloon(const Notification& notification,
45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Profile* profile);
46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void OnBalloonClosed(Balloon* source);
47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Number of balloons being shown.
49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  std::set<Balloon*>& balloons() { return balloons_; }
50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  int count() const { return balloons_.size(); }
51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Returns the highest y-coordinate of all the balloons in the collection.
53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  int UppermostVerticalPosition();
54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private:
56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  std::set<Balloon*> balloons_;
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.
88ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  DesktopNotificationHostMsg_Show_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_;
93731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  BrowserThread ui_thread_;
94c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
95dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  // Mock local state.
96dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  TestingPrefService local_state_;
97dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
98c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Test profile.
99c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  scoped_ptr<TestingProfile> profile_;
100c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
101c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Mock balloon collection -- owned by the NotificationUIManager
102c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MockBalloonCollection* balloon_collection_;
103c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
104c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Real UI manager.
105c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  scoped_ptr<NotificationUIManager> ui_manager_;
106c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
107c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Real DesktopNotificationService
108c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  scoped_ptr<DesktopNotificationService> service_;
109c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
110c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Contains the cumulative output of the unit test.
111c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  static std::string log_output_;
112c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
113c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
114c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}  // namespace chromeos
115c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
116c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // CHROME_BROWSER_CHROMEOS_NOTIFICATIONS_DESKTOP_NOTIFICATIONS_UNITTEST_H_
117