172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Use of this source code is governed by a BSD-style license that can be 3bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// found in the LICENSE file. 4bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 5bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/browser/task_manager/task_manager.h" 6bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 7bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "base/file_path.h" 8513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include "base/utf_string_conversions.h" 94a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#include "chrome/browser/background_contents_service.h" 10ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/background_contents_service_factory.h" 11513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include "chrome/browser/browser_process.h" 12bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/browser/extensions/extension_browsertest.h" 1321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/browser/extensions/extension_service.h" 14513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include "chrome/browser/notifications/desktop_notification_service.h" 15201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch#include "chrome/browser/notifications/notification.h" 16513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include "chrome/browser/notifications/notification_test_util.h" 17513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include "chrome/browser/notifications/notification_ui_manager.h" 1821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/browser/profiles/profile.h" 19dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/browser/tab_contents/confirm_infobar_delegate.h" 20bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/browser/tabs/tab_strip_model.h" 214a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#include "chrome/browser/ui/browser.h" 224a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#include "chrome/browser/ui/browser_navigator.h" 234a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#include "chrome/browser/ui/browser_window.h" 24bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/common/extensions/extension.h" 25bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/test/in_process_browser_test.h" 26bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/test/ui_test_utils.h" 27dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/browser/tab_contents/tab_contents.h" 28ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/common/page_transition_types.h" 29bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "grit/generated_resources.h" 30bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "testing/gtest/include/gtest/gtest.h" 3172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/base/l10n/l10n_util.h" 32bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 33bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsennamespace { 34bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 35bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenconst FilePath::CharType* kTitle1File = FILE_PATH_LITERAL("title1.html"); 36bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 37bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenclass ResourceChangeObserver : public TaskManagerModelObserver { 38bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen public: 39bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ResourceChangeObserver(const TaskManagerModel* model, 40bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen int target_resource_count) 41bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen : model_(model), 42bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen target_resource_count_(target_resource_count) { 43bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 44bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 45bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual void OnModelChanged() { 46bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen OnResourceChange(); 47bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 48bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 49bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual void OnItemsChanged(int start, int length) { 50bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen OnResourceChange(); 51bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 52bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 53bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual void OnItemsAdded(int start, int length) { 54bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen OnResourceChange(); 55bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 56bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 57bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual void OnItemsRemoved(int start, int length) { 58bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen OnResourceChange(); 59bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 60bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 61bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen private: 62bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen void OnResourceChange() { 63bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (model_->ResourceCount() == target_resource_count_) 64bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen MessageLoopForUI::current()->Quit(); 65bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 66bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 67bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const TaskManagerModel* model_; 68bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const int target_resource_count_; 69bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen}; 70bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 7172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Helper class used to wait for a BackgroundContents to finish loading. 7272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenclass BackgroundContentsListener : public NotificationObserver { 7372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen public: 7472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen explicit BackgroundContentsListener(Profile* profile) { 7572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen registrar_.Add(this, NotificationType::BACKGROUND_CONTENTS_NAVIGATED, 7672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen Source<Profile>(profile)); 7772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen } 7872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual void Observe(NotificationType type, 7972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const NotificationSource& source, 8072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const NotificationDetails& details) { 8172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Quit once the BackgroundContents has been loaded. 8272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen if (type.value == NotificationType::BACKGROUND_CONTENTS_NAVIGATED) 8372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen MessageLoopForUI::current()->Quit(); 8472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen } 8572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen private: 8672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen NotificationRegistrar registrar_; 8772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen}; 8872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 89bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} // namespace 90bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 91bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenclass TaskManagerBrowserTest : public ExtensionBrowserTest { 92bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen public: 93bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen TaskManagerModel* model() const { 94bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return TaskManager::GetInstance()->model(); 95bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 96bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 97bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen void WaitForResourceChange(int target_count) { 98bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (model()->ResourceCount() == target_count) 99bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; 100bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ResourceChangeObserver observer(model(), target_count); 101bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen model()->AddObserver(&observer); 102bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ui_test_utils::RunMessageLoop(); 103bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen model()->RemoveObserver(&observer); 104bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 10572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 10672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Wait for any pending BackgroundContents to finish starting up. 10772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen void WaitForBackgroundContents() { 10872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen BackgroundContentsListener listener(browser()->profile()); 10972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ui_test_utils::RunMessageLoop(); 11072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen } 111bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen}; 112bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 113bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Regression test for http://crbug.com/13361 114bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian MonsenIN_PROC_BROWSER_TEST_F(TaskManagerBrowserTest, ShutdownWhileOpen) { 115bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen browser()->window()->ShowTaskManager(); 116bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 117bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 118bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian MonsenIN_PROC_BROWSER_TEST_F(TaskManagerBrowserTest, NoticeTabContentsChanges) { 119bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen EXPECT_EQ(0, model()->ResourceCount()); 120bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 121bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Show the task manager. This populates the model, and helps with debugging 122bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // (you see the task manager). 123bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen browser()->window()->ShowTaskManager(); 124bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 125bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Browser and the New Tab Page. 12621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen WaitForResourceChange(2); 127bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 128bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Open a new tab and make sure we notice that. 129bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen GURL url(ui_test_utils::GetTestUrl(FilePath(FilePath::kCurrentDirectory), 130bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen FilePath(kTitle1File))); 131513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch AddTabAtIndex(0, url, PageTransition::TYPED); 132bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen WaitForResourceChange(3); 133bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 13421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // Check that the third entry is a tab contents resource whose title starts 13521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // starts with "Tab:". 13621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen ASSERT_TRUE(model()->GetResourceTabContents(2) != NULL); 1373f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen string16 prefix = l10n_util::GetStringFUTF16( 1383f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen IDS_TASK_MANAGER_TAB_PREFIX, string16()); 13921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen ASSERT_TRUE(StartsWith(model()->GetResourceTitle(2), prefix, true)); 14021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 141bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Close the tab and verify that we notice. 142bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen TabContents* first_tab = browser()->GetTabContentsAt(0); 143bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ASSERT_TRUE(first_tab); 144bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen browser()->CloseTabContents(first_tab); 145bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen WaitForResourceChange(2); 146bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 147bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 1484a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben MurdochIN_PROC_BROWSER_TEST_F(TaskManagerBrowserTest, NoticeBGContentsChanges) { 1494a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch EXPECT_EQ(0, model()->ResourceCount()); 1504a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 1514a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Show the task manager. This populates the model, and helps with debugging 1524a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // (you see the task manager). 1534a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch browser()->window()->ShowTaskManager(); 1544a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 1554a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Browser and the New Tab Page. 15621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen WaitForResourceChange(2); 1574a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 1584a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Open a new background contents and make sure we notice that. 1594a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch GURL url(ui_test_utils::GetTestUrl(FilePath(FilePath::kCurrentDirectory), 1604a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch FilePath(kTitle1File))); 1614a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 1624a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch BackgroundContentsService* service = 163ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen BackgroundContentsServiceFactory::GetForProfile(browser()->profile()); 1644a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch string16 application_id(ASCIIToUTF16("test_app_id")); 1654a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch service->LoadBackgroundContents(browser()->profile(), 1664a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch url, 1674a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch ASCIIToUTF16("background_page"), 1684a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch application_id); 1694a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch WaitForResourceChange(3); 1704a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 1714a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Close the background contents and verify that we notice. 1724a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch service->ShutdownAssociatedBackgroundContents(application_id); 1734a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch WaitForResourceChange(2); 1744a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch} 1754a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 17672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenIN_PROC_BROWSER_TEST_F(TaskManagerBrowserTest, KillBGContents) { 17772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_EQ(0, model()->ResourceCount()); 17872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 17972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Show the task manager. This populates the model, and helps with debugging 18072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // (you see the task manager). 18172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen browser()->window()->ShowTaskManager(); 18272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 18372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Browser and the New Tab Page. 18472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen WaitForResourceChange(2); 18572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 18672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Open a new background contents and make sure we notice that. 18772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen GURL url(ui_test_utils::GetTestUrl(FilePath(FilePath::kCurrentDirectory), 18872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen FilePath(kTitle1File))); 18972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 19072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen BackgroundContentsService* service = 191ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen BackgroundContentsServiceFactory::GetForProfile(browser()->profile()); 19272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen string16 application_id(ASCIIToUTF16("test_app_id")); 19372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen service->LoadBackgroundContents(browser()->profile(), 19472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen url, 19572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASCIIToUTF16("background_page"), 19672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen application_id); 19772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Wait for the background contents process to finish loading. 19872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen WaitForBackgroundContents(); 19972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_EQ(3, model()->ResourceCount()); 20072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 20172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Kill the background contents process and verify that it disappears from the 20272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // model. 20372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen bool found = false; 20472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen for (int i = 0; i < model()->ResourceCount(); ++i) { 20572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen if (model()->IsBackgroundResource(i)) { 20672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen TaskManager::GetInstance()->KillProcess(i); 20772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen found = true; 20872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen break; 20972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen } 21072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen } 21172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_TRUE(found); 21272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen WaitForResourceChange(2); 21372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 21472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 21521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian MonsenIN_PROC_BROWSER_TEST_F(TaskManagerBrowserTest, NoticeExtensionChanges) { 216bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen EXPECT_EQ(0, model()->ResourceCount()); 217bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 218bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Show the task manager. This populates the model, and helps with debugging 219bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // (you see the task manager). 220bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen browser()->window()->ShowTaskManager(); 221bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 222bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Browser and the New Tab Page. 22321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen WaitForResourceChange(2); 224bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 225bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Loading an extension with a background page should result in a new 226bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // resource being created for it. 227bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ASSERT_TRUE(LoadExtension( 228bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen test_data_dir_.AppendASCII("common").AppendASCII("background_page"))); 229bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen WaitForResourceChange(3); 23021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 23121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // Unload extension to avoid crash on Windows (see http://crbug.com/31663). 23221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen UnloadExtension(last_loaded_extension_id_); 23321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen WaitForResourceChange(2); 23421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen} 23521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 23621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian MonsenIN_PROC_BROWSER_TEST_F(TaskManagerBrowserTest, NoticeExtensionTabs) { 23721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // Show the task manager. This populates the model, and helps with debugging 23821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // (you see the task manager). 23921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen browser()->window()->ShowTaskManager(); 24021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 24121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen ASSERT_TRUE(LoadExtension( 24221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen test_data_dir_.AppendASCII("good").AppendASCII("Extensions") 24321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen .AppendASCII("behllobkkfkfnphdnhnkndlbkcpglgmj") 24421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen .AppendASCII("1.0.0.0"))); 24521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 24621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // Browser, Extension background page, and the New Tab Page. 24721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen WaitForResourceChange(3); 24821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 24921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // Open a new tab to an extension URL and make sure we notice that. 25021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen GURL url("chrome-extension://behllobkkfkfnphdnhnkndlbkcpglgmj/page.html"); 25121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen AddTabAtIndex(0, url, PageTransition::TYPED); 25221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen WaitForResourceChange(4); 25321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 25421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // Check that the third entry (background) is an extension resource whose 25521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // title starts with "Extension:". 25621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen ASSERT_EQ(TaskManager::Resource::EXTENSION, model()->GetResourceType(2)); 25721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen ASSERT_TRUE(model()->GetResourceTabContents(2) == NULL); 25821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen ASSERT_TRUE(model()->GetResourceExtension(2) != NULL); 2593f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen string16 prefix = l10n_util::GetStringFUTF16( 2603f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen IDS_TASK_MANAGER_EXTENSION_PREFIX, string16()); 26121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen ASSERT_TRUE(StartsWith(model()->GetResourceTitle(2), prefix, true)); 26221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 26321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // Check that the fourth entry (page.html) is of type extension and has both 26421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // a tab contents and an extension. The title should start with "Extension:". 26521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen ASSERT_EQ(TaskManager::Resource::EXTENSION, model()->GetResourceType(3)); 26621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen ASSERT_TRUE(model()->GetResourceTabContents(3) != NULL); 26721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen ASSERT_TRUE(model()->GetResourceExtension(3) != NULL); 26821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen ASSERT_TRUE(StartsWith(model()->GetResourceTitle(3), prefix, true)); 26921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 27021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // Unload extension to avoid crash on Windows. 27121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen UnloadExtension(last_loaded_extension_id_); 27221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen WaitForResourceChange(2); 27321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen} 27421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 27521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian MonsenIN_PROC_BROWSER_TEST_F(TaskManagerBrowserTest, NoticeAppTabs) { 27621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // Show the task manager. This populates the model, and helps with debugging 27721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // (you see the task manager). 27821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen browser()->window()->ShowTaskManager(); 27921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 28021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen ASSERT_TRUE(LoadExtension( 28121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen test_data_dir_.AppendASCII("packaged_app"))); 28221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen ExtensionService* service = browser()->profile()->GetExtensionService(); 28321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen const Extension* extension = 28421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen service->GetExtensionById(last_loaded_extension_id_, false); 28521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 28621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // Browser and the New Tab Page. 28721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen WaitForResourceChange(2); 28821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 28921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // Open a new tab to the app's launch URL and make sure we notice that. 29021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen GURL url(extension->GetResourceURL("main.html")); 29121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen AddTabAtIndex(0, url, PageTransition::TYPED); 29221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen WaitForResourceChange(3); 29321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 29421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // Check that the third entry (main.html) is of type extension and has both 29521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // a tab contents and an extension. The title should start with "App:". 29621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen ASSERT_EQ(TaskManager::Resource::EXTENSION, model()->GetResourceType(2)); 29721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen ASSERT_TRUE(model()->GetResourceTabContents(2) != NULL); 29821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen ASSERT_TRUE(model()->GetResourceExtension(2) != NULL); 2993f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen string16 prefix = l10n_util::GetStringFUTF16( 3003f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen IDS_TASK_MANAGER_APP_PREFIX, string16()); 30121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen ASSERT_TRUE(StartsWith(model()->GetResourceTitle(2), prefix, true)); 30221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 30321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // Unload extension to avoid crash on Windows. 30421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen UnloadExtension(last_loaded_extension_id_); 30521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen WaitForResourceChange(2); 306bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 307bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 308513209b27ff55e2841eac0e4120199c23acce758Ben MurdochIN_PROC_BROWSER_TEST_F(TaskManagerBrowserTest, NoticeNotificationChanges) { 309513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_EQ(0, model()->ResourceCount()); 310513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 311513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Show the task manager. 312513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch browser()->window()->ShowTaskManager(); 313513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Expect to see the browser and the New Tab Page renderer. 31421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen WaitForResourceChange(2); 315513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 316513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Show a notification. 317513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch NotificationUIManager* notifications = 318513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch g_browser_process->notification_ui_manager(); 319513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 320513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch string16 content = DesktopNotificationService::CreateDataUrl( 321513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch GURL(), ASCIIToUTF16("Hello World!"), string16(), 322513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch WebKit::WebTextDirectionDefault); 323513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 324513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch scoped_refptr<NotificationDelegate> del1(new MockNotificationDelegate("n1")); 325513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch Notification n1( 326513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch GURL(), GURL(content), ASCIIToUTF16("Test 1"), string16(), del1.get()); 327513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch scoped_refptr<NotificationDelegate> del2(new MockNotificationDelegate("n2")); 328513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch Notification n2( 329513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch GURL(), GURL(content), ASCIIToUTF16("Test 2"), string16(), del2.get()); 330513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 331513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch notifications->Add(n1, browser()->profile()); 332513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch WaitForResourceChange(3); 333513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch notifications->Add(n2, browser()->profile()); 334513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch WaitForResourceChange(4); 335201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch notifications->CancelById(n1.notification_id()); 336513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch WaitForResourceChange(3); 337201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch notifications->CancelById(n2.notification_id()); 338513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch WaitForResourceChange(2); 339513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch} 340513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 341bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian MonsenIN_PROC_BROWSER_TEST_F(TaskManagerBrowserTest, KillExtension) { 342bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Show the task manager. This populates the model, and helps with debugging 343bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // (you see the task manager). 344bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen browser()->window()->ShowTaskManager(); 345bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 346bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ASSERT_TRUE(LoadExtension( 347bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen test_data_dir_.AppendASCII("common").AppendASCII("background_page"))); 348bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 349bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Wait until we see the loaded extension in the task manager (the three 350bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // resources are: the browser process, New Tab Page, and the extension). 351bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen WaitForResourceChange(3); 352bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 353bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen EXPECT_TRUE(model()->GetResourceExtension(0) == NULL); 354bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen EXPECT_TRUE(model()->GetResourceExtension(1) == NULL); 355bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ASSERT_TRUE(model()->GetResourceExtension(2) != NULL); 356bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 357bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Kill the extension process and make sure we notice it. 358bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen TaskManager::GetInstance()->KillProcess(2); 359bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen WaitForResourceChange(2); 360bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 361bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 36221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen// Disabled, http://crbug.com/66957. 36321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian MonsenIN_PROC_BROWSER_TEST_F(TaskManagerBrowserTest, 36421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen DISABLED_KillExtensionAndReload) { 365bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Show the task manager. This populates the model, and helps with debugging 366bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // (you see the task manager). 367bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen browser()->window()->ShowTaskManager(); 368bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 369bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ASSERT_TRUE(LoadExtension( 370bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen test_data_dir_.AppendASCII("common").AppendASCII("background_page"))); 371bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 372bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Wait until we see the loaded extension in the task manager (the three 373bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // resources are: the browser process, New Tab Page, and the extension). 374bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen WaitForResourceChange(3); 375bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 376bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen EXPECT_TRUE(model()->GetResourceExtension(0) == NULL); 377bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen EXPECT_TRUE(model()->GetResourceExtension(1) == NULL); 378bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ASSERT_TRUE(model()->GetResourceExtension(2) != NULL); 379bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 380bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Kill the extension process and make sure we notice it. 381bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen TaskManager::GetInstance()->KillProcess(2); 382bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen WaitForResourceChange(2); 383bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 384bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Reload the extension using the "crashed extension" infobar while the task 385bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // manager is still visible. Make sure we don't crash and the extension 386bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // gets reloaded and noticed in the task manager. 387bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen TabContents* current_tab = browser()->GetSelectedTabContents(); 38872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_EQ(1U, current_tab->infobar_count()); 38972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ConfirmInfoBarDelegate* delegate = 39072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen current_tab->GetInfoBarDelegateAt(0)->AsConfirmInfoBarDelegate(); 39172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_TRUE(delegate); 39272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen delegate->Accept(); 393bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen WaitForResourceChange(3); 394bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 395bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 396bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Regression test for http://crbug.com/18693. 3973f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen// 3983f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen// This test is crashy. See http://crbug.com/42315. 399bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian MonsenIN_PROC_BROWSER_TEST_F(TaskManagerBrowserTest, DISABLED_ReloadExtension) { 400bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Show the task manager. This populates the model, and helps with debugging 401bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // (you see the task manager). 402bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen browser()->window()->ShowTaskManager(); 403bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 4043f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen LOG(INFO) << "loading extension"; 405bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ASSERT_TRUE(LoadExtension( 406bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen test_data_dir_.AppendASCII("common").AppendASCII("background_page"))); 407bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 408bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Wait until we see the loaded extension in the task manager (the three 409bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // resources are: the browser process, New Tab Page, and the extension). 4103f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen LOG(INFO) << "waiting for resource change"; 411bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen WaitForResourceChange(3); 412bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 413bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen EXPECT_TRUE(model()->GetResourceExtension(0) == NULL); 414bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen EXPECT_TRUE(model()->GetResourceExtension(1) == NULL); 415bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ASSERT_TRUE(model()->GetResourceExtension(2) != NULL); 416bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 417bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const Extension* extension = model()->GetResourceExtension(2); 4183f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen ASSERT_TRUE(extension != NULL); 419bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 420bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Reload the extension a few times and make sure our resource count 421bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // doesn't increase. 4223f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen LOG(INFO) << "First extension reload"; 423bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ReloadExtension(extension->id()); 424bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen WaitForResourceChange(3); 425bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen extension = model()->GetResourceExtension(2); 4263f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen ASSERT_TRUE(extension != NULL); 427bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 4283f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen LOG(INFO) << "Second extension reload"; 429bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ReloadExtension(extension->id()); 430bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen WaitForResourceChange(3); 431bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen extension = model()->GetResourceExtension(2); 4323f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen ASSERT_TRUE(extension != NULL); 433bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 4343f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen LOG(INFO) << "Third extension reload"; 435bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ReloadExtension(extension->id()); 436bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen WaitForResourceChange(3); 437bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 438bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 439bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Crashy, http://crbug.com/42301. 440bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian MonsenIN_PROC_BROWSER_TEST_F(TaskManagerBrowserTest, 441bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DISABLED_PopulateWebCacheFields) { 442bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen EXPECT_EQ(0, model()->ResourceCount()); 443bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 444bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Show the task manager. This populates the model, and helps with debugging 445bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // (you see the task manager). 446bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen browser()->window()->ShowTaskManager(); 447bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 448bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Browser and the New Tab Page. 44921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen WaitForResourceChange(2); 450bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 451bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Open a new tab and make sure we notice that. 452bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen GURL url(ui_test_utils::GetTestUrl(FilePath(FilePath::kCurrentDirectory), 453bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen FilePath(kTitle1File))); 454513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch AddTabAtIndex(0, url, PageTransition::TYPED); 455bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen WaitForResourceChange(3); 456bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 457bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Check that we get some value for the cache columns. 458bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DCHECK_NE(model()->GetResourceWebCoreImageCacheSize(2), 459bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen l10n_util::GetStringUTF16(IDS_TASK_MANAGER_NA_CELL_TEXT)); 460bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DCHECK_NE(model()->GetResourceWebCoreScriptsCacheSize(2), 461bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen l10n_util::GetStringUTF16(IDS_TASK_MANAGER_NA_CELL_TEXT)); 462bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DCHECK_NE(model()->GetResourceWebCoreCSSCacheSize(2), 463bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen l10n_util::GetStringUTF16(IDS_TASK_MANAGER_NA_CELL_TEXT)); 464bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 465