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_host.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/extension_process_manager.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/extension_service.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/extension_system.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/notifications/balloon.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/notifications/balloon_collection.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/notifications/balloon_host.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/notifications/balloon_notification_ui_manager.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/notifications/notification.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/notifications/notification_delegate.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser_commands.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/tabs/tab_strip_model.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/ui_test_utils.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/navigation_controller.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/render_process_host.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/render_view_host.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents.h" 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/common/result_codes.h" 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/message_center/message_center.h" 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/message_center/message_center_switches.h" 29a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)#include "ui/message_center/message_center_util.h" 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/message_center/notification_list.h" 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::NavigationController; 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::WebContents; 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using extensions::Extension; 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) 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExtensionProcessManager* GetExtensionProcessManager() { 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return extensions::ExtensionSystem::Get(browser()->profile())-> 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) process_manager(); 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void CrashExtension(std::string extension_id) { 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Extension* extension = 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetExtensionService()->GetExtensionById(extension_id, false); 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(extension); 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extensions::ExtensionHost* extension_host = GetExtensionProcessManager()-> 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetBackgroundHostForExtension(extension_id); 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(extension_host); 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::KillProcess(extension_host->render_process_host()->GetHandle(), 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RESULT_CODE_KILLED, false); 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(WaitForExtensionCrash(extension_id)); 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(GetExtensionProcessManager()-> 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetBackgroundHostForExtension(extension_id)); 7290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 7390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Wait for extension crash balloon to appear. 7490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::MessageLoop::current()->RunUntilIdle(); 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void CheckExtensionConsistency(std::string extension_id) { 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Extension* extension = 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetExtensionService()->extensions()->GetByID(extension_id); 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(extension); 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extensions::ExtensionHost* extension_host = GetExtensionProcessManager()-> 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetBackgroundHostForExtension(extension_id); 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(extension_host); 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExtensionProcessManager::ViewSet all_views = 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetExtensionProcessManager()->GetAllViews(); 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExtensionProcessManager::ViewSet::const_iterator it = 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) all_views.find(extension_host->host_contents()->GetRenderViewHost()); 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(it == all_views.end()); 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(extension_host->IsRenderViewLive()); 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extensions::ProcessMap* process_map = 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser()->profile()->GetExtensionService()->process_map(); 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(process_map->Contains( 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extension_id, 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extension_host->render_view_host()->GetProcess()->GetID())); 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void LoadTestExtension() { 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExtensionBrowserTest::SetUpInProcessBrowserTestFixture(); 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Extension* extension = LoadExtension( 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_data_dir_.AppendASCII("common").AppendASCII("background_page")); 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(extension); 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) first_extension_id_ = extension->id(); 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckExtensionConsistency(first_extension_id_); 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void LoadSecondExtension() { 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Extension* extension = LoadExtension( 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_data_dir_.AppendASCII("install").AppendASCII("install")); 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(extension); 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) second_extension_id_ = extension->id(); 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckExtensionConsistency(second_extension_id_); 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string first_extension_id_; 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string second_extension_id_; 1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 118a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)class MAYBE_ExtensionCrashRecoveryTest 1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : public ExtensionCrashRecoveryTestBase { 1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected: 1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void AcceptNotification(size_t index) OVERRIDE { 122a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) if (message_center::IsRichNotificationEnabled()) { 123a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) message_center::MessageCenter* message_center = 124a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) message_center::MessageCenter::Get(); 125a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) ASSERT_GT(message_center->NotificationCount(), index); 126a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) message_center::NotificationList::Notifications::reverse_iterator it = 127a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) message_center->GetNotifications().rbegin(); 128a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) for (size_t i=0; i < index; ++i) 129a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) it++; 130a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) std::string id = (*it)->id(); 131a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) message_center->ClickOnNotification(id); 132a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) } else { 133a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) Balloon* balloon = GetNotificationDelegate(index); 134a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) ASSERT_TRUE(balloon); 135a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) balloon->OnClick(); 136a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) } 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WaitForExtensionLoad(); 1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void CancelNotification(size_t index) OVERRIDE { 141a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) if (message_center::IsRichNotificationEnabled()) { 142a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) message_center::MessageCenter* message_center = 143a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) message_center::MessageCenter::Get(); 144a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) ASSERT_GT(message_center->NotificationCount(), index); 145a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) message_center::NotificationList::Notifications::reverse_iterator it = 146a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) message_center->GetNotifications().rbegin(); 147a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) for (size_t i=0; i < index; i++) { it++; } 148a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) ASSERT_TRUE(g_browser_process->notification_ui_manager()-> 149a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) CancelById((*it)->id())); 150a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) } else { 151a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) Balloon* balloon = GetNotificationDelegate(index); 152a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) ASSERT_TRUE(balloon); 153a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) std::string id = balloon->notification().notification_id(); 154a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) ASSERT_TRUE(g_browser_process->notification_ui_manager()->CancelById(id)); 155a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) } 1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual size_t CountBalloons() OVERRIDE { 159a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) if (message_center::IsRichNotificationEnabled()) 160a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) return message_center::MessageCenter::Get()->NotificationCount(); 1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 162a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) return BalloonNotificationUIManager::GetInstanceForTesting()-> 163a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) balloon_collection()->GetActiveBalloons().size(); 1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 166a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)private: 167a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) Balloon* GetNotificationDelegate(size_t index) { 168a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) BalloonNotificationUIManager* manager = 169a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) BalloonNotificationUIManager::GetInstanceForTesting(); 170a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) BalloonCollection::Balloons balloons = 171a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) manager->balloon_collection()->GetActiveBalloons(); 172a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) return index < balloons.size() ? balloons.at(index) : NULL; 173a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) } 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Flaky: http://crbug.com/242167. 17790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(MAYBE_ExtensionCrashRecoveryTest, DISABLED_Basic) { 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const size_t size_before = GetExtensionService()->extensions()->size(); 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const size_t crash_size_before = 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetExtensionService()->terminated_extensions()->size(); 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadTestExtension(); 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrashExtension(first_extension_id_); 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(size_before, GetExtensionService()->extensions()->size()); 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(crash_size_before + 1, 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetExtensionService()->terminated_extensions()->size()); 1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(AcceptNotification(0)); 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SCOPED_TRACE("after clicking the balloon"); 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckExtensionConsistency(first_extension_id_); 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(crash_size_before, 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetExtensionService()->terminated_extensions()->size()); 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Flaky, http://crbug.com/241191. 19590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(MAYBE_ExtensionCrashRecoveryTest, 19690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) DISABLED_CloseAndReload) { 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const size_t size_before = GetExtensionService()->extensions()->size(); 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const size_t crash_size_before = 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetExtensionService()->terminated_extensions()->size(); 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadTestExtension(); 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrashExtension(first_extension_id_); 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(size_before, GetExtensionService()->extensions()->size()); 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(crash_size_before + 1, 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetExtensionService()->terminated_extensions()->size()); 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(CancelNotification(0)); 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ReloadExtension(first_extension_id_); 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SCOPED_TRACE("after reloading"); 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckExtensionConsistency(first_extension_id_); 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(crash_size_before, 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetExtensionService()->terminated_extensions()->size()); 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2167d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// Test is timing out on Windows http://crbug.com/174705. 2177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#if defined(OS_WIN) 2187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#define MAYBE_ReloadIndependently DISABLED_ReloadIndependently 2197d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#else 2207d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#define MAYBE_ReloadIndependently ReloadIndependently 2217d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#endif // defined(OS_WIN) 2227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(MAYBE_ExtensionCrashRecoveryTest, 2237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) MAYBE_ReloadIndependently) { 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const size_t size_before = GetExtensionService()->extensions()->size(); 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadTestExtension(); 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrashExtension(first_extension_id_); 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(size_before, GetExtensionService()->extensions()->size()); 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ReloadExtension(first_extension_id_); 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SCOPED_TRACE("after reloading"); 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckExtensionConsistency(first_extension_id_); 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebContents* current_tab = 2352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents(); 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(current_tab); 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The balloon should automatically hide after the extension is successfully 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // reloaded. 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(0U, CountBalloons()); 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 24390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Test is timing out on Windows http://crbug.com/174705. 24490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#if defined(OS_WIN) 24590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#define MAYBE_ReloadIndependentlyChangeTabs DISABLED_ReloadIndependentlyChangeTabs 24690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#else 24790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#define MAYBE_ReloadIndependentlyChangeTabs ReloadIndependentlyChangeTabs 24890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#endif // defined(OS_WIN) 24990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 2502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(MAYBE_ExtensionCrashRecoveryTest, 25190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) MAYBE_ReloadIndependentlyChangeTabs) { 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const size_t size_before = GetExtensionService()->extensions()->size(); 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadTestExtension(); 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrashExtension(first_extension_id_); 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(size_before, GetExtensionService()->extensions()->size()); 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebContents* original_tab = 2582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents(); 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(original_tab); 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, CountBalloons()); 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Open a new tab, but the balloon will still be there. 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NewTab(browser()); 2642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebContents* new_current_tab = 2652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents(); 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(new_current_tab); 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NE(new_current_tab, original_tab); 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, CountBalloons()); 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ReloadExtension(first_extension_id_); 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SCOPED_TRACE("after reloading"); 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckExtensionConsistency(first_extension_id_); 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The balloon should automatically hide after the extension is successfully 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // reloaded. 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(0U, CountBalloons()); 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(MAYBE_ExtensionCrashRecoveryTest, 2812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISABLED_ReloadIndependentlyNavigatePage) { 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const size_t size_before = GetExtensionService()->extensions()->size(); 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadTestExtension(); 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrashExtension(first_extension_id_); 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(size_before, GetExtensionService()->extensions()->size()); 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebContents* current_tab = 2882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents(); 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(current_tab); 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, CountBalloons()); 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate to another page. 2932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui_test_utils::NavigateToURL( 2942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser(), ui_test_utils::GetTestUrl( 2952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath(base::FilePath::kCurrentDirectory), 2962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath(FILE_PATH_LITERAL("title1.html")))); 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, CountBalloons()); 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ReloadExtension(first_extension_id_); 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SCOPED_TRACE("after reloading"); 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckExtensionConsistency(first_extension_id_); 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The balloon should automatically hide after the extension is successfully 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // reloaded. 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(0U, CountBalloons()); 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Make sure that when we don't do anything about the crashed extension 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// and close the browser, it doesn't crash. The browser is closed implicitly 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// at the end of each browser test. 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// http://crbug.com/84719 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_LINUX) 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAYBE_ShutdownWhileCrashed DISABLED_ShutdownWhileCrashed 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAYBE_ShutdownWhileCrashed ShutdownWhileCrashed 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // defined(OS_LINUX) 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(MAYBE_ExtensionCrashRecoveryTest, 3212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MAYBE_ShutdownWhileCrashed) { 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const size_t size_before = GetExtensionService()->extensions()->size(); 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadTestExtension(); 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrashExtension(first_extension_id_); 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(size_before, GetExtensionService()->extensions()->size()); 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 32890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Flaky, http://crbug.com/241245. 3292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(MAYBE_ExtensionCrashRecoveryTest, 33090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) DISABLED_TwoExtensionsCrashFirst) { 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const size_t size_before = GetExtensionService()->extensions()->size(); 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadTestExtension(); 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadSecondExtension(); 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrashExtension(first_extension_id_); 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(size_before + 1, GetExtensionService()->extensions()->size()); 3362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(AcceptNotification(0)); 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SCOPED_TRACE("after clicking the balloon"); 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckExtensionConsistency(first_extension_id_); 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckExtensionConsistency(second_extension_id_); 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 34390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Flaky: http://crbug.com/242196 3442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(MAYBE_ExtensionCrashRecoveryTest, 34590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) DISABLED_TwoExtensionsCrashSecond) { 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const size_t size_before = GetExtensionService()->extensions()->size(); 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadTestExtension(); 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadSecondExtension(); 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrashExtension(second_extension_id_); 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(size_before + 1, GetExtensionService()->extensions()->size()); 3512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(AcceptNotification(0)); 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SCOPED_TRACE("after clicking the balloon"); 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckExtensionConsistency(first_extension_id_); 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckExtensionConsistency(second_extension_id_); 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(MAYBE_ExtensionCrashRecoveryTest, 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TwoExtensionsCrashBothAtOnce) { 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const size_t size_before = GetExtensionService()->extensions()->size(); 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const size_t crash_size_before = 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetExtensionService()->terminated_extensions()->size(); 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadTestExtension(); 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadSecondExtension(); 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrashExtension(first_extension_id_); 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(size_before + 1, GetExtensionService()->extensions()->size()); 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(crash_size_before + 1, 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetExtensionService()->terminated_extensions()->size()); 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrashExtension(second_extension_id_); 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(size_before, GetExtensionService()->extensions()->size()); 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(crash_size_before + 2, 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetExtensionService()->terminated_extensions()->size()); 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SCOPED_TRACE("first balloon"); 3762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(AcceptNotification(0)); 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckExtensionConsistency(first_extension_id_); 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SCOPED_TRACE("second balloon"); 3822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(AcceptNotification(0)); 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckExtensionConsistency(first_extension_id_); 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckExtensionConsistency(second_extension_id_); 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(MAYBE_ExtensionCrashRecoveryTest, 3892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TwoExtensionsOneByOne) { 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const size_t size_before = GetExtensionService()->extensions()->size(); 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadTestExtension(); 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrashExtension(first_extension_id_); 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(size_before, GetExtensionService()->extensions()->size()); 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadSecondExtension(); 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrashExtension(second_extension_id_); 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(size_before, GetExtensionService()->extensions()->size()); 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SCOPED_TRACE("first balloon"); 4002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(AcceptNotification(0)); 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckExtensionConsistency(first_extension_id_); 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SCOPED_TRACE("second balloon"); 4062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(AcceptNotification(0)); 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckExtensionConsistency(first_extension_id_); 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckExtensionConsistency(second_extension_id_); 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// http://crbug.com/84719 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_LINUX) 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAYBE_TwoExtensionsShutdownWhileCrashed \ 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISABLED_TwoExtensionsShutdownWhileCrashed 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAYBE_TwoExtensionsShutdownWhileCrashed \ 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TwoExtensionsShutdownWhileCrashed 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // defined(OS_LINUX) 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Make sure that when we don't do anything about the crashed extensions 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// and close the browser, it doesn't crash. The browser is closed implicitly 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// at the end of each browser test. 4242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(MAYBE_ExtensionCrashRecoveryTest, 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MAYBE_TwoExtensionsShutdownWhileCrashed) { 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const size_t size_before = GetExtensionService()->extensions()->size(); 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadTestExtension(); 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrashExtension(first_extension_id_); 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(size_before, GetExtensionService()->extensions()->size()); 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadSecondExtension(); 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrashExtension(second_extension_id_); 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(size_before, GetExtensionService()->extensions()->size()); 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 43590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Flaky, http://crbug.com/241573. 4362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(MAYBE_ExtensionCrashRecoveryTest, 43790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) DISABLED_TwoExtensionsIgnoreFirst) { 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const size_t size_before = GetExtensionService()->extensions()->size(); 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadTestExtension(); 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadSecondExtension(); 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrashExtension(first_extension_id_); 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(size_before + 1, GetExtensionService()->extensions()->size()); 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrashExtension(second_extension_id_); 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(size_before, GetExtensionService()->extensions()->size()); 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Accept notification 1 before canceling notification 0. 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Otherwise, on Linux and Windows, there is a race here, in which 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // canceled notifications do not immediately go away. 4492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(AcceptNotification(1)); 4502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(CancelNotification(0)); 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SCOPED_TRACE("balloons done"); 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(size_before + 1, GetExtensionService()->extensions()->size()); 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckExtensionConsistency(second_extension_id_); 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 45790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Flaky, http://crbug.com/241164. 4582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(MAYBE_ExtensionCrashRecoveryTest, 45990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) DISABLED_TwoExtensionsReloadIndependently) { 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const size_t size_before = GetExtensionService()->extensions()->size(); 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadTestExtension(); 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadSecondExtension(); 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrashExtension(first_extension_id_); 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(size_before + 1, GetExtensionService()->extensions()->size()); 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrashExtension(second_extension_id_); 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(size_before, GetExtensionService()->extensions()->size()); 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SCOPED_TRACE("first: reload"); 4702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebContents* current_tab = 4712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents(); 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(current_tab); 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // At the beginning we should have one balloon displayed for each extension. 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(2U, CountBalloons()); 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ReloadExtension(first_extension_id_); 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // One of the balloons should hide after the extension is reloaded. 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, CountBalloons()); 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckExtensionConsistency(first_extension_id_); 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SCOPED_TRACE("second: balloon"); 4832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(AcceptNotification(0)); 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckExtensionConsistency(first_extension_id_); 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckExtensionConsistency(second_extension_id_); 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 48990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// http://crbug.com/243648 49090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#if defined(OS_WIN) 49190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#define MAYBE_CrashAndUninstall DISABLED_CrashAndUninstall 49290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#else 49390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#define MAYBE_CrashAndUninstall CrashAndUninstall 49490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#endif 49590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(MAYBE_ExtensionCrashRecoveryTest, 49690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) MAYBE_CrashAndUninstall) { 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const size_t size_before = GetExtensionService()->extensions()->size(); 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const size_t crash_size_before = 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetExtensionService()->terminated_extensions()->size(); 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadTestExtension(); 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadSecondExtension(); 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrashExtension(first_extension_id_); 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(size_before + 1, GetExtensionService()->extensions()->size()); 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(crash_size_before + 1, 5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetExtensionService()->terminated_extensions()->size()); 5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, CountBalloons()); 5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UninstallExtension(first_extension_id_); 50990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::MessageLoop::current()->RunUntilIdle(); 5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SCOPED_TRACE("after uninstalling"); 5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(size_before + 1, GetExtensionService()->extensions()->size()); 5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(crash_size_before, 5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetExtensionService()->terminated_extensions()->size()); 5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(0U, CountBalloons()); 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// http://crbug.com/84719 5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_LINUX) 5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAYBE_CrashAndUnloadAll DISABLED_CrashAndUnloadAll 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAYBE_CrashAndUnloadAll CrashAndUnloadAll 5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // defined(OS_LINUX) 5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(MAYBE_ExtensionCrashRecoveryTest, 5262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MAYBE_CrashAndUnloadAll) { 5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const size_t size_before = GetExtensionService()->extensions()->size(); 5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const size_t crash_size_before = 5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetExtensionService()->terminated_extensions()->size(); 5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadTestExtension(); 5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadSecondExtension(); 5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrashExtension(first_extension_id_); 5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(size_before + 1, GetExtensionService()->extensions()->size()); 5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(crash_size_before + 1, 5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetExtensionService()->terminated_extensions()->size()); 5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetExtensionService()->UnloadAllExtensions(); 5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(crash_size_before, 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetExtensionService()->terminated_extensions()->size()); 5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 54290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Fails a DCHECK on Aura and Linux: http://crbug.com/169622 54390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Failing on Windows: http://crbug.com/232340 54490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#if defined(USE_AURA) || defined(OS_WIN) || defined(OS_LINUX) 5452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define MAYBE_ReloadTabsWithBackgroundPage DISABLED_ReloadTabsWithBackgroundPage 5462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#else 5472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define MAYBE_ReloadTabsWithBackgroundPage ReloadTabsWithBackgroundPage 548c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 5492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that when an extension with a background page that has a tab open 5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// crashes, the tab stays open, and reloading it reloads the extension. 5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Regression test for issue 71629. 5532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(MAYBE_ExtensionCrashRecoveryTest, 5542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MAYBE_ReloadTabsWithBackgroundPage) { 5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TabStripModel* tab_strip = browser()->tab_strip_model(); 5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const size_t size_before = GetExtensionService()->extensions()->size(); 5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const size_t crash_size_before = 5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetExtensionService()->terminated_extensions()->size(); 5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadTestExtension(); 5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Open a tab extension. 5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NewTab(browser()); 5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURL( 5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser(), 5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL("chrome-extension://" + first_extension_id_ + "/background.html")); 5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const int tabs_before = tab_strip->count(); 5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrashExtension(first_extension_id_); 5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Tab should still be open, and extension should be crashed. 5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(tabs_before, tab_strip->count()); 5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(size_before, GetExtensionService()->extensions()->size()); 5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(crash_size_before + 1, 5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetExtensionService()->terminated_extensions()->size()); 5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WindowedNotificationObserver observer( 5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NOTIFICATION_LOAD_STOP, 5795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::Source<NavigationController>( 5802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &browser()->tab_strip_model()->GetActiveWebContents()-> 5812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetController())); 5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::Reload(browser(), CURRENT_TAB); 5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observer.Wait(); 5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Extension should now be loaded. 5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SCOPED_TRACE("after reloading the tab"); 5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckExtensionConsistency(first_extension_id_); 5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(size_before + 1, GetExtensionService()->extensions()->size()); 5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(0U, CountBalloons()); 5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 591