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