OLD | NEW |
| (Empty) |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #include "chrome/browser/chromeos/extensions/file_manager/desktop_notifications.
h" | |
6 | |
7 #include <gtest/gtest.h> | |
8 #include <string> | |
9 | |
10 #include "chrome/browser/browser_process.h" | |
11 #include "chrome/browser/notifications/notification.h" | |
12 #include "chrome/browser/notifications/notification_ui_manager.h" | |
13 #include "chrome/browser/ui/browser.h" | |
14 #include "chrome/test/base/in_process_browser_test.h" | |
15 #include "chrome/test/base/ui_test_utils.h" | |
16 #include "grit/generated_resources.h" | |
17 #include "ui/base/l10n/l10n_util.h" | |
18 | |
19 namespace file_manager { | |
20 | |
21 // Add "FileManager" prefix to the class to avoid name conflicts. | |
22 class FileManagerDesktopNotificationsBrowserTest : public InProcessBrowserTest { | |
23 public: | |
24 FileManagerDesktopNotificationsBrowserTest() {} | |
25 | |
26 virtual void CleanUpOnMainThread() OVERRIDE { | |
27 notifications_.reset(); | |
28 } | |
29 | |
30 protected: | |
31 // This must be initialized late in test startup. | |
32 void InitNotifications() { | |
33 Profile* profile = browser()->profile(); | |
34 notifications_.reset(new DesktopNotifications(profile)); | |
35 } | |
36 | |
37 bool FindNotification(const std::string& id) { | |
38 return notifications_->HasNotificationForTest(id); | |
39 } | |
40 | |
41 scoped_ptr<DesktopNotifications> notifications_; | |
42 }; | |
43 | |
44 IN_PROC_BROWSER_TEST_F(FileManagerDesktopNotificationsBrowserTest, TestBasic) { | |
45 InitNotifications(); | |
46 // Showing a notification adds a new notification. | |
47 notifications_->ShowNotification(DesktopNotifications::DEVICE, "path"); | |
48 EXPECT_EQ(1u, notifications_->GetNotificationCountForTest()); | |
49 EXPECT_TRUE(FindNotification("Device_path")); | |
50 | |
51 // Updating the same notification maintains the same count. | |
52 notifications_->ShowNotification(DesktopNotifications::DEVICE, "path"); | |
53 EXPECT_EQ(1u, notifications_->GetNotificationCountForTest()); | |
54 EXPECT_TRUE(FindNotification("Device_path")); | |
55 | |
56 // A new notification increases the count. | |
57 notifications_->ShowNotification(DesktopNotifications::DEVICE_FAIL, | |
58 "path"); | |
59 EXPECT_EQ(2u, notifications_->GetNotificationCountForTest()); | |
60 EXPECT_TRUE(FindNotification("DeviceFail_path")); | |
61 EXPECT_TRUE(FindNotification("Device_path")); | |
62 | |
63 // Hiding a notification removes it from our data. | |
64 notifications_->HideNotification(DesktopNotifications::DEVICE_FAIL, | |
65 "path"); | |
66 EXPECT_EQ(1u, notifications_->GetNotificationCountForTest()); | |
67 EXPECT_FALSE(FindNotification("DeviceFail_path")); | |
68 EXPECT_TRUE(FindNotification("Device_path")); | |
69 }; | |
70 | |
71 // Note: Delayed tests use a delay time of 0 so that tasks wille execute | |
72 // when RunAllPendingInMessageLoop() is called. | |
73 IN_PROC_BROWSER_TEST_F(FileManagerDesktopNotificationsBrowserTest, | |
74 ShowDelayedTest) { | |
75 InitNotifications(); | |
76 // Adding a delayed notification does not create a notification. | |
77 notifications_->ShowNotificationDelayed(DesktopNotifications::DEVICE, | |
78 "path", | |
79 base::TimeDelta::FromSeconds(0)); | |
80 EXPECT_EQ(0u, notifications_->GetNotificationCountForTest()); | |
81 EXPECT_FALSE(FindNotification("Device_path")); | |
82 | |
83 // Running the message loop should create the notification. | |
84 content::RunAllPendingInMessageLoop(); | |
85 EXPECT_EQ(1u, notifications_->GetNotificationCountForTest()); | |
86 EXPECT_TRUE(FindNotification("Device_path")); | |
87 | |
88 // Showing a notification both immediately and delayed results in one | |
89 // additional notification. | |
90 notifications_->ShowNotificationDelayed(DesktopNotifications::DEVICE_FAIL, | |
91 "path", | |
92 base::TimeDelta::FromSeconds(0)); | |
93 notifications_->ShowNotification(DesktopNotifications::DEVICE_FAIL, | |
94 "path"); | |
95 EXPECT_EQ(2u, notifications_->GetNotificationCountForTest()); | |
96 EXPECT_TRUE(FindNotification("DeviceFail_path")); | |
97 | |
98 // When the delayed notification is processed, it's an update, so we still | |
99 // only have two notifications. | |
100 content::RunAllPendingInMessageLoop(); | |
101 EXPECT_EQ(2u, notifications_->GetNotificationCountForTest()); | |
102 EXPECT_TRUE(FindNotification("DeviceFail_path")); | |
103 | |
104 // If we schedule a show for later, then hide before it becomes visible, | |
105 // the notification should not be added. | |
106 notifications_->ShowNotificationDelayed(DesktopNotifications::FORMAT_FAIL, | |
107 "path", | |
108 base::TimeDelta::FromSeconds(0)); | |
109 notifications_->HideNotification(DesktopNotifications::FORMAT_FAIL, | |
110 "path"); | |
111 EXPECT_EQ(2u, notifications_->GetNotificationCountForTest()); | |
112 EXPECT_TRUE(FindNotification("Device_path")); | |
113 EXPECT_TRUE(FindNotification("DeviceFail_path")); | |
114 EXPECT_FALSE(FindNotification("Format_path")); | |
115 | |
116 // Even after processing messages, no new notification should be added. | |
117 content::RunAllPendingInMessageLoop(); | |
118 EXPECT_EQ(2u, notifications_->GetNotificationCountForTest()); | |
119 EXPECT_TRUE(FindNotification("Device_path")); | |
120 EXPECT_TRUE(FindNotification("DeviceFail_path")); | |
121 EXPECT_FALSE(FindNotification("Format_path")); | |
122 } | |
123 | |
124 IN_PROC_BROWSER_TEST_F(FileManagerDesktopNotificationsBrowserTest, | |
125 HideDelayedTest) { | |
126 InitNotifications(); | |
127 // Showing now, and scheduling a hide for later, results in one notification. | |
128 notifications_->ShowNotification(DesktopNotifications::DEVICE, "path"); | |
129 notifications_->HideNotificationDelayed(DesktopNotifications::DEVICE, | |
130 "path", | |
131 base::TimeDelta::FromSeconds(0)); | |
132 EXPECT_EQ(1u, notifications_->GetNotificationCountForTest()); | |
133 EXPECT_TRUE(FindNotification("Device_path")); | |
134 | |
135 // Running pending messges should remove the notification. | |
136 content::RunAllPendingInMessageLoop(); | |
137 EXPECT_EQ(0u, notifications_->GetNotificationCountForTest()); | |
138 | |
139 // Immediate show then hide results in no notification. | |
140 notifications_->ShowNotification(DesktopNotifications::DEVICE_FAIL, | |
141 "path"); | |
142 notifications_->HideNotification(DesktopNotifications::DEVICE_FAIL, | |
143 "path"); | |
144 content::RunAllPendingInMessageLoop(); | |
145 EXPECT_EQ(0u, notifications_->GetNotificationCountForTest()); | |
146 | |
147 // Delayed hide for a notification that doesn't exist does nothing. | |
148 notifications_->HideNotificationDelayed(DesktopNotifications::DEVICE_FAIL, | |
149 "path", | |
150 base::TimeDelta::FromSeconds(0)); | |
151 content::RunAllPendingInMessageLoop(); | |
152 EXPECT_EQ(0u, notifications_->GetNotificationCountForTest()); | |
153 } | |
154 | |
155 // Tests that showing two notifications with the same notification ids and | |
156 // different messages results in showing the second notification's message. | |
157 // This situation can be encountered while showing notifications for | |
158 // MountCompletedEvent. | |
159 IN_PROC_BROWSER_TEST_F(FileManagerDesktopNotificationsBrowserTest, | |
160 IdenticalNotificationIds) { | |
161 InitNotifications(); | |
162 notifications_->RegisterDevice("path"); | |
163 | |
164 notifications_->ManageNotificationsOnMountCompleted("path", "", false, false, | |
165 false); | |
166 content::RunAllPendingInMessageLoop(); | |
167 | |
168 EXPECT_EQ( | |
169 l10n_util::GetStringUTF16(IDS_DEVICE_UNKNOWN_DEFAULT_MESSAGE), | |
170 notifications_->GetNotificationMessageForTest("DeviceFail_path")); | |
171 | |
172 notifications_->ManageNotificationsOnMountCompleted("path", "", false, false, | |
173 false); | |
174 content::RunAllPendingInMessageLoop(); | |
175 | |
176 EXPECT_EQ( | |
177 l10n_util::GetStringUTF16(IDS_MULTIPART_DEVICE_UNSUPPORTED_DEFAULT_MESSAGE), | |
178 notifications_->GetNotificationMessageForTest("DeviceFail_path")); | |
179 | |
180 notifications_->UnregisterDevice("path"); | |
181 } | |
182 | |
183 } // namespace file_manager. | |
OLD | NEW |