render_view_host_delegate_view.h revision 1320f92c476a1ad9d19dba2a48c72b75566198e9
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)
5010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#ifndef CONTENT_BROWSER_RENDERER_HOST_RENDER_VIEW_HOST_DELEGATE_VIEW_H_
6010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#define CONTENT_BROWSER_RENDERER_HOST_RENDER_VIEW_HOST_DELEGATE_VIEW_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector>
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h"
111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/callback.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/common/content_export.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/common/drag_event_source_info.h"
147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebDragOperation.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SkBitmap;
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace gfx {
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ImageSkia;
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Rect;
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Vector2d;
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace ui {
251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass GestureEvent;
261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass MouseEvent;
271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content {
305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class RenderFrameHost;
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct ContextMenuParams;
32eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochstruct DropData;
337dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochstruct MenuItem;
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This class provides a way for the RenderViewHost to reach out to its
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// delegate's view. It only needs to be implemented by embedders if they don't
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// use the default WebContentsView implementations.
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class CONTENT_EXPORT RenderViewHostDelegateView {
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // A context menu should be shown, to be built using the context information
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // provided in the supplied params.
425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void ShowContextMenu(RenderFrameHost* render_frame_host,
435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                               const ContextMenuParams& params) {}
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The user started dragging content of the specified type within the
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // RenderView. Contextual information about the dragged content is supplied
47eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // by DropData. If the delegate's view cannot start the drag for /any/
48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // reason, it must inform the renderer that the drag has ended; otherwise,
49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // this results in bugs like http://crbug.com/157134.
50eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  virtual void StartDragging(const DropData& drop_data,
51f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                             blink::WebDragOperationsMask allowed_ops,
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                             const gfx::ImageSkia& image,
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                             const gfx::Vector2d& image_offset,
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                             const DragEventSourceInfo& event_info) {}
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The page wants to update the mouse cursor during a drag & drop operation.
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // |operation| describes the current operation (none, move, copy, link.)
58f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual void UpdateDragCursor(blink::WebDragOperation operation) {}
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Notification that view for this delegate got the focus.
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void GotFocus() {}
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Callback to inform the browser that the page is returning the focus to
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // the browser's chrome. If reverse is true, it means the focus was
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // retrieved by doing a Shift-Tab.
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void TakeFocus(bool reverse) {}
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#if defined(OS_MACOSX) || defined(OS_ANDROID)
691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Shows a popup menu with the specified items.
701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // This method should call RenderFrameHost::DidSelectPopupMenuItem[s]() or
711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // RenderFrameHost::DidCancelPopupMenu() based on the user action.
721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void ShowPopupMenu(RenderFrameHost* render_frame_host,
731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                             const gfx::Rect& bounds,
741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                             int item_height,
751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                             double item_font_size,
761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                             int selected_item,
771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                             const std::vector<MenuItem>& items,
781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                             bool right_aligned,
791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                             bool allow_multiple_selection) {};
801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Hides a popup menu opened by ShowPopupMenu().
821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void HidePopupMenu() {};
831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif
841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#if defined(TOOLKIT_VIEWS) || defined(USE_AURA)
861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Shows a Link Disambiguation Popup. |target_rect| is the area the user
871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // touched that resulted in ambiguity, in DIPs in the host's coordinate
881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // system, |zoomed_bitmap| is an enlarged image of that |target_rect|, and
891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // |callback| is for forwarding on to the original scale web content.
901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void ShowDisambiguationPopup(
911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      const gfx::Rect& target_rect,
921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      const SkBitmap& zoomed_bitmap,
931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      const base::Callback<void(ui::GestureEvent*)>& gesture_cb,
941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      const base::Callback<void(ui::MouseEvent*)>& mouse_cb) {}
951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Hides the Link Disambiguation Popup, if it was showing, otherwise does
971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // nothing.
981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void HideDisambiguationPopup() {}
991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif
1001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~RenderViewHostDelegateView() {}
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace content
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
107010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#endif  // CONTENT_BROWSER_RENDERER_HOST_RENDER_VIEW_HOST_DELEGATE_VIEW_H_
108