1 // Copyright (c) 2011 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_UI_COCOA_HUNG_RENDERER_CONTROLLER_H_ 6 #define CHROME_BROWSER_UI_COCOA_HUNG_RENDERER_CONTROLLER_H_ 7 #pragma once 8 9 // A controller for the Mac hung renderer dialog window. Only one 10 // instance of this controller can exist at any time, although a given 11 // controller is destroyed when its window is closed. 12 // 13 // The dialog itself displays a list of frozen tabs, all of which 14 // share a render process. Since there can only be a single dialog 15 // open at a time, if showForTabContents is called for a different 16 // tab, the dialog is repurposed to show a warning for the new tab. 17 // 18 // The caller is required to call endForTabContents before deleting 19 // any TabContents object. 20 21 #import <Cocoa/Cocoa.h> 22 23 #import "base/mac/cocoa_protocols.h" 24 #import "base/memory/scoped_nsobject.h" 25 26 @class MultiKeyEquivalentButton; 27 class TabContents; 28 29 @interface HungRendererController : NSWindowController<NSTableViewDataSource> { 30 @private 31 IBOutlet MultiKeyEquivalentButton* waitButton_; 32 IBOutlet NSButton* killButton_; 33 IBOutlet NSTableView* tableView_; 34 IBOutlet NSImageView* imageView_; 35 IBOutlet NSTextField* messageView_; 36 37 // The TabContents for which this dialog is open. Should never be 38 // NULL while this dialog is open. 39 TabContents* hungContents_; 40 41 // Backing data for |tableView_|. Titles of each TabContents that 42 // shares a renderer process with |hungContents_|. 43 scoped_nsobject<NSArray> hungTitles_; 44 45 // Favicons of each TabContents that shares a renderer process with 46 // |hungContents_|. 47 scoped_nsobject<NSArray> hungFavicons_; 48 } 49 50 // Kills the hung renderers. 51 - (IBAction)kill:(id)sender; 52 53 // Waits longer for the renderers to respond. 54 - (IBAction)wait:(id)sender; 55 56 // Modifies the dialog to show a warning for the given tab contents. 57 // The dialog will contain a list of all tabs that share a renderer 58 // process with |contents|. The caller must not delete any tab 59 // contents without first calling endForTabContents. 60 - (void)showForTabContents:(TabContents*)contents; 61 62 // Notifies the dialog that |contents| is either responsive or closed. 63 // If |contents| shares the same render process as the tab contents 64 // this dialog was created for, this function will close the dialog. 65 // If |contents| has a different process, this function does nothing. 66 - (void)endForTabContents:(TabContents*)contents; 67 68 @end // HungRendererController 69 70 71 @interface HungRendererController (JustForTesting) 72 - (NSButton*)killButton; 73 - (MultiKeyEquivalentButton*)waitButton; 74 @end 75 76 #endif // CHROME_BROWSER_UI_COCOA_HUNG_RENDERER_CONTROLLER_H_ 77