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() { 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return browser()->profile()->GetExtensionService(); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 54f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) extensions::ProcessManager* GetProcessManager() { 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return extensions::ExtensionSystem::Get(browser()->profile())-> 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) process_manager(); 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 595c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ExtensionRegistry* GetExtensionRegistry() { 605c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return ExtensionRegistry::Get(browser()->profile()); 615c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu } 625c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) size_t GetEnabledExtensionCount() { 645c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return GetExtensionRegistry()->enabled_extensions().size(); 655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) size_t GetTerminatedExtensionCount() { 685c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return GetExtensionRegistry()->terminated_extensions().size(); 695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 715c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu void CrashExtension(const std::string& extension_id) { 725c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const Extension* extension = GetExtensionRegistry()->GetExtensionById( 735c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu extension_id, ExtensionRegistry::ENABLED); 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(extension); 75f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) extensions::ExtensionHost* extension_host = GetProcessManager()-> 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetBackgroundHostForExtension(extension_id); 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(extension_host); 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::KillProcess(extension_host->render_process_host()->GetHandle(), 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RESULT_CODE_KILLED, false); 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(WaitForExtensionCrash(extension_id)); 82f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_FALSE(GetProcessManager()-> 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetBackgroundHostForExtension(extension_id)); 8490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 8590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Wait for extension crash balloon to appear. 8690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::MessageLoop::current()->RunUntilIdle(); 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 895c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu void CheckExtensionConsistency(const std::string& extension_id) { 905c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const Extension* extension = GetExtensionRegistry()->GetExtensionById( 915c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu extension_id, ExtensionRegistry::ENABLED); 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(extension); 93f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) extensions::ExtensionHost* extension_host = GetProcessManager()-> 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetBackgroundHostForExtension(extension_id); 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(extension_host); 96f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) extensions::ProcessManager::ViewSet all_views = 97f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GetProcessManager()->GetAllViews(); 98f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) extensions::ProcessManager::ViewSet::const_iterator it = 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) all_views.find(extension_host->host_contents()->GetRenderViewHost()); 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(it == all_views.end()); 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(extension_host->IsRenderViewLive()); 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extensions::ProcessMap* process_map = 1035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) extensions::ProcessMap::Get(browser()->profile()); 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(process_map->Contains( 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extension_id, 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extension_host->render_view_host()->GetProcess()->GetID())); 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void LoadTestExtension() { 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExtensionBrowserTest::SetUpInProcessBrowserTestFixture(); 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Extension* extension = LoadExtension( 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_data_dir_.AppendASCII("common").AppendASCII("background_page")); 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(extension); 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) first_extension_id_ = extension->id(); 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckExtensionConsistency(first_extension_id_); 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void LoadSecondExtension() { 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Extension* extension = LoadExtension( 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_data_dir_.AppendASCII("install").AppendASCII("install")); 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(extension); 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) second_extension_id_ = extension->id(); 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckExtensionConsistency(second_extension_id_); 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string first_extension_id_; 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string second_extension_id_; 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 130a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)class MAYBE_ExtensionCrashRecoveryTest 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : 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(); 139a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch for (size_t i=0; i < index; ++i) 140a02191e04bc25c4935f804f2c080ae28663d096dBen 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(); 152a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch for (size_t i=0; i < index; i++) { it++; } 153a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch ASSERT_TRUE(g_browser_process->notification_ui_manager()-> 154a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch CancelById((*it)->id())); 1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual size_t CountBalloons() OVERRIDE { 158a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch return message_center::MessageCenter::Get()->NotificationCount(); 1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Flaky: http://crbug.com/242167. 16390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(MAYBE_ExtensionCrashRecoveryTest, DISABLED_Basic) { 1645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const size_t count_before = GetEnabledExtensionCount(); 1655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const size_t crash_count_before = GetTerminatedExtensionCount(); 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadTestExtension(); 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrashExtension(first_extension_id_); 1685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(count_before, GetEnabledExtensionCount()); 1695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(crash_count_before + 1, GetTerminatedExtensionCount()); 1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(AcceptNotification(0)); 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SCOPED_TRACE("after clicking the balloon"); 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckExtensionConsistency(first_extension_id_); 1745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(crash_count_before, GetTerminatedExtensionCount()); 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Flaky, http://crbug.com/241191. 17890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(MAYBE_ExtensionCrashRecoveryTest, 17990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) DISABLED_CloseAndReload) { 1805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const size_t count_before = GetEnabledExtensionCount(); 1815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const size_t crash_count_before = GetTerminatedExtensionCount(); 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadTestExtension(); 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrashExtension(first_extension_id_); 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(count_before, GetEnabledExtensionCount()); 1865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(crash_count_before + 1, GetTerminatedExtensionCount()); 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(CancelNotification(0)); 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ReloadExtension(first_extension_id_); 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SCOPED_TRACE("after reloading"); 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckExtensionConsistency(first_extension_id_); 1935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(crash_count_before, GetTerminatedExtensionCount()); 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1967d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// Test is timing out on Windows http://crbug.com/174705. 1977d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#if defined(OS_WIN) 1987d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#define MAYBE_ReloadIndependently DISABLED_ReloadIndependently 1997d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#else 2007d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#define MAYBE_ReloadIndependently ReloadIndependently 2017d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#endif // defined(OS_WIN) 2027d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(MAYBE_ExtensionCrashRecoveryTest, 2037d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) MAYBE_ReloadIndependently) { 2045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const size_t count_before = GetEnabledExtensionCount(); 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadTestExtension(); 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrashExtension(first_extension_id_); 2075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(count_before, GetEnabledExtensionCount()); 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ReloadExtension(first_extension_id_); 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SCOPED_TRACE("after reloading"); 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckExtensionConsistency(first_extension_id_); 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebContents* current_tab = 2152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents(); 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(current_tab); 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The balloon should automatically hide after the extension is successfully 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // reloaded. 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(0U, CountBalloons()); 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Test is timing out on Windows http://crbug.com/174705. 22490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#if defined(OS_WIN) 22590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#define MAYBE_ReloadIndependentlyChangeTabs DISABLED_ReloadIndependentlyChangeTabs 22690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#else 22790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#define MAYBE_ReloadIndependentlyChangeTabs ReloadIndependentlyChangeTabs 22890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#endif // defined(OS_WIN) 22990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 2302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(MAYBE_ExtensionCrashRecoveryTest, 23190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) MAYBE_ReloadIndependentlyChangeTabs) { 2325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const size_t count_before = GetEnabledExtensionCount(); 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadTestExtension(); 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrashExtension(first_extension_id_); 2355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(count_before, GetEnabledExtensionCount()); 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebContents* original_tab = 2382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents(); 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(original_tab); 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, CountBalloons()); 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Open a new tab, but the balloon will still be there. 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NewTab(browser()); 2442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebContents* new_current_tab = 2452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents(); 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(new_current_tab); 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NE(new_current_tab, original_tab); 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, CountBalloons()); 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ReloadExtension(first_extension_id_); 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SCOPED_TRACE("after reloading"); 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckExtensionConsistency(first_extension_id_); 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The balloon should automatically hide after the extension is successfully 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // reloaded. 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(0U, CountBalloons()); 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(MAYBE_ExtensionCrashRecoveryTest, 2612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISABLED_ReloadIndependentlyNavigatePage) { 2625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const size_t count_before = GetEnabledExtensionCount(); 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadTestExtension(); 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrashExtension(first_extension_id_); 2655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(count_before, GetEnabledExtensionCount()); 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebContents* current_tab = 2682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents(); 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(current_tab); 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, CountBalloons()); 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate to another page. 2732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui_test_utils::NavigateToURL( 2742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser(), ui_test_utils::GetTestUrl( 2752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath(base::FilePath::kCurrentDirectory), 2762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath(FILE_PATH_LITERAL("title1.html")))); 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, CountBalloons()); 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ReloadExtension(first_extension_id_); 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SCOPED_TRACE("after reloading"); 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckExtensionConsistency(first_extension_id_); 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The balloon should automatically hide after the extension is successfully 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // reloaded. 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(0U, CountBalloons()); 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Make sure that when we don't do anything about the crashed extension 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// and close the browser, it doesn't crash. The browser is closed implicitly 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// at the end of each browser test. 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// http://crbug.com/84719 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_LINUX) 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAYBE_ShutdownWhileCrashed DISABLED_ShutdownWhileCrashed 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAYBE_ShutdownWhileCrashed ShutdownWhileCrashed 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // defined(OS_LINUX) 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(MAYBE_ExtensionCrashRecoveryTest, 3012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MAYBE_ShutdownWhileCrashed) { 3025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const size_t count_before = GetEnabledExtensionCount(); 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadTestExtension(); 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrashExtension(first_extension_id_); 3055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(count_before, GetEnabledExtensionCount()); 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 30890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Flaky, http://crbug.com/241245. 3092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(MAYBE_ExtensionCrashRecoveryTest, 31090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) DISABLED_TwoExtensionsCrashFirst) { 3115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const size_t count_before = GetEnabledExtensionCount(); 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadTestExtension(); 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadSecondExtension(); 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrashExtension(first_extension_id_); 3155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(count_before + 1, GetEnabledExtensionCount()); 3162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(AcceptNotification(0)); 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SCOPED_TRACE("after clicking the balloon"); 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckExtensionConsistency(first_extension_id_); 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckExtensionConsistency(second_extension_id_); 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 32390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Flaky: http://crbug.com/242196 3242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(MAYBE_ExtensionCrashRecoveryTest, 32590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) DISABLED_TwoExtensionsCrashSecond) { 3265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const size_t count_before = GetEnabledExtensionCount(); 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadTestExtension(); 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadSecondExtension(); 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrashExtension(second_extension_id_); 3305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(count_before + 1, GetEnabledExtensionCount()); 3312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(AcceptNotification(0)); 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SCOPED_TRACE("after clicking the balloon"); 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckExtensionConsistency(first_extension_id_); 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckExtensionConsistency(second_extension_id_); 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(MAYBE_ExtensionCrashRecoveryTest, 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TwoExtensionsCrashBothAtOnce) { 3405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const size_t count_before = GetEnabledExtensionCount(); 3415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const size_t crash_count_before = GetTerminatedExtensionCount(); 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadTestExtension(); 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadSecondExtension(); 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrashExtension(first_extension_id_); 3455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(count_before + 1, GetEnabledExtensionCount()); 3465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(crash_count_before + 1, GetTerminatedExtensionCount()); 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrashExtension(second_extension_id_); 3485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(count_before, GetEnabledExtensionCount()); 3495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(crash_count_before + 2, GetTerminatedExtensionCount()); 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SCOPED_TRACE("first balloon"); 3532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(AcceptNotification(0)); 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckExtensionConsistency(first_extension_id_); 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SCOPED_TRACE("second balloon"); 3592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(AcceptNotification(0)); 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckExtensionConsistency(first_extension_id_); 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckExtensionConsistency(second_extension_id_); 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(MAYBE_ExtensionCrashRecoveryTest, 3662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TwoExtensionsOneByOne) { 3675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const size_t count_before = GetEnabledExtensionCount(); 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadTestExtension(); 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrashExtension(first_extension_id_); 3705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(count_before, GetEnabledExtensionCount()); 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadSecondExtension(); 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrashExtension(second_extension_id_); 3735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(count_before, GetEnabledExtensionCount()); 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SCOPED_TRACE("first balloon"); 3772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(AcceptNotification(0)); 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckExtensionConsistency(first_extension_id_); 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SCOPED_TRACE("second balloon"); 3832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(AcceptNotification(0)); 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckExtensionConsistency(first_extension_id_); 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckExtensionConsistency(second_extension_id_); 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// http://crbug.com/84719 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_LINUX) 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAYBE_TwoExtensionsShutdownWhileCrashed \ 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISABLED_TwoExtensionsShutdownWhileCrashed 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAYBE_TwoExtensionsShutdownWhileCrashed \ 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TwoExtensionsShutdownWhileCrashed 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // defined(OS_LINUX) 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Make sure that when we don't do anything about the crashed extensions 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// and close the browser, it doesn't crash. The browser is closed implicitly 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// at the end of each browser test. 4012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(MAYBE_ExtensionCrashRecoveryTest, 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MAYBE_TwoExtensionsShutdownWhileCrashed) { 4035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const size_t count_before = GetEnabledExtensionCount(); 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadTestExtension(); 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrashExtension(first_extension_id_); 4065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(count_before, GetEnabledExtensionCount()); 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadSecondExtension(); 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrashExtension(second_extension_id_); 4095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(count_before, GetEnabledExtensionCount()); 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 41290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Flaky, http://crbug.com/241573. 4132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(MAYBE_ExtensionCrashRecoveryTest, 41490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) DISABLED_TwoExtensionsIgnoreFirst) { 4155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const size_t count_before = GetEnabledExtensionCount(); 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadTestExtension(); 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadSecondExtension(); 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrashExtension(first_extension_id_); 4195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(count_before + 1, GetEnabledExtensionCount()); 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrashExtension(second_extension_id_); 4215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(count_before, GetEnabledExtensionCount()); 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Accept notification 1 before canceling notification 0. 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Otherwise, on Linux and Windows, there is a race here, in which 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // canceled notifications do not immediately go away. 4262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(AcceptNotification(1)); 4272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(CancelNotification(0)); 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SCOPED_TRACE("balloons done"); 4305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(count_before + 1, GetEnabledExtensionCount()); 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckExtensionConsistency(second_extension_id_); 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 43490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Flaky, http://crbug.com/241164. 4352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(MAYBE_ExtensionCrashRecoveryTest, 43690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) DISABLED_TwoExtensionsReloadIndependently) { 4375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const size_t count_before = GetEnabledExtensionCount(); 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadTestExtension(); 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadSecondExtension(); 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrashExtension(first_extension_id_); 4415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(count_before + 1, GetEnabledExtensionCount()); 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrashExtension(second_extension_id_); 4435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(count_before, GetEnabledExtensionCount()); 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SCOPED_TRACE("first: reload"); 4472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebContents* current_tab = 4482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents(); 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(current_tab); 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // At the beginning we should have one balloon displayed for each extension. 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(2U, CountBalloons()); 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ReloadExtension(first_extension_id_); 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // One of the balloons should hide after the extension is reloaded. 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, CountBalloons()); 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckExtensionConsistency(first_extension_id_); 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SCOPED_TRACE("second: balloon"); 4602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(AcceptNotification(0)); 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckExtensionConsistency(first_extension_id_); 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckExtensionConsistency(second_extension_id_); 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 46690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// http://crbug.com/243648 46790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#if defined(OS_WIN) 46890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#define MAYBE_CrashAndUninstall DISABLED_CrashAndUninstall 46990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#else 47090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#define MAYBE_CrashAndUninstall CrashAndUninstall 47190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#endif 47290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(MAYBE_ExtensionCrashRecoveryTest, 47390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) MAYBE_CrashAndUninstall) { 4745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const size_t count_before = GetEnabledExtensionCount(); 4755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const size_t crash_count_before = GetTerminatedExtensionCount(); 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadTestExtension(); 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadSecondExtension(); 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrashExtension(first_extension_id_); 4795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(count_before + 1, GetEnabledExtensionCount()); 4805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(crash_count_before + 1, GetTerminatedExtensionCount()); 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, CountBalloons()); 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UninstallExtension(first_extension_id_); 48490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::MessageLoop::current()->RunUntilIdle(); 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SCOPED_TRACE("after uninstalling"); 4875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(count_before + 1, GetEnabledExtensionCount()); 4885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(crash_count_before, GetTerminatedExtensionCount()); 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(0U, CountBalloons()); 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// http://crbug.com/84719 4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_LINUX) 4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAYBE_CrashAndUnloadAll DISABLED_CrashAndUnloadAll 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAYBE_CrashAndUnloadAll CrashAndUnloadAll 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // defined(OS_LINUX) 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(MAYBE_ExtensionCrashRecoveryTest, 5002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MAYBE_CrashAndUnloadAll) { 5015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const size_t count_before = GetEnabledExtensionCount(); 5025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const size_t crash_count_before = GetTerminatedExtensionCount(); 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadTestExtension(); 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadSecondExtension(); 5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrashExtension(first_extension_id_); 5065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(count_before + 1, GetEnabledExtensionCount()); 5075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(crash_count_before + 1, GetTerminatedExtensionCount()); 5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GetExtensionService()->UnloadAllExtensionsForTest(); 5105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(crash_count_before, GetTerminatedExtensionCount()); 5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 51390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Fails a DCHECK on Aura and Linux: http://crbug.com/169622 51490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Failing on Windows: http://crbug.com/232340 515a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#if defined(USE_AURA) 5162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define MAYBE_ReloadTabsWithBackgroundPage DISABLED_ReloadTabsWithBackgroundPage 5172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#else 5182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define MAYBE_ReloadTabsWithBackgroundPage ReloadTabsWithBackgroundPage 519c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 5202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that when an extension with a background page that has a tab open 5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// crashes, the tab stays open, and reloading it reloads the extension. 5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Regression test for issue 71629. 5242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(MAYBE_ExtensionCrashRecoveryTest, 5252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MAYBE_ReloadTabsWithBackgroundPage) { 5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TabStripModel* tab_strip = browser()->tab_strip_model(); 5275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const size_t count_before = GetEnabledExtensionCount(); 5285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const size_t crash_count_before = GetTerminatedExtensionCount(); 5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadTestExtension(); 5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Open a tab extension. 5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NewTab(browser()); 53346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ui_test_utils::NavigateToURL(browser(), 53446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) GURL(std::string(extensions::kExtensionScheme) + 53546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) url::kStandardSchemeSeparator + 53646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) first_extension_id_ + "/background.html")); 5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const int tabs_before = tab_strip->count(); 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrashExtension(first_extension_id_); 5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Tab should still be open, and extension should be crashed. 5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(tabs_before, tab_strip->count()); 5435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(count_before, GetEnabledExtensionCount()); 5445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(crash_count_before + 1, GetTerminatedExtensionCount()); 5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WindowedNotificationObserver observer( 5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NOTIFICATION_LOAD_STOP, 5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::Source<NavigationController>( 5502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &browser()->tab_strip_model()->GetActiveWebContents()-> 5512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetController())); 5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::Reload(browser(), CURRENT_TAB); 5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observer.Wait(); 5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Extension should now be loaded. 5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SCOPED_TRACE("after reloading the tab"); 5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckExtensionConsistency(first_extension_id_); 5585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(count_before + 1, GetEnabledExtensionCount()); 5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(0U, CountBalloons()); 5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 561