15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#ifndef CONTENT_PUBLIC_BROWSER_WEB_CONTENTS_VIEW_DELEGATE_H_
61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#define CONTENT_PUBLIC_BROWSER_WEB_CONTENTS_VIEW_DELEGATE_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#if defined(__OBJC__)
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#import <Cocoa/Cocoa.h>
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/callback.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/common/content_export.h"
141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "ui/gfx/geometry/rect.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/native_widget_types.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#if defined(__OBJC__)
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)@protocol RenderWidgetHostViewMacDelegate;
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace gfx {
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Size;
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace ui {
261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass GestureEvent;
271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass MouseEvent;
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content {
315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class RenderFrameHost;
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class RenderWidgetHost;
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebDragDestDelegate;
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct ContextMenuParams;
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This interface allows a client to extend the functionality of the
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// WebContentsView implementation.
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class CONTENT_EXPORT WebContentsViewDelegate {
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual ~WebContentsViewDelegate();
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns a delegate to process drags not handled by content.
431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual WebDragDestDelegate* GetDragDestDelegate();
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Shows a context menu.
465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void ShowContextMenu(RenderFrameHost* render_frame_host,
471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                               const ContextMenuParams& params);
481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // These methods allow the embedder to intercept a WebContentsView's
501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // implementation of these methods. See the WebContentsView interface
511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // documentation for more information about these methods.
521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void StoreFocus();
531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void RestoreFocus();
541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual bool Focus();
551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void TakeFocus(bool reverse);
561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void SizeChanged(const gfx::Size& size);
571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#if defined(TOOLKIT_VIEWS) || defined(USE_AURA)
591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Shows a popup window containing the |zoomed_bitmap| of web content with
601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // more than one link, allowing the user to more easily select which link
611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // they were trying to touch. |target_rect| is the rectangle in DIPs in the
621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // coordinate system of |content| that has been scaled up in |zoomed_bitmap|.
631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Should the popup receive any gesture events they should be translated back
641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // to the coordinate system of |content| and then provided to the |callback|
651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // for forwarding on to the original scale web content.
661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void ShowDisambiguationPopup(
671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      const gfx::Rect& target_rect,
681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      const SkBitmap& zoomed_bitmap,
691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      const gfx::NativeView content,
701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      const base::Callback<void(ui::GestureEvent*)>& gesture_cb,
711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      const base::Callback<void(ui::MouseEvent*)>& mouse_cb) = 0;
721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Hides the link disambiguation popup window if it is showing, otherwise does
741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // nothing.
751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void HideDisambiguationPopup() = 0;
761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif
771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns a newly-created delegate for the RenderWidgetHostViewMac, to handle
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // events on the responder chain.
801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#if defined(__OBJC__)
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual NSObject<RenderWidgetHostViewMacDelegate>*
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      CreateRenderWidgetHostViewDelegate(
831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci          RenderWidgetHost* render_widget_host);
841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#else
851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void* CreateRenderWidgetHostViewDelegate(
861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      RenderWidgetHost* render_widget_host);
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace content
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif  // CONTENT_PUBLIC_BROWSER_WEB_CONTENTS_VIEW_DELEGATE_H_
93