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