Index: chrome/browser/logging_chrome_browsertest.cc |
=================================================================== |
--- chrome/browser/logging_chrome_browsertest.cc (revision 131993) |
+++ chrome/browser/logging_chrome_browsertest.cc (working copy) |
@@ -2,25 +2,23 @@ |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
-#include "build/build_config.h" |
- |
-#if defined(OS_WIN) |
-#include <windows.h> |
-#endif |
- |
-#include <string> |
- |
-#include "base/basictypes.h" |
#include "base/command_line.h" |
#include "base/environment.h" |
#include "chrome/common/chrome_switches.h" |
+#include "chrome/common/url_constants.h" |
#include "chrome/common/env_vars.h" |
#include "chrome/common/logging_chrome.h" |
-#include "chrome/test/automation/automation_proxy.h" |
-#include "chrome/test/automation/browser_proxy.h" |
-#include "chrome/test/ui/ui_test.h" |
+#include "chrome/test/base/in_process_browser_test.h" |
+#include "chrome/test/base/ui_test_utils.h" |
+#include "content/public/browser/notification_service.h" |
+#include "content/public/browser/notification_types.h" |
+#include "content/public/browser/render_process_host.h" |
+#include "content/public/browser/web_contents.h" |
+#include "googleurl/src/gurl.h" |
#include "testing/gtest/include/gtest/gtest.h" |
+using content::RenderProcessHost; |
+ |
class ChromeLoggingTest : public testing::Test { |
public: |
// Stores the current value of the log file name environment |
@@ -66,109 +64,36 @@ |
RestoreEnvironmentVariable(); |
} |
-#if (defined(OS_LINUX) || defined(OS_ANDROID)) \ |
- && (!defined(NDEBUG) || !defined(USE_LINUX_BREAKPAD)) |
-// On Linux in Debug mode, Chrome generates a SIGTRAP. |
-// we do not catch SIGTRAPs, thus no crash dump. |
-// This also does not work if Breakpad is disabled. |
-#define EXPECTED_ASSERT_CRASHES 0 |
-#else |
-#define EXPECTED_ASSERT_CRASHES 1 |
-#endif |
- |
-// Virtual keyboard build will start an extra renderer process (the extension |
-// process) for the virtual keyboard. |
-#if defined(USE_VIRTUAL_KEYBOARD) |
-#define EXPECTED_ASSERT_ERRORS 2 |
-#else |
-#define EXPECTED_ASSERT_ERRORS 1 |
-#endif |
- |
-#if !defined(NDEBUG) // We don't have assertions in release builds. |
-// Tests whether we correctly fail on renderer assertions during tests. |
-class AssertionTest : public UITest { |
+// Tests whether we correctly fail on browser crashes. |
+class RendererCrashTest : public InProcessBrowserTest, |
+ public content::NotificationObserver{ |
protected: |
- AssertionTest() { |
-#if defined(OS_WIN) |
- // TODO(phajdan.jr): Make crash notifications on launch work on Win. |
- wait_for_initial_loads_ = false; |
-#endif |
- launch_arguments_.AppendSwitch(switches::kRendererAssertTest); |
- } |
-}; |
+ RendererCrashTest() : saw_crash_(false) {} |
-// Launch the app in assertion test mode, then close the app. |
-#if defined(OS_WIN) |
-// http://crbug.com/26715 |
-#define Assertion DISABLED_Assertion |
-#elif defined(OS_MACOSX) |
-// Crash service doesn't exist for the Mac yet: http://crbug.com/45243 |
-#define Assertion DISABLED_Assertion |
-#endif |
-TEST_F(AssertionTest, Assertion) { |
- expected_errors_ = EXPECTED_ASSERT_ERRORS; |
- expected_crashes_ = EXPECTED_ASSERT_CRASHES; |
-} |
-#endif // !defined(NDEBUG) |
- |
-#if !defined(GOOGLE_CHROME_BUILD) |
-// Only works on Linux in Release mode with CHROME_HEADLESS=1 |
-class CheckFalseTest : public UITest { |
- protected: |
- CheckFalseTest() { |
-#if defined(OS_WIN) |
- // TODO(phajdan.jr): Make crash notifications on launch work on Win. |
- wait_for_initial_loads_ = false; |
-#endif |
- launch_arguments_.AppendSwitch(switches::kRendererCheckFalseTest); |
+ virtual void Observe(int type, |
+ const content::NotificationSource& source, |
+ const content::NotificationDetails& details) { |
+ content::RenderProcessHost::RendererClosedDetails* process_details = |
+ content::Details< |
+ content::RenderProcessHost::RendererClosedDetails>( |
+ details).ptr(); |
+ base::TerminationStatus status = process_details->status; |
+ if (status == base::TERMINATION_STATUS_PROCESS_CRASHED || |
+ status == base::TERMINATION_STATUS_ABNORMAL_TERMINATION) { |
+ saw_crash_ = true; |
+ } |
+ MessageLoopForUI::current()->Quit(); |
} |
-}; |
-#if defined(OS_WIN) |
-// http://crbug.com/38497 |
-#define CheckFails DISABLED_CheckFails |
-#elif defined(OS_MACOSX) |
-// Crash service doesn't exist for the Mac yet: http://crbug.com/45243 |
-#define CheckFails DISABLED_CheckFails |
-#endif |
-// Launch the app in assertion test mode, then close the app. |
-TEST_F(CheckFalseTest, CheckFails) { |
- expected_errors_ = EXPECTED_ASSERT_ERRORS; |
- expected_crashes_ = EXPECTED_ASSERT_CRASHES; |
-} |
-#endif // !defined(GOOGLE_CHROME_BUILD) |
- |
-// Tests whether we correctly fail on browser crashes during UI Tests. |
-class RendererCrashTest : public UITest { |
- protected: |
- RendererCrashTest() { |
-#if defined(OS_WIN) |
- // TODO(phajdan.jr): Make crash notifications on launch work on Win. |
- wait_for_initial_loads_ = false; |
-#endif |
- launch_arguments_.AppendSwitch(switches::kRendererCrashTest); |
- } |
+ bool saw_crash_; |
+ content::NotificationRegistrar registrar_; |
}; |
-#if (defined(OS_LINUX) || defined(OS_ANDROID)) && !defined(USE_LINUX_BREAKPAD) |
-// On Linux, do not expect a crash dump if Breakpad is disabled. |
-#define EXPECTED_CRASH_CRASHES 0 |
-#else |
-#define EXPECTED_CRASH_CRASHES 1 |
-#endif |
- |
-#if defined(OS_MACOSX) |
-// Crash service doesn't exist for the Mac yet: http://crbug.com/45243 |
-#define MAYBE_Crash DISABLED_Crash |
-#elif defined(OS_CHROMEOS) |
-#define MAYBE_Crash DISABLED_Crash |
-#else |
-#define MAYBE_Crash Crash |
-#endif |
-// Launch the app in renderer crash test mode, then close the app. |
-TEST_F(RendererCrashTest, MAYBE_Crash) { |
- scoped_refptr<BrowserProxy> browser(automation()->GetBrowserWindow(0)); |
- ASSERT_TRUE(browser.get()); |
- ASSERT_TRUE(browser->WaitForTabCountToBecome(1)); |
- expected_crashes_ = EXPECTED_CRASH_CRASHES; |
+IN_PROC_BROWSER_TEST_F(RendererCrashTest, Crash) { |
+ registrar_.Add(this, content::NOTIFICATION_RENDERER_PROCESS_CLOSED, |
+ content::NotificationService::AllSources()); |
+ ui_test_utils::NavigateToURLWithDisposition( |
+ browser(), GURL(chrome::kChromeUICrashURL), CURRENT_TAB, 0); |
+ ui_test_utils::RunMessageLoop(); |
+ ASSERT_TRUE(saw_crash_); |
} |