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