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)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CHROME_BROWSER_UI_VIEWS_TAB_CONTENTS_CHROME_WEB_CONTENTS_VIEW_DELEGATE_VIEWS_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_UI_VIEWS_TAB_CONTENTS_CHROME_WEB_CONTENTS_VIEW_DELEGATE_VIEWS_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h"
115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "components/renderer_context_menu/context_menu_delegate.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents_view_delegate.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass LinkDisambiguationPopup;
15a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochclass RenderViewContextMenu;
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class RenderViewContextMenuViews;
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
18a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)namespace aura {
19a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class Window;
20a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}
21a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content {
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebContents;
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebDragDestDelegate;
25a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochclass RenderFrameHost;
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace views {
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class FocusManager;
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Widget;
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A chrome specific class that extends WebContentsViewWin with features like
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// focus management, which live in chrome.
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ChromeWebContentsViewDelegateViews
36a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    : public content::WebContentsViewDelegate,
37a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      public ContextMenuDelegate {
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  explicit ChromeWebContentsViewDelegateViews(
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      content::WebContents* web_contents);
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~ChromeWebContentsViewDelegateViews();
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Overridden from WebContentsViewDelegate:
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual content::WebDragDestDelegate* GetDragDestDelegate() OVERRIDE;
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void StoreFocus() OVERRIDE;
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void RestoreFocus() OVERRIDE;
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool Focus() OVERRIDE;
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void TakeFocus(bool reverse) OVERRIDE;
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ShowContextMenu(
505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      content::RenderFrameHost* render_frame_host,
517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      const content::ContextMenuParams& params) OVERRIDE;
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void SizeChanged(const gfx::Size& size) OVERRIDE;
531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void ShowDisambiguationPopup(
541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      const gfx::Rect& target_rect,
551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      const SkBitmap& zoomed_bitmap,
561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      const gfx::NativeView content,
571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      const base::Callback<void(ui::GestureEvent*)>& gesture_cb,
581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      const base::Callback<void(ui::MouseEvent*)>& mouse_cb) OVERRIDE;
591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void HideDisambiguationPopup() OVERRIDE;
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
61a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  // Overridden from ContextMenuDelegate.
62a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  virtual scoped_ptr<RenderViewContextMenu> BuildMenu(
63a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      content::WebContents* web_contents,
64a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      const content::ContextMenuParams& params) OVERRIDE;
65a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  virtual void ShowMenu(scoped_ptr<RenderViewContextMenu> menu) OVERRIDE;
66a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
68a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  aura::Window* GetActiveNativeView();
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  views::Widget* GetTopLevelWidget();
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  views::FocusManager* GetFocusManager();
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetInitialFocus();
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The id used in the ViewStorage to store the last focused view.
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int last_focused_view_storage_id_;
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The context menu is reset every time we show it, but we keep a pointer to
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // between uses so that it won't go out of scope before we're done with it.
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<RenderViewContextMenuViews> context_menu_;
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The chrome specific delegate that receives events from WebDragDest.
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<content::WebDragDestDelegate> bookmark_handler_;
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content::WebContents* web_contents_;
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  scoped_ptr<LinkDisambiguationPopup> link_disambiguation_popup_;
861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(ChromeWebContentsViewDelegateViews);
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // CHROME_BROWSER_UI_VIEWS_TAB_CONTENTS_CHROME_WEB_CONTENTS_VIEW_DELEGATE_VIEWS_H_
91