task_manager_browsertest.cc revision 8bcbed890bc3ce4d7a057a8f32cab53fa534672e
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) 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/file_path.h" 8868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/stringprintf.h" 9868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/browser_process.h" 117dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/chrome_notification_types.h" 12424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "chrome/browser/devtools/devtools_window.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/extension_browsertest.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/extension_service.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/extensions/extension_system.h" 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/infobars/confirm_infobar_delegate.h" 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/infobars/infobar_service.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/notifications/desktop_notification_service.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/notifications/notification.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/notifications/notification_test_util.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/notifications/notification_ui_manager.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile.h" 2390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "chrome/browser/task_manager/resource_provider.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/task_manager/task_manager_browsertest_util.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser.h" 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/browser_dialogs.h" 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser_navigator.h" 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser_window.h" 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/panels/panel.h" 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/panels/panel_manager.h" 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/tabs/tab_strip_model.h" 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/web_applications/web_app.h" 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_switches.h" 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/extensions/extension.h" 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/in_process_browser_test.h" 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/ui_test_utils.h" 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_service.h" 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/common/content_switches.h" 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/common/page_transition_types.h" 407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "content/public/test/browser_test_utils.h" 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "grit/generated_resources.h" 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/dns/mock_host_resolver.h" 43eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "net/test/embedded_test_server/embedded_test_server.h" 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/l10n/l10n_util.h" 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// http://crbug.com/31663 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// TODO(linux_aura) http://crbug.com/163931 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if !(defined(OS_WIN) && defined(USE_AURA)) && !(defined(OS_LINUX) && !defined(OS_CHROMEOS) && defined(USE_AURA)) 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::WebContents; 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// On Linux this is crashing intermittently http://crbug/84719 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// In some environments this test fails about 1/6 http://crbug/84850 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_LINUX) 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAYBE_KillExtension DISABLED_KillExtension 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAYBE_KillExtension KillExtension 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const base::FilePath::CharType* kTitle1File = FILE_PATH_LITERAL("title1.html"); 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 674e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)class TaskManagerNoShowBrowserTest : public ExtensionBrowserTest { 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 694e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) TaskManagerNoShowBrowserTest() {} 704e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) virtual ~TaskManagerNoShowBrowserTest() {} 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TaskManagerModel* model() const { 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return TaskManager::GetInstance()->model(); 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 764e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) void ShowTaskManager() { 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(0, model()->ResourceCount()); 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Show the task manager. This populates the model, and helps with debugging 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // (you see the task manager). 81eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch chrome::ShowTaskManager(browser()); 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // New Tab Page. 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TaskManagerBrowserTestUtil::WaitForWebResourceChange(1); 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void Refresh() { 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) model()->Refresh(); 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 917d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) int GetUpdateTimeMs() { 927d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return TaskManagerModel::kUpdateTimeMs; 937d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 947d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExtensionBrowserTest::SetUpCommandLine(command_line); 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Do not prelaunch the GPU process and disable accelerated compositing 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // for these tests as the GPU process will show up in task manager but 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // whether it appears before or after the new tab renderer process is not 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // well defined. 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line->AppendSwitch(switches::kDisableGpuProcessPrelaunch); 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line->AppendSwitch(switches::kDisableAcceleratedCompositing); 105d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 106d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // Do not launch device discovery process. 107d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) command_line->AppendSwitch(switches::kDisableDeviceDiscoveryNotifications); 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 1114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(TaskManagerNoShowBrowserTest); 1124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}; 1134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)class TaskManagerBrowserTest : public TaskManagerNoShowBrowserTest { 1154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) public: 1164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) TaskManagerBrowserTest() {} 1174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) virtual ~TaskManagerBrowserTest() {} 1184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) virtual void SetUpOnMainThread() OVERRIDE { 1204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) TaskManagerNoShowBrowserTest::SetUpOnMainThread(); 1214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) TaskManagerNoShowBrowserTest::ShowTaskManager(); 1224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 1234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) private: 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(TaskManagerBrowserTest); 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_MACOSX) || defined(OS_LINUX) 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAYBE_ShutdownWhileOpen DISABLED_ShutdownWhileOpen 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAYBE_ShutdownWhileOpen ShutdownWhileOpen 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Regression test for http://crbug.com/13361 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TaskManagerBrowserTest, MAYBE_ShutdownWhileOpen) { 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Showing task manager handled by SetUp. 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TaskManagerBrowserTest, NoticeTabContentsChanges) { 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int resource_count = TaskManager::GetInstance()->model()->ResourceCount(); 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Open a new tab and make sure we notice that. 1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GURL url(ui_test_utils::GetTestUrl(base::FilePath( 1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath::kCurrentDirectory), base::FilePath(kTitle1File))); 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddTabAtIndex(0, url, content::PAGE_TRANSITION_TYPED); 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TaskManagerBrowserTestUtil::WaitForWebResourceChange(2); 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check that the last entry is a tab contents resource whose title starts 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // starts with "Tab:". 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(model()->GetResourceWebContents(resource_count) != NULL); 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) string16 prefix = l10n_util::GetStringFUTF16( 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_TASK_MANAGER_TAB_PREFIX, string16()); 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(StartsWith(model()->GetResourceTitle(resource_count), prefix, 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) true)); 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Close the tab and verify that we notice. 1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->CloseWebContentsAt(0, 1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TabStripModel::CLOSE_NONE); 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TaskManagerBrowserTestUtil::WaitForWebResourceChange(1); 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(USE_ASH) 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This test fails on Ash because task manager treats view type 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Panels differently for Ash. 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAYBE_NoticePanelChanges DISABLED_NoticePanelChanges 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAYBE_NoticePanelChanges NoticePanelChanges 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TaskManagerBrowserTest, MAYBE_NoticePanelChanges) { 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(LoadExtension( 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_data_dir_.AppendASCII("good").AppendASCII("Extensions") 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .AppendASCII("behllobkkfkfnphdnhnkndlbkcpglgmj") 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .AppendASCII("1.0.0.0"))); 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Browser, the New Tab Page and Extension background page. 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TaskManagerBrowserTestUtil::WaitForWebResourceChange(2); 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Open a new panel to an extension url and make sure we notice that. 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL url( 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "chrome-extension://behllobkkfkfnphdnhnkndlbkcpglgmj/french_sentence.html"); 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Panel* panel = PanelManager::GetInstance()->CreatePanel( 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_app::GenerateApplicationNameFromExtensionId( 1828bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) last_loaded_extension_id()), 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser()->profile(), 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url, 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect(300, 400), 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PanelManager::CREATE_AS_DOCKED); 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TaskManagerBrowserTestUtil::WaitForWebResourceChange(3); 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check that the fourth entry is a resource with the panel's web contents 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // and whose title starts with "Extension:". 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(panel->GetWebContents(), model()->GetResourceWebContents(3)); 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) string16 prefix = l10n_util::GetStringFUTF16( 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_TASK_MANAGER_EXTENSION_PREFIX, string16()); 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(StartsWith(model()->GetResourceTitle(3), prefix, true)); 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Close the panel and verify that we notice. 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) panel->Close(); 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TaskManagerBrowserTestUtil::WaitForWebResourceChange(2); 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Unload extension to avoid crash on Windows. 2018bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) UnloadExtension(last_loaded_extension_id()); 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TaskManagerBrowserTestUtil::WaitForWebResourceChange(1); 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(USE_ASH) || defined(OS_WIN) 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This test fails on Ash because task manager treats view type 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Panels differently for Ash. 2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// This test also fails on Windows, win_rel trybot. http://crbug.com/166322 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAYBE_KillPanelExtension DISABLED_KillPanelExtension 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAYBE_KillPanelExtension KillPanelExtension 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TaskManagerBrowserTest, MAYBE_KillPanelExtension) { 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int resource_count = TaskManager::GetInstance()->model()->ResourceCount(); 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(LoadExtension( 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_data_dir_.AppendASCII("good").AppendASCII("Extensions") 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .AppendASCII("behllobkkfkfnphdnhnkndlbkcpglgmj") 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .AppendASCII("1.0.0.0"))); 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Browser, the New Tab Page and Extension background page. 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TaskManagerBrowserTestUtil::WaitForWebResourceChange(2); 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Open a new panel to an extension url and make sure we notice that. 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL url( 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "chrome-extension://behllobkkfkfnphdnhnkndlbkcpglgmj/french_sentence.html"); 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PanelManager::GetInstance()->CreatePanel( 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_app::GenerateApplicationNameFromExtensionId( 2298bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) last_loaded_extension_id()), 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser()->profile(), 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url, 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect(300, 400), 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PanelManager::CREATE_AS_DOCKED); 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TaskManagerBrowserTestUtil::WaitForWebResourceChange(3); 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Kill the panel extension process and verify that it disappears from the 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // model along with its panel. 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(model()->IsBackgroundResource(resource_count)); 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TaskManager::GetInstance()->KillProcess(resource_count); 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TaskManagerBrowserTestUtil::WaitForWebResourceChange(1); 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TaskManagerBrowserTest, NoticeExtensionTabs) { 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int resource_count = TaskManager::GetInstance()->model()->ResourceCount(); 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(LoadExtension( 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_data_dir_.AppendASCII("good").AppendASCII("Extensions") 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .AppendASCII("behllobkkfkfnphdnhnkndlbkcpglgmj") 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .AppendASCII("1.0.0.0"))); 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Browser, Extension background page, and the New Tab Page. 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TaskManagerBrowserTestUtil::WaitForWebResourceChange(2); 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Open a new tab to an extension URL and make sure we notice that. 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL url("chrome-extension://behllobkkfkfnphdnhnkndlbkcpglgmj/page.html"); 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddTabAtIndex(0, url, content::PAGE_TRANSITION_TYPED); 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TaskManagerBrowserTestUtil::WaitForWebResourceChange(3); 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check that the third entry (background) is an extension resource whose 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // title starts with "Extension:". 26090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_EQ(task_manager::Resource::EXTENSION, model()->GetResourceType( 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) resource_count)); 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(model()->GetResourceWebContents(resource_count) == NULL); 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(model()->GetResourceExtension(resource_count) != NULL); 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) string16 prefix = l10n_util::GetStringFUTF16( 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_TASK_MANAGER_EXTENSION_PREFIX, string16()); 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(StartsWith(model()->GetResourceTitle(resource_count), 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefix, true)); 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check that the fourth entry (page.html) is of type extension and has both 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // a tab contents and an extension. The title should start with "Extension:". 27190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_EQ(task_manager::Resource::EXTENSION, model()->GetResourceType( 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) resource_count + 1)); 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(model()->GetResourceWebContents(resource_count + 1) != NULL); 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(model()->GetResourceExtension(resource_count + 1) != NULL); 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(StartsWith(model()->GetResourceTitle(resource_count + 1), 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefix, true)); 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Unload extension to avoid crash on Windows. 2798bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) UnloadExtension(last_loaded_extension_id()); 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TaskManagerBrowserTestUtil::WaitForWebResourceChange(1); 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TaskManagerBrowserTest, NoticeAppTabs) { 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int resource_count = TaskManager::GetInstance()->model()->ResourceCount(); 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(LoadExtension( 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_data_dir_.AppendASCII("packaged_app"))); 2872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExtensionService* service = extensions::ExtensionSystem::Get( 2882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->profile())->extension_service(); 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const extensions::Extension* extension = 2908bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) service->GetExtensionById(last_loaded_extension_id(), false); 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // New Tab Page. 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TaskManagerBrowserTestUtil::WaitForWebResourceChange(1); 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Open a new tab to the app's launch URL and make sure we notice that. 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL url(extension->GetResourceURL("main.html")); 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddTabAtIndex(0, url, content::PAGE_TRANSITION_TYPED); 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TaskManagerBrowserTestUtil::WaitForWebResourceChange(2); 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check that the third entry (main.html) is of type extension and has both 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // a tab contents and an extension. The title should start with "App:". 30290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_EQ(task_manager::Resource::EXTENSION, model()->GetResourceType( 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) resource_count)); 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(model()->GetResourceWebContents(resource_count) != NULL); 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(model()->GetResourceExtension(resource_count) == extension); 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) string16 prefix = l10n_util::GetStringFUTF16( 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_TASK_MANAGER_APP_PREFIX, string16()); 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(StartsWith(model()->GetResourceTitle(resource_count), 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefix, true)); 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Unload extension to avoid crash on Windows. 3128bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) UnloadExtension(last_loaded_extension_id()); 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TaskManagerBrowserTestUtil::WaitForWebResourceChange(1); 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TaskManagerBrowserTest, NoticeHostedAppTabs) { 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int resource_count = TaskManager::GetInstance()->model()->ResourceCount(); 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The app under test acts on URLs whose host is "localhost", 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // so the URLs we navigate to must have host "localhost". 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host_resolver()->AddRule("*", "127.0.0.1"); 322eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL::Replacements replace_host; 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string host_str("localhost"); // must stay in scope with replace_host 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) replace_host.SetHostStr(host_str); 326eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch GURL base_url = embedded_test_server()->GetURL( 327eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "/extensions/api_test/app_process/"); 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base_url = base_url.ReplaceComponents(replace_host); 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Open a new tab to an app URL before the app is loaded. 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL url(base_url.Resolve("path1/empty.html")); 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WindowedNotificationObserver observer( 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NOTIFICATION_NAV_ENTRY_COMMITTED, 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::AllSources()); 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddTabAtIndex(0, url, content::PAGE_TRANSITION_TYPED); 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observer.Wait(); 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Force the TaskManager to query the title. 3392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Refresh(); 3402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check that the third entry's title starts with "Tab:". 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) string16 tab_prefix = l10n_util::GetStringFUTF16( 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_TASK_MANAGER_TAB_PREFIX, string16()); 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(StartsWith(model()->GetResourceTitle(resource_count), 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tab_prefix, true)); 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Load the hosted app and make sure it still starts with "Tab:", 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // since it hasn't changed to an app process yet. 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(LoadExtension( 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_data_dir_.AppendASCII("api_test").AppendASCII("app_process"))); 3512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Force the TaskManager to query the title. 3522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Refresh(); 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(StartsWith(model()->GetResourceTitle(resource_count), 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tab_prefix, true)); 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Now reload and check that the last entry's title now starts with "App:". 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURL(browser(), url); 3582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Force the TaskManager to query the title. 3592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Refresh(); 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) string16 app_prefix = l10n_util::GetStringFUTF16( 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_TASK_MANAGER_APP_PREFIX, string16()); 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(StartsWith(model()->GetResourceTitle(resource_count), 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) app_prefix, true)); 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Disable extension and reload page. 3668bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) DisableExtension(last_loaded_extension_id()); 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURL(browser(), url); 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Force the TaskManager to query the title. 3702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Refresh(); 3712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The third entry's title should be back to a normal tab. 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(StartsWith(model()->GetResourceTitle(resource_count), 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tab_prefix, true)); 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Disabled, http://crbug.com/66957. 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TaskManagerBrowserTest, 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISABLED_KillExtensionAndReload) { 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(LoadExtension( 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_data_dir_.AppendASCII("common").AppendASCII("background_page"))); 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Wait until we see the loaded extension in the task manager (the three 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // resources are: the browser process, New Tab Page, and the extension). 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TaskManagerBrowserTestUtil::WaitForWebResourceChange(3); 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(model()->GetResourceExtension(0) == NULL); 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(model()->GetResourceExtension(1) == NULL); 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(model()->GetResourceExtension(2) != NULL); 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Kill the extension process and make sure we notice it. 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TaskManager::GetInstance()->KillProcess(2); 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TaskManagerBrowserTestUtil::WaitForWebResourceChange(1); 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Reload the extension using the "crashed extension" infobar while the task 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // manager is still visible. Make sure we don't crash and the extension 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // gets reloaded and noticed in the task manager. 3982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) InfoBarService* infobar_service = InfoBarService::FromWebContents( 3992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents()); 400c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_EQ(1U, infobar_service->infobar_count()); 401c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ConfirmInfoBarDelegate* delegate = 402c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) infobar_service->infobar_at(0)->AsConfirmInfoBarDelegate(); 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(delegate); 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate->Accept(); 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TaskManagerBrowserTestUtil::WaitForWebResourceChange(3); 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// http://crbug.com/93158. 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAYBE_ReloadExtension DISABLED_ReloadExtension 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAYBE_ReloadExtension ReloadExtension 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Regression test for http://crbug.com/18693. 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TaskManagerBrowserTest, MAYBE_ReloadExtension) { 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int resource_count = TaskManager::GetInstance()->model()->ResourceCount(); 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LOG(INFO) << "loading extension"; 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(LoadExtension( 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_data_dir_.AppendASCII("common").AppendASCII("background_page"))); 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Wait until we see the loaded extension in the task manager (the three 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // resources are: the browser process, New Tab Page, and the extension). 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LOG(INFO) << "waiting for resource change"; 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TaskManagerBrowserTestUtil::WaitForWebResourceChange(2); 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(model()->GetResourceExtension(0) == NULL); 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(model()->GetResourceExtension(1) == NULL); 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(model()->GetResourceExtension(resource_count) != NULL); 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const extensions::Extension* extension = model()->GetResourceExtension( 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) resource_count); 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(extension != NULL); 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Reload the extension a few times and make sure our resource count 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // doesn't increase. 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LOG(INFO) << "First extension reload"; 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ReloadExtension(extension->id()); 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TaskManagerBrowserTestUtil::WaitForWebResourceChange(2); 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extension = model()->GetResourceExtension(resource_count); 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(extension != NULL); 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LOG(INFO) << "Second extension reload"; 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ReloadExtension(extension->id()); 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TaskManagerBrowserTestUtil::WaitForWebResourceChange(2); 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extension = model()->GetResourceExtension(resource_count); 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(extension != NULL); 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LOG(INFO) << "Third extension reload"; 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ReloadExtension(extension->id()); 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TaskManagerBrowserTestUtil::WaitForWebResourceChange(2); 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Crashy, http://crbug.com/42301. 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TaskManagerBrowserTest, 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISABLED_PopulateWebCacheFields) { 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int resource_count = TaskManager::GetInstance()->model()->ResourceCount(); 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Open a new tab and make sure we notice that. 4602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GURL url(ui_test_utils::GetTestUrl(base::FilePath( 4612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath::kCurrentDirectory), base::FilePath(kTitle1File))); 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddTabAtIndex(0, url, content::PAGE_TRANSITION_TYPED); 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TaskManagerBrowserTestUtil::WaitForWebResourceChange(2); 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check that we get some value for the cache columns. 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK_NE(model()->GetResourceWebCoreImageCacheSize(resource_count), 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l10n_util::GetStringUTF16(IDS_TASK_MANAGER_NA_CELL_TEXT)); 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK_NE(model()->GetResourceWebCoreScriptsCacheSize(resource_count), 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l10n_util::GetStringUTF16(IDS_TASK_MANAGER_NA_CELL_TEXT)); 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK_NE(model()->GetResourceWebCoreCSSCacheSize(resource_count), 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l10n_util::GetStringUTF16(IDS_TASK_MANAGER_NA_CELL_TEXT)); 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4747d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// Checks that task manager counts a worker thread JS heap size. 4757d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// http://crbug.com/241066 4767dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// Flaky, http://crbug.com/259368 4777dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochIN_PROC_BROWSER_TEST_F(TaskManagerBrowserTest, DISABLED_WebWorkerJSHeapMemory) { 4787d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) GURL url(ui_test_utils::GetTestUrl(base::FilePath( 4797d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::FilePath::kCurrentDirectory), base::FilePath(kTitle1File))); 4807d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ui_test_utils::NavigateToURL(browser(), url); 4817d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const int extra_timeout_ms = 500; 4827d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) size_t minimal_heap_size = 2 * 1024 * 1024 * sizeof(void*); 4837d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::string test_js = base::StringPrintf( 4847d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) "var blob = new Blob([\n" 4857d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) " 'mem = new Array(%lu);',\n" 4867d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) " 'for (var i = 0; i < mem.length; i += 16) mem[i] = i;',\n" 4877d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) " 'postMessage();']);\n" 4887d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) "blobURL = window.URL.createObjectURL(blob);\n" 4897d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) "worker = new Worker(blobURL);\n" 4907d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) "// Give the task manager few seconds to poll for JS heap sizes.\n" 4917d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) "worker.onmessage = setTimeout.bind(\n" 4927d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) " this,\n" 4937d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) " function () { window.domAutomationController.send(true); },\n" 4947d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) " %d);\n" 4957d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) "worker.postMessage();\n", 4967d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) static_cast<unsigned long>(minimal_heap_size), 4977d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) GetUpdateTimeMs() + extra_timeout_ms); 4987d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) bool ok; 4997d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_TRUE(content::ExecuteScriptAndExtractBool( 5007d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents(), test_js, &ok)); 5017d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_TRUE(ok); 5027d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 5037d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) int resource_index = TaskManager::GetInstance()->model()->ResourceCount() - 1; 5047d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) size_t result; 5057d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 5067d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_TRUE(model()->GetV8Memory(resource_index, &result)); 5077d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) LOG(INFO) << "Got V8 Heap Size " << result << " bytes"; 5087d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_GE(result, minimal_heap_size); 5097d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 5107d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_TRUE(model()->GetV8MemoryUsed(resource_index, &result)); 5117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) LOG(INFO) << "Got V8 Used Heap Size " << result << " bytes"; 5127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_GE(result, minimal_heap_size); 5137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 5147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 515424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TaskManagerBrowserTest, NoticeInTabDevToolsWindow) { 516424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) DevToolsWindow* dev_tools = DevToolsWindow::ToggleDevToolsWindow( 517424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) model()->GetResourceWebContents(1)->GetRenderViewHost(), 518424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) true, 519424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) DEVTOOLS_TOGGLE_ACTION_INSPECT); 520424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // Dock side bottom should be the default. 521424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) ASSERT_EQ(DEVTOOLS_DOCK_SIDE_BOTTOM, dev_tools->dock_side()); 522424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) TaskManagerBrowserTestUtil::WaitForWebResourceChange(2); 523424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)} 524424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 5254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// This test differs from TaskManagerBrowserTest.NoticeInTabDevToolsWindow in 5264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// the order in which the devtools window and task manager are created. 5274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(TaskManagerNoShowBrowserTest, 5284e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) NoticeInTabDevToolsWindow) { 5294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // First create the devtools window. 5304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) DevToolsWindow* dev_tools = DevToolsWindow::ToggleDevToolsWindow( 5314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents()->GetRenderViewHost(), 5324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) true, 5334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) DEVTOOLS_TOGGLE_ACTION_INSPECT); 5344e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Dock side bottom should be the default. 5354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ASSERT_EQ(DEVTOOLS_DOCK_SIDE_BOTTOM, dev_tools->dock_side()); 5364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Make sure that the devtools window is loaded before starting the task 5374e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // manager. 5384e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) content::RunAllPendingInMessageLoop(); 5394e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 5404e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Now add showing the task manager to the queue, and watch for the right 5414e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // number of reources to show up. 5424e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::MessageLoop::current()->PostTask( 5434e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) FROM_HERE, 5444e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::Bind(&TaskManagerNoShowBrowserTest::ShowTaskManager, 5454e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::Unretained(this))); 5464e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) TaskManagerBrowserTestUtil::WaitForWebResourceChange(2); 5474e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 5484e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 5492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 550