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.
4
5#ifndef CustomContextMenuProvider_h
6#define CustomContextMenuProvider_h
7
8#include "core/page/ContextMenuProvider.h"
9#include "platform/ContextMenuItem.h"
10#include "platform/heap/Handle.h"
11
12namespace blink {
13
14class ContextMenu;
15class HTMLElement;
16class HTMLMenuElement;
17class HTMLMenuItemElement;
18
19class CustomContextMenuProvider FINAL : public ContextMenuProvider {
20public:
21    static PassRefPtr<CustomContextMenuProvider> create(HTMLMenuElement& menu, HTMLElement& subject)
22    {
23        return adoptRef(new CustomContextMenuProvider(menu, subject));
24    }
25
26private:
27    CustomContextMenuProvider(HTMLMenuElement&, HTMLElement&);
28    virtual ~CustomContextMenuProvider();
29
30    virtual void populateContextMenu(ContextMenu*) OVERRIDE;
31    virtual void contextMenuItemSelected(const ContextMenuItem*) OVERRIDE;
32    virtual void contextMenuCleared() OVERRIDE;
33    void populateContextMenuItems(const HTMLMenuElement&, ContextMenu&);
34    void appendSeparator(ContextMenu&);
35    void appendMenuItem(HTMLMenuItemElement*, ContextMenu&);
36    HTMLElement* menuItemAt(unsigned menuId);
37
38    RefPtrWillBePersistent<HTMLMenuElement> m_menu;
39    RefPtrWillBePersistent<HTMLElement> m_subjectElement;
40    WillBePersistentHeapVector<RefPtrWillBeMember<HTMLElement> > m_menuItems;
41};
42
43} // namespace blink
44
45#endif
46