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