| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/chromeos/notifications/desktop_notifications_unittest.h
" | 5 #include "chrome/browser/chromeos/notifications/desktop_notifications_unittest.h
" |
| 6 | 6 |
| 7 #include "base/stringprintf.h" | 7 #include "base/stringprintf.h" |
| 8 #include "base/utf_string_conversions.h" | 8 #include "base/utf_string_conversions.h" |
| 9 #include "chrome/browser/prefs/browser_prefs.h" | 9 #include "chrome/browser/prefs/browser_prefs.h" |
| 10 #include "chrome/browser/prefs/pref_service.h" | 10 #include "chrome/browser/prefs/pref_service.h" |
| 11 #include "content/common/desktop_notification_messages.h" | 11 #include "content/public/common/show_desktop_notification_params.h" |
| 12 | 12 |
| 13 using content::BrowserThread; | 13 using content::BrowserThread; |
| 14 | 14 |
| 15 namespace chromeos { | 15 namespace chromeos { |
| 16 | 16 |
| 17 // static | 17 // static |
| 18 std::string DesktopNotificationsTest::log_output_; | 18 std::string DesktopNotificationsTest::log_output_; |
| 19 | 19 |
| 20 class MockNotificationUI : public BalloonCollectionImpl::NotificationUI { | 20 class MockNotificationUI : public BalloonCollectionImpl::NotificationUI { |
| 21 public: | 21 public: |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 89 service_.reset(new DesktopNotificationService(profile(), ui_manager_.get())); | 89 service_.reset(new DesktopNotificationService(profile(), ui_manager_.get())); |
| 90 log_output_.clear(); | 90 log_output_.clear(); |
| 91 } | 91 } |
| 92 | 92 |
| 93 void DesktopNotificationsTest::TearDown() { | 93 void DesktopNotificationsTest::TearDown() { |
| 94 service_.reset(NULL); | 94 service_.reset(NULL); |
| 95 ui_manager_.reset(NULL); | 95 ui_manager_.reset(NULL); |
| 96 profile_.reset(NULL); | 96 profile_.reset(NULL); |
| 97 } | 97 } |
| 98 | 98 |
| 99 DesktopNotificationHostMsg_Show_Params | 99 content::ShowDesktopNotificationHostMsgParams |
| 100 DesktopNotificationsTest::StandardTestNotification() { | 100 DesktopNotificationsTest::StandardTestNotification() { |
| 101 DesktopNotificationHostMsg_Show_Params params; | 101 content::ShowDesktopNotificationHostMsgParams params; |
| 102 params.notification_id = 0; | 102 params.notification_id = 0; |
| 103 params.origin = GURL("http://www.google.com"); | 103 params.origin = GURL("http://www.google.com"); |
| 104 params.is_html = false; | 104 params.is_html = false; |
| 105 params.icon_url = GURL("/icon.png"); | 105 params.icon_url = GURL("/icon.png"); |
| 106 params.title = ASCIIToUTF16("Title"); | 106 params.title = ASCIIToUTF16("Title"); |
| 107 params.body = ASCIIToUTF16("Text"); | 107 params.body = ASCIIToUTF16("Text"); |
| 108 params.direction = WebKit::WebTextDirectionDefault; | 108 params.direction = WebKit::WebTextDirectionDefault; |
| 109 return params; | 109 return params; |
| 110 } | 110 } |
| 111 | 111 |
| 112 TEST_F(DesktopNotificationsTest, TestShow) { | 112 TEST_F(DesktopNotificationsTest, TestShow) { |
| 113 DesktopNotificationHostMsg_Show_Params params = StandardTestNotification(); | 113 content::ShowDesktopNotificationHostMsgParams params = |
| 114 StandardTestNotification(); |
| 114 params.notification_id = 1; | 115 params.notification_id = 1; |
| 115 EXPECT_TRUE(service_->ShowDesktopNotification( | 116 EXPECT_TRUE(service_->ShowDesktopNotification( |
| 116 params, 0, 0, DesktopNotificationService::PageNotification)); | 117 params, 0, 0, DesktopNotificationService::PageNotification)); |
| 117 | 118 |
| 118 MessageLoopForUI::current()->RunAllPending(); | 119 MessageLoopForUI::current()->RunAllPending(); |
| 119 EXPECT_EQ(1, balloon_collection_->count()); | 120 EXPECT_EQ(1, balloon_collection_->count()); |
| 120 | 121 |
| 121 DesktopNotificationHostMsg_Show_Params params2; | 122 content::ShowDesktopNotificationHostMsgParams params2; |
| 122 params2.origin = GURL("http://www.google.com"); | 123 params2.origin = GURL("http://www.google.com"); |
| 123 params2.is_html = true; | 124 params2.is_html = true; |
| 124 params2.contents_url = GURL("http://www.google.com/notification.html"); | 125 params2.contents_url = GURL("http://www.google.com/notification.html"); |
| 125 params2.notification_id = 2; | 126 params2.notification_id = 2; |
| 126 | 127 |
| 127 EXPECT_TRUE(service_->ShowDesktopNotification( | 128 EXPECT_TRUE(service_->ShowDesktopNotification( |
| 128 params2, 0, 0, DesktopNotificationService::PageNotification)); | 129 params2, 0, 0, DesktopNotificationService::PageNotification)); |
| 129 MessageLoopForUI::current()->RunAllPending(); | 130 MessageLoopForUI::current()->RunAllPending(); |
| 130 EXPECT_EQ(2, balloon_collection_->count()); | 131 EXPECT_EQ(2, balloon_collection_->count()); |
| 131 | 132 |
| 132 EXPECT_EQ("notification displayed\n" | 133 EXPECT_EQ("notification displayed\n" |
| 133 "notification displayed\n", | 134 "notification displayed\n", |
| 134 log_output_); | 135 log_output_); |
| 135 } | 136 } |
| 136 | 137 |
| 137 TEST_F(DesktopNotificationsTest, TestClose) { | 138 TEST_F(DesktopNotificationsTest, TestClose) { |
| 138 DesktopNotificationHostMsg_Show_Params params = StandardTestNotification(); | 139 content::ShowDesktopNotificationHostMsgParams params = |
| 140 StandardTestNotification(); |
| 139 params.notification_id = 1; | 141 params.notification_id = 1; |
| 140 | 142 |
| 141 // Request a notification; should open a balloon. | 143 // Request a notification; should open a balloon. |
| 142 EXPECT_TRUE(service_->ShowDesktopNotification( | 144 EXPECT_TRUE(service_->ShowDesktopNotification( |
| 143 params, 0, 0, DesktopNotificationService::PageNotification)); | 145 params, 0, 0, DesktopNotificationService::PageNotification)); |
| 144 MessageLoopForUI::current()->RunAllPending(); | 146 MessageLoopForUI::current()->RunAllPending(); |
| 145 EXPECT_EQ(1, balloon_collection_->count()); | 147 EXPECT_EQ(1, balloon_collection_->count()); |
| 146 | 148 |
| 147 // Close all the open balloons. | 149 // Close all the open balloons. |
| 148 std::set<Balloon*> balloons = balloon_collection_->balloons(); | 150 std::set<Balloon*> balloons = balloon_collection_->balloons(); |
| 149 std::set<Balloon*>::iterator iter; | 151 std::set<Balloon*>::iterator iter; |
| 150 for (iter = balloons.begin(); iter != balloons.end(); ++iter) { | 152 for (iter = balloons.begin(); iter != balloons.end(); ++iter) { |
| 151 (*iter)->OnClose(true); | 153 (*iter)->OnClose(true); |
| 152 } | 154 } |
| 153 | 155 |
| 154 // Verify that the balloon collection is now empty. | 156 // Verify that the balloon collection is now empty. |
| 155 EXPECT_EQ(0, balloon_collection_->count()); | 157 EXPECT_EQ(0, balloon_collection_->count()); |
| 156 | 158 |
| 157 EXPECT_EQ("notification displayed\n" | 159 EXPECT_EQ("notification displayed\n" |
| 158 "notification closed by user\n", | 160 "notification closed by user\n", |
| 159 log_output_); | 161 log_output_); |
| 160 } | 162 } |
| 161 | 163 |
| 162 TEST_F(DesktopNotificationsTest, TestCancel) { | 164 TEST_F(DesktopNotificationsTest, TestCancel) { |
| 163 int process_id = 0; | 165 int process_id = 0; |
| 164 int route_id = 0; | 166 int route_id = 0; |
| 165 int notification_id = 1; | 167 int notification_id = 1; |
| 166 | 168 |
| 167 DesktopNotificationHostMsg_Show_Params params = StandardTestNotification(); | 169 content::ShowDesktopNotificationHostMsgParams params = |
| 170 StandardTestNotification(); |
| 168 params.notification_id = notification_id; | 171 params.notification_id = notification_id; |
| 169 | 172 |
| 170 // Request a notification; should open a balloon. | 173 // Request a notification; should open a balloon. |
| 171 EXPECT_TRUE(service_->ShowDesktopNotification( | 174 EXPECT_TRUE(service_->ShowDesktopNotification( |
| 172 params, process_id, route_id, | 175 params, process_id, route_id, |
| 173 DesktopNotificationService::PageNotification)); | 176 DesktopNotificationService::PageNotification)); |
| 174 MessageLoopForUI::current()->RunAllPending(); | 177 MessageLoopForUI::current()->RunAllPending(); |
| 175 EXPECT_EQ(1, balloon_collection_->count()); | 178 EXPECT_EQ(1, balloon_collection_->count()); |
| 176 | 179 |
| 177 // Cancel the same notification | 180 // Cancel the same notification |
| (...skipping 10 matching lines...) Expand all Loading... |
| 188 } | 191 } |
| 189 | 192 |
| 190 TEST_F(DesktopNotificationsTest, TestManyNotifications) { | 193 TEST_F(DesktopNotificationsTest, TestManyNotifications) { |
| 191 int process_id = 0; | 194 int process_id = 0; |
| 192 int route_id = 0; | 195 int route_id = 0; |
| 193 | 196 |
| 194 // Request lots of identical notifications. | 197 // Request lots of identical notifications. |
| 195 const int kLotsOfToasts = 20; | 198 const int kLotsOfToasts = 20; |
| 196 for (int id = 1; id <= kLotsOfToasts; ++id) { | 199 for (int id = 1; id <= kLotsOfToasts; ++id) { |
| 197 SCOPED_TRACE(base::StringPrintf("Creation loop: id=%d", id)); | 200 SCOPED_TRACE(base::StringPrintf("Creation loop: id=%d", id)); |
| 198 DesktopNotificationHostMsg_Show_Params params = StandardTestNotification(); | 201 content::ShowDesktopNotificationHostMsgParams params = |
| 202 StandardTestNotification(); |
| 199 params.notification_id = id; | 203 params.notification_id = id; |
| 200 EXPECT_TRUE(service_->ShowDesktopNotification( | 204 EXPECT_TRUE(service_->ShowDesktopNotification( |
| 201 params, process_id, route_id, | 205 params, process_id, route_id, |
| 202 DesktopNotificationService::PageNotification)); | 206 DesktopNotificationService::PageNotification)); |
| 203 } | 207 } |
| 204 MessageLoopForUI::current()->RunAllPending(); | 208 MessageLoopForUI::current()->RunAllPending(); |
| 205 | 209 |
| 206 // Build up an expected log of what should be happening. | 210 // Build up an expected log of what should be happening. |
| 207 std::string expected_log; | 211 std::string expected_log; |
| 208 for (int i = 0; i < kLotsOfToasts; ++i) { | 212 for (int i = 0; i < kLotsOfToasts; ++i) { |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 249 EXPECT_TRUE(service_->ShowDesktopNotification( | 253 EXPECT_TRUE(service_->ShowDesktopNotification( |
| 250 StandardTestNotification(), 0, 0, | 254 StandardTestNotification(), 0, 0, |
| 251 DesktopNotificationService::PageNotification)); | 255 DesktopNotificationService::PageNotification)); |
| 252 } | 256 } |
| 253 service_.reset(NULL); | 257 service_.reset(NULL); |
| 254 } | 258 } |
| 255 | 259 |
| 256 TEST_F(DesktopNotificationsTest, TestUserInputEscaping) { | 260 TEST_F(DesktopNotificationsTest, TestUserInputEscaping) { |
| 257 // Create a test script with some HTML; assert that it doesn't get into the | 261 // Create a test script with some HTML; assert that it doesn't get into the |
| 258 // data:// URL that's produced for the balloon. | 262 // data:// URL that's produced for the balloon. |
| 259 DesktopNotificationHostMsg_Show_Params params = StandardTestNotification(); | 263 content::ShowDesktopNotificationHostMsgParams params = |
| 264 StandardTestNotification(); |
| 260 params.title = ASCIIToUTF16("<script>window.alert('uh oh');</script>"); | 265 params.title = ASCIIToUTF16("<script>window.alert('uh oh');</script>"); |
| 261 params.body = ASCIIToUTF16("<i>this text is in italics</i>"); | 266 params.body = ASCIIToUTF16("<i>this text is in italics</i>"); |
| 262 params.notification_id = 1; | 267 params.notification_id = 1; |
| 263 EXPECT_TRUE(service_->ShowDesktopNotification( | 268 EXPECT_TRUE(service_->ShowDesktopNotification( |
| 264 params, 0, 0, DesktopNotificationService::PageNotification)); | 269 params, 0, 0, DesktopNotificationService::PageNotification)); |
| 265 | 270 |
| 266 MessageLoopForUI::current()->RunAllPending(); | 271 MessageLoopForUI::current()->RunAllPending(); |
| 267 EXPECT_EQ(1, balloon_collection_->count()); | 272 EXPECT_EQ(1, balloon_collection_->count()); |
| 268 Balloon* balloon = (*balloon_collection_->balloons().begin()); | 273 Balloon* balloon = (*balloon_collection_->balloons().begin()); |
| 269 GURL data_url = balloon->notification().content_url(); | 274 GURL data_url = balloon->notification().content_url(); |
| 270 EXPECT_EQ(std::string::npos, data_url.spec().find("<script>")); | 275 EXPECT_EQ(std::string::npos, data_url.spec().find("<script>")); |
| 271 EXPECT_EQ(std::string::npos, data_url.spec().find("<i>")); | 276 EXPECT_EQ(std::string::npos, data_url.spec().find("<i>")); |
| 272 } | 277 } |
| 273 | 278 |
| 274 } // namespace chromeos | 279 } // namespace chromeos |
| OLD | NEW |