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