| Index: chrome/browser/task_manager/task_manager_browsertest.cc
|
| diff --git a/chrome/browser/task_manager/task_manager_browsertest.cc b/chrome/browser/task_manager/task_manager_browsertest.cc
|
| index b17132f14a1bdeff1d6c9b9d4153124a9a317f92..66c6ca3877f6b02186f36ead424c6f33a7793c41 100644
|
| --- a/chrome/browser/task_manager/task_manager_browsertest.cc
|
| +++ b/chrome/browser/task_manager/task_manager_browsertest.cc
|
| @@ -68,6 +68,24 @@ class ResourceChangeObserver : public TaskManagerModelObserver {
|
| const int target_resource_count_;
|
| };
|
|
|
| +// Helper class used to wait for a BackgroundContents to finish loading.
|
| +class BackgroundContentsListener : public NotificationObserver {
|
| + public:
|
| + explicit BackgroundContentsListener(Profile* profile) {
|
| + registrar_.Add(this, NotificationType::BACKGROUND_CONTENTS_NAVIGATED,
|
| + Source<Profile>(profile));
|
| + }
|
| + virtual void Observe(NotificationType type,
|
| + const NotificationSource& source,
|
| + const NotificationDetails& details) {
|
| + // Quit once the BackgroundContents has been loaded.
|
| + if (type.value == NotificationType::BACKGROUND_CONTENTS_NAVIGATED)
|
| + MessageLoopForUI::current()->Quit();
|
| + }
|
| + private:
|
| + NotificationRegistrar registrar_;
|
| +};
|
| +
|
| } // namespace
|
|
|
| class TaskManagerBrowserTest : public ExtensionBrowserTest {
|
| @@ -84,6 +102,12 @@ class TaskManagerBrowserTest : public ExtensionBrowserTest {
|
| ui_test_utils::RunMessageLoop();
|
| model()->RemoveObserver(&observer);
|
| }
|
| +
|
| + // Wait for any pending BackgroundContents to finish starting up.
|
| + void WaitForBackgroundContents() {
|
| + BackgroundContentsListener listener(browser()->profile());
|
| + ui_test_utils::RunMessageLoop();
|
| + }
|
| };
|
|
|
| // Regression test for http://crbug.com/13361
|
| @@ -149,6 +173,45 @@ IN_PROC_BROWSER_TEST_F(TaskManagerBrowserTest, NoticeBGContentsChanges) {
|
| WaitForResourceChange(2);
|
| }
|
|
|
| +IN_PROC_BROWSER_TEST_F(TaskManagerBrowserTest, KillBGContents) {
|
| + EXPECT_EQ(0, model()->ResourceCount());
|
| +
|
| + // Show the task manager. This populates the model, and helps with debugging
|
| + // (you see the task manager).
|
| + browser()->window()->ShowTaskManager();
|
| +
|
| + // Browser and the New Tab Page.
|
| + WaitForResourceChange(2);
|
| +
|
| + // Open a new background contents and make sure we notice that.
|
| + GURL url(ui_test_utils::GetTestUrl(FilePath(FilePath::kCurrentDirectory),
|
| + FilePath(kTitle1File)));
|
| +
|
| + BackgroundContentsService* service =
|
| + browser()->profile()->GetBackgroundContentsService();
|
| + string16 application_id(ASCIIToUTF16("test_app_id"));
|
| + service->LoadBackgroundContents(browser()->profile(),
|
| + url,
|
| + ASCIIToUTF16("background_page"),
|
| + application_id);
|
| + // Wait for the background contents process to finish loading.
|
| + WaitForBackgroundContents();
|
| + EXPECT_EQ(3, model()->ResourceCount());
|
| +
|
| + // Kill the background contents process and verify that it disappears from the
|
| + // model.
|
| + bool found = false;
|
| + for (int i = 0; i < model()->ResourceCount(); ++i) {
|
| + if (model()->IsBackgroundResource(i)) {
|
| + TaskManager::GetInstance()->KillProcess(i);
|
| + found = true;
|
| + break;
|
| + }
|
| + }
|
| + ASSERT_TRUE(found);
|
| + WaitForResourceChange(2);
|
| +}
|
| +
|
| IN_PROC_BROWSER_TEST_F(TaskManagerBrowserTest, NoticeExtensionChanges) {
|
| EXPECT_EQ(0, model()->ResourceCount());
|
|
|
|
|