15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/task_manager/task_manager.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/browser_process.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/extension_browsertest.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/notifications/desktop_notification_service.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/notifications/notification.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/notifications/notification_test_util.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/notifications/notification_ui_manager.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/task_manager/task_manager_browsertest_util.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser.h"
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/browser_dialogs.h"
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser_window.h"
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/in_process_browser_test.h"
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/ui_test_utils.h"
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/common/content_switches.h"
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
22a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)#include "ui/message_center/message_center_util.h"
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TaskManagerNotificationBrowserTest : public ExtensionBrowserTest {
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TaskManagerModel* model() const {
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return TaskManager::GetInstance()->model();
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE {
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ExtensionBrowserTest::SetUpCommandLine(command_line);
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Do not prelaunch the GPU process for these tests because it will show
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // up in task manager but whether it appears before or after the new tab
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // renderer process is not well defined.
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    command_line->AppendSwitch(switches::kDisableGpuProcessPrelaunch);
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// TODO(linux_aura) http://crbug.com/163931
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_LINUX) && !defined(OS_CHROMEOS) && defined(USE_AURA)
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define MAYBE_NoticeNotificationChanges DISABLED_NoticeNotificationChanges
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#else
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define MAYBE_NoticeNotificationChanges NoticeNotificationChanges
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TaskManagerNotificationBrowserTest,
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                       MAYBE_NoticeNotificationChanges) {
48a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)  // These tests do not apply with Message Center platforms
49a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)  // where notifications do not instantiate a new renderer.
50a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)  if (message_center::IsRichNotificationEnabled())
51a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)    return;
52a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(0, model()->ResourceCount());
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Show the task manager.
56eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  chrome::ShowTaskManager(browser());
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Expect to see the browser and the New Tab Page renderer.
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TaskManagerBrowserTestUtil::WaitForWebResourceChange(1);
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Show a notification.
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NotificationUIManager* notifications =
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      g_browser_process->notification_ui_manager();
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  string16 content = DesktopNotificationService::CreateDataUrl(
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GURL(), ASCIIToUTF16("Hello World!"), string16(),
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      WebKit::WebTextDirectionDefault);
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_refptr<NotificationDelegate> del1(new MockNotificationDelegate("n1"));
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Notification n1(
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GURL(), GURL(content), ASCIIToUTF16("Test 1"), string16(), del1.get());
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_refptr<NotificationDelegate> del2(new MockNotificationDelegate("n2"));
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Notification n2(
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GURL(), GURL(content), ASCIIToUTF16("Test 2"), string16(), del2.get());
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  notifications->Add(n1, browser()->profile());
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TaskManagerBrowserTestUtil::WaitForWebResourceChange(2);
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  notifications->Add(n2, browser()->profile());
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TaskManagerBrowserTestUtil::WaitForWebResourceChange(3);
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  notifications->CancelById(n1.notification_id());
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TaskManagerBrowserTestUtil::WaitForWebResourceChange(2);
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  notifications->CancelById(n2.notification_id());
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TaskManagerBrowserTestUtil::WaitForWebResourceChange(1);
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
84