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_TAB_CONTENTS_TAB_CONTENTS_CONTROLLER_H_ 6 #define CHROME_BROWSER_UI_COCOA_TAB_CONTENTS_TAB_CONTENTS_CONTROLLER_H_ 7 #pragma once 8 9 #include <Cocoa/Cocoa.h> 10 11 #include "base/memory/scoped_ptr.h" 12 13 class TabContents; 14 class TabContentsNotificationBridge; 15 @class TabContentsController; 16 17 // The interface for the tab contents view controller's delegate. 18 19 @protocol TabContentsControllerDelegate 20 21 // Tells the delegate when the tab contents view's frame is about to change. 22 - (void)tabContentsViewFrameWillChange:(TabContentsController*)source 23 frameRect:(NSRect)frameRect; 24 25 @end 26 27 // A class that controls the TabContents view. It manages displaying the 28 // native view for a given TabContents. 29 // Note that just creating the class does not display the view. We defer 30 // inserting it until the box is the correct size to avoid multiple resize 31 // messages to the renderer. You must call |-ensureContentsVisible| to display 32 // the render widget host view. 33 34 @interface TabContentsController : NSViewController { 35 @private 36 TabContents* contents_; // weak 37 // Delegate to be notified about size changes. 38 id<TabContentsControllerDelegate> delegate_; // weak 39 scoped_ptr<TabContentsNotificationBridge> tabContentsBridge_; 40 } 41 @property(readonly, nonatomic) TabContents* tabContents; 42 43 - (id)initWithContents:(TabContents*)contents 44 delegate:(id<TabContentsControllerDelegate>)delegate; 45 46 // Call when the tab contents is about to be replaced with the currently 47 // selected tab contents to do not trigger unnecessary content relayout. 48 - (void)ensureContentsSizeDoesNotChange; 49 50 // Call when the tab view is properly sized and the render widget host view 51 // should be put into the view hierarchy. 52 - (void)ensureContentsVisible; 53 54 // Call to change the underlying tab contents object. View is not changed, 55 // call |-ensureContentsVisible| to display the |newContents|'s render widget 56 // host view. 57 - (void)changeTabContents:(TabContents*)newContents; 58 59 // Called when the tab contents is the currently selected tab and is about to be 60 // removed from the view hierarchy. 61 - (void)willBecomeUnselectedTab; 62 63 // Called when the tab contents is about to be put into the view hierarchy as 64 // the selected tab. Handles things such as ensuring the toolbar is correctly 65 // enabled. 66 - (void)willBecomeSelectedTab; 67 68 // Called when the tab contents is updated in some non-descript way (the 69 // notification from the model isn't specific). |updatedContents| could reflect 70 // an entirely new tab contents object. 71 - (void)tabDidChange:(TabContents*)updatedContents; 72 73 @end 74 75 #endif // CHROME_BROWSER_UI_COCOA_TAB_CONTENTS_TAB_CONTENTS_CONTROLLER_H_ 76