1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef CHROME_BROWSER_GUEST_VIEW_WEB_VIEW_CHROME_WEB_VIEW_GUEST_DELEGATE_H_
6 #define CHROME_BROWSER_GUEST_VIEW_WEB_VIEW_CHROME_WEB_VIEW_GUEST_DELEGATE_H_
8 #include "chrome/browser/extensions/api/web_view/chrome_web_view_internal_api.h"
9 #include "extensions/browser/guest_view/web_view/web_view_guest.h"
10 #include "extensions/browser/guest_view/web_view/web_view_guest_delegate.h"
12 #if defined(OS_CHROMEOS)
13 #include "chrome/browser/chromeos/accessibility/accessibility_manager.h"
16 class RenderViewContextMenuBase
;
19 class SimpleMenuModel
;
22 namespace extensions
{
24 class ChromeWebViewGuestDelegate
: public WebViewGuestDelegate
{
26 explicit ChromeWebViewGuestDelegate(WebViewGuest
* web_view_guest
);
27 ~ChromeWebViewGuestDelegate() override
;
29 // WebViewGuestDelegate implementation.
30 bool HandleContextMenu(const content::ContextMenuParams
& params
) override
;
31 void OnAttachWebViewHelpers(content::WebContents
* contents
) override
;
32 void OnDidCommitProvisionalLoadForFrame(bool is_main_frame
) override
;
33 void OnDidInitialize() override
;
34 void OnDocumentLoadedInFrame(
35 content::RenderFrameHost
* render_frame_host
) override
;
36 void OnGuestDestroyed() override
;
37 void OnShowContextMenu(int request_id
, const MenuItemVector
* items
) override
;
39 WebViewGuest
* web_view_guest() const { return web_view_guest_
; }
42 content::WebContents
* guest_web_contents() const {
43 return web_view_guest()->web_contents();
46 // Returns the top level items (ignoring submenus) as Value.
47 static scoped_ptr
<base::ListValue
> MenuModelToValue(
48 const ui::SimpleMenuModel
& menu_model
);
50 void InjectChromeVoxIfNeeded(content::RenderViewHost
* render_view_host
);
52 #if defined(OS_CHROMEOS)
53 // Notification of a change in the state of an accessibility setting.
54 void OnAccessibilityStatusChanged(
55 const chromeos::AccessibilityStatusEventDetails
& details
);
58 // A counter to generate a unique request id for a context menu request.
59 // We only need the ids to be unique for a given WebViewGuest.
60 int pending_context_menu_request_id_
;
62 // Set to |true| if ChromeVox was already injected in main frame.
63 bool chromevox_injected_
;
65 // Holds the RenderViewContextMenuBase that has been built but yet to be
66 // shown. This is .reset() after ShowContextMenu().
67 scoped_ptr
<RenderViewContextMenuBase
> pending_menu_
;
69 #if defined(OS_CHROMEOS)
70 // Subscription to receive notifications on changes to a11y settings.
71 scoped_ptr
<chromeos::AccessibilityStatusSubscription
>
72 accessibility_subscription_
;
75 WebViewGuest
* const web_view_guest_
;
77 // This is used to ensure pending tasks will not fire after this object is
79 base::WeakPtrFactory
<ChromeWebViewGuestDelegate
> weak_ptr_factory_
;
81 DISALLOW_COPY_AND_ASSIGN(ChromeWebViewGuestDelegate
);
84 } // namespace extensions
86 #endif // CHROME_BROWSER_GUEST_VIEW_WEB_VIEW_CHROME_WEB_VIEW_GUEST_DELEGATE_H_