Index: chrome/browser/ui/views/hung_renderer_view.cc |
diff --git a/chrome/browser/ui/views/hung_renderer_view.cc b/chrome/browser/ui/views/hung_renderer_view.cc |
index a7b95af0db2fbb5aadfbe5dc41c41ef81f36750e..a663391fc85d6a55629e6772bb601fe3d548b42d 100644 |
--- a/chrome/browser/ui/views/hung_renderer_view.cc |
+++ b/chrome/browser/ui/views/hung_renderer_view.cc |
@@ -26,6 +26,7 @@ |
#include "grit/chromium_strings.h" |
#include "grit/generated_resources.h" |
#include "grit/theme_resources.h" |
+#include "ui/aura/window.h" |
#include "ui/base/l10n/l10n_util.h" |
#include "ui/base/resource/resource_bundle.h" |
#include "ui/gfx/canvas.h" |
@@ -38,37 +39,19 @@ |
#include "ui/views/window/client_view.h" |
#if defined(OS_WIN) |
+#include "chrome/browser/hang_monitor/hang_crash_dump_win.h" |
#include "chrome/browser/profiles/profile.h" |
#include "chrome/browser/shell_integration.h" |
#include "ui/base/win/shell.h" |
#include "ui/views/win/hwnd_util.h" |
#endif |
-#if defined(USE_AURA) |
-#include "ui/aura/window.h" |
-#endif |
- |
#if defined(OS_WIN) |
#include "ui/base/win/shell.h" |
#endif |
using content::WebContents; |
-// These functions allow certain chrome platforms to override the default hung |
-// renderer dialog. For e.g. Chrome on Windows 8 metro |
-bool PlatformShowCustomHungRendererDialog(WebContents* contents); |
-bool PlatformHideCustomHungRendererDialog(WebContents* contents); |
- |
-#if !defined(OS_WIN) |
-bool PlatformShowCustomHungRendererDialog(WebContents* contents) { |
- return false; |
-} |
- |
-bool PlatformHideCustomHungRendererDialog(WebContents* contents) { |
- return false; |
-} |
-#endif // OS_WIN |
- |
HungRendererDialogView* HungRendererDialogView::g_instance_ = NULL; |
/////////////////////////////////////////////////////////////////////////////// |
@@ -218,13 +201,16 @@ bool HungRendererDialogView::IsFrameActive(WebContents* contents) { |
return platform_util::IsWindowActive(frame_view); |
} |
-#if !defined(OS_WIN) |
// static |
void HungRendererDialogView::KillRendererProcess( |
base::ProcessHandle process_handle) { |
+#if defined(OS_WIN) |
+ // Try to generate a crash report for the hung process. |
+ CrashDumpAndTerminateHungChildProcess(process_handle); |
+#else |
base::KillProcess(process_handle, content::RESULT_CODE_HUNG, false); |
+#endif |
} |
-#endif // OS_WIN |
HungRendererDialogView::HungRendererDialogView() |
@@ -451,27 +437,22 @@ void HungRendererDialogView::InitClass() { |
namespace chrome { |
void ShowHungRendererDialog(WebContents* contents) { |
- if (!logging::DialogsAreSuppressed() && |
- !PlatformShowCustomHungRendererDialog(contents)) { |
- gfx::NativeView toplevel_view = |
- platform_util::GetTopLevel(contents->GetView()->GetNativeView()); |
-#if defined(USE_AURA) |
- // Don't show the dialog if there is no root window for the renderer, |
- // because it's invisible to the user (happens when the renderer is for |
- // prerendering for example). |
- if (!toplevel_view->GetRootWindow()) |
- return; |
-#endif |
- HungRendererDialogView* view = HungRendererDialogView::Create( |
- toplevel_view); |
- view->ShowForWebContents(contents); |
- } |
+ if (logging::DialogsAreSuppressed()) |
+ return; |
+ |
+ gfx::NativeView toplevel_view = |
+ platform_util::GetTopLevel(contents->GetView()->GetNativeView()); |
+ // Don't show the dialog if there is no root window for the renderer, because |
+ // it's invisible to the user (happens when the renderer is for prerendering |
+ // for example). |
+ if (!toplevel_view->GetRootWindow()) |
+ return; |
+ HungRendererDialogView* view = HungRendererDialogView::Create(toplevel_view); |
+ view->ShowForWebContents(contents); |
} |
void HideHungRendererDialog(WebContents* contents) { |
- if (!logging::DialogsAreSuppressed() && |
- !PlatformHideCustomHungRendererDialog(contents) && |
- HungRendererDialogView::GetInstance()) |
+ if (!logging::DialogsAreSuppressed() && HungRendererDialogView::GetInstance()) |
HungRendererDialogView::GetInstance()->EndForWebContents(contents); |
} |