task_manager_browsertest.cc revision 4e180b6a0b4720a9b8e9e959a882386f690f08ff
1// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "chrome/browser/task_manager/task_manager.h" 6 7#include "base/files/file_path.h" 8#include "base/strings/stringprintf.h" 9#include "base/strings/utf_string_conversions.h" 10#include "chrome/browser/browser_process.h" 11#include "chrome/browser/chrome_notification_types.h" 12#include "chrome/browser/devtools/devtools_window.h" 13#include "chrome/browser/extensions/extension_browsertest.h" 14#include "chrome/browser/extensions/extension_service.h" 15#include "chrome/browser/extensions/extension_system.h" 16#include "chrome/browser/infobars/confirm_infobar_delegate.h" 17#include "chrome/browser/infobars/infobar_service.h" 18#include "chrome/browser/notifications/desktop_notification_service.h" 19#include "chrome/browser/notifications/notification.h" 20#include "chrome/browser/notifications/notification_test_util.h" 21#include "chrome/browser/notifications/notification_ui_manager.h" 22#include "chrome/browser/profiles/profile.h" 23#include "chrome/browser/task_manager/resource_provider.h" 24#include "chrome/browser/task_manager/task_manager_browsertest_util.h" 25#include "chrome/browser/ui/browser.h" 26#include "chrome/browser/ui/browser_dialogs.h" 27#include "chrome/browser/ui/browser_navigator.h" 28#include "chrome/browser/ui/browser_window.h" 29#include "chrome/browser/ui/panels/panel.h" 30#include "chrome/browser/ui/panels/panel_manager.h" 31#include "chrome/browser/ui/tabs/tab_strip_model.h" 32#include "chrome/browser/web_applications/web_app.h" 33#include "chrome/common/chrome_switches.h" 34#include "chrome/common/extensions/extension.h" 35#include "chrome/test/base/in_process_browser_test.h" 36#include "chrome/test/base/ui_test_utils.h" 37#include "content/public/browser/notification_service.h" 38#include "content/public/common/content_switches.h" 39#include "content/public/common/page_transition_types.h" 40#include "content/public/test/browser_test_utils.h" 41#include "grit/generated_resources.h" 42#include "net/dns/mock_host_resolver.h" 43#include "net/test/embedded_test_server/embedded_test_server.h" 44#include "testing/gtest/include/gtest/gtest.h" 45#include "ui/base/l10n/l10n_util.h" 46 47// http://crbug.com/31663 48// TODO(linux_aura) http://crbug.com/163931 49#if !(defined(OS_WIN) && defined(USE_AURA)) && !(defined(OS_LINUX) && !defined(OS_CHROMEOS) && defined(USE_AURA)) 50 51using content::WebContents; 52 53// On Linux this is crashing intermittently http://crbug/84719 54// In some environments this test fails about 1/6 http://crbug/84850 55#if defined(OS_LINUX) 56#define MAYBE_KillExtension DISABLED_KillExtension 57#else 58#define MAYBE_KillExtension KillExtension 59#endif 60 61namespace { 62 63const base::FilePath::CharType* kTitle1File = FILE_PATH_LITERAL("title1.html"); 64 65} // namespace 66 67class TaskManagerNoShowBrowserTest : public ExtensionBrowserTest { 68 public: 69 TaskManagerNoShowBrowserTest() {} 70 virtual ~TaskManagerNoShowBrowserTest() {} 71 72 TaskManagerModel* model() const { 73 return TaskManager::GetInstance()->model(); 74 } 75 76 void ShowTaskManager() { 77 EXPECT_EQ(0, model()->ResourceCount()); 78 79 // Show the task manager. This populates the model, and helps with debugging 80 // (you see the task manager). 81 chrome::ShowTaskManager(browser()); 82 83 // New Tab Page. 84 TaskManagerBrowserTestUtil::WaitForWebResourceChange(1); 85 } 86 87 void Refresh() { 88 model()->Refresh(); 89 } 90 91 int GetUpdateTimeMs() { 92 return TaskManagerModel::kUpdateTimeMs; 93 } 94 95 protected: 96 virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { 97 ExtensionBrowserTest::SetUpCommandLine(command_line); 98 99 // Do not prelaunch the GPU process and disable accelerated compositing 100 // for these tests as the GPU process will show up in task manager but 101 // whether it appears before or after the new tab renderer process is not 102 // well defined. 103 command_line->AppendSwitch(switches::kDisableGpuProcessPrelaunch); 104 command_line->AppendSwitch(switches::kDisableAcceleratedCompositing); 105 106 // Do not launch device discovery process. 107 command_line->AppendSwitch(switches::kDisableDeviceDiscoveryNotifications); 108 } 109 110 private: 111 DISALLOW_COPY_AND_ASSIGN(TaskManagerNoShowBrowserTest); 112}; 113 114class TaskManagerBrowserTest : public TaskManagerNoShowBrowserTest { 115 public: 116 TaskManagerBrowserTest() {} 117 virtual ~TaskManagerBrowserTest() {} 118 119 virtual void SetUpOnMainThread() OVERRIDE { 120 TaskManagerNoShowBrowserTest::SetUpOnMainThread(); 121 TaskManagerNoShowBrowserTest::ShowTaskManager(); 122 } 123 124 private: 125 DISALLOW_COPY_AND_ASSIGN(TaskManagerBrowserTest); 126}; 127 128#if defined(OS_MACOSX) || defined(OS_LINUX) 129#define MAYBE_ShutdownWhileOpen DISABLED_ShutdownWhileOpen 130#else 131#define MAYBE_ShutdownWhileOpen ShutdownWhileOpen 132#endif 133 134// Regression test for http://crbug.com/13361 135IN_PROC_BROWSER_TEST_F(TaskManagerBrowserTest, MAYBE_ShutdownWhileOpen) { 136 // Showing task manager handled by SetUp. 137} 138 139IN_PROC_BROWSER_TEST_F(TaskManagerBrowserTest, NoticeTabContentsChanges) { 140 int resource_count = TaskManager::GetInstance()->model()->ResourceCount(); 141 // Open a new tab and make sure we notice that. 142 GURL url(ui_test_utils::GetTestUrl(base::FilePath( 143 base::FilePath::kCurrentDirectory), base::FilePath(kTitle1File))); 144 AddTabAtIndex(0, url, content::PAGE_TRANSITION_TYPED); 145 TaskManagerBrowserTestUtil::WaitForWebResourceChange(2); 146 147 // Check that the last entry is a tab contents resource whose title starts 148 // starts with "Tab:". 149 ASSERT_TRUE(model()->GetResourceWebContents(resource_count) != NULL); 150 string16 prefix = l10n_util::GetStringFUTF16( 151 IDS_TASK_MANAGER_TAB_PREFIX, string16()); 152 ASSERT_TRUE(StartsWith(model()->GetResourceTitle(resource_count), prefix, 153 true)); 154 155 // Close the tab and verify that we notice. 156 browser()->tab_strip_model()->CloseWebContentsAt(0, 157 TabStripModel::CLOSE_NONE); 158 TaskManagerBrowserTestUtil::WaitForWebResourceChange(1); 159} 160 161#if defined(USE_ASH) 162// This test fails on Ash because task manager treats view type 163// Panels differently for Ash. 164#define MAYBE_NoticePanelChanges DISABLED_NoticePanelChanges 165#else 166#define MAYBE_NoticePanelChanges NoticePanelChanges 167#endif 168IN_PROC_BROWSER_TEST_F(TaskManagerBrowserTest, MAYBE_NoticePanelChanges) { 169 ASSERT_TRUE(LoadExtension( 170 test_data_dir_.AppendASCII("good").AppendASCII("Extensions") 171 .AppendASCII("behllobkkfkfnphdnhnkndlbkcpglgmj") 172 .AppendASCII("1.0.0.0"))); 173 174 // Browser, the New Tab Page and Extension background page. 175 TaskManagerBrowserTestUtil::WaitForWebResourceChange(2); 176 177 // Open a new panel to an extension url and make sure we notice that. 178 GURL url( 179 "chrome-extension://behllobkkfkfnphdnhnkndlbkcpglgmj/french_sentence.html"); 180 Panel* panel = PanelManager::GetInstance()->CreatePanel( 181 web_app::GenerateApplicationNameFromExtensionId( 182 last_loaded_extension_id_), 183 browser()->profile(), 184 url, 185 gfx::Rect(300, 400), 186 PanelManager::CREATE_AS_DOCKED); 187 TaskManagerBrowserTestUtil::WaitForWebResourceChange(3); 188 189 // Check that the fourth entry is a resource with the panel's web contents 190 // and whose title starts with "Extension:". 191 ASSERT_EQ(panel->GetWebContents(), model()->GetResourceWebContents(3)); 192 string16 prefix = l10n_util::GetStringFUTF16( 193 IDS_TASK_MANAGER_EXTENSION_PREFIX, string16()); 194 ASSERT_TRUE(StartsWith(model()->GetResourceTitle(3), prefix, true)); 195 196 // Close the panel and verify that we notice. 197 panel->Close(); 198 TaskManagerBrowserTestUtil::WaitForWebResourceChange(2); 199 200 // Unload extension to avoid crash on Windows. 201 UnloadExtension(last_loaded_extension_id_); 202 TaskManagerBrowserTestUtil::WaitForWebResourceChange(1); 203} 204 205#if defined(USE_ASH) || defined(OS_WIN) 206// This test fails on Ash because task manager treats view type 207// Panels differently for Ash. 208// This test also fails on Windows, win_rel trybot. http://crbug.com/166322 209#define MAYBE_KillPanelExtension DISABLED_KillPanelExtension 210#else 211#define MAYBE_KillPanelExtension KillPanelExtension 212#endif 213IN_PROC_BROWSER_TEST_F(TaskManagerBrowserTest, MAYBE_KillPanelExtension) { 214 int resource_count = TaskManager::GetInstance()->model()->ResourceCount(); 215 216 ASSERT_TRUE(LoadExtension( 217 test_data_dir_.AppendASCII("good").AppendASCII("Extensions") 218 .AppendASCII("behllobkkfkfnphdnhnkndlbkcpglgmj") 219 .AppendASCII("1.0.0.0"))); 220 221 // Browser, the New Tab Page and Extension background page. 222 TaskManagerBrowserTestUtil::WaitForWebResourceChange(2); 223 224 // Open a new panel to an extension url and make sure we notice that. 225 GURL url( 226 "chrome-extension://behllobkkfkfnphdnhnkndlbkcpglgmj/french_sentence.html"); 227 PanelManager::GetInstance()->CreatePanel( 228 web_app::GenerateApplicationNameFromExtensionId( 229 last_loaded_extension_id_), 230 browser()->profile(), 231 url, 232 gfx::Rect(300, 400), 233 PanelManager::CREATE_AS_DOCKED); 234 TaskManagerBrowserTestUtil::WaitForWebResourceChange(3); 235 236 // Kill the panel extension process and verify that it disappears from the 237 // model along with its panel. 238 ASSERT_TRUE(model()->IsBackgroundResource(resource_count)); 239 TaskManager::GetInstance()->KillProcess(resource_count); 240 TaskManagerBrowserTestUtil::WaitForWebResourceChange(1); 241} 242 243IN_PROC_BROWSER_TEST_F(TaskManagerBrowserTest, NoticeExtensionTabs) { 244 int resource_count = TaskManager::GetInstance()->model()->ResourceCount(); 245 ASSERT_TRUE(LoadExtension( 246 test_data_dir_.AppendASCII("good").AppendASCII("Extensions") 247 .AppendASCII("behllobkkfkfnphdnhnkndlbkcpglgmj") 248 .AppendASCII("1.0.0.0"))); 249 250 // Browser, Extension background page, and the New Tab Page. 251 TaskManagerBrowserTestUtil::WaitForWebResourceChange(2); 252 253 // Open a new tab to an extension URL and make sure we notice that. 254 GURL url("chrome-extension://behllobkkfkfnphdnhnkndlbkcpglgmj/page.html"); 255 AddTabAtIndex(0, url, content::PAGE_TRANSITION_TYPED); 256 TaskManagerBrowserTestUtil::WaitForWebResourceChange(3); 257 258 // Check that the third entry (background) is an extension resource whose 259 // title starts with "Extension:". 260 ASSERT_EQ(task_manager::Resource::EXTENSION, model()->GetResourceType( 261 resource_count)); 262 ASSERT_TRUE(model()->GetResourceWebContents(resource_count) == NULL); 263 ASSERT_TRUE(model()->GetResourceExtension(resource_count) != NULL); 264 string16 prefix = l10n_util::GetStringFUTF16( 265 IDS_TASK_MANAGER_EXTENSION_PREFIX, string16()); 266 ASSERT_TRUE(StartsWith(model()->GetResourceTitle(resource_count), 267 prefix, true)); 268 269 // Check that the fourth entry (page.html) is of type extension and has both 270 // a tab contents and an extension. The title should start with "Extension:". 271 ASSERT_EQ(task_manager::Resource::EXTENSION, model()->GetResourceType( 272 resource_count + 1)); 273 ASSERT_TRUE(model()->GetResourceWebContents(resource_count + 1) != NULL); 274 ASSERT_TRUE(model()->GetResourceExtension(resource_count + 1) != NULL); 275 ASSERT_TRUE(StartsWith(model()->GetResourceTitle(resource_count + 1), 276 prefix, true)); 277 278 // Unload extension to avoid crash on Windows. 279 UnloadExtension(last_loaded_extension_id_); 280 TaskManagerBrowserTestUtil::WaitForWebResourceChange(1); 281} 282 283IN_PROC_BROWSER_TEST_F(TaskManagerBrowserTest, NoticeAppTabs) { 284 int resource_count = TaskManager::GetInstance()->model()->ResourceCount(); 285 ASSERT_TRUE(LoadExtension( 286 test_data_dir_.AppendASCII("packaged_app"))); 287 ExtensionService* service = extensions::ExtensionSystem::Get( 288 browser()->profile())->extension_service(); 289 const extensions::Extension* extension = 290 service->GetExtensionById(last_loaded_extension_id_, false); 291 292 // New Tab Page. 293 TaskManagerBrowserTestUtil::WaitForWebResourceChange(1); 294 295 // Open a new tab to the app's launch URL and make sure we notice that. 296 GURL url(extension->GetResourceURL("main.html")); 297 AddTabAtIndex(0, url, content::PAGE_TRANSITION_TYPED); 298 TaskManagerBrowserTestUtil::WaitForWebResourceChange(2); 299 300 // Check that the third entry (main.html) is of type extension and has both 301 // a tab contents and an extension. The title should start with "App:". 302 ASSERT_EQ(task_manager::Resource::EXTENSION, model()->GetResourceType( 303 resource_count)); 304 ASSERT_TRUE(model()->GetResourceWebContents(resource_count) != NULL); 305 ASSERT_TRUE(model()->GetResourceExtension(resource_count) == extension); 306 string16 prefix = l10n_util::GetStringFUTF16( 307 IDS_TASK_MANAGER_APP_PREFIX, string16()); 308 ASSERT_TRUE(StartsWith(model()->GetResourceTitle(resource_count), 309 prefix, true)); 310 311 // Unload extension to avoid crash on Windows. 312 UnloadExtension(last_loaded_extension_id_); 313 TaskManagerBrowserTestUtil::WaitForWebResourceChange(1); 314} 315 316IN_PROC_BROWSER_TEST_F(TaskManagerBrowserTest, NoticeHostedAppTabs) { 317 int resource_count = TaskManager::GetInstance()->model()->ResourceCount(); 318 319 // The app under test acts on URLs whose host is "localhost", 320 // so the URLs we navigate to must have host "localhost". 321 host_resolver()->AddRule("*", "127.0.0.1"); 322 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); 323 GURL::Replacements replace_host; 324 std::string host_str("localhost"); // must stay in scope with replace_host 325 replace_host.SetHostStr(host_str); 326 GURL base_url = embedded_test_server()->GetURL( 327 "/extensions/api_test/app_process/"); 328 base_url = base_url.ReplaceComponents(replace_host); 329 330 // Open a new tab to an app URL before the app is loaded. 331 GURL url(base_url.Resolve("path1/empty.html")); 332 content::WindowedNotificationObserver observer( 333 content::NOTIFICATION_NAV_ENTRY_COMMITTED, 334 content::NotificationService::AllSources()); 335 AddTabAtIndex(0, url, content::PAGE_TRANSITION_TYPED); 336 observer.Wait(); 337 338 // Force the TaskManager to query the title. 339 Refresh(); 340 341 // Check that the third entry's title starts with "Tab:". 342 string16 tab_prefix = l10n_util::GetStringFUTF16( 343 IDS_TASK_MANAGER_TAB_PREFIX, string16()); 344 ASSERT_TRUE(StartsWith(model()->GetResourceTitle(resource_count), 345 tab_prefix, true)); 346 347 // Load the hosted app and make sure it still starts with "Tab:", 348 // since it hasn't changed to an app process yet. 349 ASSERT_TRUE(LoadExtension( 350 test_data_dir_.AppendASCII("api_test").AppendASCII("app_process"))); 351 // Force the TaskManager to query the title. 352 Refresh(); 353 ASSERT_TRUE(StartsWith(model()->GetResourceTitle(resource_count), 354 tab_prefix, true)); 355 356 // Now reload and check that the last entry's title now starts with "App:". 357 ui_test_utils::NavigateToURL(browser(), url); 358 // Force the TaskManager to query the title. 359 Refresh(); 360 string16 app_prefix = l10n_util::GetStringFUTF16( 361 IDS_TASK_MANAGER_APP_PREFIX, string16()); 362 ASSERT_TRUE(StartsWith(model()->GetResourceTitle(resource_count), 363 app_prefix, true)); 364 365 // Disable extension and reload page. 366 DisableExtension(last_loaded_extension_id_); 367 ui_test_utils::NavigateToURL(browser(), url); 368 369 // Force the TaskManager to query the title. 370 Refresh(); 371 372 // The third entry's title should be back to a normal tab. 373 ASSERT_TRUE(StartsWith(model()->GetResourceTitle(resource_count), 374 tab_prefix, true)); 375} 376 377// Disabled, http://crbug.com/66957. 378IN_PROC_BROWSER_TEST_F(TaskManagerBrowserTest, 379 DISABLED_KillExtensionAndReload) { 380 ASSERT_TRUE(LoadExtension( 381 test_data_dir_.AppendASCII("common").AppendASCII("background_page"))); 382 383 // Wait until we see the loaded extension in the task manager (the three 384 // resources are: the browser process, New Tab Page, and the extension). 385 TaskManagerBrowserTestUtil::WaitForWebResourceChange(3); 386 387 EXPECT_TRUE(model()->GetResourceExtension(0) == NULL); 388 EXPECT_TRUE(model()->GetResourceExtension(1) == NULL); 389 ASSERT_TRUE(model()->GetResourceExtension(2) != NULL); 390 391 // Kill the extension process and make sure we notice it. 392 TaskManager::GetInstance()->KillProcess(2); 393 TaskManagerBrowserTestUtil::WaitForWebResourceChange(1); 394 395 // Reload the extension using the "crashed extension" infobar while the task 396 // manager is still visible. Make sure we don't crash and the extension 397 // gets reloaded and noticed in the task manager. 398 InfoBarService* infobar_service = InfoBarService::FromWebContents( 399 browser()->tab_strip_model()->GetActiveWebContents()); 400 ASSERT_EQ(1U, infobar_service->infobar_count()); 401 ConfirmInfoBarDelegate* delegate = 402 infobar_service->infobar_at(0)->AsConfirmInfoBarDelegate(); 403 ASSERT_TRUE(delegate); 404 delegate->Accept(); 405 TaskManagerBrowserTestUtil::WaitForWebResourceChange(3); 406} 407 408#if defined(OS_WIN) 409// http://crbug.com/93158. 410#define MAYBE_ReloadExtension DISABLED_ReloadExtension 411#else 412#define MAYBE_ReloadExtension ReloadExtension 413#endif 414 415// Regression test for http://crbug.com/18693. 416IN_PROC_BROWSER_TEST_F(TaskManagerBrowserTest, MAYBE_ReloadExtension) { 417 int resource_count = TaskManager::GetInstance()->model()->ResourceCount(); 418 LOG(INFO) << "loading extension"; 419 ASSERT_TRUE(LoadExtension( 420 test_data_dir_.AppendASCII("common").AppendASCII("background_page"))); 421 422 // Wait until we see the loaded extension in the task manager (the three 423 // resources are: the browser process, New Tab Page, and the extension). 424 LOG(INFO) << "waiting for resource change"; 425 TaskManagerBrowserTestUtil::WaitForWebResourceChange(2); 426 427 EXPECT_TRUE(model()->GetResourceExtension(0) == NULL); 428 EXPECT_TRUE(model()->GetResourceExtension(1) == NULL); 429 ASSERT_TRUE(model()->GetResourceExtension(resource_count) != NULL); 430 431 const extensions::Extension* extension = model()->GetResourceExtension( 432 resource_count); 433 ASSERT_TRUE(extension != NULL); 434 435 // Reload the extension a few times and make sure our resource count 436 // doesn't increase. 437 LOG(INFO) << "First extension reload"; 438 ReloadExtension(extension->id()); 439 TaskManagerBrowserTestUtil::WaitForWebResourceChange(2); 440 extension = model()->GetResourceExtension(resource_count); 441 ASSERT_TRUE(extension != NULL); 442 443 LOG(INFO) << "Second extension reload"; 444 ReloadExtension(extension->id()); 445 TaskManagerBrowserTestUtil::WaitForWebResourceChange(2); 446 extension = model()->GetResourceExtension(resource_count); 447 ASSERT_TRUE(extension != NULL); 448 449 LOG(INFO) << "Third extension reload"; 450 ReloadExtension(extension->id()); 451 TaskManagerBrowserTestUtil::WaitForWebResourceChange(2); 452} 453 454// Crashy, http://crbug.com/42301. 455IN_PROC_BROWSER_TEST_F(TaskManagerBrowserTest, 456 DISABLED_PopulateWebCacheFields) { 457 int resource_count = TaskManager::GetInstance()->model()->ResourceCount(); 458 459 // Open a new tab and make sure we notice that. 460 GURL url(ui_test_utils::GetTestUrl(base::FilePath( 461 base::FilePath::kCurrentDirectory), base::FilePath(kTitle1File))); 462 AddTabAtIndex(0, url, content::PAGE_TRANSITION_TYPED); 463 TaskManagerBrowserTestUtil::WaitForWebResourceChange(2); 464 465 // Check that we get some value for the cache columns. 466 DCHECK_NE(model()->GetResourceWebCoreImageCacheSize(resource_count), 467 l10n_util::GetStringUTF16(IDS_TASK_MANAGER_NA_CELL_TEXT)); 468 DCHECK_NE(model()->GetResourceWebCoreScriptsCacheSize(resource_count), 469 l10n_util::GetStringUTF16(IDS_TASK_MANAGER_NA_CELL_TEXT)); 470 DCHECK_NE(model()->GetResourceWebCoreCSSCacheSize(resource_count), 471 l10n_util::GetStringUTF16(IDS_TASK_MANAGER_NA_CELL_TEXT)); 472} 473 474// Checks that task manager counts a worker thread JS heap size. 475// http://crbug.com/241066 476// Flaky, http://crbug.com/259368 477IN_PROC_BROWSER_TEST_F(TaskManagerBrowserTest, DISABLED_WebWorkerJSHeapMemory) { 478 GURL url(ui_test_utils::GetTestUrl(base::FilePath( 479 base::FilePath::kCurrentDirectory), base::FilePath(kTitle1File))); 480 ui_test_utils::NavigateToURL(browser(), url); 481 const int extra_timeout_ms = 500; 482 size_t minimal_heap_size = 2 * 1024 * 1024 * sizeof(void*); 483 std::string test_js = base::StringPrintf( 484 "var blob = new Blob([\n" 485 " 'mem = new Array(%lu);',\n" 486 " 'for (var i = 0; i < mem.length; i += 16) mem[i] = i;',\n" 487 " 'postMessage();']);\n" 488 "blobURL = window.URL.createObjectURL(blob);\n" 489 "worker = new Worker(blobURL);\n" 490 "// Give the task manager few seconds to poll for JS heap sizes.\n" 491 "worker.onmessage = setTimeout.bind(\n" 492 " this,\n" 493 " function () { window.domAutomationController.send(true); },\n" 494 " %d);\n" 495 "worker.postMessage();\n", 496 static_cast<unsigned long>(minimal_heap_size), 497 GetUpdateTimeMs() + extra_timeout_ms); 498 bool ok; 499 ASSERT_TRUE(content::ExecuteScriptAndExtractBool( 500 browser()->tab_strip_model()->GetActiveWebContents(), test_js, &ok)); 501 ASSERT_TRUE(ok); 502 503 int resource_index = TaskManager::GetInstance()->model()->ResourceCount() - 1; 504 size_t result; 505 506 ASSERT_TRUE(model()->GetV8Memory(resource_index, &result)); 507 LOG(INFO) << "Got V8 Heap Size " << result << " bytes"; 508 EXPECT_GE(result, minimal_heap_size); 509 510 ASSERT_TRUE(model()->GetV8MemoryUsed(resource_index, &result)); 511 LOG(INFO) << "Got V8 Used Heap Size " << result << " bytes"; 512 EXPECT_GE(result, minimal_heap_size); 513} 514 515IN_PROC_BROWSER_TEST_F(TaskManagerBrowserTest, NoticeInTabDevToolsWindow) { 516 DevToolsWindow* dev_tools = DevToolsWindow::ToggleDevToolsWindow( 517 model()->GetResourceWebContents(1)->GetRenderViewHost(), 518 true, 519 DEVTOOLS_TOGGLE_ACTION_INSPECT); 520 // Dock side bottom should be the default. 521 ASSERT_EQ(DEVTOOLS_DOCK_SIDE_BOTTOM, dev_tools->dock_side()); 522 TaskManagerBrowserTestUtil::WaitForWebResourceChange(2); 523} 524 525// This test differs from TaskManagerBrowserTest.NoticeInTabDevToolsWindow in 526// the order in which the devtools window and task manager are created. 527IN_PROC_BROWSER_TEST_F(TaskManagerNoShowBrowserTest, 528 NoticeInTabDevToolsWindow) { 529 // First create the devtools window. 530 DevToolsWindow* dev_tools = DevToolsWindow::ToggleDevToolsWindow( 531 browser()->tab_strip_model()->GetActiveWebContents()->GetRenderViewHost(), 532 true, 533 DEVTOOLS_TOGGLE_ACTION_INSPECT); 534 // Dock side bottom should be the default. 535 ASSERT_EQ(DEVTOOLS_DOCK_SIDE_BOTTOM, dev_tools->dock_side()); 536 // Make sure that the devtools window is loaded before starting the task 537 // manager. 538 content::RunAllPendingInMessageLoop(); 539 540 // Now add showing the task manager to the queue, and watch for the right 541 // number of reources to show up. 542 base::MessageLoop::current()->PostTask( 543 FROM_HERE, 544 base::Bind(&TaskManagerNoShowBrowserTest::ShowTaskManager, 545 base::Unretained(this))); 546 TaskManagerBrowserTestUtil::WaitForWebResourceChange(2); 547} 548 549#endif 550