1// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef CHROME_BROWSER_HANG_MONITOR_HUNG_PLUGIN_ACTION_H__ 6#define CHROME_BROWSER_HANG_MONITOR_HUNG_PLUGIN_ACTION_H__ 7#pragma once 8 9#include "chrome/browser/hang_monitor/hung_window_detector.h" 10// This class provides an implementation the 11// HungWindowDetector::HungWindowNotification callback interface. 12// It checks to see if the hung window belongs to a process different 13// from that of the browser process and, if so, it returns an action 14// of HungWindowNotification::HUNG_WINDOW_TERMINATE_PROCESS. 15// Note: We can write other action classes that implement the same 16// interface and switch the action done on hung plugins based on user 17// preferences. 18class HungPluginAction : public HungWindowDetector::HungWindowNotification { 19 public: 20 HungPluginAction(); 21 ~HungPluginAction(); 22 // HungWindowNotification implementation 23 virtual bool OnHungWindowDetected(HWND hung_window, 24 HWND top_level_window, 25 ActionOnHungWindow* action); 26 27 protected: 28 void OnWindowResponsive(HWND window); 29 30 // The callback function for the SendMessageCallback API 31 static void CALLBACK HungWindowResponseCallback(HWND target_window, 32 UINT message, 33 ULONG_PTR data, 34 LRESULT result); 35 36 static BOOL CALLBACK DismissMessageBox(HWND window, LPARAM ignore); 37 38 protected: 39 bool GetPluginName(HWND plugin_window, 40 DWORD browser_process_id, 41 std::wstring *plugin_name); 42 // The currently hung plugin window that we are prompting the user about 43 HWND current_hung_plugin_window_; 44}; 45 46#endif // CHROME_BROWSER_HANG_MONITOR_HUNG_PLUGIN_ACTION_H__ 47