103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)// found in the LICENSE file.
403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#ifndef CHROME_BROWSER_GUEST_VIEW_WEB_VIEW_CHROME_WEB_VIEW_GUEST_DELEGATE_H_
603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#define CHROME_BROWSER_GUEST_VIEW_WEB_VIEW_CHROME_WEB_VIEW_GUEST_DELEGATE_H_
703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/extensions/api/web_view/chrome_web_view_internal_api.h"
91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/ui/zoom/zoom_observer.h"
101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "extensions/browser/guest_view/web_view/web_view_guest.h"
1103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "extensions/browser/guest_view/web_view/web_view_guest_delegate.h"
1203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
1303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#if defined(OS_CHROMEOS)
1403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "chrome/browser/chromeos/accessibility/accessibility_manager.h"
1503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#endif
1603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
1703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)class RenderViewContextMenu;
1803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
1903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)namespace ui {
2003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)class SimpleMenuModel;
2103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)}  // namespace ui
2203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass ChromeWebViewGuestDelegate : public extensions::WebViewGuestDelegate,
241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                                   public ZoomObserver {
2503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) public :
2603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  explicit ChromeWebViewGuestDelegate(
2703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      extensions::WebViewGuest* web_view_guest);
2803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  virtual ~ChromeWebViewGuestDelegate();
2903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
3003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  // WebViewGuestDelegate implementation.
3103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  virtual double GetZoom() OVERRIDE;
3203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  virtual bool HandleContextMenu(
3303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      const content::ContextMenuParams& params) OVERRIDE;
3403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  virtual void OnAttachWebViewHelpers(content::WebContents* contents) OVERRIDE;
351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void OnEmbedderDestroyed() OVERRIDE;
361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void OnDidAttachToEmbedder() OVERRIDE;
3703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  virtual void OnDidCommitProvisionalLoadForFrame(bool is_main_frame) OVERRIDE;
3803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  virtual void OnDidInitialize() OVERRIDE;
3903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  virtual void OnDocumentLoadedInFrame(
4003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      content::RenderFrameHost* render_frame_host) OVERRIDE;
4103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  virtual void OnGuestDestroyed() OVERRIDE;
4203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  virtual void OnSetZoom(double zoom_factor) OVERRIDE;
4303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  virtual void OnShowContextMenu(
4403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      int request_id,
4503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      const MenuItemVector* items) OVERRIDE;
4603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // ZoomObserver implementation.
481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void OnZoomChanged(
491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      const ZoomController::ZoomChangedEventData& data) OVERRIDE;
501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  extensions::WebViewGuest* web_view_guest() const { return web_view_guest_; }
521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
5303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) private:
5403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  content::WebContents* guest_web_contents() const {
551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    return web_view_guest()->web_contents();
5603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  }
5703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
5803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  // Returns the top level items (ignoring submenus) as Value.
5903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  static scoped_ptr<base::ListValue> MenuModelToValue(
6003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      const ui::SimpleMenuModel& menu_model);
6103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
6203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  void InjectChromeVoxIfNeeded(content::RenderViewHost* render_view_host);
6303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
6403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#if defined(OS_CHROMEOS)
6503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  // Notification of a change in the state of an accessibility setting.
6603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  void OnAccessibilityStatusChanged(
6703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      const chromeos::AccessibilityStatusEventDetails& details);
6803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#endif
6903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
7003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  // A counter to generate a unique request id for a context menu request.
7103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  // We only need the ids to be unique for a given WebViewGuest.
7203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  int pending_context_menu_request_id_;
7303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
7403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  // Set to |true| if ChromeVox was already injected in main frame.
7503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  bool chromevox_injected_;
7603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
7703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  // Stores the current zoom factor.
7803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  double current_zoom_factor_;
7903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
8003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  // Holds the RenderViewContextMenu that has been built but yet to be
8103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  // shown. This is .Reset() after ShowContextMenu().
8203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  scoped_ptr<RenderViewContextMenu> pending_menu_;
8303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
8403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#if defined(OS_CHROMEOS)
8503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  // Subscription to receive notifications on changes to a11y settings.
8603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  scoped_ptr<chromeos::AccessibilityStatusSubscription>
8703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      accessibility_subscription_;
8803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#endif
8903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  extensions::WebViewGuest* const web_view_guest_;
911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
9203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(ChromeWebViewGuestDelegate);
9303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)};
9403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
9503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#endif  // CHROME_BROWSER_GUEST_VIEW_WEB_VIEW_CHROME_WEB_VIEW_GUEST_DELEGATE_H_
9603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
97