Home | History | Annotate | Download | only in browser
      1 // Copyright (c) 2012 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 CONTENT_PUBLIC_BROWSER_WEB_CONTENTS_VIEW_WIN_DELEGATE_H_
      6 #define CONTENT_PUBLIC_BROWSER_WEB_CONTENTS_VIEW_WIN_DELEGATE_H_
      7 
      8 #if defined(TOOLKIT_GTK)
      9 #include <gtk/gtk.h>
     10 #elif defined(OS_MACOSX)
     11 #import <Cocoa/Cocoa.h>
     12 #endif
     13 
     14 #include "content/common/content_export.h"
     15 #include "ui/gfx/native_widget_types.h"
     16 
     17 #if defined(OS_MACOSX)
     18 @protocol RenderWidgetHostViewMacDelegate;
     19 #endif
     20 
     21 namespace gfx {
     22 class Size;
     23 }
     24 
     25 namespace ui {
     26 class FocusStoreGtk;
     27 }
     28 
     29 namespace content {
     30 
     31 class RenderWidgetHost;
     32 class WebDragDestDelegate;
     33 struct ContextMenuParams;
     34 
     35 // This interface allows a client to extend the functionality of the
     36 // WebContentsView implementation.
     37 class CONTENT_EXPORT WebContentsViewDelegate {
     38  public:
     39   virtual ~WebContentsViewDelegate() {}
     40 
     41   // Returns a delegate to process drags not handled by content.
     42   virtual WebDragDestDelegate* GetDragDestDelegate() = 0;
     43 
     44   // Shows a context menu.
     45   virtual void ShowContextMenu(const content::ContextMenuParams& params) = 0;
     46 
     47 #if defined(OS_WIN) || defined(USE_AURA)
     48   // These methods allow the embedder to intercept WebContentsViewWin's
     49   // implementation of these WebContentsView methods. See the WebContentsView
     50   // interface documentation for more information about these methods.
     51   virtual void StoreFocus() = 0;
     52   virtual void RestoreFocus() = 0;
     53   virtual bool Focus() = 0;
     54   virtual void TakeFocus(bool reverse) = 0;
     55   virtual void SizeChanged(const gfx::Size& size) = 0;
     56 #elif defined(TOOLKIT_GTK)
     57   // Initializes the WebContentsViewDelegate.
     58   virtual void Initialize(GtkWidget* expanded_container,
     59                           ui::FocusStoreGtk* focus_store) = 0;
     60 
     61   // Returns the top widget that contains |view| passed in from WrapView. This
     62   // is exposed through WebContentsViewGtk::GetNativeView() when a wrapper is
     63   // supplied to a WebContentsViewGtk.
     64   virtual gfx::NativeView GetNativeView() const = 0;
     65 
     66   // Handles a focus event from the renderer process.
     67   virtual void Focus() = 0;
     68 
     69   // Gives the delegate a first chance at focus events from our render widget
     70   // host, before the main view invokes its default behaviour. Returns TRUE if
     71   // |return_value| has been set and that value should be returned to GTK+.
     72   virtual gboolean OnNativeViewFocusEvent(GtkWidget* widget,
     73                                           GtkDirectionType type,
     74                                           gboolean* return_value) = 0;
     75 #elif defined(OS_MACOSX)
     76   // Returns a newly-created delegate for the RenderWidgetHostViewMac, to handle
     77   // events on the responder chain.
     78   virtual NSObject<RenderWidgetHostViewMacDelegate>*
     79       CreateRenderWidgetHostViewDelegate(
     80           RenderWidgetHost* render_widget_host) = 0;
     81 #endif
     82 };
     83 
     84 }  // namespace content
     85 
     86 #endif  // CONTENT_PUBLIC_BROWSER_WEB_CONTENTS_VIEW_WIN_DELEGATE_H_
     87