1/*
2 * Copyright (C) 2014 Apple Inc. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 *
13 * THIS SOFTWARE IS PROVIDED BY APPLE, INC. ``AS IS'' AND ANY
14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24 *
25 */
26
27#ifndef ContextMenuContextData_h
28#define ContextMenuContextData_h
29
30#if ENABLE(CONTEXT_MENUS)
31
32#include "ShareableBitmap.h"
33#include "WebContextMenuItemData.h"
34#include "WebHitTestResultData.h"
35
36namespace IPC {
37class Decoder;
38class Encoder;
39}
40
41namespace WebCore {
42class ContextMenuContext;
43}
44
45namespace WebKit {
46
47class ContextMenuContextData {
48public:
49 enum class Type {
50 ContextMenu,
51 ServicesMenu,
52 };
53
54 ContextMenuContextData();
55 ContextMenuContextData(const WebCore::IntPoint& menuLocation, const Vector<WebKit::WebContextMenuItemData>& menuItems, const WebCore::ContextMenuContext&);
56
57 Type type() const { return m_type; }
58 const WebCore::IntPoint& menuLocation() const { return m_menuLocation; }
59 const Vector<WebKit::WebContextMenuItemData>& menuItems() const { return m_menuItems; }
60
61 const WebHitTestResultData& webHitTestResultData() const { return m_webHitTestResultData; }
62 const String& selectedText() const { return m_selectedText; }
63
64#if ENABLE(SERVICE_CONTROLS)
65 ContextMenuContextData(const WebCore::IntPoint& menuLocation, const Vector<uint8_t>& selectionData, const Vector<String>& selectedTelephoneNumbers, bool isEditable)
66 : m_type(Type::ServicesMenu)
67 , m_menuLocation(menuLocation)
68 , m_controlledSelectionData(selectionData)
69 , m_selectedTelephoneNumbers(selectedTelephoneNumbers)
70 , m_selectionIsEditable(isEditable)
71 {
72 }
73
74 ShareableBitmap* controlledImage() const { return m_controlledImage.get(); }
75 const Vector<uint8_t>& controlledSelectionData() const { return m_controlledSelectionData; }
76 const Vector<String>& selectedTelephoneNumbers() const { return m_selectedTelephoneNumbers; }
77
78 bool isServicesMenu() const { return m_type == ContextMenuContextData::Type::ServicesMenu; }
79 bool controlledDataIsEditable() const;
80#endif
81
82 void encode(IPC::Encoder&) const;
83 static bool decode(IPC::Decoder&, ContextMenuContextData&);
84
85private:
86 Type m_type;
87
88 WebCore::IntPoint m_menuLocation;
89 Vector<WebKit::WebContextMenuItemData> m_menuItems;
90
91 WebHitTestResultData m_webHitTestResultData;
92 String m_selectedText;
93
94#if ENABLE(SERVICE_CONTROLS)
95 RefPtr<ShareableBitmap> m_controlledImage;
96 Vector<uint8_t> m_controlledSelectionData;
97 Vector<String> m_selectedTelephoneNumbers;
98 bool m_selectionIsEditable;
99#endif
100};
101
102} // namespace WebKit
103
104#endif // ENABLE(CONTEXT_MENUS)
105#endif // ContextMenuContextData_h
106