Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1910)

Unified Diff: chrome/browser/hang_monitor/hung_plugin_action.cc

Issue 1815623004: Remove Hung plugin detector (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@remove_windowed_plugins
Patch Set: fix compile Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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);
- }
-}
« no previous file with comments | « chrome/browser/hang_monitor/hung_plugin_action.h ('k') | chrome/browser/hang_monitor/hung_window_detector.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698