| 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
|
|
|