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/browser_process.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/extension_browsertest.h" 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/extension_service.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/notifications/notification.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/notifications/notification_delegate.h" 10a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#include "chrome/browser/notifications/notification_ui_manager.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser_commands.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/tabs/tab_strip_model.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/ui_test_utils.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/navigation_controller.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/render_process_host.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/render_view_host.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/common/result_codes.h" 2146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "content/public/common/url_constants.h" 2223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "extensions/browser/extension_host.h" 235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "extensions/browser/extension_registry.h" 245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "extensions/browser/extension_system.h" 25f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "extensions/browser/process_manager.h" 265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "extensions/browser/process_map.h" 2746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "extensions/common/constants.h" 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/message_center/message_center.h" 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/message_center/notification_list.h" 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::NavigationController; 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::WebContents; 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using extensions::Extension; 345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)using extensions::ExtensionRegistry; 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Tests are timing out waiting for extension to crash. 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// http://crbug.com/174705 3890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#if defined(OS_MACOSX) || defined(USE_AURA) || defined(OS_LINUX) 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define MAYBE_ExtensionCrashRecoveryTest DISABLED_ExtensionCrashRecoveryTest 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#else 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define MAYBE_ExtensionCrashRecoveryTest ExtensionCrashRecoveryTest 4290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#endif // defined(OS_MACOSX) || defined(USE_AURA) || defined(OS_LINUX) 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class ExtensionCrashRecoveryTestBase : public ExtensionBrowserTest { 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void AcceptNotification(size_t index) = 0; 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void CancelNotification(size_t index) = 0; 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual size_t CountBalloons() = 0; 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExtensionService* GetExtensionService() { 51116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return extensions::ExtensionSystem::Get(browser()->profile())-> 52116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch extension_service(); 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) extensions::ProcessManager* GetProcessManager() { 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return extensions::ExtensionSystem::Get(browser()->profile())-> 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) process_manager(); 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 605c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ExtensionRegistry* GetExtensionRegistry() { 615c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return ExtensionRegistry::Get(browser()->profile()); 625c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu } 635c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) size_t GetEnabledExtensionCount() { 655c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return GetExtensionRegistry()->enabled_extensions().size(); 665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) size_t GetTerminatedExtensionCount() { 695c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return GetExtensionRegistry()->terminated_extensions().size(); 705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 725c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu void CrashExtension(const std::string& extension_id) { 735c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const Extension* extension = GetExtensionRegistry()->GetExtensionById( 745c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu extension_id, ExtensionRegistry::ENABLED); 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(extension); 76f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) extensions::ExtensionHost* extension_host = GetProcessManager()-> 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetBackgroundHostForExtension(extension_id); 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(extension_host); 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::KillProcess(extension_host->render_process_host()->GetHandle(), 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RESULT_CODE_KILLED, false); 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(WaitForExtensionCrash(extension_id)); 83f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_FALSE(GetProcessManager()-> 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetBackgroundHostForExtension(extension_id)); 8590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 8690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Wait for extension crash balloon to appear. 8790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::MessageLoop::current()->RunUntilIdle(); 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 905c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu void CheckExtensionConsistency(const std::string& extension_id) { 915c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const Extension* extension = GetExtensionRegistry()->GetExtensionById( 925c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu extension_id, ExtensionRegistry::ENABLED); 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(extension); 94f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) extensions::ExtensionHost* extension_host = GetProcessManager()-> 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetBackgroundHostForExtension(extension_id); 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(extension_host); 97f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) extensions::ProcessManager::ViewSet all_views = 98f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GetProcessManager()->GetAllViews(); 99f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) extensions::ProcessManager::ViewSet::const_iterator it = 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) all_views.find(extension_host->host_contents()->GetRenderViewHost()); 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(it == all_views.end()); 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(extension_host->IsRenderViewLive()); 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extensions::ProcessMap* process_map = 1045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) extensions::ProcessMap::Get(browser()->profile()); 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(process_map->Contains( 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extension_id, 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extension_host->render_view_host()->GetProcess()->GetID())); 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void LoadTestExtension() { 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExtensionBrowserTest::SetUpInProcessBrowserTestFixture(); 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Extension* extension = LoadExtension( 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_data_dir_.AppendASCII("common").AppendASCII("background_page")); 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(extension); 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) first_extension_id_ = extension->id(); 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckExtensionConsistency(first_extension_id_); 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void LoadSecondExtension() { 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Extension* extension = LoadExtension( 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_data_dir_.AppendASCII("install").AppendASCII("install")); 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(extension); 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) second_extension_id_ = extension->id(); 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckExtensionConsistency(second_extension_id_); 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string first_extension_id_; 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string second_extension_id_; 1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 131116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass MAYBE_ExtensionCrashRecoveryTest : public ExtensionCrashRecoveryTestBase { 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected: 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void AcceptNotification(size_t index) OVERRIDE { 134a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch message_center::MessageCenter* message_center = 135a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch message_center::MessageCenter::Get(); 136a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch ASSERT_GT(message_center->NotificationCount(), index); 137a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch message_center::NotificationList::Notifications::reverse_iterator it = 138a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch message_center->GetVisibleNotifications().rbegin(); 139116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch for (size_t i = 0; i < index; ++i) 140116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ++it; 141a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch std::string id = (*it)->id(); 142a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch message_center->ClickOnNotification(id); 1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WaitForExtensionLoad(); 1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void CancelNotification(size_t index) OVERRIDE { 147a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch message_center::MessageCenter* message_center = 148a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch message_center::MessageCenter::Get(); 149a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch ASSERT_GT(message_center->NotificationCount(), index); 150a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch message_center::NotificationList::Notifications::reverse_iterator it = 151a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch message_center->GetVisibleNotifications().rbegin(); 152116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch for (size_t i = 0; i < index; ++i) 153116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ++it; 154a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch ASSERT_TRUE(g_browser_process->notification_ui_manager()-> 155a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch CancelById((*it)->id())); 1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual size_t CountBalloons() OVERRIDE { 159a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch return message_center::MessageCenter::Get()->NotificationCount(); 1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Flaky: http://crbug.com/242167. 16490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(MAYBE_ExtensionCrashRecoveryTest, DISABLED_Basic) { 1655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const size_t count_before = GetEnabledExtensionCount(); 1665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const size_t crash_count_before = GetTerminatedExtensionCount(); 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadTestExtension(); 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrashExtension(first_extension_id_); 1695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(count_before, GetEnabledExtensionCount()); 1705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(crash_count_before + 1, GetTerminatedExtensionCount()); 1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(AcceptNotification(0)); 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SCOPED_TRACE("after clicking the balloon"); 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckExtensionConsistency(first_extension_id_); 1755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(crash_count_before, GetTerminatedExtensionCount()); 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Flaky, http://crbug.com/241191. 17990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(MAYBE_ExtensionCrashRecoveryTest, 18090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) DISABLED_CloseAndReload) { 1815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const size_t count_before = GetEnabledExtensionCount(); 1825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const size_t crash_count_before = GetTerminatedExtensionCount(); 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadTestExtension(); 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrashExtension(first_extension_id_); 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(count_before, GetEnabledExtensionCount()); 1875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(crash_count_before + 1, GetTerminatedExtensionCount()); 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(CancelNotification(0)); 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ReloadExtension(first_extension_id_); 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SCOPED_TRACE("after reloading"); 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckExtensionConsistency(first_extension_id_); 1945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(crash_count_before, GetTerminatedExtensionCount()); 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1977d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// Test is timing out on Windows http://crbug.com/174705. 1987d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#if defined(OS_WIN) 1997d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#define MAYBE_ReloadIndependently DISABLED_ReloadIndependently 2007d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#else 2017d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#define MAYBE_ReloadIndependently ReloadIndependently 2027d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#endif // defined(OS_WIN) 2037d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(MAYBE_ExtensionCrashRecoveryTest, 2047d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) MAYBE_ReloadIndependently) { 2055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const size_t count_before = GetEnabledExtensionCount(); 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadTestExtension(); 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrashExtension(first_extension_id_); 2085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(count_before, GetEnabledExtensionCount()); 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ReloadExtension(first_extension_id_); 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SCOPED_TRACE("after reloading"); 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckExtensionConsistency(first_extension_id_); 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebContents* current_tab = 2162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents(); 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(current_tab); 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The balloon should automatically hide after the extension is successfully 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // reloaded. 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(0U, CountBalloons()); 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Test is timing out on Windows http://crbug.com/174705. 22590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#if defined(OS_WIN) 22690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#define MAYBE_ReloadIndependentlyChangeTabs DISABLED_ReloadIndependentlyChangeTabs 22790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#else 22890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#define MAYBE_ReloadIndependentlyChangeTabs ReloadIndependentlyChangeTabs 22990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#endif // defined(OS_WIN) 23090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 2312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(MAYBE_ExtensionCrashRecoveryTest, 23290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) MAYBE_ReloadIndependentlyChangeTabs) { 2335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const size_t count_before = GetEnabledExtensionCount(); 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadTestExtension(); 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrashExtension(first_extension_id_); 2365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(count_before, GetEnabledExtensionCount()); 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebContents* original_tab = 2392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents(); 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(original_tab); 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, CountBalloons()); 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Open a new tab, but the balloon will still be there. 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NewTab(browser()); 2452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebContents* new_current_tab = 2462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents(); 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(new_current_tab); 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NE(new_current_tab, original_tab); 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, CountBalloons()); 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ReloadExtension(first_extension_id_); 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SCOPED_TRACE("after reloading"); 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckExtensionConsistency(first_extension_id_); 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The balloon should automatically hide after the extension is successfully 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // reloaded. 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(0U, CountBalloons()); 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(MAYBE_ExtensionCrashRecoveryTest, 2622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISABLED_ReloadIndependentlyNavigatePage) { 2635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const size_t count_before = GetEnabledExtensionCount(); 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadTestExtension(); 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrashExtension(first_extension_id_); 2665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(count_before, GetEnabledExtensionCount()); 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebContents* current_tab = 2692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents(); 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(current_tab); 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, CountBalloons()); 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate to another page. 2742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui_test_utils::NavigateToURL( 2752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser(), ui_test_utils::GetTestUrl( 2762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath(base::FilePath::kCurrentDirectory), 2772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath(FILE_PATH_LITERAL("title1.html")))); 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, CountBalloons()); 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ReloadExtension(first_extension_id_); 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SCOPED_TRACE("after reloading"); 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckExtensionConsistency(first_extension_id_); 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The balloon should automatically hide after the extension is successfully 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // reloaded. 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(0U, CountBalloons()); 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Make sure that when we don't do anything about the crashed extension 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// and close the browser, it doesn't crash. The browser is closed implicitly 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// at the end of each browser test. 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// http://crbug.com/84719 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_LINUX) 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAYBE_ShutdownWhileCrashed DISABLED_ShutdownWhileCrashed 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAYBE_ShutdownWhileCrashed ShutdownWhileCrashed 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // defined(OS_LINUX) 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(MAYBE_ExtensionCrashRecoveryTest, 3022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MAYBE_ShutdownWhileCrashed) { 3035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const size_t count_before = GetEnabledExtensionCount(); 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadTestExtension(); 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrashExtension(first_extension_id_); 3065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(count_before, GetEnabledExtensionCount()); 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 30990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Flaky, http://crbug.com/241245. 3102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(MAYBE_ExtensionCrashRecoveryTest, 31190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) DISABLED_TwoExtensionsCrashFirst) { 3125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const size_t count_before = GetEnabledExtensionCount(); 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadTestExtension(); 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadSecondExtension(); 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrashExtension(first_extension_id_); 3165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(count_before + 1, GetEnabledExtensionCount()); 3172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(AcceptNotification(0)); 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SCOPED_TRACE("after clicking the balloon"); 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckExtensionConsistency(first_extension_id_); 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckExtensionConsistency(second_extension_id_); 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 32490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Flaky: http://crbug.com/242196 3252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(MAYBE_ExtensionCrashRecoveryTest, 32690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) DISABLED_TwoExtensionsCrashSecond) { 3275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const size_t count_before = GetEnabledExtensionCount(); 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadTestExtension(); 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadSecondExtension(); 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrashExtension(second_extension_id_); 3315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(count_before + 1, GetEnabledExtensionCount()); 3322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(AcceptNotification(0)); 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SCOPED_TRACE("after clicking the balloon"); 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckExtensionConsistency(first_extension_id_); 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckExtensionConsistency(second_extension_id_); 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(MAYBE_ExtensionCrashRecoveryTest, 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TwoExtensionsCrashBothAtOnce) { 3415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const size_t count_before = GetEnabledExtensionCount(); 3425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const size_t crash_count_before = GetTerminatedExtensionCount(); 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadTestExtension(); 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadSecondExtension(); 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrashExtension(first_extension_id_); 3465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(count_before + 1, GetEnabledExtensionCount()); 3475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(crash_count_before + 1, GetTerminatedExtensionCount()); 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrashExtension(second_extension_id_); 3495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(count_before, GetEnabledExtensionCount()); 3505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(crash_count_before + 2, GetTerminatedExtensionCount()); 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SCOPED_TRACE("first balloon"); 3542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(AcceptNotification(0)); 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckExtensionConsistency(first_extension_id_); 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SCOPED_TRACE("second balloon"); 3602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(AcceptNotification(0)); 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckExtensionConsistency(first_extension_id_); 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckExtensionConsistency(second_extension_id_); 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(MAYBE_ExtensionCrashRecoveryTest, 3672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TwoExtensionsOneByOne) { 3685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const size_t count_before = GetEnabledExtensionCount(); 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadTestExtension(); 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrashExtension(first_extension_id_); 3715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(count_before, GetEnabledExtensionCount()); 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadSecondExtension(); 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrashExtension(second_extension_id_); 3745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(count_before, GetEnabledExtensionCount()); 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SCOPED_TRACE("first balloon"); 3782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(AcceptNotification(0)); 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckExtensionConsistency(first_extension_id_); 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SCOPED_TRACE("second balloon"); 3842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(AcceptNotification(0)); 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckExtensionConsistency(first_extension_id_); 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckExtensionConsistency(second_extension_id_); 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// http://crbug.com/84719 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_LINUX) 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAYBE_TwoExtensionsShutdownWhileCrashed \ 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISABLED_TwoExtensionsShutdownWhileCrashed 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAYBE_TwoExtensionsShutdownWhileCrashed \ 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TwoExtensionsShutdownWhileCrashed 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // defined(OS_LINUX) 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Make sure that when we don't do anything about the crashed extensions 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// and close the browser, it doesn't crash. The browser is closed implicitly 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// at the end of each browser test. 4022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(MAYBE_ExtensionCrashRecoveryTest, 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MAYBE_TwoExtensionsShutdownWhileCrashed) { 4045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const size_t count_before = GetEnabledExtensionCount(); 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadTestExtension(); 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrashExtension(first_extension_id_); 4075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(count_before, GetEnabledExtensionCount()); 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadSecondExtension(); 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrashExtension(second_extension_id_); 4105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(count_before, GetEnabledExtensionCount()); 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 41390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Flaky, http://crbug.com/241573. 4142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(MAYBE_ExtensionCrashRecoveryTest, 41590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) DISABLED_TwoExtensionsIgnoreFirst) { 4165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const size_t count_before = GetEnabledExtensionCount(); 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadTestExtension(); 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadSecondExtension(); 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrashExtension(first_extension_id_); 4205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(count_before + 1, GetEnabledExtensionCount()); 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrashExtension(second_extension_id_); 4225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(count_before, GetEnabledExtensionCount()); 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Accept notification 1 before canceling notification 0. 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Otherwise, on Linux and Windows, there is a race here, in which 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // canceled notifications do not immediately go away. 4272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(AcceptNotification(1)); 4282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(CancelNotification(0)); 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SCOPED_TRACE("balloons done"); 4315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(count_before + 1, GetEnabledExtensionCount()); 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckExtensionConsistency(second_extension_id_); 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 43590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Flaky, http://crbug.com/241164. 4362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(MAYBE_ExtensionCrashRecoveryTest, 43790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) DISABLED_TwoExtensionsReloadIndependently) { 4385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const size_t count_before = GetEnabledExtensionCount(); 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadTestExtension(); 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadSecondExtension(); 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrashExtension(first_extension_id_); 4425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(count_before + 1, GetEnabledExtensionCount()); 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrashExtension(second_extension_id_); 4445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(count_before, GetEnabledExtensionCount()); 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SCOPED_TRACE("first: reload"); 4482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebContents* current_tab = 4492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents(); 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(current_tab); 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // At the beginning we should have one balloon displayed for each extension. 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(2U, CountBalloons()); 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ReloadExtension(first_extension_id_); 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // One of the balloons should hide after the extension is reloaded. 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, CountBalloons()); 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckExtensionConsistency(first_extension_id_); 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SCOPED_TRACE("second: balloon"); 4612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(AcceptNotification(0)); 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckExtensionConsistency(first_extension_id_); 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckExtensionConsistency(second_extension_id_); 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 46790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// http://crbug.com/243648 46890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#if defined(OS_WIN) 46990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#define MAYBE_CrashAndUninstall DISABLED_CrashAndUninstall 47090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#else 47190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#define MAYBE_CrashAndUninstall CrashAndUninstall 47290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#endif 47390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(MAYBE_ExtensionCrashRecoveryTest, 47490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) MAYBE_CrashAndUninstall) { 4755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const size_t count_before = GetEnabledExtensionCount(); 4765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const size_t crash_count_before = GetTerminatedExtensionCount(); 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadTestExtension(); 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadSecondExtension(); 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrashExtension(first_extension_id_); 4805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(count_before + 1, GetEnabledExtensionCount()); 4815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(crash_count_before + 1, GetTerminatedExtensionCount()); 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, CountBalloons()); 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UninstallExtension(first_extension_id_); 48590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::MessageLoop::current()->RunUntilIdle(); 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SCOPED_TRACE("after uninstalling"); 4885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(count_before + 1, GetEnabledExtensionCount()); 4895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(crash_count_before, GetTerminatedExtensionCount()); 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(0U, CountBalloons()); 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// http://crbug.com/84719 4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_LINUX) 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAYBE_CrashAndUnloadAll DISABLED_CrashAndUnloadAll 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAYBE_CrashAndUnloadAll CrashAndUnloadAll 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // defined(OS_LINUX) 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(MAYBE_ExtensionCrashRecoveryTest, 5012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MAYBE_CrashAndUnloadAll) { 5025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const size_t count_before = GetEnabledExtensionCount(); 5035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const size_t crash_count_before = GetTerminatedExtensionCount(); 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadTestExtension(); 5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadSecondExtension(); 5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrashExtension(first_extension_id_); 5075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(count_before + 1, GetEnabledExtensionCount()); 5085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(crash_count_before + 1, GetTerminatedExtensionCount()); 5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GetExtensionService()->UnloadAllExtensionsForTest(); 5115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(crash_count_before, GetTerminatedExtensionCount()); 5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 51490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Fails a DCHECK on Aura and Linux: http://crbug.com/169622 51590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Failing on Windows: http://crbug.com/232340 516a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#if defined(USE_AURA) 5172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define MAYBE_ReloadTabsWithBackgroundPage DISABLED_ReloadTabsWithBackgroundPage 5182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#else 5192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define MAYBE_ReloadTabsWithBackgroundPage ReloadTabsWithBackgroundPage 520c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 5212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that when an extension with a background page that has a tab open 5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// crashes, the tab stays open, and reloading it reloads the extension. 5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Regression test for issue 71629. 5252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(MAYBE_ExtensionCrashRecoveryTest, 5262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MAYBE_ReloadTabsWithBackgroundPage) { 5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TabStripModel* tab_strip = browser()->tab_strip_model(); 5285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const size_t count_before = GetEnabledExtensionCount(); 5295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const size_t crash_count_before = GetTerminatedExtensionCount(); 5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadTestExtension(); 5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Open a tab extension. 5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NewTab(browser()); 53446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ui_test_utils::NavigateToURL(browser(), 53546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) GURL(std::string(extensions::kExtensionScheme) + 53646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) url::kStandardSchemeSeparator + 53746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) first_extension_id_ + "/background.html")); 5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const int tabs_before = tab_strip->count(); 5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrashExtension(first_extension_id_); 5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Tab should still be open, and extension should be crashed. 5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(tabs_before, tab_strip->count()); 5445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(count_before, GetEnabledExtensionCount()); 5455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(crash_count_before + 1, GetTerminatedExtensionCount()); 5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WindowedNotificationObserver observer( 5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NOTIFICATION_LOAD_STOP, 5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::Source<NavigationController>( 5512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &browser()->tab_strip_model()->GetActiveWebContents()-> 5522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetController())); 5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::Reload(browser(), CURRENT_TAB); 5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observer.Wait(); 5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Extension should now be loaded. 5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SCOPED_TRACE("after reloading the tab"); 5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckExtensionConsistency(first_extension_id_); 5595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(count_before + 1, GetEnabledExtensionCount()); 5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(0U, CountBalloons()); 5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 562