OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef CHROME_BROWSER_TAB_CONTENTS_TAB_CONTENTS_VIEW_MAC_H_ | 5 #ifndef CHROME_BROWSER_TAB_CONTENTS_TAB_CONTENTS_VIEW_MAC_H_ |
6 #define CHROME_BROWSER_TAB_CONTENTS_TAB_CONTENTS_VIEW_MAC_H_ | 6 #define CHROME_BROWSER_TAB_CONTENTS_TAB_CONTENTS_VIEW_MAC_H_ |
7 #pragma once | 7 #pragma once |
8 | 8 |
9 #if defined(__OBJC__) | 9 #if defined(__OBJC__) |
10 | 10 |
11 #import <Cocoa/Cocoa.h> | 11 #import <Cocoa/Cocoa.h> |
12 | 12 |
13 #include <string> | 13 #include <string> |
14 #include <vector> | 14 #include <vector> |
15 | 15 |
16 #include "base/memory/scoped_nsobject.h" | 16 #include "base/memory/scoped_nsobject.h" |
17 #include "base/memory/scoped_ptr.h" | 17 #include "base/memory/scoped_ptr.h" |
18 #include "chrome/browser/tab_contents/render_view_host_delegate_helper.h" | 18 #include "chrome/browser/tab_contents/render_view_host_delegate_helper.h" |
19 #include "content/browser/tab_contents/tab_contents_view.h" | 19 #include "content/browser/tab_contents/tab_contents_view.h" |
20 #include "content/public/browser/notification_observer.h" | |
21 #include "content/public/browser/notification_registrar.h" | |
22 #include "ui/base/cocoa/base_view.h" | 20 #include "ui/base/cocoa/base_view.h" |
23 #include "ui/gfx/size.h" | 21 #include "ui/gfx/size.h" |
24 | 22 |
25 @class FocusTracker; | 23 @class FocusTracker; |
26 class RenderViewContextMenuMac; | 24 class RenderViewContextMenuMac; |
27 @class SadTabController; | 25 @class SadTabController; |
28 class SkBitmap; | 26 class SkBitmap; |
29 class TabContentsViewMac; | 27 class TabContentsViewMac; |
30 class WebDragBookmarkHandlerMac; | 28 class WebDragBookmarkHandlerMac; |
31 @class WebDragDest; | 29 @class WebDragDest; |
32 @class WebDragSource; | 30 @class WebDragSource; |
33 namespace gfx { | 31 namespace gfx { |
34 class Point; | 32 class Point; |
35 } | 33 } |
36 | 34 |
37 @interface TabContentsViewCocoa : BaseView { | 35 @interface TabContentsViewCocoa : BaseView { |
38 @private | 36 @private |
39 TabContentsViewMac* tabContentsView_; // WEAK; owns us | 37 TabContentsViewMac* tabContentsView_; // WEAK; owns us |
40 scoped_nsobject<WebDragSource> dragSource_; | 38 scoped_nsobject<WebDragSource> dragSource_; |
41 scoped_nsobject<WebDragDest> dragDest_; | 39 scoped_nsobject<WebDragDest> dragDest_; |
42 scoped_ptr<WebDragBookmarkHandlerMac> bookmarkHandler_; | 40 scoped_ptr<WebDragBookmarkHandlerMac> bookmarkHandler_; |
43 } | 41 } |
44 | 42 |
45 // Expose this, since sometimes one needs both the NSView and the TabContents. | 43 // Expose this, since sometimes one needs both the NSView and the TabContents. |
46 - (TabContents*)tabContents; | 44 - (TabContents*)tabContents; |
47 @end | 45 @end |
48 | 46 |
49 // Mac-specific implementation of the TabContentsView. It owns an NSView that | 47 // Mac-specific implementation of the TabContentsView. It owns an NSView that |
50 // contains all of the contents of the tab and associated child views. | 48 // contains all of the contents of the tab and associated child views. |
51 class TabContentsViewMac : public TabContentsView, | 49 class TabContentsViewMac : public TabContentsView { |
52 public content::NotificationObserver { | |
53 public: | 50 public: |
54 // The corresponding TabContents is passed in the constructor, and manages our | 51 // The corresponding TabContents is passed in the constructor, and manages our |
55 // lifetime. This doesn't need to be the case, but is this way currently | 52 // lifetime. This doesn't need to be the case, but is this way currently |
56 // because that's what was easiest when they were split. | 53 // because that's what was easiest when they were split. |
57 explicit TabContentsViewMac(TabContents* web_contents); | 54 explicit TabContentsViewMac(TabContents* web_contents); |
58 virtual ~TabContentsViewMac(); | 55 virtual ~TabContentsViewMac(); |
59 | 56 |
60 // TabContentsView implementation -------------------------------------------- | 57 // TabContentsView implementation -------------------------------------------- |
61 | 58 |
62 virtual void CreateView(const gfx::Size& initial_size) OVERRIDE; | 59 virtual void CreateView(const gfx::Size& initial_size) OVERRIDE; |
(...skipping 10 matching lines...) Expand all Loading... |
73 virtual void SizeContents(const gfx::Size& size) OVERRIDE; | 70 virtual void SizeContents(const gfx::Size& size) OVERRIDE; |
74 virtual void Focus() OVERRIDE; | 71 virtual void Focus() OVERRIDE; |
75 virtual void SetInitialFocus() OVERRIDE; | 72 virtual void SetInitialFocus() OVERRIDE; |
76 virtual void StoreFocus() OVERRIDE; | 73 virtual void StoreFocus() OVERRIDE; |
77 virtual void RestoreFocus() OVERRIDE; | 74 virtual void RestoreFocus() OVERRIDE; |
78 virtual bool IsDoingDrag() const OVERRIDE; | 75 virtual bool IsDoingDrag() const OVERRIDE; |
79 virtual void CancelDragAndCloseTab() OVERRIDE; | 76 virtual void CancelDragAndCloseTab() OVERRIDE; |
80 virtual bool IsEventTracking() const OVERRIDE; | 77 virtual bool IsEventTracking() const OVERRIDE; |
81 virtual void CloseTabAfterEventTracking() OVERRIDE; | 78 virtual void CloseTabAfterEventTracking() OVERRIDE; |
82 virtual void GetViewBounds(gfx::Rect* out) const OVERRIDE; | 79 virtual void GetViewBounds(gfx::Rect* out) const OVERRIDE; |
| 80 virtual void InstallOverlayView(gfx::NativeView view) OVERRIDE; |
| 81 virtual void RemoveOverlayView() OVERRIDE; |
83 | 82 |
84 // Backend implementation of RenderViewHostDelegate::View. | 83 // Backend implementation of RenderViewHostDelegate::View. |
85 virtual void CreateNewWindow( | 84 virtual void CreateNewWindow( |
86 int route_id, | 85 int route_id, |
87 const ViewHostMsg_CreateWindow_Params& params); | 86 const ViewHostMsg_CreateWindow_Params& params); |
88 virtual void CreateNewWidget(int route_id, WebKit::WebPopupType popup_type); | 87 virtual void CreateNewWidget(int route_id, WebKit::WebPopupType popup_type); |
89 virtual void CreateNewFullscreenWidget(int route_id); | 88 virtual void CreateNewFullscreenWidget(int route_id); |
90 virtual void ShowCreatedWindow(int route_id, | 89 virtual void ShowCreatedWindow(int route_id, |
91 WindowOpenDisposition disposition, | 90 WindowOpenDisposition disposition, |
92 const gfx::Rect& initial_pos, | 91 const gfx::Rect& initial_pos, |
93 bool user_gesture); | 92 bool user_gesture); |
94 virtual void ShowCreatedWidget(int route_id, const gfx::Rect& initial_pos); | 93 virtual void ShowCreatedWidget(int route_id, const gfx::Rect& initial_pos); |
95 virtual void ShowCreatedFullscreenWidget(int route_id); | 94 virtual void ShowCreatedFullscreenWidget(int route_id); |
96 virtual void ShowContextMenu(const ContextMenuParams& params); | 95 virtual void ShowContextMenu(const ContextMenuParams& params); |
97 virtual void ShowPopupMenu(const gfx::Rect& bounds, | 96 virtual void ShowPopupMenu(const gfx::Rect& bounds, |
98 int item_height, | 97 int item_height, |
99 double item_font_size, | 98 double item_font_size, |
100 int selected_item, | 99 int selected_item, |
101 const std::vector<WebMenuItem>& items, | 100 const std::vector<WebMenuItem>& items, |
102 bool right_aligned); | 101 bool right_aligned); |
103 virtual void StartDragging(const WebDropData& drop_data, | 102 virtual void StartDragging(const WebDropData& drop_data, |
104 WebKit::WebDragOperationsMask allowed_operations, | 103 WebKit::WebDragOperationsMask allowed_operations, |
105 const SkBitmap& image, | 104 const SkBitmap& image, |
106 const gfx::Point& image_offset); | 105 const gfx::Point& image_offset); |
107 virtual void UpdateDragCursor(WebKit::WebDragOperation operation); | 106 virtual void UpdateDragCursor(WebKit::WebDragOperation operation); |
108 virtual void GotFocus(); | 107 virtual void GotFocus(); |
109 virtual void TakeFocus(bool reverse); | 108 virtual void TakeFocus(bool reverse); |
110 | 109 |
111 // content::NotificationObserver implementation ------------------------------ | |
112 | |
113 virtual void Observe(int type, | |
114 const content::NotificationSource& source, | |
115 const content::NotificationDetails& details); | |
116 | |
117 // A helper method for closing the tab in the | 110 // A helper method for closing the tab in the |
118 // CloseTabAfterEventTracking() implementation. | 111 // CloseTabAfterEventTracking() implementation. |
119 void CloseTab(); | 112 void CloseTab(); |
120 | 113 |
121 TabContents* tab_contents() { return tab_contents_; } | 114 TabContents* tab_contents() { return tab_contents_; } |
122 int preferred_width() const { return preferred_width_; } | 115 int preferred_width() const { return preferred_width_; } |
123 | 116 |
124 private: | 117 private: |
125 // The TabContents whose contents we display. | 118 // The TabContents whose contents we display. |
126 TabContents* tab_contents_; | 119 TabContents* tab_contents_; |
127 | 120 |
128 // Common implementations of some RenderViewHostDelegate::View methods. | 121 // Common implementations of some RenderViewHostDelegate::View methods. |
129 RenderViewHostDelegateViewHelper delegate_view_helper_; | 122 RenderViewHostDelegateViewHelper delegate_view_helper_; |
130 | 123 |
131 // The Cocoa NSView that lives in the view hierarchy. | 124 // The Cocoa NSView that lives in the view hierarchy. |
132 scoped_nsobject<TabContentsViewCocoa> cocoa_view_; | 125 scoped_nsobject<TabContentsViewCocoa> cocoa_view_; |
133 | 126 |
134 // Keeps track of which NSView has focus so we can restore the focus when | 127 // Keeps track of which NSView has focus so we can restore the focus when |
135 // focus returns. | 128 // focus returns. |
136 scoped_nsobject<FocusTracker> focus_tracker_; | 129 scoped_nsobject<FocusTracker> focus_tracker_; |
137 | 130 |
138 // Used to get notifications about renderers coming and going. | |
139 content::NotificationRegistrar registrar_; | |
140 | |
141 // Used to render the sad tab. This will be non-NULL only when the sad tab is | |
142 // visible. | |
143 scoped_nsobject<SadTabController> sad_tab_; | |
144 | |
145 // The context menu. Callbacks are asynchronous so we need to keep it around. | 131 // The context menu. Callbacks are asynchronous so we need to keep it around. |
146 scoped_ptr<RenderViewContextMenuMac> context_menu_; | 132 scoped_ptr<RenderViewContextMenuMac> context_menu_; |
147 | 133 |
148 // The page content's intrinsic width. | 134 // The page content's intrinsic width. |
149 int preferred_width_; | 135 int preferred_width_; |
150 | 136 |
| 137 // The overlaid view. Owned by the caller of |InstallOverlayView|; this is a |
| 138 // weak reference. |
| 139 NSView* overlaid_view_; |
| 140 |
151 DISALLOW_COPY_AND_ASSIGN(TabContentsViewMac); | 141 DISALLOW_COPY_AND_ASSIGN(TabContentsViewMac); |
152 }; | 142 }; |
153 | 143 |
154 #endif // __OBJC__ | 144 #endif // __OBJC__ |
155 | 145 |
156 // Functions that may be accessed from non-Objective-C C/C++ code. | 146 // Functions that may be accessed from non-Objective-C C/C++ code. |
157 class TabContents; | 147 class TabContents; |
158 class TabContentsView; | 148 class TabContentsView; |
159 | 149 |
160 namespace tab_contents_view_mac { | 150 namespace tab_contents_view_mac { |
161 TabContentsView* CreateTabContentsView(TabContents* tab_contents); | 151 TabContentsView* CreateTabContentsView(TabContents* tab_contents); |
162 } | 152 } |
163 | 153 |
164 #endif // CHROME_BROWSER_TAB_CONTENTS_TAB_CONTENTS_VIEW_MAC_H_ | 154 #endif // CHROME_BROWSER_TAB_CONTENTS_TAB_CONTENTS_VIEW_MAC_H_ |
OLD | NEW |