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_VIEWS_TAB_CONTENTS_TAB_CONTENTS_VIEW_VIEWS_H_ 6 #define CHROME_BROWSER_UI_VIEWS_TAB_CONTENTS_TAB_CONTENTS_VIEW_VIEWS_H_ 7 #pragma once 8 9 #include "base/memory/scoped_ptr.h" 10 #include "base/timer.h" 11 #include "chrome/browser/ui/views/tab_contents/native_tab_contents_view_delegate.h" 12 #include "content/browser/tab_contents/tab_contents_view.h" 13 14 class NativeTabContentsView; 15 class RenderViewContextMenuViews; 16 class SadTabView; 17 class SkBitmap; 18 struct WebDropData; 19 namespace gfx { 20 class Point; 21 class Size; 22 } 23 namespace views { 24 class Widget; 25 } 26 27 // Views-specific implementation of the TabContentsView. 28 // TODO(beng): Remove last remnants of Windows-specificity, and make this 29 // subclass Widget. 30 class TabContentsViewViews : public TabContentsView, 31 public internal::NativeTabContentsViewDelegate { 32 public: 33 // The corresponding TabContents is passed in the constructor, and manages our 34 // lifetime. This doesn't need to be the case, but is this way currently 35 // because that's what was easiest when they were split. 36 explicit TabContentsViewViews(TabContents* tab_contents); 37 virtual ~TabContentsViewViews(); 38 39 // Reset the native parent of this view to NULL. Unparented windows should 40 // not receive any messages. 41 virtual void Unparent(); 42 43 // Overridden from TabContentsView: 44 virtual void CreateView(const gfx::Size& initial_size) OVERRIDE; 45 virtual RenderWidgetHostView* CreateViewForWidget( 46 RenderWidgetHost* render_widget_host) OVERRIDE; 47 virtual gfx::NativeView GetNativeView() const OVERRIDE; 48 virtual gfx::NativeView GetContentNativeView() const OVERRIDE; 49 virtual gfx::NativeWindow GetTopLevelNativeWindow() const OVERRIDE; 50 virtual void GetContainerBounds(gfx::Rect* out) const OVERRIDE; 51 virtual void SetPageTitle(const std::wstring& title) OVERRIDE; 52 virtual void OnTabCrashed(base::TerminationStatus status, 53 int error_code) OVERRIDE; 54 virtual void SizeContents(const gfx::Size& size) OVERRIDE; 55 virtual void Focus() OVERRIDE; 56 virtual void SetInitialFocus() OVERRIDE; 57 virtual void StoreFocus() OVERRIDE; 58 virtual void RestoreFocus() OVERRIDE; 59 virtual bool IsDoingDrag() const OVERRIDE; 60 virtual void CancelDragAndCloseTab() OVERRIDE; 61 virtual void GetViewBounds(gfx::Rect* out) const OVERRIDE; 62 virtual void ShowContextMenu(const ContextMenuParams& params) OVERRIDE; 63 virtual void ShowPopupMenu(const gfx::Rect& bounds, 64 int item_height, 65 double item_font_size, 66 int selected_item, 67 const std::vector<WebMenuItem>& items, 68 bool right_aligned) OVERRIDE; 69 virtual void StartDragging(const WebDropData& drop_data, 70 WebKit::WebDragOperationsMask operations, 71 const SkBitmap& image, 72 const gfx::Point& image_offset) OVERRIDE; 73 virtual void UpdateDragCursor(WebKit::WebDragOperation operation) OVERRIDE; 74 virtual void GotFocus() OVERRIDE; 75 virtual void TakeFocus(bool reverse) OVERRIDE; 76 77 private: 78 // Overridden from internal::NativeTabContentsViewDelegate: 79 virtual TabContents* GetTabContents() OVERRIDE; 80 virtual bool IsShowingSadTab() const OVERRIDE; 81 virtual void OnNativeTabContentsViewShown() OVERRIDE; 82 virtual void OnNativeTabContentsViewHidden() OVERRIDE; 83 virtual void OnNativeTabContentsViewSized(const gfx::Size& size) OVERRIDE; 84 virtual void OnNativeTabContentsViewWheelZoom(int distance) OVERRIDE; 85 virtual void OnNativeTabContentsViewMouseDown() OVERRIDE; 86 virtual void OnNativeTabContentsViewMouseMove() OVERRIDE; 87 virtual void OnNativeTabContentsViewDraggingEnded() OVERRIDE; 88 89 views::Widget* GetWidget(); 90 const views::Widget* GetWidget() const; 91 92 // A helper method for closing the tab. 93 void CloseTab(); 94 95 // Windows events ------------------------------------------------------------ 96 97 // Handles notifying the TabContents and other operations when the window was 98 // shown or hidden. 99 void WasHidden(); 100 void WasShown(); 101 102 // Handles resizing of the contents. This will notify the RenderWidgetHostView 103 // of the change, reposition popups, and the find in page bar. 104 void WasSized(const gfx::Size& size); 105 106 // TODO(brettw) comment these. They're confusing. 107 void WheelZoom(int distance); 108 109 // --------------------------------------------------------------------------- 110 111 scoped_ptr<NativeTabContentsView> native_tab_contents_view_; 112 113 // Used to render the sad tab. This will be non-NULL only when the sad tab is 114 // visible. 115 SadTabView* sad_tab_; 116 117 // The id used in the ViewStorage to store the last focused view. 118 int last_focused_view_storage_id_; 119 120 // The context menu. Callbacks are asynchronous so we need to keep it around. 121 scoped_ptr<RenderViewContextMenuViews> context_menu_; 122 123 // Set to true if we want to close the tab after the system drag operation 124 // has finished. 125 bool close_tab_after_drag_ends_; 126 127 // Used to close the tab after the stack has unwound. 128 base::OneShotTimer<TabContentsViewViews> close_tab_timer_; 129 130 DISALLOW_COPY_AND_ASSIGN(TabContentsViewViews); 131 }; 132 133 #endif // CHROME_BROWSER_UI_VIEWS_TAB_CONTENTS_TAB_CONTENTS_VIEW_VIEWS_H_ 134