• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2012 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 
8 #include "base/strings/string16.h"
9 #include "chrome/browser/hang_monitor/hung_window_detector.h"
10 
11 // This class provides an implementation the
12 // HungWindowDetector::HungWindowNotification callback interface.
13 // It checks to see if the hung window belongs to a process different
14 // from that of the browser process and, if so, it returns an action
15 // of HungWindowNotification::HUNG_WINDOW_TERMINATE_PROCESS.
16 // Note: We can write other action classes that implement the same
17 // interface and switch the action done on hung plugins based on user
18 // preferences.
19 class HungPluginAction : public HungWindowDetector::HungWindowNotification {
20  public:
21   HungPluginAction();
22   ~HungPluginAction();
23   // HungWindowNotification implementation
24   virtual bool OnHungWindowDetected(HWND hung_window,
25                                     HWND top_level_window,
26                                     ActionOnHungWindow* action);
27 
28  protected:
29   void OnWindowResponsive(HWND window);
30 
31   // The callback function for the SendMessageCallback API
32   static void CALLBACK HungWindowResponseCallback(HWND target_window,
33                                                   UINT message,
34                                                   ULONG_PTR data,
35                                                   LRESULT result);
36 
37   static BOOL CALLBACK DismissMessageBox(HWND window, LPARAM ignore);
38 
39  protected:
40   bool GetPluginNameAndVersion(HWND plugin_window,
41                                DWORD browser_process_id,
42                                base::string16* plugin_name,
43                                base::string16* plugin_version);
44   // The currently hung plugin window that we are prompting the user about
45   HWND current_hung_plugin_window_;
46 };
47 
48 #endif  // CHROME_BROWSER_HANG_MONITOR_HUNG_PLUGIN_ACTION_H__
49