| Index: chrome/browser/hang_monitor/hung_plugin_action.cc
|
| diff --git a/chrome/browser/hang_monitor/hung_plugin_action.cc b/chrome/browser/hang_monitor/hung_plugin_action.cc
|
| deleted file mode 100644
|
| index 75cf98ff15d9101f07013a34b591dd58b0015fb9..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/hang_monitor/hung_plugin_action.cc
|
| +++ /dev/null
|
| @@ -1,131 +0,0 @@
|
| -// Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include <windows.h>
|
| -
|
| -#include "chrome/browser/hang_monitor/hung_plugin_action.h"
|
| -
|
| -#include "base/metrics/histogram.h"
|
| -#include "base/version.h"
|
| -#include "base/win/win_util.h"
|
| -#include "chrome/browser/ui/simple_message_box.h"
|
| -#include "chrome/common/logging_chrome.h"
|
| -#include "chrome/grit/generated_resources.h"
|
| -#include "content/public/browser/plugin_service.h"
|
| -#include "content/public/common/webplugininfo.h"
|
| -#include "ui/base/l10n/l10n_util.h"
|
| -#include "ui/gfx/win/hwnd_util.h"
|
| -
|
| -HungPluginAction::HungPluginAction() : current_hung_plugin_window_(NULL) {
|
| -}
|
| -
|
| -HungPluginAction::~HungPluginAction() {
|
| -}
|
| -
|
| -bool HungPluginAction::OnHungWindowDetected(HWND hung_window,
|
| - HWND top_level_window,
|
| - ActionOnHungWindow* action) {
|
| - if (NULL == action) {
|
| - return false;
|
| - }
|
| - if (!IsWindow(hung_window)) {
|
| - return false;
|
| - }
|
| -
|
| - bool continue_hang_detection = true;
|
| -
|
| - DWORD hung_window_process_id = 0;
|
| - DWORD top_level_window_process_id = 0;
|
| - GetWindowThreadProcessId(hung_window, &hung_window_process_id);
|
| - GetWindowThreadProcessId(top_level_window, &top_level_window_process_id);
|
| -
|
| - *action = HungWindowNotification::HUNG_WINDOW_IGNORE;
|
| - if (top_level_window_process_id != hung_window_process_id) {
|
| - base::string16 plugin_name =
|
| - l10n_util::GetStringUTF16(IDS_UNKNOWN_PLUGIN_NAME);
|
| -
|
| - if (logging::DialogsAreSuppressed()) {
|
| - NOTREACHED() << "Terminated a hung plugin process.";
|
| - *action = HungWindowNotification::HUNG_WINDOW_TERMINATE_PROCESS;
|
| - } else {
|
| - const base::string16 title = l10n_util::GetStringUTF16(
|
| - IDS_BROWSER_HANGMONITOR_TITLE);
|
| - const base::string16 message = l10n_util::GetStringFUTF16(
|
| - IDS_BROWSER_HANGMONITOR, plugin_name);
|
| - // Before displaying the message box, invoke SendMessageCallback on the
|
| - // hung window. If the callback ever hits, the window is not hung anymore
|
| - // and we can dismiss the message box.
|
| - SendMessageCallback(hung_window,
|
| - WM_NULL,
|
| - 0,
|
| - 0,
|
| - HungWindowResponseCallback,
|
| - reinterpret_cast<ULONG_PTR>(this));
|
| - current_hung_plugin_window_ = hung_window;
|
| - if (chrome::ShowQuestionMessageBox(NULL, title, message) ==
|
| - chrome::MESSAGE_BOX_RESULT_YES) {
|
| - *action = HungWindowNotification::HUNG_WINDOW_TERMINATE_PROCESS;
|
| - } else {
|
| - // If the user choses to ignore the hung window warning, the
|
| - // message timeout for this window should be doubled. We only
|
| - // double the timeout property on the window if the property
|
| - // exists. The property is deleted if the window becomes
|
| - // responsive.
|
| - continue_hang_detection = false;
|
| - int child_window_message_timeout = base::win::HandleToUint32(
|
| - GetProp(hung_window, HungWindowDetector::kHungChildWindowTimeout));
|
| - if (child_window_message_timeout) {
|
| - child_window_message_timeout *= 2;
|
| -#pragma warning(disable:4312)
|
| - SetProp(hung_window, HungWindowDetector::kHungChildWindowTimeout,
|
| - reinterpret_cast<HANDLE>(child_window_message_timeout));
|
| -#pragma warning(default:4312)
|
| - }
|
| - }
|
| - current_hung_plugin_window_ = NULL;
|
| - }
|
| - }
|
| - if (HungWindowNotification::HUNG_WINDOW_TERMINATE_PROCESS == *action) {
|
| - // Enable the top-level window just in case the plugin had been
|
| - // displaying a modal box that had disabled the top-level window
|
| - EnableWindow(top_level_window, TRUE);
|
| - }
|
| - return continue_hang_detection;
|
| -}
|
| -
|
| -void HungPluginAction::OnWindowResponsive(HWND window) {
|
| - if (window == current_hung_plugin_window_) {
|
| - // The message timeout for this window should fallback to the default
|
| - // timeout as this window is now responsive.
|
| - RemoveProp(window, HungWindowDetector::kHungChildWindowTimeout);
|
| - // The monitored plugin recovered. Let's dismiss the message box.
|
| - EnumThreadWindows(GetCurrentThreadId(),
|
| - reinterpret_cast<WNDENUMPROC>(DismissMessageBox),
|
| - NULL);
|
| - }
|
| -}
|
| -
|
| -// static
|
| -BOOL CALLBACK HungPluginAction::DismissMessageBox(HWND window, LPARAM ignore) {
|
| - base::string16 class_name = gfx::GetClassName(window);
|
| - // #32770 is the dialog window class which is the window class of
|
| - // the message box being displayed.
|
| - if (class_name == L"#32770") {
|
| - EndDialog(window, IDNO);
|
| - return FALSE;
|
| - }
|
| - return TRUE;
|
| -}
|
| -
|
| -// static
|
| -void CALLBACK HungPluginAction::HungWindowResponseCallback(HWND target_window,
|
| - UINT message,
|
| - ULONG_PTR data,
|
| - LRESULT result) {
|
| - HungPluginAction* instance = reinterpret_cast<HungPluginAction*>(data);
|
| - DCHECK(NULL != instance);
|
| - if (NULL != instance) {
|
| - instance->OnWindowResponsive(target_window);
|
| - }
|
| -}
|
|
|