Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(437)

Unified Diff: chrome/browser/chromeos/notifications/desktop_notifications_unittest.cc

Issue 9664072: Removing WmIpc and related files from ChromeOS (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Copyright Created 8 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/chromeos/notifications/desktop_notifications_unittest.cc
diff --git a/chrome/browser/chromeos/notifications/desktop_notifications_unittest.cc b/chrome/browser/chromeos/notifications/desktop_notifications_unittest.cc
deleted file mode 100644
index 3620ac9bae48dfca6102eb90550351dda3b3047f..0000000000000000000000000000000000000000
--- a/chrome/browser/chromeos/notifications/desktop_notifications_unittest.cc
+++ /dev/null
@@ -1,323 +0,0 @@
-// 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.
-
-#include "chrome/browser/chromeos/notifications/desktop_notifications_unittest.h"
-
-#include "base/stringprintf.h"
-#include "base/utf_string_conversions.h"
-#include "chrome/browser/prefs/browser_prefs.h"
-#include "chrome/browser/prefs/pref_service.h"
-#include "content/public/common/show_desktop_notification_params.h"
-
-#if defined(USE_AURA)
-#include "ash/shell.h"
-#include "chrome/browser/chromeos/notifications/balloon_collection_impl_aura.h"
-#include "ui/aura/root_window.h"
-#else
-#include "chrome/browser/chromeos/notifications/balloon_collection_impl.h"
-#endif
-
-#if defined(USE_AURA)
-typedef class chromeos::BalloonCollectionImplAura BalloonCollectionImplType;
-#else
-typedef class chromeos::BalloonCollectionImpl BalloonCollectionImplType;
-#endif
-
-using content::BrowserThread;
-
-namespace chromeos {
-
-// static
-std::string DesktopNotificationsTest::log_output_;
-
-class BalloonViewImpl;
-
-#if !defined(USE_AURA)
-class MockNotificationUI : public BalloonCollectionImplType::NotificationUI {
- public:
- virtual void Add(Balloon* balloon) {}
- virtual bool Update(Balloon* balloon) { return false; }
- virtual void Remove(Balloon* balloon) {}
- virtual void Show(Balloon* balloon) {}
- virtual void ResizeNotification(Balloon* balloon,
- const gfx::Size& size) {}
- virtual void SetActiveView(BalloonViewImpl* view) {}
-};
-#endif
-
-// Test version of the balloon collection which counts the number
-// of notifications that are added to it.
-class MockBalloonCollection : public BalloonCollectionImplType {
- public:
- MockBalloonCollection() {
-#if !defined(USE_AURA)
- set_notification_ui(new MockNotificationUI());
-#endif
- }
- virtual ~MockBalloonCollection() {};
-
- // BalloonCollectionImplType overrides
- virtual void Add(const Notification& notification, Profile* profile) OVERRIDE;
- virtual Balloon* MakeBalloon(const Notification& notification,
- Profile* profile) OVERRIDE;
- virtual void OnBalloonClosed(Balloon* source) OVERRIDE;
-
- // Number of balloons being shown.
- std::set<Balloon*>& balloons() { return balloons_; }
- int count() const { return balloons_.size(); }
-
- private:
- std::set<Balloon*> balloons_;
-};
-
-void MockBalloonCollection::Add(const Notification& notification,
- Profile* profile) {
- // Swap in a logging proxy for the purpose of logging calls that
- // would be made into javascript, then pass this down to the
- // balloon collection.
- typedef LoggingNotificationDelegate<DesktopNotificationsTest>
- LoggingNotificationProxy;
- Notification test_notification(
- notification.origin_url(),
- notification.content_url(),
- notification.display_source(),
- notification.replace_id(),
- new LoggingNotificationProxy(notification.notification_id()));
- BalloonCollectionImplType::Add(test_notification, profile);
-}
-
-Balloon* MockBalloonCollection::MakeBalloon(const Notification& notification,
- Profile* profile) {
- // Start with a normal balloon but mock out the view.
- Balloon* balloon =
- BalloonCollectionImplType::MakeBalloon(notification, profile);
- balloon->set_view(new MockBalloonView(balloon));
- balloons_.insert(balloon);
- return balloon;
-}
-
-void MockBalloonCollection::OnBalloonClosed(Balloon* source) {
- balloons_.erase(source);
- BalloonCollectionImplType::OnBalloonClosed(source);
-}
-
-// DesktopNotificationsTest
-
-DesktopNotificationsTest::DesktopNotificationsTest()
- : ui_thread_(BrowserThread::UI, &message_loop_) {
-}
-
-DesktopNotificationsTest::~DesktopNotificationsTest() {
-}
-
-void DesktopNotificationsTest::SetUp() {
-#if defined(USE_ASH)
- // Make sure a root window has been instantiated.
- ash::Shell::CreateInstance(NULL);
-#endif
- browser::RegisterLocalState(&local_state_);
- profile_.reset(new TestingProfile());
- balloon_collection_ = new MockBalloonCollection();
- ui_manager_.reset(NotificationUIManager::Create(&local_state_,
- balloon_collection_));
- service_.reset(new DesktopNotificationService(profile(), ui_manager_.get()));
- log_output_.clear();
-}
-
-void DesktopNotificationsTest::TearDown() {
- service_.reset(NULL);
- ui_manager_.reset(NULL);
- profile_.reset(NULL);
-#if defined(USE_ASH)
- ash::Shell::DeleteInstance();
-#endif
-}
-
-content::ShowDesktopNotificationHostMsgParams
-DesktopNotificationsTest::StandardTestNotification() {
- content::ShowDesktopNotificationHostMsgParams params;
- params.notification_id = 0;
- params.origin = GURL("http://www.google.com");
- params.is_html = false;
- params.icon_url = GURL("/icon.png");
- params.title = ASCIIToUTF16("Title");
- params.body = ASCIIToUTF16("Text");
- params.direction = WebKit::WebTextDirectionDefault;
- return params;
-}
-
-TEST_F(DesktopNotificationsTest, TestShow) {
- content::ShowDesktopNotificationHostMsgParams params =
- StandardTestNotification();
- params.notification_id = 1;
- EXPECT_TRUE(service_->ShowDesktopNotification(
- params, 0, 0, DesktopNotificationService::PageNotification));
-
- MessageLoopForUI::current()->RunAllPending();
- EXPECT_EQ(1, balloon_collection_->count());
-
- content::ShowDesktopNotificationHostMsgParams params2;
- params2.origin = GURL("http://www.google.com");
- params2.is_html = true;
- params2.contents_url = GURL("http://www.google.com/notification.html");
- params2.notification_id = 2;
-
- EXPECT_TRUE(service_->ShowDesktopNotification(
- params2, 0, 0, DesktopNotificationService::PageNotification));
- MessageLoopForUI::current()->RunAllPending();
- EXPECT_EQ(2, balloon_collection_->count());
-
- EXPECT_EQ("notification displayed\n"
- "notification displayed\n",
- log_output_);
-}
-
-TEST_F(DesktopNotificationsTest, TestClose) {
- content::ShowDesktopNotificationHostMsgParams params =
- StandardTestNotification();
- params.notification_id = 1;
-
- // Request a notification; should open a balloon.
- EXPECT_TRUE(service_->ShowDesktopNotification(
- params, 0, 0, DesktopNotificationService::PageNotification));
- MessageLoopForUI::current()->RunAllPending();
- EXPECT_EQ(1, balloon_collection_->count());
-
- // Close all the open balloons.
- std::set<Balloon*> balloons = balloon_collection_->balloons();
- std::set<Balloon*>::iterator iter;
- for (iter = balloons.begin(); iter != balloons.end(); ++iter) {
- (*iter)->OnClose(true);
- }
-
- // Verify that the balloon collection is now empty.
- EXPECT_EQ(0, balloon_collection_->count());
-
- EXPECT_EQ("notification displayed\n"
- "notification closed by user\n",
- log_output_);
-}
-
-TEST_F(DesktopNotificationsTest, TestCancel) {
- int process_id = 0;
- int route_id = 0;
- int notification_id = 1;
-
- content::ShowDesktopNotificationHostMsgParams params =
- StandardTestNotification();
- params.notification_id = notification_id;
-
- // Request a notification; should open a balloon.
- EXPECT_TRUE(service_->ShowDesktopNotification(
- params, process_id, route_id,
- DesktopNotificationService::PageNotification));
- MessageLoopForUI::current()->RunAllPending();
- EXPECT_EQ(1, balloon_collection_->count());
-
- // Cancel the same notification
- service_->CancelDesktopNotification(process_id,
- route_id,
- notification_id);
- MessageLoopForUI::current()->RunAllPending();
- // Verify that the balloon collection is now empty.
- EXPECT_EQ(0, balloon_collection_->count());
-
- EXPECT_EQ("notification displayed\n"
- "notification closed by script\n",
- log_output_);
-}
-
-TEST_F(DesktopNotificationsTest, TestManyNotifications) {
- int process_id = 0;
- int route_id = 0;
-
- // Request lots of identical notifications.
-#if defined(USE_AURA)
- // Aura is using the non-chromeos notification system which has a limit
- // of 4 visible toasts.
- const int kLotsOfToasts = 4;
-#else
- const int kLotsOfToasts = 20;
-#endif
- for (int id = 1; id <= kLotsOfToasts; ++id) {
- SCOPED_TRACE(base::StringPrintf("Creation loop: id=%d", id));
- content::ShowDesktopNotificationHostMsgParams params =
- StandardTestNotification();
- params.notification_id = id;
- EXPECT_TRUE(service_->ShowDesktopNotification(
- params, process_id, route_id,
- DesktopNotificationService::PageNotification));
- }
- MessageLoopForUI::current()->RunAllPending();
-
- // Build up an expected log of what should be happening.
- std::string expected_log;
- for (int i = 0; i < kLotsOfToasts; ++i) {
- expected_log.append("notification displayed\n");
- }
-
- EXPECT_EQ(kLotsOfToasts, balloon_collection_->count());
- EXPECT_EQ(expected_log, log_output_);
-
- // Cancel half of the notifications from the start
- int id;
- int cancelled = kLotsOfToasts / 2;
- for (id = 1;
- id <= cancelled;
- ++id) {
- SCOPED_TRACE(base::StringPrintf("Cancel half of notifications: id=%d", id));
- service_->CancelDesktopNotification(process_id, route_id, id);
- MessageLoopForUI::current()->RunAllPending();
- expected_log.append("notification closed by script\n");
- EXPECT_EQ(kLotsOfToasts - id,
- balloon_collection_->count());
- EXPECT_EQ(expected_log, log_output_);
- }
-
- // Now cancel the rest. It should empty the balloon space.
- for (; id <= kLotsOfToasts; ++id) {
- SCOPED_TRACE(base::StringPrintf("Cancel loop: id=%d", id));
- service_->CancelDesktopNotification(process_id, route_id, id);
- expected_log.append("notification closed by script\n");
- MessageLoopForUI::current()->RunAllPending();
- EXPECT_EQ(expected_log, log_output_);
- }
-
- // Verify that the balloon collection is now empty.
- EXPECT_EQ(0, balloon_collection_->count());
-}
-
-TEST_F(DesktopNotificationsTest, TestEarlyDestruction) {
- // Create some toasts and then prematurely delete the notification service,
- // just to make sure nothing crashes/leaks.
- for (int id = 0; id <= 3; ++id) {
- SCOPED_TRACE(base::StringPrintf("Show Text loop: id=%d", id));
-
- EXPECT_TRUE(service_->ShowDesktopNotification(
- StandardTestNotification(), 0, 0,
- DesktopNotificationService::PageNotification));
- }
- service_.reset(NULL);
-}
-
-TEST_F(DesktopNotificationsTest, TestUserInputEscaping) {
- // Create a test script with some HTML; assert that it doesn't get into the
- // data:// URL that's produced for the balloon.
- content::ShowDesktopNotificationHostMsgParams params =
- StandardTestNotification();
- params.title = ASCIIToUTF16("<script>window.alert('uh oh');</script>");
- params.body = ASCIIToUTF16("<i>this text is in italics</i>");
- params.notification_id = 1;
- EXPECT_TRUE(service_->ShowDesktopNotification(
- params, 0, 0, DesktopNotificationService::PageNotification));
-
- MessageLoopForUI::current()->RunAllPending();
- EXPECT_EQ(1, balloon_collection_->count());
- Balloon* balloon = (*balloon_collection_->balloons().begin());
- GURL data_url = balloon->notification().content_url();
- EXPECT_EQ(std::string::npos, data_url.spec().find("<script>"));
- EXPECT_EQ(std::string::npos, data_url.spec().find("<i>"));
-}
-
-} // namespace chromeos

Powered by Google App Engine
This is Rietveld 408576698