[Metrics] Make MetricsStateManager take a callback param to check if UMA is enabled.
[chromium-blink-merge.git] / chrome / browser / ui / cocoa / hung_renderer_controller.h
blob282f2182af5aaa855c9227bd7cdbd53cc72839bc
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.
5 #ifndef CHROME_BROWSER_UI_COCOA_HUNG_RENDERER_CONTROLLER_H_
6 #define CHROME_BROWSER_UI_COCOA_HUNG_RENDERER_CONTROLLER_H_
8 // A controller for the Mac hung renderer dialog window. Only one
9 // instance of this controller can exist at any time, although a given
10 // controller is destroyed when its window is closed.
12 // The dialog itself displays a list of frozen tabs, all of which
13 // share a render process. Since there can only be a single dialog
14 // open at a time, if showForWebContents is called for a different
15 // tab, the dialog is repurposed to show a warning for the new tab.
17 // The caller is required to call endForWebContents before deleting
18 // any WebContents object.
20 #import <Cocoa/Cocoa.h>
22 #import "base/mac/scoped_nsobject.h"
23 #import "base/memory/scoped_ptr.h"
25 @class MultiKeyEquivalentButton;
26 class WebContentsObserverBridge;
28 namespace content {
29 class WebContents;
32 @interface HungRendererController : NSWindowController<NSTableViewDataSource> {
33 @private
34 IBOutlet MultiKeyEquivalentButton* waitButton_;
35 IBOutlet NSButton* killButton_;
36 IBOutlet NSTableView* tableView_;
37 IBOutlet NSImageView* imageView_;
38 IBOutlet NSTextField* messageView_;
40 // The WebContents for which this dialog is open. Should never be
41 // NULL while this dialog is open.
42 content::WebContents* hungContents_;
44 // Observes |hungContents_| in case it closes while the panel is up.
45 scoped_ptr<WebContentsObserverBridge> hungContentsObserver_;
47 // Backing data for |tableView_|. Titles of each WebContents that
48 // shares a renderer process with |hungContents_|.
49 base::scoped_nsobject<NSArray> hungTitles_;
51 // Favicons of each WebContents that shares a renderer process with
52 // |hungContents_|.
53 base::scoped_nsobject<NSArray> hungFavicons_;
56 // Kills the hung renderers.
57 - (IBAction)kill:(id)sender;
59 // Waits longer for the renderers to respond.
60 - (IBAction)wait:(id)sender;
62 // Modifies the dialog to show a warning for the given tab contents.
63 // The dialog will contain a list of all tabs that share a renderer
64 // process with |contents|. The caller must not delete any tab
65 // contents without first calling endForWebContents.
66 - (void)showForWebContents:(content::WebContents*)contents;
68 // Notifies the dialog that |contents| is either responsive or closed.
69 // If |contents| shares the same render process as the tab contents
70 // this dialog was created for, this function will close the dialog.
71 // If |contents| has a different process, this function does nothing.
72 - (void)endForWebContents:(content::WebContents*)contents;
74 // Called by |hungContentsObserver_| to indicate that |hungContents_|
75 // has gone away.
76 - (void)renderProcessGone;
78 @end // HungRendererController
81 @interface HungRendererController (JustForTesting)
82 - (NSButton*)killButton;
83 - (MultiKeyEquivalentButton*)waitButton;
84 @end
86 #endif // CHROME_BROWSER_UI_COCOA_HUNG_RENDERER_CONTROLLER_H_