• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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_TAB_CONTENTS_TAB_CONTENTS_VIEW_MAC_H_
6 #define CHROME_BROWSER_TAB_CONTENTS_TAB_CONTENTS_VIEW_MAC_H_
7 #pragma once
8 
9 #import <Cocoa/Cocoa.h>
10 
11 #include <string>
12 #include <vector>
13 
14 #include "base/memory/scoped_nsobject.h"
15 #include "chrome/browser/ui/cocoa/base_view.h"
16 #include "content/browser/tab_contents/tab_contents_view.h"
17 #include "content/common/notification_observer.h"
18 #include "content/common/notification_registrar.h"
19 #include "ui/gfx/size.h"
20 
21 @class FocusTracker;
22 @class SadTabController;
23 class SkBitmap;
24 class TabContentsViewMac;
25 @class WebDragSource;
26 @class WebDropTarget;
27 namespace gfx {
28 class Point;
29 }
30 
31 @interface TabContentsViewCocoa : BaseView {
32  @private
33   TabContentsViewMac* tabContentsView_;  // WEAK; owns us
34   scoped_nsobject<WebDragSource> dragSource_;
35   scoped_nsobject<WebDropTarget> dropTarget_;
36 }
37 
38 // Expose this, since sometimes one needs both the NSView and the TabContents.
39 - (TabContents*)tabContents;
40 @end
41 
42 // Mac-specific implementation of the TabContentsView. It owns an NSView that
43 // contains all of the contents of the tab and associated child views.
44 class TabContentsViewMac : public TabContentsView,
45                            public NotificationObserver {
46  public:
47   // The corresponding TabContents is passed in the constructor, and manages our
48   // lifetime. This doesn't need to be the case, but is this way currently
49   // because that's what was easiest when they were split.
50   explicit TabContentsViewMac(TabContents* web_contents);
51   virtual ~TabContentsViewMac();
52 
53   // TabContentsView implementation --------------------------------------------
54 
55   virtual void CreateView(const gfx::Size& initial_size);
56   virtual RenderWidgetHostView* CreateViewForWidget(
57       RenderWidgetHost* render_widget_host);
58   virtual gfx::NativeView GetNativeView() const;
59   virtual gfx::NativeView GetContentNativeView() const;
60   virtual gfx::NativeWindow GetTopLevelNativeWindow() const;
61   virtual void GetContainerBounds(gfx::Rect* out) const;
62   virtual void RenderViewCreated(RenderViewHost* host);
63   virtual void SetPageTitle(const std::wstring& title);
64   virtual void OnTabCrashed(base::TerminationStatus status,
65                             int error_code);
66   virtual void SizeContents(const gfx::Size& size);
67   virtual void Focus();
68   virtual void SetInitialFocus();
69   virtual void StoreFocus();
70   virtual void RestoreFocus();
71   virtual void UpdatePreferredSize(const gfx::Size& pref_size);
72   virtual RenderWidgetHostView* CreateNewWidgetInternal(
73       int route_id,
74       WebKit::WebPopupType popup_type);
75   virtual void ShowCreatedWidgetInternal(RenderWidgetHostView* widget_host_view,
76                                          const gfx::Rect& initial_pos);
77   virtual bool IsEventTracking() const;
78   virtual void CloseTabAfterEventTracking();
79   virtual void GetViewBounds(gfx::Rect* out) const;
80 
81   // Backend implementation of RenderViewHostDelegate::View.
82   virtual void ShowContextMenu(const ContextMenuParams& params);
83   virtual void ShowPopupMenu(const gfx::Rect& bounds,
84                              int item_height,
85                              double item_font_size,
86                              int selected_item,
87                              const std::vector<WebMenuItem>& items,
88                              bool right_aligned);
89   virtual void StartDragging(const WebDropData& drop_data,
90                              WebKit::WebDragOperationsMask allowed_operations,
91                              const SkBitmap& image,
92                              const gfx::Point& image_offset);
93   virtual void UpdateDragCursor(WebKit::WebDragOperation operation);
94   virtual void GotFocus();
95   virtual void TakeFocus(bool reverse);
96 
97   // NotificationObserver implementation ---------------------------------------
98 
99   virtual void Observe(NotificationType type,
100                        const NotificationSource& source,
101                        const NotificationDetails& details);
102 
103   // A helper method for closing the tab in the
104   // CloseTabAfterEventTracking() implementation.
105   void CloseTab();
106 
preferred_width()107   int preferred_width() const { return preferred_width_; }
108 
109  private:
110   // The Cocoa NSView that lives in the view hierarchy.
111   scoped_nsobject<TabContentsViewCocoa> cocoa_view_;
112 
113   // Keeps track of which NSView has focus so we can restore the focus when
114   // focus returns.
115   scoped_nsobject<FocusTracker> focus_tracker_;
116 
117   // Used to get notifications about renderers coming and going.
118   NotificationRegistrar registrar_;
119 
120   // Used to render the sad tab. This will be non-NULL only when the sad tab is
121   // visible.
122   scoped_nsobject<SadTabController> sad_tab_;
123 
124   // The page content's intrinsic width.
125   int preferred_width_;
126 
127   DISALLOW_COPY_AND_ASSIGN(TabContentsViewMac);
128 };
129 
130 #endif  // CHROME_BROWSER_TAB_CONTENTS_TAB_CONTENTS_VIEW_MAC_H_
131